Paradox EVO Binding

Try what PAI sends, or babyware. Some bits have unknown function, but are required.

Hi Indrek,
I did a very small change to the header to make it simmilar to PAI and it seems that it works for me on my EVO192. I hope this is the change that is required for EVOHD to be supported. Could you give it a try?
Iā€™ve uploaded a .jar in the same place. Hope it will work for you without much changes.

Cheers,
Konstantin

Hi Konstantin

Still no success. Is there any special requirements for this binding? I dont see any connection information from Babyware.

Best regards
Indrek Reimand

Can you attach fresh logs? I need to see them

To all who may be concerned, the pull request with additional channels for partitions, the limiting parameters for zones and partitions number and updates to the README file is now approved and merged into 2.5.x branch so probably this functionality will come up with next patch of 2.5 branch:

Cheers,
K.

1 Like

OH-thingHandler-1 2020-01-15 20:32:55.437 [DEBUG] [l.handlers.ParadoxIP150BridgeHandler] - Phase2 - Creating communicator for panel EVOHD
OH-thingHandler-1 2020-01-15 20:32:55.443 [DEBUG] [.communication.ParadoxBuilderFactory] - Creating new builder for Paradox EVOHD system
OH-thingHandler-1 2020-01-15 20:32:55.473 [DEBUG] [l.communication.AbstractCommunicator] - IP Address=192.168.1.58
OH-thingHandler-1 2020-01-15 20:32:55.476 [DEBUG] [l.communication.AbstractCommunicator] - TCP Port=10000
OH-thingHandler-1 2020-01-15 20:32:55.482 [DEBUG] [al.communication.GenericCommunicator] - Use encryption=true
OH-thingHandler-1 2020-01-15 20:32:55.490 [DEBUG] [ternal.communication.EvoCommunicator] - PanelType=EVOHD
OH-thingHandler-1 2020-01-15 20:32:55.492 [DEBUG] [ternal.communication.EvoCommunicator] - Max Zones=50
OH-thingHandler-1 2020-01-15 20:32:55.495 [DEBUG] [ternal.communication.EvoCommunicator] - Max partitions=10
OH-thingHandler-1 2020-01-15 20:32:55.508 [DEBUG] [l.handlers.ParadoxIP150BridgeHandler] - Listeners set to: [org.openhab.binding.paradoxalarm.internal.model.ParadoxPanel@1262ef3, org.openhab.binding.paradoxalarm.internal.handlers.ParadoxIP150BridgeHandler@37d42f]
OH-thingHandler-1 2020-01-15 20:32:55.509 [DEBUG] [al.communication.GenericCommunicator] - Login sequence started
OH-thingHandler-1 2020-01-15 20:32:55.522 [DEBUG] [nal.communication.CommunicationState] - Phase START
OH-thingHandler-1 2020-01-15 20:32:55.544 [WARN ] [nal.communication.CommunicationState] - Login - Connection refused
OH-thingHandler-1 2020-01-15 20:32:55.547 [DEBUG] [l.handlers.ParadoxIP150BridgeHandler] - Communicator not yet online. Reschedulingā€¦
OH-thingHandler-2 2020-01-15 20:32:56.548 [DEBUG] [l.handlers.ParadoxIP150BridgeHandler] - Communicator not yet online. Reschedulingā€¦
OH-thingHandler-3 2020-01-15 20:32:57.548 [DEBUG] [l.handlers.ParadoxIP150BridgeHandler] - Communicator not yet online. Reschedulingā€¦
OH-thingHandler-1 2020-01-15 20:32:58.548 [DEBUG] [l.handlers.ParadoxIP150BridgeHandler] - Communicator not yet online. Reschedulingā€¦
OH-thingHandler-4 2020-01-15 20:32:59.548 [DEBUG] [l.handlers.ParadoxIP150BridgeHandler] - Communicator not yet online. Reschedulingā€¦
OH-thingHandler-2 2020-01-15 20:33:00.548 [DEBUG] [l.handlers.ParadoxIP150BridgeHandler] - Communicator not yet online. Reschedulingā€¦
OH-thingHandler-5 2020-01-15 20:33:01.548 [DEBUG] [l.handlers.ParadoxIP150BridgeHandler] - Communicator not yet online. Reschedulingā€¦
OH-thingHandler-3 2020-01-15 20:33:02.548 [DEBUG] [l.handlers.ParadoxIP150BridgeHandler] - Communicator not yet online. Reschedulingā€¦
OH-thingHandler-1 2020-01-15 20:33:03.549 [DEBUG] [l.handlers.ParadoxIP150BridgeHandler] - Communicator not yet online. Reschedulingā€¦
OH-thingHandler-4 2020-01-15 20:33:04.549 [DEBUG] [l.handlers.ParadoxIP150BridgeHandler] - Communicator not yet online. Reschedulingā€¦

