Visonic Powermax and Powermaster Component

So far no crashes, though I’m randomly getting this error message:

[handle_msgtypeA7] A7 message contains too many messages to process : 255 data=ff dd 00 35 00 ff 10 0c 00 00 43

It’s good news that there’s no crashes.
That A7 message is one that I do not know how to decode, is there something specific that happens in your setup or sensors when the panel sends that message. It is only sent by a powermaster panel.
I log it as a warning only so people tell me about it really, it’s nothing bad.

I’m a Powermaster-10 user and I got really excited when I saw this component, this is exactly what I need!

I’ve read through the whole thread and have two questions:

  1. Can I use a standard USB to TTL Serial Cable similar to this one to interface with my Powermaster-10 and connect it to my Rasberry Pi running HA?

  2. Is there any image available showing the pinouts of the Powermaster-10 bus, so I know where to connect my cables? I think I saw one but can’t find it now :slight_smile:

Edit: Now I remembered where I’d seen some images of the pinout, it was here. Is the image below correct?

That should work. The key specification is the 3.3 V logic level. I use something similar for the Powermaster-10. Do not connect the red 5 V line to the panel.

Here’s what I posted a while ago:

https://community.home-assistant.io/t/visonic-powermax-and-powermaster-component/55949/351

You should observe the HA host console output when you plug the USB into it. It will tell you what port you’re using. That’s the one you should put in the visonic device entry in the configuration.yaml file.

1 Like

Awesome, thanks for the info Rob!

1 Like

Here’s some additional information from Adafruit:

https://www.adafruit.com/product/954

Look under Technical Details. There was a progression of interface devices used for their product. Depending upon the chipset, you might have some issues. Unfortunately, I have no experience with the earlier devices. That said, the problems may have been specific to Windows or other operating systems. Note the text “Other than the driver installation, the cables perform identically.”

1 Like

So I have noticed that the times I get an A7 is when my HA has rebooted (my Ubuntu was locking due to a mis-config) or I have shut it down for a while.
I then get a plink error on the panel and an A7 message in the logs.

I will try to recreate at some point with a clean log, but my theory is that the powermaster 30 shoves out the A7 when this happens (for me at least)

Cheers

I’ve uploaded version 0.3.0 to Github. There are no breaking changes from 0.2.X i.e. you do not need to change your configuration files.

Changes include:

  • The new Control Flow for PowerMaster 10 and 30 and achieves powerlink much quicker.
  • I’ve included the French translations from olijouve. Use ‘FR’ for the language.
  • When I returned from holiday I noticed that for a single message out of the whole 2 weeks it did not get the expected response from the panel, so I’ve incorporated a 10 second timeout before doing a panel communication restore sequence.
  • Tidied up the log entries

As usual, any issues then report them in this thread :slight_smile:

Wow, that update makes the startup of the alarm so much faster, download was only a few seconds before it went to standard mode, then it flicked to powerlink in sub 30 seconds. That is amazingly fast thank you.

Cheers

I have a Powermaster 30 and tried to use the plugin.
A connection is made with a usb serial converter with 3.3v levels.

I tried to connect with the Powermaster Remote programmer but it says that the version is not known and needs to download the version for this Powermaster firmware.
Downloading does not work (maybe a too old version of Powermaster remote programmer)
Communication is ok because it can detect that it is in installer mode or when using a wrong download pin it says it can’t connect due to authenticationfailure.

The plugin detects the USB port used. Also swapped from dev/ttyusb to the named variant but had no luck connecting to the Powermaster.

Is there any option to test the connection other than the Powermaster remote programmer?

Could it be that there is a setting in the Powermaster that needs to be changed?

If you look at the github page here you’ll see a test script, have you tried this? Let me know the results.

How do I run that command in hassos?
I get a message that python3 can’t be found.

Maybe because my Linux knowledge is too basic…

I’m not sure whether you can or not as I don’t know anything about hassos, but when you said this:

I assumed that you have a Windows capable PC that you can connect to the panel. Can you install python on your Windows PC and then the needed libraries:

pip3 install pyserial
pip3 install python-datetime
pip3 install pyserial_asyncio

And then run the test I mentioned in my last post.
This will tell us all here if your hardware is set up OK and that it is possible to communicate with your panel. If this works then it is an issue with hassos and it’s setup.
On a Windows PC it should be like this

