Qolsys IQ Panel 2 and 3rd party integration

Are you able to downgrade to 2.6.1 ? In 2.6.1, the 6-digit code is only an option, not mandatory!

That’s a great question, I don’t know if you can flash an earlier version? I’m afraid I might brick the panel.

EDIT: doing some googling, I’ve seen posts from earlier IQ2 panel firmware versions where users wanted to downgrade, and they all concluded downgrading was not possible.

Out of curiosity, does anyone know what happens if you repeatedly enter incorrect user pass codes through the websocket? Does the alarm go off, websocket connection get dropped, IP get banned, third party integration get switched off? I was wondering what sort of protection there is against a brute force pass code discovery.

Just switched from ad-qolsys to qolsysgw and most things are looking good so far.

The only odd thing is that I can’t get my Lovelace alarm panel card working. I have a device for my panel but I don’t have an entity for the panel. Am I just missing something obvious? It is late at night here so maybe taking a break and looking at it with a fresh set of eyes tomorrow will help.

@takeshi
My panel entity name is alarm_control_panel.partition1

Configuration / Devices & Services / MQTT / Qolsys Panel / Controls (Alarm Panel entity here)

When adding a card to Lovelace, add by entity and put in alarm_control_panel.partition1. This will retrieve the alarm panel card.

Thanks for the info! The problem is that the integration didn’t create a panel entity. It did create entities for all the sensors and a device for the panel. I’ve cleared out the retained MQTT messages but still no luck. Guess I’ll keep looking into it…

@XaF Another thanks for this integration. I’m new to HA but stumbled my way into getting this working!

I was wondering if there’s a way to activate the open/close of my garage doors via this integration? I’ve got my MyQ garage doors integrated with Alarm.com, and my panel (IQ2 firmware 2.5.2) has a screen showing the garage door status and options to trigger open/close (Interact with garage doors from a Qolsys IQ Panel 2 - Qolsys). So the panel is aware of the garage doors, although via alarm.com vs. a local sensor so not sure if that data is available through the gateway.

There’s a MyQ integration for HA. I don’t see a way the Qolsys integration will allow you to control the garage doors directly.

Wondering if there could have been a conflict during the entity creation, and home assistant might have ignored it since you already had it through ad-qolsys before ? Could you stop appdaemon & mqtt, try and list all of your entities and delete all the entities related to your qolsys panel (whether ad-qolsys or qolsysgw) and then restart mqtt & appdaemon to trigger things to be recreated ? Make sure your mqtt is clean when restarting too.

If that can be done through an action sent to the panel, that would be doable, however I don’t believe that’s the case unfortunately. As @crazeeeyez said, you probably want to use an integration that gives you direct control of your garage doors!

If it’s compatible with your garage door opener, get a MyQ Home Bridge. This allows you to control the door via the panel, but also add to HASS as a HomeKit accessory

@XaF Thought I did that but gave it a shot again. The sensor entities were created after stopping and clearing but not the panel entity.

For the heck of it, I upgraded HA using the latest stable Docker image and now the panel entity is there. Not sure what happened there. I don’t recall the version I was running but it was from later in 2021.

Oh interesting! Wondering if it’s related to the fact that I added support for triggering the alarm from Home Assistant, which sends extra information to the MQTT discovery, which wasn’t supported before the December version of Home Assistant (I added that support there to be able to use it in qolsysgw).
That might have led to Home Assistant to fail creating the panel entity! Good to know. I don’t believe there’s a way to easily distinguish the version of Home Assistant from AppDaemon though, maybe I should just add this to the requirements in the README, as well as the panel version!

I wanted to thank you for your work on this; it is very appreciated! I am very new at this, so it took me more effort than I wish to admit to get this set up (everything with Home Assistant Core in Docker is more challenging), but it is now running smoothly!

I have one question (though I am sure I will likely have more as I continue to explore): my Qolsys panel manages some z-wave devices, including locks/doors; is there any way to access and control these devices?

