davesmeghead / visonic

Visonic Custom Component for integration with Home Assistant
Apache License 2.0
85 stars 16 forks source link

Attempt to add support for PowerMaster 360 #114

Closed fuef closed 2 months ago

fuef commented 2 months ago

To continue collaboration with a view to evaluate if PowerMaster can be added to the list of supported models.

HASS forum post Visonic PowerMaster 360: PowerLink, PowerG2, was marketed by ADT in the UK. Reportedly, factory reset doesn't give access to the installer / master installer codes.

NB PowerMaster 360 is different from PowerMaster 360R.

Repository has been forked and @davesmeghead 's instructions are being followed.

fuef commented 2 months ago

I seem to be having some challenges with my build environment, @davesmeghead . It's a 32-bit Raspberry Pi OS Lite (bookworm / Python 3.11 / venv).

I can run simple_example.py from master branch without any issues:

simple_example.py from master branch ``` python examples/simple_example.py -usb /dev/ttyACM0 DEBUG:asyncio:Using selector: EpollSelector Calling run_forever Setting up Connection 0:00:00.058215 < 4577> DEBUG Setting USB Options 0:00:00.059337 < 4501> DEBUG [getPyVisonic] in 0:00:00.062636 < 4256> DEBUG [VisonicProtocol] client is not None, calling setPyVisonic 0:00:00.063671 < 1240> DEBUG Initialising Protocol - Using Asyncio Event Loop 0:00:00.064585 < 1451> DEBUG [Settings] Force Standard set to False 0:00:00.065223 < 1455> DEBUG [Settings] Force Auto Enroll set to True ```

Development branch produces just a few lines of output and does nothing afterwards:

simple_example.py from development branch ``` python examples/simple_example.py -usb /dev/ttyACM0 0:00:00.032557 DEBUG Using selector: EpollSelector Calling run_forever Setting up USB Connection Emulation Mode Powerlink Emulation so setting ForceStandard to False DisableAllCommands to False CompleteReadOnly to False ```

And complete_example.py from dev branch throws a general exception at me:

complete_example.py from dev branch ``` python examples/complete_example.py -panel 13 -usb /dev/ttyACM0 -print debug 0:00:00.001095 DEBUG Using selector: EpollSelector General Exception ```

The way I setup my build environment is very simple:

unzip $HOME/visonic-{master,dev}.zip
cd $HOME/visonic-{master,dev}/custom_components/visonic
python -m venv examples
source examples/bin/activate
pip install -r examples/requirements.txt

I make a big assumption that when Python sees pyvisonic.py in the current directory it will process import pyvisonic by referring to the code in the current directory.

I am getting puzzled by examining diff -u $HOME/visonic-{master,dev}/custom_components/visonic/examples/simple_example.py output. I wouldn't be able to tell what dependencies could I be missing.

I also tried Python 3.12 from HASS Core container which makes no difference. I can try Python 3.9.6 on macOS, if it helps. Spinning up a Windows VM will take more time, and plumbing USB devices on macOS host via VirtualBox is a hit and miss in my experience. What else can I try, please?

davesmeghead commented 2 months ago

Hi, I've just uploaded a dev release, I've made sure the simple_example and complete_example work on windows and linux in my environment, you were right that linux was an issue that I believe I've fixed.

For the complete_example.py run it like this, you need to be in the examples directory as it adds the parent path inside the python file itself to the python library path. The first is windows, the second is linux.

python .\complete_example.py -panel 1 -usb COM7 -baud 9600 -connect powerlink -logfile out.txt -print debug
python .\complete_example.py -panel 1 -usb /dev/xyz -baud 9600 -connect powerlink -logfile out.txt -print debug

In the bottom window of aconsole that starts type "c" to connect, "h" for help

This creates a log file called out.txt

Some PowerMasters alternate between 9600 and 38400 baud so if it doesn't work after typing "c" then kill it and try the other baud rate.

Dave

fuef commented 2 months ago

Oh, Man! Visonic PowerMaster 360 has achieved ❤️ ❤️ ❤️ Standard Plus mode ❤️ ❤️ ❤️!!!

What to the USB serial port baud rates, I have positive experiences with both 9600 and 38400 settings using alternate projects from public domain. And yes, I am fully aware that not every USB cable is created the same. This one is capable of programming ESP32 MCUs.

Can installer code be extracted from EPROM data, by chance? I have a valid user code, if it helps.

With reference to this entry

[handle_msgtype3C] PanelType=13 : PowerMaster 360 , Model=153 Powermaster True

does pyvisonic.py code require any updates to accommodate Model=153? As a reminder, the panel identifies itself as follows via AlarmInstall app:

key value
Control panel software version JS703296 L19.412
Control panel default version J-705117 L19.412
Control panel boot version JS702767 L01.026
Control panel Remote Software Upgrade downloader version JS702768 L02.036
PowerLink software version PL8.0.94.14 row
cellular modem type. GE910-QUAD-V3

In your view, do any of the above entires have to be cross-referenced against Windows PowerMaster Remote Programmer .TDF or .DLL files?

It's not a big deal I guess, but complete_example.py has failed with

exactly the same 'general exception' message. ``` python complete_example.py -panel 13 -usb /dev/ttyACM0 -baud 9600 -connect powerlink -logfile out.txt -print debug 0:00:00.001340 DEBUG Using selector: EpollSelector General Exception ```

The out.txt isn't informative, it's just a middle line from the excerpt above. I attach the output of python -v, if it helps: Visonic PowerMaster 360 complete_example General Exception 20240524.txt

Unlike simple_example.py, complete_example.py has complained about a missing requests dependency. pip install -v requests has resulted in pulling requests version 2.32.2.

All known Installer and Download Codes have been attempted with simple_example.py. No cigar, so far.

Looking at the simple_example.py logs, it could be just my imagination, but numeric-only Download Codes always result in multiple Mode= PROBLEM lines. Pure hexadecimal Download Codes produce just a single line. EDIT: It was just my imagination.

Thinking ahead, and if something like dscKeybusInterface logic will be required to guess the right Download Code, and given that hexadecimals are accepted by the software, 10 attempts per second will take about one year and one month. It sounds doable to me.

With reference to the Visonic / DSC / Johnson Controls / Tyco M&A timeline, I'd speculate PM-360 has happened after PM-10 and PM-30, but prior to DSC. PM-360R's been created after DSC series. Chances are that dscKeybusInterface project's brute force logic is compatible with PM-360 hardware.

EDIT: Upon re-checking with Wiki, I confirm that waiting for 9+ minutes / 4 attempts to enrol hasn't been successful and Standard Plus mode remains in power:

(patience is a virtue) ``` 0:09:25.990079 DEBUG [_triggerEnroll] Trigger Powerlink Attempt 0:09:25.990738 WARNING [_sendMsgENROLL] Warning: Trying to re enroll, already tried DFFD and still not successful 0:10:56.137436 DEBUG [Controller] Giving up on Powerlink Attempts, going to one of the standard modes 0:10:56.138099 DEBUG [Standard Mode] Entering Standard Plus Mode as we got the pin codes from the EEPROM onPanelChangeHandler value PANEL_UPDATE 0:10:56.139029 DEBUG [_clearList] Setting queue empty 0:10:56.139792 DEBUG [_sendInterfaceResetCommand] ************************************* Sending an INIT Command ************************************ 0:10:56.141681 DEBUG [sendPdu] Sending Command (Stop) raw data 0d 0b f4 0a waiting for message response [] 0:10:56.142218 DEBUG [sendPdu] Command has a wait time after transmission 1.5 0:10:57.645427 DEBUG [sendPdu] Sending Command (Exit) raw data 0d 0f f0 0a waiting for message response [] 0:10:57.646143 DEBUG [sendPdu] Command has a wait time after transmission 1.5 0:10:59.148705 DEBUG [sendPdu] Sending Command (Init PowerLink Connection) raw data 0d ab 0a 00 01 00 00 00 00 00 00 00 43 06 0a waiting for message response ['0X2'] 0:10:59.149405 DEBUG [sendPdu] Command has a wait time after transmission 8.0 0:10:59.210975 DEBUG [handle_msgtype02] and sending MSG_RESTORE You can do stuff here with visonicProtocol, Mode= STANDARD_PLUS You can do stuff here with visonicProtocol, Mode= STANDARD_PLUS 0:11:07.152346 DEBUG [sendPdu] Sending Command (Get Bypass and Enrolled Status) raw data 0d a2 00 00 20 00 00 00 00 00 00 00 43 f9 0a waiting for message response ['0XA5'] 0:11:07.224838 DEBUG [handle_msgtypeA5] Enrolled Zones 32-01: 00000000000000000000000000011111 0:11:07.226076 DEBUG [handle_msgtypeA5] Bypassed Zones 32-01: 00000000000000000000000000000000 0:11:07.226582 DEBUG ================================================== Display Status ================================================== 0:11:07.227309 DEBUG key 0 Sensor id=1 Type=MAGNET Loc=Front door ztypeName=Delay 1 ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 0:11:07.228005 DEBUG key 1 Sensor id=2 Type=MOTION Loc=Living room ztypeName=Home Delay ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 delay=3600 0:11:07.228633 DEBUG key 2 Sensor id=3 Type=MOTION Loc=Upstairs ztypeName=Interior ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 delay=3600 0:11:07.229245 DEBUG key 3 Sensor id=4 Type=MOTION Loc=Conservatory ztypeName=Perimeter ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 delay=3600 0:11:07.229838 DEBUG key 4 Sensor id=5 Type=SHOCK Loc=Kitchen ztypeName=Perimeter ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 0:11:07.230218 DEBUG Model PowerMaster 360 PowerMaster Yes LastEvent Unknown Ready No 0:11:07.230794 DEBUG Mode STANDARD PLUS Status Unknown Trouble NONE AlarmStatus NONE 0:11:07.231144 DEBUG ==================================================================================================================== 0:11:07.455080 DEBUG [sendPdu] Sending Command (Restore Connection) raw data 0d ab 06 00 00 00 00 00 00 00 00 00 43 0b 0a waiting for message response ['0XA5', '0X2'] 0:11:07.526632 DEBUG [handle_msgtypeA5] Zone Alarm Status 0:11:07.527432 DEBUG [handle_msgtypeA5] Zone Trip Alarm 32-01: 00000000000000000000000000000000 0:11:07.528224 DEBUG [handle_msgtypeA5] Zone Tamper Alarm 32-01: 00000000000000000000000000000000 0:11:07.669363 DEBUG [handle_msgtypeA5] Got A5 02 message, resetting watchdog 0:11:07.670228 DEBUG [handle_msgtypeA5] Open Door/Window Status Zones 32-01: 00000000000000000000000000000000 0:11:07.671104 DEBUG [handle_msgtypeA5] Battery Low Zones 32-01: 00000000000000000000000000000000 0:11:07.671723 DEBUG ================================================== Display Status ================================================== 0:11:07.672638 DEBUG key 0 Sensor id=1 Type=MAGNET Loc=Front door ztypeName=Delay 1 ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 0:11:07.673547 DEBUG key 1 Sensor id=2 Type=MOTION Loc=Living room ztypeName=Home Delay ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 delay=3600 0:11:07.674641 DEBUG key 2 Sensor id=3 Type=MOTION Loc=Upstairs ztypeName=Interior ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 delay=3600 0:11:07.675670 DEBUG key 3 Sensor id=4 Type=MOTION Loc=Conservatory ztypeName=Perimeter ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 delay=3600 0:11:07.676637 DEBUG key 4 Sensor id=5 Type=SHOCK Loc=Kitchen ztypeName=Perimeter ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 0:11:07.677299 DEBUG Model PowerMaster 360 PowerMaster Yes LastEvent Unknown Ready No 0:11:07.678161 DEBUG Mode STANDARD PLUS Status Unknown Trouble NONE AlarmStatus NONE 0:11:07.678776 DEBUG ==================================================================================================================== 0:11:07.821978 DEBUG [handle_msgtypeA5] Trigger (Inactive) Status Zones 32-01: 00000000000000000000000000000000 0:11:07.822795 DEBUG [handle_msgtypeA5] Tamper Zones 32-01: 00000000000000000000000000000000 0:11:07.973954 DEBUG [_processReceivedPacket] Diff on PanelState 0:11:07.974795 DEBUG [_processReceivedPacket] Diff on PanelReady onPanelChangeHandler value PANEL_UPDATE 0:11:08.276475 DEBUG ================================================== Display Status ================================================== 0:11:08.277637 DEBUG key 0 Sensor id=1 Type=MAGNET Loc=Front door ztypeName=Delay 1 ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 0:11:08.278419 DEBUG key 1 Sensor id=2 Type=MOTION Loc=Living room ztypeName=Home Delay ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 delay=3600 0:11:08.279071 DEBUG key 2 Sensor id=3 Type=MOTION Loc=Upstairs ztypeName=Interior ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 delay=3600 0:11:08.279690 DEBUG key 3 Sensor id=4 Type=MOTION Loc=Conservatory ztypeName=Perimeter ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 delay=3600 0:11:08.280297 DEBUG key 4 Sensor id=5 Type=SHOCK Loc=Kitchen ztypeName=Perimeter ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 0:11:08.280688 DEBUG Model PowerMaster 360 PowerMaster Yes LastEvent Unknown Ready Yes 0:11:08.281253 DEBUG Mode STANDARD PLUS Status Disarmed Trouble NONE AlarmStatus NONE 0:11:08.281601 DEBUG ==================================================================================================================== 0:11:08.365727 DEBUG [sendPdu] Sending Command (Powermaster Command Original) raw data 0d b0 01 1f 06 02 ff 08 03 00 00 43 d8 0a waiting for message response ['0XB0', '0X2'] 0:11:08.366426 DEBUG [sendPdu] Command has a wait time after transmission 0.5 0:11:08.455814 DEBUG [handle_msgtypeB0] Received PowerMaster 360 message 3/31 (len = 69) data = 03 1f 45 ff 08 03 40 2d 01 01 07 35 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7b 43 0:11:08.456703 DEBUG [handle_msgtypeB0] Received message, sensor list, length = 64 0:11:08.457456 DEBUG [handle_msgtypeB0] sensor type for sensor 1 is 45 0:11:08.458180 DEBUG [handle_msgtypeB0] sensor type for sensor 2 is 1 0:11:08.458823 DEBUG [handle_msgtypeB0] sensor type for sensor 3 is 1 0:11:08.459506 DEBUG [handle_msgtypeB0] sensor type for sensor 4 is 7 0:11:08.460111 DEBUG [handle_msgtypeB0] sensor type for sensor 5 is 53 You can do stuff here with visonicProtocol, Mode= STANDARD_PLUS You can do stuff here with visonicProtocol, Mode= STANDARD_PLUS You can do stuff here with visonicProtocol, Mode= STANDARD_PLUS You can do stuff here with visonicProtocol, Mode= STANDARD_PLUS 0:11:29.720245 DEBUG [handle_msgtype06] Timeout Received data ```

Visonic PowerMaster 360 simple_example 5650 Standard Plus 20240524.txt Visonic PowerMaster 360 simple_example 8888 Standard Plus 20240524.txt Visonic PowerMaster 360 simple_example 8888-2 Standard Plus 20240524.txt Visonic PowerMaster 360 simple_example 9999 Standard Plus 20240524.txt Visonic PowerMaster 360 simple_example AAAA Standard Plus 20240524.txt Visonic PowerMaster 360 simple_example BBBB Standard Plus 20240524.txt

davesmeghead commented 2 months ago

Hi, That's good news, let me go through your points one by one and try to help

What to the USB serial port baud rates, I have positive experiences with both 9600 and 38400 settings using alternate projects from public domain. And yes, I am fully aware that not every USB cable is created the same. This one is capable of programming ESP32 MCUs.