OK. I canā€™t see much here. Did it get through Phase1 and automatically detected your system or you sent EVOHD as parameter?
Can you raise the log level to TRACE and send me again logs?
Be advised that in trace the first packet contains your IP150 password so itā€™s better not to open it to the public. Itā€™s up to you to decide if you want to send it to me or not but I need to see the bytes of packets. Also when you raise to trace there is a lot of info there so I would propose to make it to log in separate file as described above.

Another option would be you to install PAI on your machine and raise the log level to DEBUG and send me only the first 16 bytes of packets from the logs. That is the header and there is no sensitive information there.
Iā€™m very sorry but Iā€™m completely in the dark as I own another system and I donā€™t know what is expected to happen for EVOHD. :frowning:

Hello,

Now I can confirm with 2.5.2 snapshot works with EVO192 v7.30 + IP150 v4.42.02.

I can Login to the Panel vial IP150:
[INFO ] [nal.communication.CommunicationState] - Login - Login to IP150 - OK

but thatā€™s it. Several issue:

  1. my Partitions, zones & panel things are not visible, returning UNKNOWN status :frowning:
  2. PaperUI Items scan retur java Error in log :frowning:

P.S. But one think is little bit confusedā€¦ definitions:
Partitions in plugin is actually Zones in babyware
Zones in plugin is actually Areas in babyware

Ed

Hello,

New features which possible can be implemented:

  1. Fix Discovery scan into inbox for Things

  2. in Read/only mode I assume you can get very important data:
    Supply Voltage
    Board Voltage
    Battery Voltage
    possible other system informationā€¦

  3. It wold be very good to implement PGM management (used in many cases to open/close gates, etc)

  4. Arm, Quick arm, Disarmā€¦ exit delay status.

  5. door access. not sure someone use it.

P.S. any other suggestions/comments?

Ed

1 Like

Hi @Indrek,
Thanks to @Bl00d_b0b who provided me a full trace level logs, we managed to find a small glitch in the bindingā€™s handling of first packet in IP150 4.x version on his EVO192. Now I fixed that and the binary of the temporary fix is uploaded here: https://github.com/theater/binaries/blob/master/ParadoxAlarm/org.openhab.binding.paradoxalarm-2.5.2-SNAPSHOT.jar
Maybe you can give it a try and let me know if this now works also for your EVOHD so I can decide before I create the pull request if I should leave EVOHD in the supported types or not.

Cheers,
Konstantin

1 Like

Hello, I have refrehed binding to the latest one. I use 2.5.2 as well. Pls let me know when can I change IP150 to 4.x version. I would upgrade EVO192, IP150 and TM70 together. Iā€™m at the moment on panel: 6.95 and IP150: 1.39.

I wouldnā€™t recommend doing so, because Ed is having some issues with his configuration even though the logs show that communication to Paradox works fine.
Iā€™ll probably have to try and replicate his own configuration here on my parado to see if really the issue is the binding but from my perspective if communication works fine in the logs and if the rest of the binding works fine on other firmwares (i.e. the openhab binding framework stuff), probably itā€™s a misconfiguration for the items/things at his openhab configuration.

So I figured the issue that Ed has. Itā€™s because of the usage of ā€œthing labelā€ @ ā€œthing locationā€ approach. It seems that for this binding it does not work correctly or is not supported when used in a bridge { Thingā€¦} type definition the way Iā€™m using it in the README and in my configuation filesā€¦

My one looks like this:

id numbers are coming from the panel Partition and Zone IDā€™s.

Weirdā€¦ I did exactly the same configuration and itā€™s behavior is very inconsistent (Things getting OFFLINE/UNINTIALIZED), etcā€¦
What I see different is that youā€™re missing Bridge label and panel label. Thatā€™s the only difference. Iā€™ll test with that further when I have timeā€¦ :frowning:

No, check first two lines. Exactly same as in your example here:


Iā€™ve just not copied the complete bridge line as it contains user name and password.
Yes, after OH restart I usually should restart the binding separately as sometimes one or two zones stays in unknown status. However after that it very stable. Works like a charm. I have openHAB 2.5.2 Build #36 with 2.5.2 latest of your binding.

To everyone who maybe concerned.
Iā€™ve opened a pull request for the encryption support.

Iā€™m stopping developing new features until the PR is approved and merged in the main codebase because we started to gather too many changes and will be a nightmare for reviewers.
Also I expect some changes to be requested and I want to avoid unnecessary merge conflicts with changes that will come with the new features.

Meanwhile if community has further requirements I think this posting by Ed can be used as a starting point for further feature requests.
I will probably invest some more time to develop the requested features deciding based on investment effort vs adoption/usability of the features.

Cheers,
Konstantin

Thanks! If you need any testing pls let me know and I help. I can adjust my system easily back and forth.

2020-02-06 12:53:56.700 [INFO ] [nal.communication.CommunicationState] - Login - Login to IP150 - OK

2020-02-06 12:53:58.433 [INFO ] [nal.communication.CommunicationState] - Successfully established communication with the panel.

==> /var/log/openhab2/events.log <==