Can anyone help me with this? Here is my AppDaemon log. I do not know how to see a longer log.

2022-02-11 00:01:12.305196 WARNING AppDaemon: No app description found for: /config/appdaemon/apps/qolsysgw/qolsys/control.py - ignoring
2022-02-11 00:01:12.311575 WARNING AppDaemon: No app description found for: /config/appdaemon/apps/qolsysgw/qolsys/socket.py - ignoring
2022-02-11 00:01:12.317507 WARNING AppDaemon: No app description found for: /config/appdaemon/apps/qolsysgw/qolsys/observable.py - ignoring
2022-02-11 00:01:12.325782 WARNING AppDaemon: No app description found for: /config/appdaemon/apps/qolsysgw/qolsys/config.py - ignoring
2022-02-11 00:01:12.331374 WARNING AppDaemon: No app description found for: /config/appdaemon/apps/qolsysgw/qolsys/events.py - ignoring
2022-02-11 00:01:12.337474 WARNING AppDaemon: No app description found for: /config/appdaemon/apps/qolsysgw/qolsys/utils.py - ignoring
2022-02-11 00:01:12.343756 WARNING AppDaemon: No app description found for: /config/appdaemon/apps/qolsysgw/qolsys/sensors.py - ignoring
2022-02-11 00:01:12.349493 WARNING AppDaemon: No app description found for: /config/appdaemon/apps/qolsysgw/qolsys/state.py - ignoring
2022-02-11 00:01:12.356011 WARNING AppDaemon: No app description found for: /config/appdaemon/apps/qolsysgw/qolsys/partition.py - ignoring
2022-02-11 00:01:12.361769 WARNING AppDaemon: No app description found for: /config/appdaemon/apps/qolsysgw/qolsys/exceptions.py - ignoring
2022-02-11 00:01:12.367587 WARNING AppDaemon: No app description found for: /config/appdaemon/apps/qolsysgw/qolsys/actions.py - ignoring
2022-02-11 00:01:12.373712 WARNING AppDaemon: No app description found for: /config/appdaemon/apps/ad-qolsys/qolsys_requests.py - ignoring
2022-02-11 00:01:12.379885 WARNING AppDaemon: No app description found for: /config/appdaemon/apps/ad-qolsys/qolsys_client.py - ignoring
2022-02-11 00:01:12.386486 WARNING AppDaemon: No app description found for: /config/appdaemon/apps/ad-qolsys/door_window.py - ignoring
2022-02-11 00:01:12.392365 WARNING AppDaemon: No app description found for: /config/appdaemon/apps/ad-qolsys/partition.py - ignoring
2022-02-11 00:01:12.398106 WARNING AppDaemon: No app description found for: /config/appdaemon/apps/ad-qolsys/qolsys_socket.py - ignoring
2022-02-11 00:01:12.402939 INFO AppDaemon: Initializing app hello_world using class HelloWorld from module hello
2022-02-11 00:01:12.414417 INFO AppDaemon: Initializing app qolsys_panel using class QolsysGateway from module gateway
2022-02-11 00:01:12.889007 INFO hello_world: Hello from AppDaemon
2022-02-11 00:01:12.894735 INFO hello_world: You are now ready to run Apps!
2022-02-11 00:01:12.965204 INFO qolsys_panel: Starting
2022-02-11 00:01:12.990704 ERROR qolsys_panel: Error setting state unavailable; pursuing
Traceback (most recent call last):
  File "/config/appdaemon/apps/qolsysgw/gateway.py", line 87, in initialize
    self._factory.wrap(self._state).set_unavailable()
  File "/config/appdaemon/apps/qolsysgw/mqtt/updater.py", line 500, in wrap
    return klass(obj, *self._args, **self._kwargs)
  File "/config/appdaemon/apps/qolsysgw/mqtt/updater.py", line 205, in __init__
    super().__init__(*args, **kwargs)
  File "/config/appdaemon/apps/qolsysgw/mqtt/updater.py", line 86, in __init__
    self._birth_topic = mqtt_plugin_cfg.get('birth_topic')