I've found by my experimentation that a Powerlink hardware device alternates between 9600 and 38400 when it tries to start the communication with the panel. When it succeeds at 1 of the 2 baud rates, if at 9600 then it asks the panel to go to 38400, they are then both at 38400.

Can installer code be extracted from EPROM data, by chance? I have a valid user code, if it helps.

Yes, in pyvisonic.py (the dev release) uncomment these lines so you get:

                # DON'T SAVE THE USER CODES TO THE LOG
                log.debug("[Process Settings] User Codes:")
                if len(uc) == userCnt:
                    self.pmPincode_t = uc
                    self.pmGotUserCode = True
                    for i in range(0, userCnt):
                        log.debug(f"[Process Settings]      User {i} has code {self._toString(uc[i])}")
                else:
                    log.debug(f"[Process Settings]  User code count is different {userCnt} != {len(uc)}")

                log.debug(f"[Process Settings]    Installer Code {self._toString(self._lookupEpromSingle('installerCode'))}")
                log.debug(f"[Process Settings]    Master DL Code {self._toString(self._lookupEpromSingle('masterDlCode'))}")
                if self.PowerMaster is not None and self.PowerMaster:
                    log.debug(f"[Process Settings]    Master Code {self._toString(self._lookupEpromSingle('masterCode'))}")
                    log.debug(f"[Process Settings]    Installer DL Code {self._toString(self._lookupEpromSingle('instalDlCode'))}")