python3 test.py -usb //./COM1

Although you will need to work out which COM port it is

I tried the python script but see the same messages as on HA when it tries to connect.

I have installed a serial monitor and captured the data with the Powermaster tool till the point it says the firmware version is wrong for the tool with pin 8888 used:

[24/07/2019 10:54:58] - Open port COM9 (C:\Users\user\AppData\Local\Programs\Visonic Ltd\PowerMaster Remote Programmer\PMax2010.exe) 
 
[24/07/2019 10:54:58] Written data (COM9) 
    0d 24 00 00 88 88 00 00 00 00 00 00 ca 0a         .$..ˆˆ......Ê.   
[24/07/2019 10:54:58] Read data (COM9) 
    0d 02 fd 0a 0d 3c fd 0a 00 00 91 08 00 00 01 00   ..ý..<ý...‘..... 
    21 0a                                             !.               
[24/07/2019 10:54:58] Written data (COM9) 
    0d 02 fd 0a 0d 0f f0 0a                           ..ý...ð.         
[24/07/2019 10:54:58] Read data (COM9) 
    0d b0 03 39 06 ff 08 ff 01 24 05 43 98 0a 0d 02   .°.9.ÿ.ÿ.$.C˜... 
    fd 0a                                             ý.               
[24/07/2019 10:54:58] Written data (COM9) 
    0d 02 43 ba 0a                                    ..Cº.            
[24/07/2019 10:54:58] - Close port COM9

And one with the Python test script (replaced the pin in the Powermaster 30 with 5650)

[24/07/2019 11:02:57] - Open port COM9 (C:\Users\user\AppData\Local\Programs\Python\Python37-32\python.exe) 
 
[24/07/2019 11:02:57] Written data (COM9) 
    0d 0f f0 0a                                       ..ð.             
[24/07/2019 11:02:58] Written data (COM9) 
    0d 0b f4 0a                                       ..ô.             
[24/07/2019 11:03:00] Written data (COM9) 
    0d ab 0a 00 01 00 00 00 00 00 00 00 43 06 0a      .«..........C..  
[24/07/2019 11:03:08] Written data (COM9) 
    0d 24 00 00 56 50 00 00 00 00 00 00 35 0a         .$..VP......5.   
[24/07/2019 11:04:55] Read data (COM9) 
    a5 00 20 ff                                       ¥. ÿ             
[24/07/2019 11:05:10] Read data (COM9) 
    a5 00 20 ff                                       ¥. ÿ             
[24/07/2019 11:05:25] Read data (COM9) 
    a5 00 20 ff                                       ¥. ÿ             
[24/07/2019 11:05:40] Read data (COM9) 
    a5 00 20 ff                                       ¥. ÿ             
[24/07/2019 11:05:55] Read data (COM9) 
    a5 00 20 ff                                       ¥. ÿ             
[24/07/2019 11:05:57] Written data (COM9) 
    0d 0f f0 0a                                       ..ð.             
[24/07/2019 11:05:58] Written data (COM9) 
    0d 0b f4 0a                                       ..ô.             
[24/07/2019 11:06:00] Written data (COM9) 
    0d ab 0a 00 01 00 00 00 00 00 00 00 43 06 0a      .«..........C..  
[24/07/2019 11:06:08] Written data (COM9) 
    0d a2 00 00 00 00 00 00 00 00 00 00 43 1a 0a      .¢..........C..  
[24/07/2019 11:06:18] Written data (COM9) 
    0d a2 00 00 00 00 00 00 00 00 00 00 43 1a 0a      .¢..........C..  
[24/07/2019 11:06:28] Written data (COM9) 
    0d a2 00 00 00 00 00 00 00 00 00 00 43 1a 0a      .¢..........C..  
[24/07/2019 11:06:38] Written data (COM9) 
    0d a2 00 00 00 00 00 00 00 00 00 00 43 1a 0a      .¢..........C..  
[24/07/2019 11:06:48] Written data (COM9) 
    0d a2 00 00 00 00 00 00 00 00 00 00 43 1a 0a      .¢..........C..  