AttributeError: 'NoneType' object has no attribute 'get'
2022-02-11 00:01:13.010331 DEBUG qolsys_panel: Registering <mqtt.updater.MqttUpdater object at 0x7f8809c5e0> to <qolsys.state.QolsysState object at 0x7f888178e0> updates
2022-02-11 00:01:13.029192 INFO qolsys_panel: Started
2022-02-11 00:01:13.034758 INFO AppDaemon: App initialization complete
2022-02-11 00:01:13.040316 DEBUG qolsys_panel: call_service: mqtt/subscribe, {'namespace': 'qolsysgateway', 'topic': 'qolsys/qolsys_panel/event'}
2022-02-11 00:01:13.043088 DEBUG qolsys_panel: call_service: mqtt/subscribe, {'namespace': 'qolsysgateway', 'topic': 'homeassistant/alarm_control_panel/qolsys_panel/set'}
2022-02-11 00:01:13.064391 ERROR qolsys_panel: Task exception was never retrieved
future: <Task finished name='Task-241' coro=<ADAPI.call_service() done, defined at /usr/lib/python3.9/site-packages/appdaemon/adapi.py:1677> exception=NamespaceException('Unknown namespace (%s) in call_service from %s', 'qolsysgateway', 'qolsys_panel')>
Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/appdaemon/adapi.py", line 1748, in call_service
    return await self.AD.services.call_service(namespace, d, s, kwargs)
  File "/usr/lib/python3.9/site-packages/appdaemon/services.py", line 152, in call_service
    raise NamespaceException("Unknown namespace (%s) in call_service from %s", namespace, name)
NamespaceException: ('Unknown namespace (%s) in call_service from %s', 'qolsysgateway', 'qolsys_panel')
2022-02-11 00:01:13.066787 DEBUG qolsys_panel: Calling listen_event for qolsys_panel
2022-02-11 00:01:13.082304 ERROR qolsys_panel: Task exception was never retrieved
future: <Task finished name='Task-243' coro=<ADAPI.call_service() done, defined at /usr/lib/python3.9/site-packages/appdaemon/adapi.py:1677> exception=NamespaceException('Unknown namespace (%s) in call_service from %s', 'qolsysgateway', 'qolsys_panel')>
Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/appdaemon/adapi.py", line 1748, in call_service
    return await self.AD.services.call_service(namespace, d, s, kwargs)
  File "/usr/lib/python3.9/site-packages/appdaemon/services.py", line 152, in call_service
    raise NamespaceException("Unknown namespace (%s) in call_service from %s", namespace, name)
NamespaceException: ('Unknown namespace (%s) in call_service from %s', 'qolsysgateway', 'qolsys_panel')
2022-02-11 00:01:13.084625 DEBUG qolsys_panel: Calling listen_event for qolsys_panel
2022-02-11 00:01:13.123019 INFO qolsys_panel: Establishing connection to 192.168.0.169:12345
2022-02-11 00:01:13.552073 DEBUG qolsys_panel: Sending: {"nonce": "qolsys", "source": "C4", "version": 0, "action": "INFO", "info_type": "SUMMARY", "token": "vxzjzv"}
2022-02-11 00:01:13.562551 DEBUG qolsys_panel: Qolsys callback for connection event
2022-02-11 00:01:13.571697 ERROR qolsys_panel: error while listening
Traceback (most recent call last):
  File "/config/appdaemon/apps/qolsysgw/qolsys/socket.py", line 78, in listen
    await self._connected_callback()
  File "/config/appdaemon/apps/qolsysgw/gateway.py", line 151, in qolsys_connected_callback
    self._factory.wrap(self._state).set_available()
  File "/config/appdaemon/apps/qolsysgw/mqtt/updater.py", line 500, in wrap
    return klass(obj, *self._args, **self._kwargs)
  File "/config/appdaemon/apps/qolsysgw/mqtt/updater.py", line 205, in __init__
    super().__init__(*args, **kwargs)
  File "/config/appdaemon/apps/qolsysgw/mqtt/updater.py", line 86, in __init__
    self._birth_topic = mqtt_plugin_cfg.get('birth_topic')