2020-02-06 12:53:58.931 [hingStatusInfoChangedEvent] - ā€˜paradoxalarm:ip150:6987275dā€™ changed from OFFLINE (BRIDGE_OFFLINE): Device is offline to ONLINE

2020-02-06 12:53:58.934 [hingStatusInfoChangedEvent] - ā€˜paradoxalarm:panel:438c976cā€™ changed from OFFLINE (BRIDGE_OFFLINE) to ONLINE

2020-02-06 12:53:58.946 [vent.ItemStateChangedEvent] - ParadoxIP150ModuleConnector_BridgeCommunicationState changed from Offline to Online

==> /var/log/openhab2/openhab.log <==

2020-02-06 12:54:13.602 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception:

java.lang.NullPointerException: null

at org.openhab.binding.paradoxalarm.internal.handlers.EntityBaseHandler.initializeDelayed(EntityBaseHandler.java:60) ~[?:?]

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_222]

at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_222]

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_222]

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[?:1.8.0_222]

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_222]

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_222]

at java.lang.Thread.run(Thread.java:748) [?:1.8.0_222]

2020-02-06 12:54:13.636 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception:

java.lang.NullPointerException: null

at org.openhab.binding.paradoxalarm.internal.handlers.EntityBaseHandler.initializeDelayed(EntityBaseHandler.java:60) ~[?:?]

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_222]

at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_222]

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_222]

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[?:1.8.0_222]

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_222]

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_222]

at java.lang.Thread.run(Thread.java:748) [?:1.8.0_222]

2020-02-06 12:54:13.663 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception:

java.lang.NullPointerException: null

at org.openhab.binding.paradoxalarm.internal.handlers.EntityBaseHandler.initializeDelayed(EntityBaseHandler.java:60) ~[?:?]

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_222]

at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_222]

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_222]

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[?:1.8.0_222]

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_222]

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_222]

at java.lang.Thread.run(Thread.java:748) [?:1.8.0_222]

2020-02-06 12:54:13.675 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception:

java.lang.NullPointerException: null

at org.openhab.binding.paradoxalarm.internal.handlers.EntityBaseHandler.initializeDelayed(EntityBaseHandler.java:60) ~[?:?]

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_222]

at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_222]

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_222]

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[?:1.8.0_222]

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_222]

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_222]

at java.lang.Thread.run(Thread.java:748) [?:1.8.0_222]

2020-02-06 12:54:21.601 [INFO ] [doxalarm.internal.model.ParadoxPanel] - Paradox system is supported. Panel data retrieved=ParadoxInformation [panelType=EVOHD, serialNumber=0700115A, applicationVersion=Version: 7.17.6, hardwareVersion=Version: 9.-106, bootloaderVersion=Version: 1.6.2]

2020-02-06 12:54:21.636 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception:

java.lang.IndexOutOfBoundsException: Index: 8, Size: 8

at java.util.ArrayList.rangeCheck(ArrayList.java:657) ~[?:1.8.0_222]

at java.util.ArrayList.get(ArrayList.java:433) ~[?:1.8.0_222]

at org.openhab.binding.paradoxalarm.internal.model.ParadoxPanel.updateEntitiesStates(ParadoxPanel.java:84) ~[?:?]

at org.openhab.binding.paradoxalarm.internal.model.ParadoxPanel.update(ParadoxPanel.java:144) ~[?:?]

at java.util.Arrays$ArrayList.forEach(Arrays.java:3880) ~[?:1.8.0_222]

at org.openhab.binding.paradoxalarm.internal.communication.GenericCommunicator.updateListeners(GenericCommunicator.java:110) ~[?:?]

at org.openhab.binding.paradoxalarm.internal.communication.EvoCommunicator.receiveRamResponse(EvoCommunicator.java:97) ~[?:?]

at org.openhab.binding.paradoxalarm.internal.communication.GenericCommunicator.receiveResponse(GenericCommunicator.java:131) ~[?:?]

at org.openhab.binding.paradoxalarm.internal.communication.AbstractCommunicator.receivePacket(AbstractCommunicator.java:150) ~[?:?]

at org.openhab.binding.paradoxalarm.internal.communication.AbstractCommunicator.communicateToParadox(AbstractCommunicator.java:103) ~[?:?]

at org.openhab.binding.paradoxalarm.internal.communication.AbstractCommunicator.communicateToParadox(AbstractCommunicator.java:110) ~[?:?]

at org.openhab.binding.paradoxalarm.internal.communication.AbstractCommunicator.submitRequest(AbstractCommunicator.java:96) ~[?:?]

at org.openhab.binding.paradoxalarm.internal.communication.EvoCommunicator.submitRamRequest(EvoCommunicator.java:246) ~[?:?]

at org.openhab.binding.paradoxalarm.internal.communication.EvoCommunicator.refreshMemoryMap(EvoCommunicator.java:235) ~[?:?]

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_222]

at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) ~[?:1.8.0_222]

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_222]

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) ~[?:1.8.0_222]

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_222]

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_222]

at java.lang.Thread.run(Thread.java:748) [?:1.8.0_222]