After it downloads the EEPROM (which you have done if you're in Standard Plus) the above displays all user codes and all 4 installer codes (for a PowerMaster series). It prints them with a space in between as its 2 bytes but you'll see what I mean.

does pyvisonic.py code require any updates to accommodate Model=153?

As you have achieved Standard Plus mode then probably not. I've been thinking about this over the past few days. A PowerMaster 360 and 360R both have Ethernet connections and the ability to use the Visonic Go App.
I therefore assume that they have the PowerLink hardware built in to the panel.
If that hardware inside the panel has already "enrolled" as a powerlink device then the panel is unlikely to support more than 1. I conclude that "Standard Plus" maybe the best that we can achieve.
This is not a bad thing and the difference in my integration is very little, the exchange of "I'm Alive" messages for example but not much more.

I'm not sure why complete_example is failing for you, I do not run it in a virtual environment on linux when I test it, could it be that? Are you using the dev version I uploaded last night? aconsole may not like the virtual env

You keep talking about download codes, if you're in Standard Plus then you have already downloaded the EEPROM and have the correct Download Code. If you do a hard reset on a PowerMaster panel (you have V19 firmware) then it should default to AAAA as the Download Code. I would guess that it's AAAA unless an installer has changed it in the panel settings.

For example in some of your text files they give Access Denied messages for the download code but then it does it anyway and gets the EEPROM data. This may be because it already has the Powerlink hardware build in to the panel, I don't know.

Try doing the following change (again in the latest dev version), line 2867 in pyvisonic.py i.e. comment out the if false and show the data

                    if val.show:
                    #if False:

This will output a lot of settings to the log file / screen from the EEPROM

As you have a PowerMaster then you can also set Dumpy to True on line 676, it crashes a PowerMax and I'm looking at that this afternoon.

Do not upload a log file with this information though as it gives away a lot of information about your panel.

EDIT: Upon re-checking with Wiki, I confirm that waiting for 9+ minutes / 4 attempts to enrol hasn't been successful and Standard Plus mode remains in power:

Like I suggested above, this might be the best we get with a 360 and 360R.

I'd be interested in a log file from the beginning to get to Standard Plus and then about 15 minutes more, just to see what's happening and to see if the panel tries other things. Thanks Dave

davesmeghead commented 2 months ago

I forgot to add, ignore this error in the log file, it'll be fixed soon !

ERROR   [Process Settings] Lookup of panel type string and model from the EEPROM failed, assuming EPROM download failed

You could do it yourself temporarily with this change on line 2821

        if pmPanelTypeNr is not None and 0 <= pmPanelTypeNr <= 16:
fuef commented 2 months ago

Thank you very much, @davesmeghead, for letting me know how to extract the codes! Although references to my Master Code can be found in the public domain, Installer Code, Master Download Code and Installer Download Code seem to have been either configured unique to my professional installation by ADT UK, or to all ADT UK installations.

The codes are being produced around 14-15 seconds from the start. Potentially, an equipped intruder has quite a few seconds to disarm the system before the siren goes off. Given, of course, they know whereabouts of the panel.

Both Download Codes, Master Download Code and Installer Download Code, when configured on simple_example.py result in a complete elimination of the following two entries from the logs

0:00:03.122164  <pyvisonic.py   : 3407>    DEBUG   [handle_msgtype08] Access Denied  len 0 data 
0:00:03.123892  <pyvisonic.py   : 3420>    DEBUG   [handle_msgtype08] Got an Access Denied and we have sent a Download command to the Panel

Other than that, the correct known Download Code doesn't seem to affect anything else. Wait, I remember! The Download Code is required to operate Windows PowerMaster Remote Programmer. Otherwise, it simply kicks user off.

PowerMaster Remote Programmer [32839]
Error
Access to PowerMaster denied.
Check Download Code and retry.

I make a note that Standard Plus mode gives more accurate readings for sensors Type={ MAGNET| MOTION | SHOCK } and model. In Standard mode, it was my responsibility to correct these attributes manually prior to exposing all stuff to my final destination HomeKit.

I didn't have a chance to try the Installer Code yet. In theory, it can give me ability to de-commission the siren and, more importantly, to activate SMS notifications. Given 3G spectrum is closing down in the UK, the only hope is that GPRS / 2G will continue to operate for a few more years. Otherwise, 5G router's API would have to be explored to set up out of band notifications. Wi-Fi activation for IP camera can be another option to explore / compare to the native HomeKit capability.

One of my complaints in Standard Mode was the lask of responsiveness. HASS web application didn't give me any good enough feedback when arm / disarm buttons were pressed on the application's web page. Similarilry, panel's arm / disarm status wasn't updated anywhere close to real time. It could have been showing up in Grey, while the keypad could have been beep counting / arming. Looking at the integration logs, it appears the nature of the PowerLink integration gives about 2 minute eventual consistency of the panel's state changes.

complete_example.py must be failing because of some missing dependencies. requests is one example, not declared on requirements.txt (no offence). tkinter dependency came up to the surface some time ago as well. That one seems to be part of apt install python3-tk. Python portability between barely compatible platforms doesn't scale well. venv is my tried way of setting up a build environment.

Are you using the dev version I uploaded last night?

Affirmative. It's being downloaded as curl -LO https://github.com/davesmeghead/visonic/archive/refs/heads/dev.zip. It comes with the Download Code AAAA in simple_example.py which is mentioned in public domain as a factory default for PM-360.

I'd be interested in a log file from the beginning to get to Standard Plus

I attach another dump. For avoidance of any doubt, 1234 is my credit card's PIN 🤫.

PowerMaster 360 Standard Plus EEPROM 20240524.txt

Shall we mark this issue as resolved? Or shall it wait for Master branch and documents to synchronise?

Thank you very much for enabling PowerMaster 360!

Almost un-related: HASS push towards HACS in 2024.11 seems to have been addressed by your plugin. Guess what? HACS itself is being installed via ... custom_components when it comes to containers or Core. https://hacs.xyz/docs/setup/download/

davesmeghead commented 2 months ago

Thank you very much for enabling PowerMaster 360!

That's OK, I'm pleased that you got it working and that I can document this on the Wiki. I'll start looking for a cheap 360R on Ebay to see if I can get it working the same !

The codes are being produced around 14-15 seconds from the start. Potentially, an equipped intruder has quite a few seconds to disarm the system before the siren goes off. Given, of course, they know whereabouts of the panel.

I see what you mean, maybe that's why the 360R has the USB connector inside the panel and you'd need to take the panel apart.

In Standard mode, it was my responsibility to correct these attributes manually prior to exposing all stuff to my final destination HomeKit.

That's because we get the EEPROM data and can extract the sensors names, locations and types.

One more thing that I noticed in the log file, for the motion sensors you have a delay of 3600 seconds i.e. 1 hour. I suggest that you set this to 0 seconds so the motion sensors work better when the panel is Disarmed. See here on the wiki https://github.com/davesmeghead/visonic/wiki#powermaster-pirs

It comes with the Download Code AAAA in simple_example.py which is mentioned in public domain as a factory default for PM-360.

You're right, I've removed it to upload next time but no harm done, it's used with my PowerMaster30 Panel for testing.

For complete_example I have removed the requests dependency in the dev release last night.

Shall we mark this issue as resolved? Or shall it wait for Master branch and documents to synchronise?

We can mark this as closed as I won't merge anything in to the Master branch for a month or 2 yet. I also won't update the wiki yet. I'm currently looking at getting the Image from a PIR Camera and have half an implementation for it in the dev release so splitting it and working out what to merge would be more effort so I'll do it all in one big update, probably around July time. I realise that doesn't help you but you can keep using the dev release, especially as you're not planning in using Home Assistant. Also, I was serious about the 360R from Ebay, I'll look in to making it more robust.

Lastly, thanks for using it, and for testing it out.

davesmeghead commented 2 months ago

Just a couple of extra things, for this

0:01:29.162402 <pyvisonic.py : 3386> DEBUG [handle_msgtype06] Timeout Received data

Try changing the following to 15 in pyvisonic.py KEEP_ALIVE_PERIOD = 15 # Seconds

Does it get rid of the Timeout? If not then try 10

For this

0:10:55.124894 <pyvisonic.py : 1743> DEBUG [Controller] Giving up on Powerlink Attempts, going to one of the standard modes

And just to give it a try, setting the following to False in simple_example should stop it trying to get to Powerlink state and leave it in standard plus

CONF_FORCE_AUTOENROLL: False,

This should eliminate the powerlink attempts and so the following should not happen anymore

0:03:34.410892 <pyvisonic.py : 1729> DEBUG [Controller] ** During Powerlink Attempts - Response Timer Expired ****

And it should stop it going to PROBLEM condition

You can do stuff here with visonicProtocol, Mode= PROBLEM

Can you give these are try please and let me know, another log file would be appreciated

davesmeghead commented 2 months ago

I just checked the code and the last thing I asked you to do won't work.

Once I know that it's a PowerMaster panel then I assume it can AutoEnroll and ignore the CONF_FORCE_AUTOENROLL setting. It will then start trying for Powerlink status and asking the Panel to Enroll. This is what the 360 Panel ignores, and we get the error "response timer expired".

I'll need to look in to it further. Would you mind leaving this issue open and give it a try, it might take me a few days

davesmeghead commented 2 months ago

And just to explain why I suggested 15 seconds for the KEEP_ALIVE_PERIOD keep alive messages (in case anyone was wondering)

From your log file there's 20 seconds between the timeout messages from the panel.

0:02:48.989954 <pyvisonic.py : 3386> DEBUG [handle_msgtype06] Timeout Received data 0:03:08.984868 <pyvisonic.py : 3386> DEBUG [handle_msgtype06] Timeout Received data

fuef commented 2 months ago

I was about to reply "thank you again, but as an average housewife I am not interested what may be happening inside the black box as long as it doesn't break the existing setup".

Try changing the following to 15 in pyvisonic.py KEEP_ALIVE_PERIOD = 15 # Seconds

By tweaking it to either 15 or 10, I see why you asked me to try it. The timeouts have gone 👏, along with the incrementing PROBLEM counter. I could be wrong, but instead of status updates once every two minutes it produces 'Display Status' message every 30-40 seconds by now. This would look as a real time to me.

By referring to some historical logs from parallel universe, the interval between Message type = 0x02 - ACK entires never exceeds 21 seconds. I have no sense if it's a like for like, and why could it be important. I can try increase it to 20 seconds if you want.

openhab_openhab.log

I've 'promoted' dev branch internally into HASS container. I also might have accidentally pulled today's version. I am in a total denial of testing rules. For example, previously unseen 'problem' message resulting from a PIN missing:

WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM

doesn't look right. I've seen it with my own eyes that EPROM decoding is working and all PINs are in there. This 'problem' counter stops after ~9 minutes after start.

To add insult to injury, serial port speed has 'upgraded' to 115200. I trust this particular USB cable.

My new favourite view is http://hass.local:8123/developer-tools/state. It gives almost exactly what is achieved with

if val.show:
#if False:

Because I am in a 'production' environment now, I cannot modify CONF_FORCE_AUTOENROLL. For some reason, pyvisonic.py can log user-configurable Auto Enroll Supported (Unticked for PowerMax+) as 'force_autoenroll': False, but it doesn't honour it and continues to auto-enrol upon every start. BTW this checkbox doesn't appear on configuration dialogs after initial installation. I don't mind to re-create the whole integration, because it's quick now.

I did configure 'motion_off': 0.0 as per your suggestion. I'd speculate that having it configured as one hour by default may save sensor's battery life for longer. From architectural point of view, I am not interested what is happening inside the blackbox. And I have no intention to re-create an alarm system from scratch by reading Visonic sensors. I have Visonic panel for this. As a housewife, I am completely happy with sensor status updates history inside HomeKit. It's off by default, and I prefer to keep it that way. When something happens, I can always refer to the HASS integration logs as if it was my 'flight recorder'.

As always, 1234 is my credit card PIN on the logs 🤫. It looks brilliant in my view, thank you very much! I have to test the new integration at some point, when internal home traffic will subside in the forthcoming hours.

home-assistant_visonic_2024-05-25T16-15-47.467Z.log

Rather than attaching an unsightly PIR to the camera, I am exploring TinyML / OpenCV options, based on ever advancing motion detection capabilities.

fuef commented 2 months ago

20 hours in a freshly commissioned integration, with addition of HomeKit...

So far, so good, thank you! The problem counter continues to increment, but the rate isn't alarming in my view. How much does it hurt when watchdog kicks in? Or does watchdog makes it an average over 24 hours?

PROBLEM counter 4x PROBLEM counters at the very beginning is normal I guess. ```javascript journalctl -b -gPROBLEM|tail -12|sed 's/^.*2024/2024/' 2024-05-25 14:47:10.250 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_processReceivedPacket] Had a response timeout PROBLEM but received a data packet so entering Standard Plus Mode 2024-05-25 14:50:05.509 WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM 2024-05-25 14:50:10.578 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_processReceivedPacket] Had a response timeout PROBLEM but received a data packet so entering Standard Plus Mode 2024-05-25 14:53:05.820 WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM 2024-05-25 14:53:10.878 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_processReceivedPacket] Had a response timeout PROBLEM but received a data packet so entering Standard Plus Mode 2024-05-25 14:56:06.139 WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM 2024-05-25 14:56:11.200 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_processReceivedPacket] Had a response timeout PROBLEM but received a data packet so entering Standard Plus Mode 2024-05-25 19:56:49.846 WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM 2024-05-25 23:46:53.172 WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM 2024-05-26 04:00:15.087 WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM 2024-05-26 07:05:14.539 WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM 2024-05-26 10:11:29.625 WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM ```

It's been a brave move to test the installation on Sunday's morning during the Bank Holiday, after party and without debugging level logs:

Well, Home Assistant's account of the incident is kind of misleading.

Home Assistant logs ``` 11:05:19 visonic_p1_z04 cleared (no motion detected) 11:05:19 visonic_p1_z04 detected motion 11:02:19 Alarm Panel changed to Disarmed 11:00:38 Alarm Panel changed to Armed home 10:53:46 visonic_p1_z02 cleared (no motion detected) 10:53:46 Alarm Panel changed to Disarmed 10:53:46 visonic_p1_z02 detected motion 10:53:29 HomeKit send command alarm_disarm for Visonic Alarm Panel 1 10:52:09 Alarm Panel changed to Armed home 10:51:24 Alarm Panel changed to Arming 10:51:06 HomeKit send command alarm_arm_home for Visonic Alarm Panel 1 ```

HomeKit has sent command 10:53:29 alarm_disarm way after 10:53:46 visonic_p1_z02 has detected motion (please, refer to my account what worked above). Similarly, 11:05:19 visonic_p1_z04 has detected motion before Alarm Panel changed to Disarmed.

Neither HomeKit, nor Home Assistant have a record of the siren going off though.

A couple of questions if I may:

Siren logs Is ```Mismatch PowerMaster Sirens 32 8``` a problem? ``` 2024-05-25 14:46:29.353 DEBUG (MainThread) [custom_components.visonic] [Visonic Setup] ************* create connection here ************** entry data={'panel_number': 1, 'type': 'usb', 'path': '/dev/ttyACM0', 'baud': '115200', 'language': 'EN', 'emulation_mode': 'Powerlink Emulation', 'exclude_sensor': [], 'exclude_x10': [], 'download_code': 'XXXX', 'force_autoenroll': False, 'sync_time': True, 'show_eeprom_attributes': True, 'motion_off': 0.0, 'siren_sounding': ['intruder'], 'panel_state_notifications': ['connectionproblem', 'sirensounding'], 'retry_connection_count': 1.0, 'retry_connection_delay': 90.0, 'arm_without_usercode': True, 'force_numeric_keypad': False, 'arm_home_enabled': True, 'arm_night_enabled': False, 'arm_away_instant': False, 'arm_home_instant': False, 'allow_remote_arm': True, 'allow_remote_disarm': True, 'allow_sensor_bypass': False, 'override_code': 'XXXX', 'panellog_logentry_event': False, 'panellog_complete_event': False, 'panellog_reverse_order': False, 'panellog_csv_add_title_row': False, 'panellog_xml_filename': 'visonic_log_file.xml', 'panellog_csv_filename': 'visonic_log_file.csv', 'panellog_max_entries': 10000} options={'panel_number': 1, 'type': 'usb', 'path': '/dev/ttyACM0', 'baud': '115200', 'language': 'EN', 'emulation_mode': 'Powerlink Emulation', 'exclude_sensor': [], 'exclude_x10': [], 'download_code': 'XXXX', 'force_autoenroll': False, 'sync_time': True, 'show_eeprom_attributes': True, 'motion_off': 0.0, 'siren_sounding': ['intruder'], 'panel_state_notifications': ['connectionproblem', 'sirensounding'], 'retry_connection_count': 1.0, 'retry_connection_delay': 90.0, 'arm_without_usercode': True, 'force_numeric_keypad': False, 'arm_home_enabled': True, 'arm_night_enabled': False, 'arm_away_instant': False, 'arm_home_instant': False, 'allow_remote_arm': True, 'allow_remote_disarm': True, 'allow_sensor_bypass': False, 'override_code': '', 'panellog_logentry_event': False, 'panellog_complete_event': False, 'panellog_reverse_order': False, 'panellog_csv_add_title_row': False, 'panellog_xml_filename': 'visonic_log_file.xml', 'panellog_csv_filename': 'visonic_log_file.csv', 'panellog_max_entries': 10000} 2024-05-25 14:46:29.360 DEBUG (MainThread) [custom_components.visonic.client] connect_to_alarm self.config = {'panel_number': 1, 'type': 'usb', 'path': '/dev/ttyACM0', 'baud': '115200', 'language': 'EN', 'emulation_mode': 'Powerlink Emulation', 'exclude_sensor': [], 'exclude_x10': [], 'download_code': 'XXXX', 'force_autoenroll': False, 'sync_time': True, 'show_eeprom_attributes': True, 'motion_off': 0.0, 'siren_sounding': ['intruder'], 'panel_state_notifications': ['connectionproblem', 'sirensounding'], 'retry_connection_count': 1.0, 'retry_connection_delay': 90.0, 'arm_without_usercode': True, 'force_numeric_keypad': False, 'arm_home_enabled': True, 'arm_night_enabled': False, 'arm_away_instant': False, 'arm_home_instant': False, 'allow_remote_arm': True, 'allow_remote_disarm': True, 'allow_sensor_bypass': False, 'override_code': '', 'panellog_logentry_event': False, 'panellog_complete_event': False, 'panellog_reverse_order': False, 'panellog_csv_add_title_row': False, 'panellog_xml_filename': 'visonic_log_file.xml', 'panellog_csv_filename': 'visonic_log_file.csv', 'panellog_max_entries': 10000} 2024-05-25 14:46:29.423 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [Settings] Siren Trigger List set to ['intruder'] 2024-05-25 14:46:45.729 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [Process Settings] Mismatch PowerMaster Sirens 32 8 2024-05-25 14:46:45.742 DEBUG (MainThread) [custom_components.visonic.client] Client: Sending HA Event {'condition': 2, 'action': 'panelupdate', 'mode': 'Standard Plus', 'state': 'Downloading', 'ready': False, 'tamper': False, 'memory': False, 'siren': False, 'bypass': False, 'reset': False, 'alarm': 'NONE', 'trouble': 'NONE', 'event_count': 0, 'event_time': '', 'event_type': [], 'event_event': [], 'event_mode': [], 'event_name': [], 'panel': 1} ```

HomeKit logs

Visonic PM-360 HomeKit logs

davesmeghead commented 2 months ago

Hi,

The Ethernet Connector and the USB Connector on a 360 It's important that you understand this. The Ethernet connector and the Powerlink hardware behind it is the proper Powerlink connection. The USB that you're using is for an Installer to configure your panel without the pain of using the panels menus i.e. from a tablet or laptop.

The panel may not send "Panel Status" messages to the USB. The issue with the 360 is that the hardware inside has already enrolled (for the ethernet), I think this prevents the HA integration from enrolling via USB.

With the other PowerMaster panels (I have a PowerMaster 30 that I use to test) I can achieve full Powerlink and the response to sensors and commands are pretty much instantaneous. My Integration mimics the Powerlink Hardware Module so the panel thinks it's only got 1 Powerlink connection. Only the 360 and 360R panels have direct Ethernet connections and include the Powerlink hardware, all other panels just have an internal RS232 connector.

Powelink Enroll In the dev release that you have the integration gets to Standard Plus and then starts trying to Enroll as Powerlink See this in the log file "Sending Command (Auto-Enroll PowerMax/Master)" Your panel does not respond, hence you get the timeouts and the problem reports (and problem counter) See this in the log file " During Powerlink Attempts - Response Timer Expired " The dev release I have on test does not do this, for a 360 it gets to Standard Plus and then does not try to get to Powerlink. There should not be any problem reports. However, it will still not achieve Powerlink Enrolled functionality.

Panel Status Messages PowerMaster panels use a combination of A7 and B0 messages to provide Panel Status, are any of these in your log file? i.e. search for handle_msgtypeA7 and handle_msgtypeB0 I only think that the panel sends Panel Status data in Powerlink when Enrolled properly. But I'm not sure of this, take a look at your log files.

About Z04 setting the siren off If the system is "Arm Home" then Perimeter sensors will trigger the siren. Looking at one of your old logs, Z02 is Home Delay, Z03 is Interior and Z04 is Perimeter. Your Z04 is a PIR but is set up as a Perimeter sensor, that is why the siren went off (without audible countdown). I suggest that you change Z04 on your panel to an Interior Sensor I'm not sure why trying to Disarm from HA didn't work, I'd need a proper log file to check

About Problem Counter I'm working on it and have it on test for a few hours, I'll upload a dev release soon!

Home Assistant's account of the incident is kind of misleading I agree that it looks odd Again, I'd need a full debug log file to try and work it out

Neither HomeKit, nor Home Assistant have a record of the siren going off though. Home Assistant may not as it's not in Powerlink Mode.

Time The time is from the underlying operating system. In python I either use "datetime.now()" to get local time or use "datetime.utcnow()" to calculate time differences

Baud rate If the panel has been depowered for a while it defaults to 9600. The panel will only change baud rate if a special message is sent to it. All my code should default to 9600 unless told otherwise (If it doesn't then it's a bug!) However, with the 360 having internal Powerlink hardware, it may be messing with the baud rate

KEEP_ALIVE_PERIOD I'm working on it and have it on test for a few hours, I'll upload a dev release soon! My new dev release on test automatically sets it to 15

Why Alarm Panel changed to Arming event hasn't been produced on the second occasion I'm not sure, again I'd need a proper debug log file. At a guess, it may be because of the A7/B0 Panel Status messages

Why the integration is completely unaware of the siren's existence and its events? It is aware of the sirens existence but it doesn't create an entity in HA as the alarm control panel Entity includes that same functionality. In your old log file it had this "Mismatch PowerMaster Sirens 32 8" but it does not do anything with it anyway, this is just for information only. This is fixed in the dev release that I have on test, but it will not create a Siren entity.

Do Visonic panels produce an alarm event over PowerLink? Yes, but I say again that you get to "Standard Plus" and not Powerlink state

davesmeghead commented 2 months ago

Hi, me again,

I've uploaded a new dev release to github, sorry it took so long, bank hol weekend is my only excuse

Could you summarise again the functionality that you get please, I can then decide whether or not to support the 360 panel and include it on the wiki.

If you include log files then I'll take a look

Thanks again for your help Dave

fuef commented 2 months ago

It's important that you understand this.

Thank you very much, @davesmeghead, for troubleshooting my incorrectly configured custom zone Conservatory! I was thinking of going to security installers forums or something. You are right, having it in a Perimeter zone type may make sense from installer's point of view. Especially if they never had a conservatory and didn't use to run to it in the morning, while having the silent keypad in an opposite part of the floor, next to the front door.

I can also confirm that the Installer Code, enabled by uncommenting if val.show: has worked with AlarmInstall app on iPad, many-many thanks! I am slightly uncomfortable about this counter-intuitive app. I'll wait for another quality micro USB cable on order to arrive for testing with PowerMaster Remote Programmer for Windows.

From my memory of previous false alarms, once triggered, the siren was never quick to be silenced. Adrenaline could be a multiplying factor, of course, but the keypad -> panel -> siren kill chain consists of two wireless links. If panel doesn't operate on interrupts, but is rather polling its wireless estate every few seconds, the total delay may look far from instantaneous.

I've checked with all the logs ever produced:

According to my current working theory, the latter deficiency is a result of a

double trouble. Scroll down to **Report to Central Station: All * Backup**. ``` code_format: null changed_by: code_arm_required: false mode: Standard Plus state: Disarmed ready: true tamper: false memory: true siren: false bypass: false reset: false alarm: NONE trouble: NONE event_count: 0 event_time: event_type: event_event: event_mode: event_name: Protocol Version: 1.3.2.2 Panel Model: PowerMaster 360 Power Master: Yes Watchdog Timeout (Total): 0 Watchdog Timeout (Past 24 Hours): 0 Download Timeout: 0 Download Retries: 0 Panel Problem Count: 5 Panel Problem Time: 2024-05-27T10:17:52.736671 Panel Name: Unknown EPROM Change Time I Think: /  Jamming Detection: EN 30/60 Entry Delay 1: 30 Seconds Entry Delay 2: 30 Seconds Exit Delay: 30 Seconds Bell Time: 4 Minutes Piezo Beeps: Enable (off when home) Swinger Stop: After 2 Times Aux Key 1: Instant Arm Aux Key 2: Instant Arm Supervision Interval: 2 Hours No Activity Time: Disable Alarm Cancel Time: 5 Minutes Abort Time: None Confirm Alarm Timer: 60 Minutes Screen Saver: Off Reset Option: User Reset Duress: 0000 AC Failure Report: 60 Minutes User Permit: Disable Zone Restore: Don't Report Tamper Option: On PGM By Line Fail: No Auto Arm Option: Disable Send 2wv Code: Don't Send Memory Prompt: Enable Time Format: Europe - 24H Date Format: Europe DD/MM/YYYY Low Battery Acknowledge: Off Not Ready: Normal X10 Flash On Alarm: No Flash Disarm Option: Any Time Siren On Line: Disable on Fail Upload Option: Any Time Panic Alarm: Audible Panic Exit Mode: Normal Bell Report Option: EN Standard Internal/Strobe Siren: Internal Siren Quick Arm: Off Back Light Time: Off After 10 Seconds Two-Way Voice - Private: Enable Latchkey Arming: Off Bypass: Manual Bypass Trouble Beeps: Disable Cross Zoning: Off Recent Close Report: Off Piezo Siren: Off Dialing Method: Tone (DTMF) Remote Access: On Report Confirmed Alarm: Disable Report 1st Central Tel: 2nd Central Tel: 1st Account No: XXXXXX 2nd Account No: XXXXXX Pager Tel Number: Pager PIN #: Ringback Time: 1 Minute **Report to Central Station: All * Backup** Report To Pager: Disable Report Reporting To Private Tel: Disable Report Central Station Dialing Attempts: 8 Report Format: SIA 4/2 Pulse Rate: 20 pps Two-Way Voice To Central Stations: Disable Autotest Time: 03:44 Autotest Cycle: 1 Day Line Failure Report: Don't Report Remote Programmer Tel. No.: System Inactive Report: 30 Days Ambient Level: Low Level PowerLink Failure: Disable Report GSM Line Purpose: SMS Only GSM Report to SMS: Disable Report GSM Line Failure: Don't Report GSM Select Antenna: Internal antenna Panel Eprom: J-705117 L19.412 Panel Software: JS703296 L19.412 Panel Serial: XXXXXXXXXX. Door Zones: Motion Zones: Smoke Zones: Other Zones: Z01,Z02,Z03,Z04,Z05 Devices: K200 Client Version: 0.9.2.3 Exception Count: 0 panel: 1 friendly_name: Alarm Panel supported_features: 11 ```

The manual insists that GSM module is always present / always wins for reporting / notifications. Well, given the unit is out of contract, no central station reporting mechanism (GSM/telephone/broadband) is configured. The panel may potentially decide to stop emitting any reporting messages in the absence of any configured destinations. *```Report to Central Station: All Backup```** may become void as a result.

I've discovered a rather edge case scenario by activating panel's Wi-Fi access point to play with AlarmInstall: pyvisonic.py gave up upon a few unsuccessful tries. Would it hurt to stay in the loop in a little hope the installer will finish abusing built in access point soon?

Never give up! ``` 2024-05-27 08:25:44.313 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (I'm Alive Message To Panel) raw data 0d ab 03 00 00 00 00 00 00 00 00 00 43 0e 0a waiting for message response ['0X2'] 2024-05-27 08:25:59.341 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (I'm Alive Message To Panel) raw data 0d ab 03 00 00 00 00 00 00 00 00 00 43 0e 0a waiting for message response ['0X2'] 2024-05-27 08:26:14.368 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:26:14.439 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [handle_msgtypeA5] Zone Alarm Status 2024-05-27 08:26:14.584 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [handle_msgtypeA5] Got A5 02 message, resetting watchdog 2024-05-27 08:26:14.585 DEBUG (MainThread) [custom_components.visonic.pyvisonic] ================================================== Display Status ================================================== 2024-05-27 08:26:14.586 DEBUG (MainThread) [custom_components.visonic.pyvisonic] key 0 Sensor id=1 Type=MAGNET Loc=Front door ztypeName=Delay 1 ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 2024-05-27 08:26:14.587 DEBUG (MainThread) [custom_components.visonic.pyvisonic] key 1 Sensor id=2 Type=MOTION Loc=Living room ztypeName=Home Delay ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 delay=3600 2024-05-27 08:26:14.588 DEBUG (MainThread) [custom_components.visonic.pyvisonic] key 2 Sensor id=3 Type=MOTION Loc=Upstairs ztypeName=Interior ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 delay=3600 2024-05-27 08:26:14.588 DEBUG (MainThread) [custom_components.visonic.pyvisonic] key 3 Sensor id=4 Type=MOTION Loc=Conservatory ztypeName=Perimeter ztamper=0 ztrip=1 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 delay=3600 2024-05-27 08:26:14.589 DEBUG (MainThread) [custom_components.visonic.pyvisonic] key 4 Sensor id=5 Type=SHOCK Loc=Kitchen ztypeName=Perimeter ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 2024-05-27 08:26:14.589 DEBUG (MainThread) [custom_components.visonic.pyvisonic] Model PowerMaster 360 PowerMaster Yes LastEvent Unknown Ready Yes 2024-05-27 08:26:14.590 DEBUG (MainThread) [custom_components.visonic.pyvisonic] Mode STANDARD PLUS Status Disarmed Trouble NONE AlarmStatus NONE 2024-05-27 08:26:14.592 DEBUG (MainThread) [custom_components.visonic.pyvisonic] ==================================================================================================================== 2024-05-27 08:26:14.734 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [handle_msgtypeA5] Trigger (Inactive) Status Zones 32-01: 00000000000000000000000000000000 2024-05-27 08:26:15.190 DEBUG (MainThread) [custom_components.visonic.pyvisonic] ================================================== Display Status ================================================== 2024-05-27 08:26:15.191 DEBUG (MainThread) [custom_components.visonic.pyvisonic] key 0 Sensor id=1 Type=MAGNET Loc=Front door ztypeName=Delay 1 ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 2024-05-27 08:26:15.192 DEBUG (MainThread) [custom_components.visonic.pyvisonic] key 1 Sensor id=2 Type=MOTION Loc=Living room ztypeName=Home Delay ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 delay=3600 2024-05-27 08:26:15.193 DEBUG (MainThread) [custom_components.visonic.pyvisonic] key 2 Sensor id=3 Type=MOTION Loc=Upstairs ztypeName=Interior ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 delay=3600 2024-05-27 08:26:15.194 DEBUG (MainThread) [custom_components.visonic.pyvisonic] key 3 Sensor id=4 Type=MOTION Loc=Conservatory ztypeName=Perimeter ztamper=0 ztrip=1 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 delay=3600 2024-05-27 08:26:15.195 DEBUG (MainThread) [custom_components.visonic.pyvisonic] key 4 Sensor id=5 Type=SHOCK Loc=Kitchen ztypeName=Perimeter ztamper=0 ztrip=0 bypass=0 lowbatt=0 status=0 tamper=0 enrolled=1 triggered=0 2024-05-27 08:26:15.195 DEBUG (MainThread) [custom_components.visonic.pyvisonic] Model PowerMaster 360 PowerMaster Yes LastEvent Unknown Ready Yes 2024-05-27 08:26:15.196 DEBUG (MainThread) [custom_components.visonic.pyvisonic] Mode STANDARD PLUS Status Disarmed Trouble NONE AlarmStatus NONE 2024-05-27 08:26:15.196 DEBUG (MainThread) [custom_components.visonic.pyvisonic] ==================================================================================================================== 2024-05-27 08:26:29.395 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (I'm Alive Message To Panel) raw data 0d ab 03 00 00 00 00 00 00 00 00 00 43 0e 0a waiting for message response ['0X2'] 2024-05-27 08:26:44.418 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (I'm Alive Message To Panel) raw data 0d ab 03 00 00 00 00 00 00 00 00 00 43 0e 0a waiting for message response ['0X2'] 2024-05-27 08:26:54.433 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [Controller] ****************************** Response Timer Expired ******************************** 2024-05-27 08:26:54.434 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [Controller] While Waiting for: [0x2] 2024-05-27 08:26:54.435 DEBUG (MainThread) [custom_components.visonic.client] Client: Sending HA Event {'condition': 2, 'action': 'panelupdate', 'mode': 'Problem', 'state': 'Disarmed', 'ready': True, 'tamper': False, 'memory': True, 'siren': False, 'bypass': False, 'reset': False, 'alarm': 'NONE', 'trouble': 'NONE', 'event_count': 0, 'event_time': '', 'event_type': [], 'event_event': [], 'event_mode': [], 'event_name': [], 'panel': 1} 2024-05-27 08:26:54.436 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:26:54.439 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:26:54.445 WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM 2024-05-27 08:26:57.457 WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM 2024-05-27 08:27:04.455 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:27:04.458 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:27:14.478 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:27:14.480 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:27:24.498 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:27:24.501 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:27:27.458 WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM 2024-05-27 08:27:34.516 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:27:34.519 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:27:44.535 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:27:44.537 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:27:54.551 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:27:54.554 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:27:57.459 WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM 2024-05-27 08:28:04.570 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:28:04.573 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:28:14.587 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:28:14.590 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:28:24.605 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:28:24.608 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:28:27.460 WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM 2024-05-27 08:28:34.624 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:28:34.627 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:28:44.643 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:28:44.646 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:28:54.662 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:28:54.665 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:28:57.461 WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM 2024-05-27 08:29:04.683 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:29:04.685 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:29:14.702 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:29:14.705 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:29:24.721 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:29:24.723 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:29:27.462 WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM 2024-05-27 08:29:34.739 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:29:34.742 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:29:44.759 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:29:44.761 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:29:54.775 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:29:54.777 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:29:57.463 WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM 2024-05-27 08:30:04.794 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:30:04.796 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:30:14.812 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:30:14.815 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:30:24.832 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [_clearList] Setting queue empty 2024-05-27 08:30:24.835 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [sendPdu] Sending Command (Getting Status) raw data 0d a2 00 00 3f 00 00 00 00 00 00 00 43 da 0a waiting for message response ['0XA5', '0X2'] 2024-05-27 08:30:27.464 WARNING (MainThread) [custom_components.visonic.client] Warning: Valid 4 digit PIN not found, panelmode is PROBLEM 2024-05-27 08:30:29.842 ERROR (MainThread) [custom_components.visonic.pyvisonic] [Controller] Visonic Plugin has suspended all operations, there is a problem with the communication with the panel (i.e. data has not been received from the panel in 0:04:00.386609 seconds) 2024-05-27 08:30:29.844 DEBUG (MainThread) [custom_components.visonic.pyhelper] [Controller] ******************************************************************************** 2024-05-27 08:30:29.844 DEBUG (MainThread) [custom_components.visonic.pyhelper] [Controller] ******************************************************************************** 2024-05-27 08:30:29.845 DEBUG (MainThread) [custom_components.visonic.pyhelper] [Controller] ****************************** Operations Suspended **************************** 2024-05-27 08:30:29.845 DEBUG (MainThread) [custom_components.visonic.pyhelper] [Controller] ******************************************************************************** 2024-05-27 08:30:29.845 DEBUG (MainThread) [custom_components.visonic.pyhelper] [Controller] ******************************************************************************** 2024-05-27 08:30:29.847 DEBUG (MainThread) [custom_components.visonic.client] Client: Sending HA Event {'condition': 2, 'action': 'panelupdate', 'mode': 'Stopped', 'state': 'Unknown', 'ready': False, 'tamper': False, 'memory': True, 'siren': False, 'bypass': False, 'reset': False, 'alarm': 'NONE', 'trouble': 'NONE', 'event_count': 0, 'event_time': '', 'event_type': [], 'event_event': [], 'event_mode': [], 'event_name': [], 'panel': 1} 2024-05-27 08:30:29.848 DEBUG (MainThread) [custom_components.visonic.client] Client: Sending HA Event {'condition': 10, 'action': 'nopaneldata', 'mode': 'Stopped', 'state': 'Unknown', 'ready': False, 'tamper': False, 'memory': True, 'siren': False, 'bypass': False, 'reset': False, 'alarm': 'NONE', 'trouble': 'NONE', 'event_count': 0, 'event_time': '', 'event_type': [], 'event_event': [], 'event_mode': [], 'event_name': [], 'panel': 1} 2024-05-27 08:30:29.849 INFO (MainThread) [custom_components.visonic.client] HA Notification: Connection Problem - No data from the panel 2024-05-27 08:30:29.854 DEBUG (MainThread) [custom_components.visonic.client] Client: Sending HA Event {'condition': 2, 'action': 'panelupdate', 'mode': 'Stopped', 'state': 'Unknown', 'ready': False, 'tamper': False, 'memory': True, 'siren': False, 'bypass': False, 'reset': False, 'alarm': 'NONE', 'trouble': 'NONE', 'event_count': 0, 'event_time': '', 'event_type': [], 'event_event': [], 'event_mode': [], 'event_name': [], 'panel': 1} 2024-05-27 08:30:30.356 DEBUG (MainThread) [custom_components.visonic.client] Unloading Sensors 2024-05-27 08:30:30.357 DEBUG (MainThread) [custom_components.visonic.select] select async_will_remove_from_hass 2024-05-27 08:30:30.358 DEBUG (MainThread) [custom_components.visonic.select] select async_will_remove_from_hass 2024-05-27 08:30:30.359 DEBUG (MainThread) [custom_components.visonic.select] select async_will_remove_from_hass 2024-05-27 08:30:30.360 DEBUG (MainThread) [custom_components.visonic.select] select async_will_remove_from_hass 2024-05-27 08:30:30.360 DEBUG (MainThread) [custom_components.visonic.select] select async_will_remove_from_hass 2024-05-27 08:30:30.361 DEBUG (MainThread) [custom_components.visonic.binary_sensor] binary sensor async_will_remove_from_hass 2024-05-27 08:30:30.362 DEBUG (MainThread) [custom_components.visonic.binary_sensor] binary sensor async_will_remove_from_hass 2024-05-27 08:30:30.362 DEBUG (MainThread) [custom_components.visonic.binary_sensor] binary sensor async_will_remove_from_hass 2024-05-27 08:30:30.363 DEBUG (MainThread) [custom_components.visonic.binary_sensor] binary sensor async_will_remove_from_hass 2024-05-27 08:30:30.366 DEBUG (MainThread) [custom_components.visonic.binary_sensor] binary sensor async_will_remove_from_hass 2024-05-27 08:30:30.367 DEBUG (MainThread) [custom_components.visonic.client] No Switches to Unload 2024-05-27 08:30:30.368 DEBUG (MainThread) [custom_components.visonic.client] Unloading Alarm Control Panel 2024-05-27 08:30:30.369 DEBUG (MainThread) [custom_components.visonic.alarm_control_panel] Removing alarm control panel Visonic Alarm Panel 1 panel 1 2024-05-27 08:30:30.369 DEBUG (MainThread) [custom_components.visonic.client] ........... Closing down Current Task 2024-05-27 08:30:32.371 DEBUG (MainThread) [custom_components.visonic.client] ........... Current Task Done ```
davesmeghead commented 2 months ago

Hi,

What happens:

The HA Event at 08:30:29.854 is a bug and should not be there (it's a repeat of the first of the three).

So you have 2 options.

I'm not planning on altering the code for this so it's up to you

Hope that makes sense Dave

EDIT: and to show the installer codes in the alarm_panel entity attributes in the frontend (if using extended settings in the integration config) and in the Log File, set SDumpy = True on line 698

fuef commented 2 months ago

I've upgraded the installation to the current dev version. The only change to the code was to enable SDumpy = True. I also configured Master Download code this time around. There are no sightings of handle_msgtypeA7 though. Could it be that PM-360 is using a code different from A7? Is there some serial sniffer I can use to dump the wire protocol?

There seem to be many changes in the code. I can spot some unfamiliar messages on the logs:

2024-06-02 10:52:15.771 DEBUG (MainThread) [custom_components.visonic.pyvisonic] [Standard Mode] Entering Standard Plus Mode as we got the pin codes from the EEPROM (You can still manually Enroll your Panel)

Is (You can still manually Enroll your Panel) a leftover, or shall I try to enrol manually?

This new version also seems to be picking up the siren more properly. I believe it shows up as S00 in Devices: K200,S00. For the record, there is no such device as K200. The keypad is KP-141.

There is a sizeable block of Partition Data, marked as 'Not sure what it is'. Is the nature of this data totally unknown? Can anything of importance be stored over here?

Although every effort has been made to redact sensitive data, 1234 continues to be my credit card's PIN. home-assistant_visonic_2024-06-02T21-25-06.841Z.log

Need 'PM360 13_153.tdf' file for PowerMaster Remote Programmer

PowerMaster Remote Programmer version 10.0.8 in my possession can work with PM-360 version 13.126.0 only. It refuses to connect to version 13.153.0. An attempt to clone / fake 'PM360 13_153.tdf' file has failed. PowerMaster Remote Programmer seems to have been de-published. This software is mentioned as the only means of resetting Master Installer Code which has been invalidated by ADT installers in my setup. Installer Code is working fine for configuration entries, marked as available only to Master Installer. Can Master Installer Code be reset programmatically?

Configuring '21:IP RCVR 1' hasn't resulted in A7 codes

Using AlarmInstall app to re-configure PowerManage server to tycomonitor has resulted in Visonic-Go app being able to deal with the whole setup remotely. Visonic-Go can read, see status and reports, arm/disarm, but it cannot modify any settings. BTW this integration has no knowledge of the reporting configuration 21:IP RCVR 1. Is it not part of EPROM data?

AlarmInstall is painful to use, I might have made some unwanted changes by accident. PowerMaster Remote Programmer is so much more intuitive piece of software. Can this integration emulate control panel with all the buttons and status codes, by chance?

While in AlarmInstall, I confirmed that almost undocumented feature 80:3rd PARTY H.A has been altered from default by my ADT installers. It reads as Enabled. Nevertheless, connecting to PowerManage server hasn't resulted in Smart Home Server (Blue) light activation. Another Blue light, Service Server, seems to be active.

Given 21:IP RCVR 1/2 can be configured to use SIA reporting format, isn't it much easier to receive status updates via this API?

davesmeghead commented 2 months ago

Hi, OK lots to go through here ... PowerMaster panels send msgtypeB0 and I can decode some of them but not all at the moment. If there's a message type that isn't known then I also display a message in the log file, there's no need to wire sniff as its all rs232 / UART protocols. I don't currently support partitions so it's just something I'm looking in to. You're right that I need to redact Pins better in the dev version. Can you enroll manually, if so then give it a try. To change master installer, go to installer menu and enter existing master code, and then change it. On installer menu you either enter installer or master code and that's what you then become. I'll have a look at the rest at the weekend when I get more time Dave

fuef commented 2 months ago

Thank you very much, @davesmeghead , for your patience and for accommodating my needs!

I'd suggest to add Visonic PowerMaster-360 to the list of supported panels and close this issue:

I am happy to do some extra testing if necessary.

Serial port is exposed via micro USB connector at the back. USB device ID is 0525:a4a7. Most of the generic micro USB cables will fail to detect serial port. There would be a very few, capable of operating serial port while connected to PowerMaster-360. These cables will be the ones capable of talking to ESP32 devices using esptool.

Receiving alerts via HA hasn't been part of the integration description. I have to confess it might have been my personal elevated expectation only.

PowerLink mode cannot be achieved with Visonic PowerMaster-360.

The panel has neither keypad, nor display built in. Unless a keypad with a display can be procured and installed, the other emulator alternatives are:

An attempt to enrol this panel as PowerLink manually didn't work.

The sequence INSTALLER MODE → 7. ENROLL PWRLNK → 01: INSTALL doesn't exist on PowerMaster-360. The nearest match is INSTALLER MODE → 07:DIAGNOSTICS.

The nearest meaningful alternative is INSTALLER MODE → 02:ZONES/DEVICES → ADD NEW DEVICES. At this point the panel is expecting wireless / wired thingy to be in adding mode. Integration cannot enter into the pairing mode because the serial port is occupied by AlarmInstall app. Exiting from AlarmInstall app makes serial port available, and it seemingly cuts off the pairing mode.

I don't have any experience of the PowerLink mode, so I cannot tell if PowerLink co-existence (#99) will bring any tangible benefits to the integration. If status updates is what we are after, it can be achieved via SIA format reporting option: https://www.home-assistant.io/integrations/sia/