AttributeError: 'NoneType' object has no attribute 'get'
2022-02-11 00:01:13.584004 DEBUG qolsys_panel: Qolsys callback for disconnection event
2022-02-11 00:01:13.593674 ERROR qolsys_panel: Task exception was never retrieved
future: <Task finished name='Task-283' coro=<QolsysSocket.listen() done, defined at /config/appdaemon/apps/qolsysgw/qolsys/socket.py:60> exception=AttributeError("'NoneType' object has no attribute 'get'")>
Traceback (most recent call last):
  File "/config/appdaemon/apps/qolsysgw/qolsys/socket.py", line 119, in listen
    await self._disconnected_callback()
  File "/config/appdaemon/apps/qolsysgw/gateway.py", line 158, in qolsys_disconnected_callback
    self._factory.wrap(self._state).set_unavailable()
  File "/config/appdaemon/apps/qolsysgw/mqtt/updater.py", line 500, in wrap
    return klass(obj, *self._args, **self._kwargs)
  File "/config/appdaemon/apps/qolsysgw/mqtt/updater.py", line 205, in __init__
    super().__init__(*args, **kwargs)
  File "/config/appdaemon/apps/qolsysgw/mqtt/updater.py", line 86, in __init__
    self._birth_topic = mqtt_plugin_cfg.get('birth_topic')
AttributeError: 'NoneType' object has no attribute 'get'
2022-02-11 00:01:19.873233 INFO AppDaemon: New client Admin Client connected

appdaemon.yaml

---
secrets: /config/secrets.yaml
appdaemon:
  latitude: 52.379189
  longitude: 4.899431
  elevation: 2
  time_zone: Europe/Amsterdam
  plugins:
    HASS:
      type: hass
http:
  url: http://127.0.0.1:5050
admin:
api:
hadashboard:

apps.yaml

---
hello_world:
  module: hello
  class: HelloWorld

qolsys_panel:
  module: gateway
  class: QolsysGateway
  panel_host: 192.168.0.169
  panel_token: redacted
  panel_user_code: redacted
  log_level: DEBUG
  mqtt_namespace: qolsysgateway

@XaF Somehow whenever I select armed away it’s started 30-sec count down, then it changes to armed stay, may I know why? but when I am armed via alarm.com app, I armed able to arm away.

That’s a feature of the panel itself. Take a look at how to disable it here: Disabling Auto-Stay Arming on a Qolsys IQ Panel 2 - YouTube

1 Like

Anyone tried this with a Panel 4? Just installed one today, and no matter what I try the port 12345 never responds. I tried enabling/disabling all the 3rd party services, etc. Never get any response.

Have you enabled 3rd party integrations and if so, you could run a port scan using a tool like nmap to see what ports are open.

@dcaton said the Panel4 is using port 9200 rather than 12345. But even then I’m not sure if anyone has gotten a successful handshake. Maybe he’s seen someone make progress?

Do a port scan as @mzac recommended to confirm the open port number

You may want to start by trying to curl to your panel, to see if you can establish a connection.

curl -kN --http0.9 https://panel_IP:9200

Maybe the curl needs to be modified for the Panel 4.

I also have this feature turned on to arm stay if the door hasn’t been opened and closed after setting arm away. If you do an instant arm or don’t let it count down from the automation integration, it won’t swap like that.

1 Like

That’s not the problem. One of the users of my Hubitat driver has been in contact with QolSys and the C4 interface isn’t functional yet in the IQ4 panel. He said he thinks updated firmware will be available in about two weeks.

Someone with an IQ4 did a port scan and 9200 was open, but that could be something totally different. Whether the C4 interface is different or not remains to be seen, but until a firmware update is released there’s no point in even trying.

1 Like