[24/07/2019 11:06:58] Written data (COM9) 
    0d a2 00 00 00 00 00 00 00 00 00 00 43 1a 0a      .¢..........C..  
[24/07/2019 11:07:08] Written data (COM9) 
    0d a2 00 00 00 00 00 00 00 00 00 00 43 1a 0a      .¢..........C..  
[24/07/2019 11:07:18] Written data (COM9) 
    0d a2 00 00 00 00 00 00 00 00 00 00 43 1a 0a      .¢..........C..

The powermaster tool connects and replies.
The Python script tries to connect but no progress.

What could be the issue?
The only difference is the first transmitted line where the Powermaster does respond to the programmer and the python script does not.

I’m not really sure what is happening, it looks like some of the data is being corrupted as I can see some valid command and status messages but some are not valid.

From the powermaster data, in this message

0d 3c fd 0a 00 00 91 08 00 00 01 00 21 0a

Is does confirm that the panel type is 8 which means Powermax 30 but also that the model type of 0x91 or 145 I don’t recognise. Maybe that is why the powermaster tool doesn’t recognise your panel. Alternativelly it could be a new model type that I don’t know about, is it a recent visonic panel?

From my test python data, this sequence of bytes is invalid

a5 00 20 ff

and it happens every 15 seconds or so and then the panel gives up. If it is a new model type then they have changed the protocol significantly as this does not follow any message structure I know of.

Because of these inconsistencies I can only see 2 possibilities

  1. That the model type is really new with a different protocol or
  2. That the data link you have is corrupting the data somehow, not always but just enough to give these consistencies.

Assuming that it isn’t the 1st I’ll focus on the 2nd possible cause. Can you be more specific about the hardware you have, which usb serial convertor you are using and which pins in the panel you have it connected to. Hopefully, someone else with a powermaster30 can help with the hardware set up. It may be voltage level conversion issue.

I have checked the version of the panel and it shows 8 145. This panel is now around one year installed.

The TTL converter used is:
https://microkloon.nl/winkel/diy-dhz/gereedschap/usb-to-rs232-ttl-auto-converter-module-completely-replace-pl2303-with-ch340
(the link describes a newer version but does the same)
It is configured to use 3.3V levels and connected to the pins in this description:

I did a test with the RX and TX looped on the USB serial and pasted large amounts of data in a terminal session. All data sent was exact the same received on 9600 8N1 .
The serial converter looks fine to me.

I reconnected the Powerlink3 interface to the port and started a session to the ip interface.
There is a webserver inside which has a API connection available on port 8181.

With Postman I connected to: http://192.168.x.x8181/remote/json-rpc
Body:

{"params": ["192.168.x.x", 8888, "user"],"jsonrpc": "2.0","method":"PmaxService/registerClient", "id":1}

The ip is the session pointer, then the pin and the type of accesslevel.

You can receive a set of options with: http://192.168.x.x:8181/getApiVersion
This responds with:

[
    {
        "method": "PmaxService/createAlarm",
        "params": [
            "somestring",
            "somestring",
            1
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/createSystemLog",
        "params": [
            "somestring",
            "somestring"
        ],
        "returns": []
    },
    {
        "method": "PmaxService/deleteDevice",
        "params": [
            "somestring",
            1,
            1
        ],
        "returns": []
    },
    {
        "method": "PmaxService/enableSsh",
        "params": [
            "somestring",
            true
        ],
        "returns": []
    },
    {
        "method": "PmaxService/enrollDevice",
        "params": [
            "somestring",
            "somestring",
            1
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/getApiVersion",
        "params": null,
        "returns": "somestring"
    },
    {
        "method": "PmaxService/getBatteryLevel",
        "params": null,
        "returns": 1
    },
    {
        "method": "PmaxService/getConnectionType",
        "params": null,
        "returns": "somestring"
    },
    {
        "method": "PmaxService/getDate",
        "params": null,
        "returns": "somestring"
    },
    {
        "method": "PmaxService/getDateTime",
        "params": null,
        "returns": "somestring"
    },
    {
        "method": "PmaxService/getDeviceConfig",
        "params": [
            1,
            1
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/getDeviceStatuses",
        "params": [
            1,
            1
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/getDevicesConfig",
        "params": null,
        "returns": []
    },
    {
        "method": "PmaxService/getEepromItem",
        "params": [
            1,
            1,
            1
        ],
        "returns": []
    },
    {
        "method": "PmaxService/getEepromVersion",
        "params": null,
        "returns": []
    },
    {
        "method": "PmaxService/getGsmLevel",
        "params": null,
        "returns": 1
    },
    {
        "method": "PmaxService/getInstallerCode",
        "params": [
            "somestring",
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/getLocation",
        "params": [
            1
        ],
        "returns": []
    },
    {
        "method": "PmaxService/getLocationInfo",
        "params": null,
        "returns": []
    },
    {
        "method": "PmaxService/getLocationsList",
        "params": null,
        "returns": []
    },
    {
        "method": "PmaxService/getLogHistory",
        "params": [
            "somestring",
            "somestring"
        ],
        "returns": []
    },
    {
        "method": "PmaxService/getMaxDevice",
        "params": [
            1
        ],
        "returns": []
    },
    {
        "method": "PmaxService/getMaxDevices",
        "params": null,
        "returns": []
    },
    {
        "method": "PmaxService/getPanelConfig",
        "params": null,
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/getPanelState",
        "params": [
            1
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/getPanelStatuses",
        "params": null,
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/getPowerGDeviceProperty",
        "params": [
            1,
            1,
            1,
            1
        ],
        "returns": []
    },
    {
        "method": "PmaxService/getServiceLed",
        "params": null,
        "returns": true
    },
    {
        "method": "PmaxService/getTagsInfo",
        "params": null,
        "returns": []
    },
    {
        "method": "PmaxService/getTime",
        "params": null,
        "returns": "somestring"
    },
    {
        "method": "PmaxService/getUserCode",
        "params": [
            "somestring",
            1
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/getUserCodes",
        "params": [
            "somestring"
        ],
        "returns": []
    },
    {
        "method": "PmaxService/getWlanClientConfig",
        "params": [
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/getWlanConfig",
        "params": [
            "somestring"
        ],
        "returns": []
    },
    {
        "method": "PmaxService/getWlanLevel",
        "params": null,
        "returns": 1
    },
    {
        "method": "PmaxService/getWlanScanResults",
        "params": null,
        "returns": []
    },
    {
        "method": "PmaxService/getWlanapConfig",
        "params": [
            "somestring"
        ],
        "returns": []
    },
    {
        "method": "PmaxService/getZoneDeviceTemperature",
        "params": [
            1
        ],
        "returns": []
    },
    {
        "method": "PmaxService/isPanelConnected",
        "params": null,
        "returns": true
    },
    {
        "method": "PmaxService/isWPSEnabled",
        "params": null,
        "returns": true
    },
    {
        "method": "PmaxService/pmaxDownload",
        "params": [
            1,
            "somestring",
            1
        ],
        "returns": []
    },
    {
        "method": "PmaxService/pmaxLogin",
        "params": [
            "somestring"
        ],
        "returns": []
    },
    {
        "method": "PmaxService/pmaxLogout",
        "params": null,
        "returns": []
    },
    {
        "method": "PmaxService/pmaxUpload",
        "params": [
            1,
            1,
            1
        ],
        "returns": []
    },
    {
        "method": "PmaxService/rebootGateway",
        "params": [
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/rebootHanController",
        "params": [
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/recallBypass",
        "params": [
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/registerClient",
        "params": [
            "somestring",
            1,
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/resetConnection",
        "params": [
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/setDate",
        "params": [
            "somestring",
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/setDateTime",
        "params": [
            "somestring",
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/setDebugMode",
        "params": [
            "somestring",
            true
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/setDeviceLed",
        "params": [
            "somestring",
            1,
            1,
            1
        ],
        "returns": []
    },
    {
        "method": "PmaxService/setDevicesFastNotification",
        "params": [
            "somestring"
        ],
        "returns": []
    },
    {
        "method": "PmaxService/setEepromItem",
        "params": [
            "somestring",
            1,
            1,
            "somestring",
            1
        ],
        "returns": []
    },
    {
        "method": "PmaxService/setEnrollState",
        "params": [
            "somestring",
            "somestring",
            true
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/setInstallerCode",
        "params": [
            "somestring",
            "somestring",
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/setLocation",
        "params": [
            "somestring",
            1,
            "somestring"
        ],
        "returns": []
    },
    {
        "method": "PmaxService/setLogMode",
        "params": [
            "somestring",
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/setPanelConfig",
        "params": [
            "somestring",
            {
                "objectkey": "objectvalue"
            }
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/setPanelState",
        "params": [
            "somestring",
            "somestring",
            1,
            true,
            true
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/setPgmState",
        "params": [
            "somestring",
            1,
            true,
            1
        ],
        "returns": []
    },
    {
        "method": "PmaxService/setPowerGDeviceProperty",
        "params": [
            "somestring",
            1,
            1,
            1,
            "somestring",
            1
        ],
        "returns": []
    },
    {
        "method": "PmaxService/setServiceLed",
        "params": [
            "somestring",
            true
        ],
        "returns": []
    },
    {
        "method": "PmaxService/setSirenState",
        "params": [
            "somestring",
            1,
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/setTime",
        "params": [
            "somestring",
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/setUserCode",
        "params": [
            "somestring",
            1,
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/setWPSMode",
        "params": [
            "somestring",
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/setWlanClientConfig",
        "params": [
            "somestring",
            "somestring",
            "somestring",
            true
        ],
        "returns": []
    },
    {
        "method": "PmaxService/setWlanConfig",
        "params": [
            "somestring",
            "somestring",
            "somestring",
            "somestring",
            "somestring",
            "somestring",
            "somestring",
            "somestring",
            "somestring",
            true,
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/setWlanapConfig",
        "params": [
            "somestring",
            "somestring",
            "somestring",
            "somestring",
            true,
            "somestring",
            true
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/setWlanapConfigExt",
        "params": [
            "somestring",
            "somestring",
            "somestring",
            "somestring",
            true,
            true,
            1
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/setZoneDeviceBypass",
        "params": [
            "somestring",
            1,
            true
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/setZwaveModeRsp",
        "params": [
            "somestring",
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/skipArmExitDelay",
        "params": [
            "somestring",
            1
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/startPeriodicTests",
        "params": [
            "somestring",
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/startViewOnDemand",
        "params": [
            "somestring",
            1,
            1
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/startedFirmwareUpgrade",
        "params": [
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/stopPeriodicTests",
        "params": [
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    },
    {
        "method": "PmaxService/updateRAM",
        "params": [
            "somestring"
        ],
        "returns": {
            "objectkey": "objectvalue"
        }
    }
]

Also with : {“params”: null,“jsonrpc”:“2.0”,“method”:“PmaxService/getEepromVersion”, “id”:1}
It responds with:

{
    "id": 1,
    "jsonrpc": "2.0",
    "result": {
        "eeprom_model": 8,
        "eeprom_sub_model": 145
    }
}

I have a question that I could not find:
Does your code or panel active respond to changes in sensors without delays?

The next is: Who has a newer Powermaster 30 in use and wants to check their softwareversion?

I started reverse engineering the API of the Powerlink3 interface and found out that I can read all zones, sensors, codes, keyfobs, rfid’s etc etc.
But it is not a subscription and thus a polling system as far I can see now.

OK, but I’m not sure why it seems to be losing data when connected to the panel, I assume that you don’t have any other devices connected to the panel at the same time, like the powerlink3?

Yes. I can open and close a door and it appears in HA pretty instantaneously

The Powerlink3 was disconnected and not visible in the menu anymore.
In the future I would like to use the Dual RS232 port to connect to HA if that works fine. I have read somewhere that connecting 2 serial devices (including Powerlink3) was no issue on a Powermaster model.

I ordered 2 different serial converters to figure out if the converter is the issue. I also tried a Visonic ESP8266 MQTT bridge which has the same behavior.
If this does not work at all, I will make a serial sniffer and see what the Powerlink3 is sending.

Is there another option to send specific codes like a terminal program and if so which codes to try for responses?

Good to know that it sends instantly the status.
I will leave the Powerlink3 reverse engineering on a lower priority for now.

Anybody with a Powermaster 10 or 30 here with a recent version of firmware?

Great job Thank

Not sure if the below indicates new / old firmware?

“Panel Eprom”: “J-701248 K17.131”,
“Panel Software”: “JS702505 K17.131”,