davesmeghead / visonic

Visonic Custom Component for integration with Home Assistant
Apache License 2.0
91 stars 20 forks source link

0.9.6.21 Problems and Questions #145

Closed haforme closed 1 month ago

haforme commented 2 months ago

Hello Dave, like most everyone we love this integration. Have two instances of it running on multiple HAs. Have two problems and a question. It took me a little to migrate from 0.8.5.2 to 0.9.6.21. Most of it were variable name changes on my side. Thanks for putting back "lastevent" and adding "lasteventtime"

My environment is; Core 2024.8.2 Supervisor 2024.08.0 Operating System12.4 Frontend 20240809.0

Question is about the "lastevent" field. What are the text strings that you have defined such as "System/Ac Fail" and "System/Ac Restore". I use these to set binary sensors for monitoring and notification purposes.

First Problem is like others. I upgraded via HACS and ended up with a second "alarm_control_panel_visonic_alarm"

Second Problem has to do with the "Panel Reconnect" Service. If I issue the command through the "Developer Tools" all of the entities associated with the panel go unavailable. Here's the log information;

ACTION PERFORMED action: visonic.alarm_panel_reconnect data: entity_id: alarm_control_panel.visonic_alarm

HA NOTIFICATIONS Service Panel reconnect failed - Panel not found

DEBUG LOG 2024-08-21 16:35:18.655 INFO (MainThread) [custom_components.visonic] Service Panel reconnect called 2024-08-21 16:35:18.656 DEBUG (MainThread) [custom_components.visonic.client] P0 User has requested visonic panel reconnection 2024-08-21 16:35:18.657 DEBUG (MainThread) [custom_components.visonic.pyhelper] [Controller] **** 2024-08-21 16:35:18.657 DEBUG (MainThread) [custom_components.visonic.pyhelper] [Controller] **** 2024-08-21 16:35:18.657 DEBUG (MainThread) [custom_components.visonic.pyhelper] [Controller] ** Operations Suspended **** 2024-08-21 16:35:18.657 DEBUG (MainThread) [custom_components.visonic.pyhelper] [Controller] **** 2024-08-21 16:35:18.658 DEBUG (MainThread) [custom_components.visonic.pyhelper] [Controller] **** 2024-08-21 16:35:19.159 DEBUG (MainThread) [custom_components.visonic.client] P0 Unloading platforms self.loaded_platforms={<Platform.SWITCH: 'switch'>, <Platform.BINARY_SENSOR: 'binary_sensor'>, <Platform.SELECT: 'select'>, <Platform.ALARM_CONTROL_PANEL: 'alarm_control_panel'>} Entry id=01J5S5B22JCHB9X10BYNF31Q9A 2024-08-21 16:35:19.160 DEBUG (MainThread) [custom_components.visonic.switch] switch async_will_remove_from_hass 2024-08-21 16:35:19.161 DEBUG (MainThread) [custom_components.visonic.binary_sensor] binary sensor async_will_remove_from_hass 2024-08-21 16:35:19.162 DEBUG (MainThread) [custom_components.visonic.binary_sensor] binary sensor async_will_remove_from_hass 2024-08-21 16:35:19.162 DEBUG (MainThread) [custom_components.visonic.binary_sensor] binary sensor async_will_remove_from_hass 2024-08-21 16:35:19.163 DEBUG (MainThread) [custom_components.visonic.binary_sensor] binary sensor async_will_remove_from_hass 2024-08-21 16:35:19.164 DEBUG (MainThread) [custom_components.visonic.binary_sensor] binary sensor async_will_remove_from_hass 2024-08-21 16:35:19.164 DEBUG (MainThread) [custom_components.visonic.binary_sensor] binary sensor async_will_remove_from_hass 2024-08-21 16:35:19.168 DEBUG (MainThread) [custom_components.visonic.binary_sensor] binary sensor async_will_remove_from_hass 2024-08-21 16:35:19.169 DEBUG (MainThread) [custom_components.visonic.binary_sensor] binary sensor async_will_remove_from_hass 2024-08-21 16:35:19.170 DEBUG (MainThread) [custom_components.visonic.select] select async_will_remove_from_hass 2024-08-21 16:35:19.170 DEBUG (MainThread) [custom_components.visonic.select] select async_will_remove_from_hass 2024-08-21 16:35:19.171 DEBUG (MainThread) [custom_components.visonic.select] select async_will_remove_from_hass 2024-08-21 16:35:19.171 DEBUG (MainThread) [custom_components.visonic.select] select async_will_remove_from_hass 2024-08-21 16:35:19.171 DEBUG (MainThread) [custom_components.visonic.select] select async_will_remove_from_hass 2024-08-21 16:35:19.172 DEBUG (MainThread) [custom_components.visonic.select] select async_will_remove_from_hass 2024-08-21 16:35:19.172 DEBUG (MainThread) [custom_components.visonic.select] select async_will_remove_from_hass 2024-08-21 16:35:19.173 DEBUG (MainThread) [custom_components.visonic.select] select async_will_remove_from_hass 2024-08-21 16:35:19.173 DEBUG (MainThread) [custom_components.visonic.alarm_control_panel] Removing alarm control panel Visonic Alarm panel 0 2024-08-21 16:35:19.177 DEBUG (MainThread) [custom_components.visonic.client] P0 Unloading complete unload_ok=True 2024-08-21 16:35:19.178 DEBUG (MainThread) [custom_components.visonic.client] P0 ........... Closing down Current Task 2024-08-21 16:35:21.180 DEBUG (MainThread) [custom_components.visonic.client] P0 ........... Current Task Done 2024-08-21 16:35:21.180 DEBUG (MainThread) [custom_components.visonic.client] P0 reset client panel variables 2024-08-21 16:35:24.182 DEBUG (MainThread) [custom_components.visonic.client] P0 ........... connection attempt 1 of 1 2024-08-21 16:35:24.183 DEBUG (MainThread) [custom_components.visonic.client] P0 connect_to_alarm self.config = {'panel_number': 0, 'type': 'ethernet', 'host': '10.104.0.51', 'port': '4660', 'path': '', 'baud': 9600, 'language': 'EN', 'exclude_x10': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], 'emulation_mode': 'Powerlink Emulation', 'exclude_sensor': [], 'download_code': '2777', 'show_eeprom_attributes': True, 'motion_off_delay': 30.0, 'magnet_closed_delay': 5.0, 'emergency_off_delay': 120.0, 'siren_sounding': ['intruder', 'fire'], 'panel_state_notifications': ['invalid_pin', 'command_not_sent', 'connection_problem', 'eventlog_problem', 'panel_operation', 'panel_reset', 'bypass_problem'], 'sensor_event_list': [], 'retry_connection_count': 1.0, 'retry_connection_delay': 30.0, 'arm_without_usercode': True, 'force_numeric_keypad': False, 'arm_home_enabled': True, 'arm_night_enabled': True, 'arm_away_instant': False, 'arm_home_instant': False, 'allow_remote_arm': True, 'allow_remote_disarm': True, 'allow_sensor_bypass': True, 'panellog_logentry_event': False, 'panellog_complete_event': True, '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-08-21 16:35:24.183 DEBUG (MainThread) [custom_components.visonic.client] P0 Connection Device Type is ethernet 2024-08-21 16:35:24.183 DEBUG (MainThread) [custom_components.visonic.client] P0 Emulation Mode Powerlink Emulation so setting ForceStandard to False DisableAllCommands to False 2024-08-21 16:35:24.188 DEBUG (MainThread) [custom_components.visonic.client] P0 Setting TCP socket Options Exception [Errno 111] Connection refused 2024-08-21 16:35:24.189 DEBUG (MainThread) [custom_components.visonic.client] P0 reset client panel variables 2024-08-21 16:35:24.190 DEBUG (MainThread) [custom_components.visonic.client] P0 Client: Sending HA Event visonic_alarm_panel_state {'panel': 0, 'panel_id': 'alarm_control_panel.visonic_alarm', 'action': 'connection', 'state': 'failedattempt', 'attempt': 1} 2024-08-21 16:35:24.191 DEBUG (MainThread) [custom_components.visonic.client] P0 notification_config ['invalid_pin', 'command_not_sent', 'connection_problem', 'eventlog_problem', 'panel_operation', 'panel_reset', 'bypass_problem'] 2024-08-21 16:35:24.191 INFO (MainThread) [custom_components.visonic.client] P0 HA Notification: Failed to connect into Visonic Alarm Panel 0. Check Your Network and the Configuration Settings. 2024-08-21 16:35:24.192 DEBUG (MainThread) [custom_components.visonic.client] P0 Creating Alarm Panel Entity 2024-08-21 16:35:24.193 DEBUG (MainThread) [custom_components.visonic.alarm_control_panel] Initialising alarm control panel Visonic Alarm panel 0 2024-08-21 16:35:24.193 DEBUG (MainThread) [custom_components.visonic.alarm_control_panel] alarm control panel adding entity 2024-08-21 16:35:24.194 DEBUG (MainThread) [custom_components.visonic.alarm_control_panel] Initialising alarm control panel Visonic Alarm panel 0 2024-08-21 16:35:24.194 DEBUG (MainThread) [custom_components.visonic.alarm_control_panel] alarm control panel adding entity 2024-08-21 16:35:24.203 ERROR (MainThread) [homeassistant.components.alarm_control_panel] Platform visonic does not generate unique IDs. ID visonic_alarm_partition_1 already exists - ignoring alarm_control_panel.visonic_alarm

davesmeghead commented 2 months ago

Question is about the "lastevent" field. What are the text strings that you have defined such as "System/Ac Fail" and "System/Ac Restore".

Apart from Startup/Startup that I set it to on startup then...

The string before the / is (depending on the language you pick and whether you have a PowerMax or a PowerMaster):

pmLogPowerMaxUser_t = {
  "EN" : [ "System", "Zone 01", "Zone 02", "Zone 03", "Zone 04", "Zone 05", "Zone 06", "Zone 07", "Zone 08",
           "Zone 09", "Zone 10", "Zone 11", "Zone 12", "Zone 13", "Zone 14", "Zone 15", "Zone 16", "Zone 17", "Zone 18",
           "Zone 19", "Zone 20", "Zone 21", "Zone 22", "Zone 23", "Zone 24", "Zone 25", "Zone 26", "Zone 27", "Zone 28",
           "Zone 29", "Zone 30", "Fob  01", "Fob  02", "Fob  03", "Fob  04", "Fob  05", "Fob  06", "Fob  07", "Fob  08",
           "User 01", "User 02", "User 03", "User 04", "User 05", "User 06", "User 07", "User 08", "Pad  01", "Pad  02",
           "Pad  03", "Pad  04", "Pad  05", "Pad  06", "Pad  07", "Pad  08", "Sir  01", "Sir  02", "2Pad 01", "2Pad 02",
           "2Pad 03", "2Pad 04", "X10  01", "X10  02", "X10  03", "X10  04", "X10  05", "X10  06", "X10  07", "X10  08",
           "X10  09", "X10  10", "X10  11", "X10  12", "X10  13", "X10  14", "X10  15", "PGM    ", "GSM    ", "P-LINK ",
           "PTag 01", "PTag 02", "PTag 03", "PTag 04", "PTag 05", "PTag 06", "PTag 07", "PTag 08", "Unknown", "Unknown",
           "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown",
           "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown",
           "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown",
           "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown"],
  "NL" : [ "Systeem", "Zone 01", "Zone 02", "Zone 03", "Zone 04", "Zone 05", "Zone 06", "Zone 07", "Zone 08",
           "Zone 09", "Zone 10", "Zone 11", "Zone 12", "Zone 13", "Zone 14", "Zone 15", "Zone 16", "Zone 17", "Zone 18",
           "Zone 19", "Zone 20", "Zone 21", "Zone 22", "Zone 23", "Zone 24", "Zone 25", "Zone 26", "Zone 27", "Zone 28",
           "Zone 29", "Zone 30", "Fob  01", "Fob  02", "Fob  03", "Fob  04", "Fob  05", "Fob  06", "Fob  07", "Fob  08",
           "Gebruiker 01", "Gebruiker 02", "Gebruiker 03", "Gebruiker 04", "Gebruiker 05", "Gebruiker 06", "Gebruiker 07",
           "Gebruiker 08", "Pad  01", "Pad  02",
           "Pad  03", "Pad  04", "Pad  05", "Pad  06", "Pad  07", "Pad  08", "Sir  01", "Sir  02", "2Pad 01", "2Pad 02",
           "2Pad 03", "2Pad 04", "X10  01", "X10  02", "X10  03", "X10  04", "X10  05", "X10  06", "X10  07", "X10  08",
           "X10  09", "X10  10", "X10  11", "X10  12", "X10  13", "X10  14", "X10  15", "PGM    ", "GSM    ", "P-LINK ",
           "PTag 01", "PTag 02", "PTag 03", "PTag 04", "PTag 05", "PTag 06", "PTag 07", "PTag 08", "Unknown", "Unknown",
           "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown",
           "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown",
           "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown",
           "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown"],
  "FR" : [ "Système", "Zone 01", "Zone 02", "Zone 03", "Zone 04", "Zone 05", "Zone 06", "Zone 07", "Zone 08",
           "Zone 09", "Zone 10", "Zone 11", "Zone 12", "Zone 13", "Zone 14", "Zone 15", "Zone 16", "Zone 17", "Zone 18",
           "Zone 19", "Zone 20", "Zone 21", "Zone 22", "Zone 23", "Zone 24", "Zone 25", "Zone 26", "Zone 27", "Zone 28",
           "Zone 29", "Zone 30", "Memclé  01", "Memclé  02", "Memclé  03", "Memclé  04", "Memclé  05", "Memclé  06", "Memclé  07", "Memclé  08",
           "User 01", "User 02", "User 03", "User 04", "User 05", "User 06", "User 07", "User 08", "Pad  01", "Pad  02",
           "Pad  03", "Pad  04", "Pad  05", "Pad  06", "Pad  07", "Pad  08", "Sir  01", "Sir  02", "2Pad 01", "2Pad 02",
           "2Pad 03", "2Pad 04", "X10  01", "X10  02", "X10  03", "X10  04", "X10  05", "X10  06", "X10  07", "X10  08",
           "X10  09", "X10  10", "X10  11", "X10  12", "X10  13", "X10  14", "X10  15", "PGM    ", "GSM    ", "P-LINK ",
           "PTag 01", "PTag 02", "PTag 03", "PTag 04", "PTag 05", "PTag 06", "PTag 07", "PTag 08", "Unknown", "Unknown",
           "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown",
           "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown",
           "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown",
           "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown"]
}

pmLogPowerMasterUser_t = {
  "EN" : [ "System", "Zone 01", "Zone 02", "Zone 03", "Zone 04", "Zone 05", "Zone 06", "Zone 07", "Zone 08",
           "Zone 09", "Zone 10", "Zone 11", "Zone 12", "Zone 13", "Zone 14", "Zone 15", "Zone 16", "Zone 17", "Zone 18",
           "Zone 19", "Zone 20", "Zone 21", "Zone 22", "Zone 23", "Zone 24", "Zone 25", "Zone 26", "Zone 27", "Zone 28",
           "Zone 29", "Zone 30", "Zone 31", "Zone 32", "Zone 33", "Zone 34", "Zone 35", "Zone 36", "Zone 37", "Zone 38",
           "Zone 39", "Zone 40", "Zone 41", "Zone 42", "Zone 43", "Zone 44", "Zone 45", "Zone 46", "Zone 47", "Zone 48",
           "Zone 49", "Zone 50", "Zone 51", "Zone 52", "Zone 53", "Zone 54", "Zone 55", "Zone 56", "Zone 57", "Zone 58",
           "Zone 59", "Zone 60", "Zone 61", "Zone 62", "Zone 63", "Zone 64",
           "Fob  01", "Fob  02", "Fob  03", "Fob  04", "Fob  05", "Fob  06", "Fob  07", "Fob  08", "Fob  09", "Fob  10",
           "Fob  11", "Fob  12", "Fob  13", "Fob  14", "Fob  15", "Fob  16", "Fob  17", "Fob  18", "Fob  19", "Fob  20",
           "Fob  21", "Fob  22", "Fob  23", "Fob  24", "Fob  25", "Fob  26", "Fob  27", "Fob  28", "Fob  29", "Fob  30",
           "Fob  31", "Fob  32",
           "User 01", "User 02", "User 03", "User 04", "User 05", "User 06", "User 07", "User 08", "User 09", "User 10",
           "User 11", "User 12", "User 13", "User 14", "User 15", "User 16", "User 17", "User 18", "User 19", "User 20",
           "User 21", "User 22", "User 23", "User 24", "User 25", "User 26", "User 27", "User 28", "User 29", "User 30",
           "User 31", "User 32", "User 33", "User 34", "User 35", "User 36", "User 37", "User 38", "User 39", "User 40",
           "User 41", "User 42", "User 43", "User 44", "User 45", "User 46", "User 47", "User 48",
           "Pad  01", "Pad  02", "Pad  03", "Pad  04", "Pad  05", "Pad  06", "Pad  07", "Pad  08", "Pad  09", "Pad  10",
           "Pad  11", "Pad  12", "Pad  13", "Pad  14", "Pad  15", "Pad  16", "Pad  17", "Pad  18", "Pad  19", "Pad  20",
           "Pad  21", "Pad  22", "Pad  23", "Pad  24", "Pad  25", "Pad  26", "Pad  27", "Pad  28", "Pad  29", "Pad  30",
           "Pad  31", "Pad  32",
           "Sir  01", "Sir  02", "Sir  03", "Sir  04", "Sir  05", "Sir  06", "Sir  07", "Sir  08",
           "2Pad 01", "2Pad 02", "2Pad 03", "2Pad 04",
           "X10  01", "X10  02", "X10  03", "X10  04", "X10  05", "X10  06", "X10  07", "X10  08",
           "X10  09", "X10  10", "X10  11", "X10  12", "X10  13", "X10  14", "X10  15", "PGM    ", "P-LINK ",
           "PTag 01", "PTag 02", "PTag 03", "PTag 04", "PTag 05", "PTag 06", "PTag 07", "PTag 08", "PTag 09", "PTag 10",
           "PTag 11", "PTag 12", "PTag 13", "PTag 14", "PTag 15", "PTag 16", "PTag 17", "PTag 18", "PTag 19", "PTag 20",
           "PTag 21", "PTag 22", "PTag 23", "PTag 24", "PTag 25", "PTag 26", "PTag 27", "PTag 28", "PTag 29", "PTag 30",
           "PTag 31", "PTag 32",
           "Rptr 01", "Rptr 02", "Rptr 03", "Rptr 04", "Rptr 05", "Rptr 06", "Rptr 07", "Rptr 08",
           "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown"],
  "NL" : [ "Systeem", "Zone 01", "Zone 02", "Zone 03", "Zone 04", "Zone 05", "Zone 06", "Zone 07", "Zone 08",
           "Zone 09", "Zone 10", "Zone 11", "Zone 12", "Zone 13", "Zone 14", "Zone 15", "Zone 16", "Zone 17", "Zone 18",
           "Zone 19", "Zone 20", "Zone 21", "Zone 22", "Zone 23", "Zone 24", "Zone 25", "Zone 26", "Zone 27", "Zone 28",
           "Zone 29", "Zone 30", "Zone 31", "Zone 32", "Zone 33", "Zone 34", "Zone 35", "Zone 36", "Zone 37", "Zone 38",
           "Zone 39", "Zone 40", "Zone 41", "Zone 42", "Zone 43", "Zone 44", "Zone 45", "Zone 46", "Zone 47", "Zone 48",
           "Zone 49", "Zone 50", "Zone 51", "Zone 52", "Zone 53", "Zone 54", "Zone 55", "Zone 56", "Zone 57", "Zone 58",
           "Zone 59", "Zone 60", "Zone 61", "Zone 62", "Zone 63", "Zone 64",
           "Fob  01", "Fob  02", "Fob  03", "Fob  04", "Fob  05", "Fob  06", "Fob  07", "Fob  08", "Fob  09", "Fob  10",
           "Fob  11", "Fob  12", "Fob  13", "Fob  14", "Fob  15", "Fob  16", "Fob  17", "Fob  18", "Fob  19", "Fob  20",
           "Fob  21", "Fob  22", "Fob  23", "Fob  24", "Fob  25", "Fob  26", "Fob  27", "Fob  28", "Fob  29", "Fob  30",
           "Fob  31", "Fob  32",
           "Gebruiker 01", "Gebruiker 02", "Gebruiker 03", "Gebruiker 04", "Gebruiker 05", "Gebruiker 06", "Gebruiker 07", "Gebruiker 08", "Gebruiker 09", "Gebruiker 10",
           "Gebruiker 11", "Gebruiker 12", "Gebruiker 13", "Gebruiker 14", "Gebruiker 15", "Gebruiker 16", "Gebruiker 17", "Gebruiker 18", "Gebruiker 19", "Gebruiker 20",
           "Gebruiker 21", "Gebruiker 22", "Gebruiker 23", "Gebruiker 24", "Gebruiker 25", "Gebruiker 26", "Gebruiker 27", "Gebruiker 28", "Gebruiker 29", "Gebruiker 30",
           "Gebruiker 31", "Gebruiker 32", "Gebruiker 33", "Gebruiker 34", "Gebruiker 35", "Gebruiker 36", "Gebruiker 37", "Gebruiker 38", "Gebruiker 39", "Gebruiker 40",
           "Gebruiker 41", "Gebruiker 42", "Gebruiker 43", "Gebruiker 44", "Gebruiker 45", "Gebruiker 46", "Gebruiker 47", "Gebruiker 48",
           "Pad  01", "Pad  02", "Pad  03", "Pad  04", "Pad  05", "Pad  06", "Pad  07", "Pad  08", "Pad  09", "Pad  10",
           "Pad  11", "Pad  12", "Pad  13", "Pad  14", "Pad  15", "Pad  16", "Pad  17", "Pad  18", "Pad  19", "Pad  20",
           "Pad  21", "Pad  22", "Pad  23", "Pad  24", "Pad  25", "Pad  26", "Pad  27", "Pad  28", "Pad  29", "Pad  30",
           "Pad  31", "Pad  32",
           "Sir  01", "Sir  02", "Sir  03", "Sir  04", "Sir  05", "Sir  06", "Sir  07", "Sir  08",
           "2Pad 01", "2Pad 02", "2Pad 03", "2Pad 04",
           "X10  01", "X10  02", "X10  03", "X10  04", "X10  05", "X10  06", "X10  07", "X10  08",
           "X10  09", "X10  10", "X10  11", "X10  12", "X10  13", "X10  14", "X10  15", "PGM    ", "P-LINK ",
           "PTag 01", "PTag 02", "PTag 03", "PTag 04", "PTag 05", "PTag 06", "PTag 07", "PTag 08", "PTag 09", "PTag 10",
           "PTag 11", "PTag 12", "PTag 13", "PTag 14", "PTag 15", "PTag 16", "PTag 17", "PTag 18", "PTag 19", "PTag 20",
           "PTag 21", "PTag 22", "PTag 23", "PTag 24", "PTag 25", "PTag 26", "PTag 27", "PTag 28", "PTag 29", "PTag 30",
           "PTag 31", "PTag 32",
           "Rptr 01", "Rptr 02", "Rptr 03", "Rptr 04", "Rptr 05", "Rptr 06", "Rptr 07", "Rptr 08"],
  "FR" : [ "Système", "Zone 01", "Zone 02", "Zone 03", "Zone 04", "Zone 05", "Zone 06", "Zone 07", "Zone 08",
           "Zone 09", "Zone 10", "Zone 11", "Zone 12", "Zone 13", "Zone 14", "Zone 15", "Zone 16", "Zone 17", "Zone 18",
           "Zone 19", "Zone 20", "Zone 21", "Zone 22", "Zone 23", "Zone 24", "Zone 25", "Zone 26", "Zone 27", "Zone 28",
           "Zone 29", "Zone 30", "Zone 31", "Zone 32", "Zone 33", "Zone 34", "Zone 35", "Zone 36", "Zone 37", "Zone 38",
           "Zone 39", "Zone 40", "Zone 41", "Zone 42", "Zone 43", "Zone 44", "Zone 45", "Zone 46", "Zone 47", "Zone 48",
           "Zone 49", "Zone 50", "Zone 51", "Zone 52", "Zone 53", "Zone 54", "Zone 55", "Zone 56", "Zone 57", "Zone 58",
           "Zone 59", "Zone 60", "Zone 61", "Zone 62", "Zone 63", "Zone 64",
           "Memclé  01", "Memclé  02", "Memclé  03", "Memclé  04", "Memclé  05", "Memclé  06", "Memclé  07", "Memclé  08", "Memclé  09", "Memclé  10",
           "Memclé  11", "Memclé  12", "Memclé  13", "Memclé  14", "Memclé  15", "Memclé  16", "Memclé  17", "Memclé  18", "Memclé  19", "Memclé  20",
           "Memclé  21", "Memclé  22", "Memclé  23", "Memclé  24", "Memclé  25", "Memclé  26", "Memclé  27", "Memclé  28", "Memclé  29", "Memclé  30",
           "Memclé  31", "Memclé  32",
           "User 01", "User 02", "User 03", "User 04", "User 05", "User 06", "User 07", "User 08", "User 09", "User 10",
           "User 11", "User 12", "User 13", "User 14", "User 15", "User 16", "User 17", "User 18", "User 19", "User 20",
           "User 21", "User 22", "User 23", "User 24", "User 25", "User 26", "User 27", "User 28", "User 29", "User 30",
           "User 31", "User 32", "User 33", "User 34", "User 35", "User 36", "User 37", "User 38", "User 39", "User 40",
           "User 41", "User 42", "User 43", "User 44", "User 45", "User 46", "User 47", "User 48",
           "Pad  01", "Pad  02", "Pad  03", "Pad  04", "Pad  05", "Pad  06", "Pad  07", "Pad  08", "Pad  09", "Pad  10",
           "Pad  11", "Pad  12", "Pad  13", "Pad  14", "Pad  15", "Pad  16", "Pad  17", "Pad  18", "Pad  19", "Pad  20",
           "Pad  21", "Pad  22", "Pad  23", "Pad  24", "Pad  25", "Pad  26", "Pad  27", "Pad  28", "Pad  29", "Pad  30",
           "Pad  31", "Pad  32",
           "Sir  01", "Sir  02", "Sir  03", "Sir  04", "Sir  05", "Sir  06", "Sir  07", "Sir  08",
           "2Pad 01", "2Pad 02", "2Pad 03", "2Pad 04",
           "X10  01", "X10  02", "X10  03", "X10  04", "X10  05", "X10  06", "X10  07", "X10  08",
           "X10  09", "X10  10", "X10  11", "X10  12", "X10  13", "X10  14", "X10  15", "PGM    ", "P-LINK ",
           "PTag 01", "PTag 02", "PTag 03", "PTag 04", "PTag 05", "PTag 06", "PTag 07", "PTag 08", "PTag 09", "PTag 10",
           "PTag 11", "PTag 12", "PTag 13", "PTag 14", "PTag 15", "PTag 16", "PTag 17", "PTag 18", "PTag 19", "PTag 20",
           "PTag 21", "PTag 22", "PTag 23", "PTag 24", "PTag 25", "PTag 26", "PTag 27", "PTag 28", "PTag 29", "PTag 30",
           "PTag 31", "PTag 32",
           "Rptr 01", "Rptr 02", "Rptr 03", "Rptr 04", "Rptr 05", "Rptr 06", "Rptr 07", "Rptr 08",
           "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown"]
}

The string after the / is (depending on the language you pick):

pmLogEvent_t = {
   "EN" : (
           "None",
           # 1
           "Interior Alarm", "Perimeter Alarm", "Delay Alarm", "24h Silent Alarm", "24h Audible Alarm",
           "Tamper", "Control Panel Tamper", "Tamper Alarm", "Tamper Alarm", "Communication Loss",
           "Panic From Keyfob", "Panic From Control Panel", "Duress", "Confirm Alarm", "General Trouble",
           "General Trouble Restore", "Interior Restore", "Perimeter Restore", "Delay Restore", "24h Silent Restore",
           # 21
           "24h Audible Restore", "Tamper Restore", "Control Panel Tamper Restore", "Tamper Restore", "Tamper Restore",
           "Communication Restore", "Cancel Alarm", "General Restore", "Trouble Restore", "Not used",
           "Recent Close", "Fire", "Fire Restore", "Not Active", "Emergency",
           "Remove User", "Disarm Latchkey", "Confirm Alarm Emergency", "Supervision (Inactive)", "Supervision Restore (Active)",
           "Low Battery", "Low Battery Restore", "AC Fail", "AC Restore", "Control Panel Low Battery",
           "Control Panel Low Battery Restore", "RF Jamming", "RF Jamming Restore", "Communications Failure", "Communications Restore",
           # 51
           "Telephone Line Failure", "Telephone Line Restore", "Auto Test", "Fuse Failure", "Fuse Restore",
           "Keyfob Low Battery", "Keyfob Low Battery Restore", "Engineer Reset", "Battery Disconnect", "1-Way Keypad Low Battery",
           "1-Way Keypad Low Battery Restore", "1-Way Keypad Inactive", "1-Way Keypad Restore Active", "Low Battery Ack", "Clean Me",
           "Fire Trouble", "Low Battery", "Battery Restore", "AC Fail", "AC Restore",
           "Supervision (Inactive)", "Supervision Restore (Active)", "Gas Alert", "Gas Alert Restore", "Gas Trouble",
           "Gas Trouble Restore", "Flood Alert", "Flood Alert Restore", "X-10 Trouble", "X-10 Trouble Restore",
           # 81
           "Arm Home", "Arm Away", "Quick Arm Home", "Quick Arm Away", "Disarm",
           "Fail To Auto-Arm", "Enter To Test Mode", "Exit From Test Mode", "Force Arm", "Auto Arm",
           "Instant Arm", "Bypass", "Fail To Arm", "Door Open", "Communication Established By Control Panel",
           "System Reset", "Installer Programming", "Wrong Password", "Not Sys Event", "Not Sys Event",
           # 101
           "Extreme Hot Alert", "Extreme Hot Alert Restore", "Freeze Alert", "Freeze Alert Restore", "Human Cold Alert",
           "Human Cold Alert Restore", "Human Hot Alert", "Human Hot Alert Restore", "Temperature Sensor Trouble", "Temperature Sensor Trouble Restore",

           # New values for PowerMaster and models with partitions
           "PIR Mask", "PIR Mask Restore", "Repeater low battery", "Repeater low battery restore", "Repeater inactive",
           "Repeater inactive restore", "Repeater tamper", "Repeater tamper restore", "Siren test end", "Devices test end",
           # 121
           "One way comm. trouble", "One way comm. trouble restore", "Sensor outdoor alarm", "Sensor outdoor restore", "Guard sensor alarmed",
           "Guard sensor alarmed restore", "Date time change", "System shutdown", "System power up", "Missed Reminder",
           "Pendant test fail", "Basic KP inactive", "Basic KP inactive restore", "Basic KP tamper", "Basic KP tamper Restore",
           "Heat", "Heat restore", "LE Heat Trouble", "CO alarm", "CO alarm restore",
           # 141
           "CO trouble", "CO trouble restore", "Exit Installer", "Enter Installer", "Self test trouble",
           "Self test restore", "Confirm panic event", "n/a", "Soak test fail", "Fire Soak test fail",
           "Gas Soak test fail", "n/a", "n/a", "n/a", "n/a",
           "n/a", "n/a", "n/a", "n/a", "n/a",
           "n/a", "n/a", "n/a", "n/a", "n/a",
           "n/a", "n/a", "n/a", "n/a", "n/a",
           "n/a", "n/a", "n/a", "n/a", "n/a",
           "n/a"),
   "NL" : (
           "Geen",
           # 1
           "In alarm", "In alarm", "In alarm", "In alarm", "In alarm",
           "Sabotage alarm", "Systeem sabotage", "Sabotage alarm", "Add user", "Communicate fout",
           "Paniekalarm", "Code bedieningspaneel paniek", "Dwang", "Bevestig alarm", "Successful U/L",
           "Probleem herstel", "Herstel", "Herstel", "Herstel", "Herstel",
           "Herstel", "Sabotage herstel", "Systeem sabotage herstel", "Sabotage herstel", "Sabotage herstel",
           "Communicatie herstel", "Stop alarm", "Algemeen herstel", "Brand probleem herstel", "Systeem inactief",
           "Recent close", "Brand", "Brand herstel", "Niet actief", "Noodoproep",
           "Remove user", "Controleer code", "Bevestig alarm", "Supervisie", "Supervisie herstel",
           "Batterij laag", "Batterij OK", "230VAC uitval", "230VAC herstel", "Controlepaneel batterij laag",
           "Controlepaneel batterij OK", "Radio jamming", "Radio herstel", "Communicatie mislukt", "Communicatie hersteld",
           # 51
           "Telefoonlijn fout", "Telefoonlijn herstel", "Automatische test", "Zekeringsfout", "Zekering herstel",
           "Batterij laag", "Batterij OK", "Monteur reset", "Accu vermist", "Batterij laag",
           "Batterij OK", "Supervisie", "Supervisie herstel", "Lage batterij bevestiging", "Reinigen",
           "Probleem", "Batterij laag", "Batterij OK", "230VAC uitval", "230VAC herstel",
           "Supervisie", "Supervisie herstel", "Gas alarm", "Gas herstel", "Gas probleem",
           "Gas probleem herstel", "Lekkage alarm", "Lekkage herstel", "X-10 Probleem", "X-10 Probleem herstel",
           # 81
           "Deelschakeling", "Ingeschakeld", "Snel deelschakeling", "Snel ingeschakeld", "Uitgezet",
           "Inschakelfout (auto)", "Test gestart", "Test gestopt", "Force aan", "Geheel in (auto)",
           "Onmiddelijk", "Overbruggen", "Inschakelfout", "Door Open", "Communication Established By Control Panel",
           "Systeem reset", "Installateur programmeert", "Foutieve code", "Not Sys Event", "Not Sys Event",
           # 101
           "Extreme Hot Alert", "Extreme Hot Alert Restore", "Freeze Alert", "Freeze Alert Restore", "Human Cold Alert",
           "Human Cold Alert Restore", "Human Hot Alert", "Human Hot Alert Restore", "Temperature Sensor Trouble", "Temperature Sensor Trouble Restore",

           # New values for PowerMaster and models with partitions
           "PIR Mask", "PIR Mask Restore", "Repeater low battery", "Repeater low battery restore", "Repeater inactive",
           "Repeater inactive restore", "Repeater tamper", "Repeater tamper restore", "Siren test end", "Devices test end",
           # 121
           "One way comm. trouble", "One way comm. trouble restore", "Sensor outdoor alarm", "Sensor outdoor restore", "Guard sensor alarmed",
           "Guard sensor alarmed restore", "Date time change", "System shutdown", "System power up", "Missed Reminder",
           "Pendant test fail", "Basic KP inactive", "Basic KP inactive restore", "Basic KP tamper", "Basic KP tamper Restore",
           "Heat", "Heat restore", "LE Heat Trouble", "CO alarm", "CO alarm restore",
           # 141
           "CO trouble", "CO trouble restore", "Exit Installer", "Enter Installer", "Self test trouble",
           "Self test restore", "Confirm panic event", "n/a", "Soak test fail", "Fire Soak test fail",
           "Gas Soak test fail", "n/a", "n/a", "n/a", "n/a",
           "n/a", "n/a", "n/a", "n/a", "n/a",
           "n/a", "n/a", "n/a", "n/a", "n/a",
           "n/a", "n/a", "n/a", "n/a", "n/a",
           "n/a", "n/a", "n/a", "n/a", "n/a",
           "n/a"),
   "FR" : (
           "Aucun",
           # 1
           "Alarme Intérieure", "Alarme Périphérie", "Alarme Différée", "Alarme Silencieuse 24H", "Alarme Audible 24H",
           "Autoprotection", "Alarme Autoprotection Centrale", "Alarme Autoprotection", "Alarme Autoprotection", "Défaut de communication",
           "Alarme Panique Depuis Memclé", "Alarme Panique depuis Centrale", "Contrainte", "Confirmer l'alarme", "Perte de Communication",
           "Rétablissement Défaut Supervision", "Rétablissement Alarme Intérieure", "Rétablissement Alarme Périphérie", "Rétablissement Alarme Différée", "Rétablissement Alarme Silencieuse 24H",
           "Rétablissement Alarme Audible 24H", "Rétablissement Autoprotection", "Rétablissement Alarme Autoprotection Centrale", "Rétablissement Alarme Autoprotection", "Rétablissement Alarme Autoprotection",
           "Rétablissement des Communications", "Annuler Alarme", "Rétablissement Général", "Rétablissement Défaut", "Pas utilisé",
           "Evenement Fermeture Récente", "Alarme Incendie", "Rétablissement Alarme Incendie", "Non Actif", "Urgence",
           "Pas utilisé", "Désarmement Latchkey", "Rétablissement Alarme Panique", "Défaut Supervision (Inactive)", "Rétablissement Supervision (Active)",
           "Batterie Faible", "Rétablissement Batterie Faible", "Coupure Secteur", "Rétablissement Secteur", "Batterie Centrale Faible",
           "Rétablissement Batterie Centrale Faible", "Détection Brouillage Radio", "Rétablissement Détection Brouillage Radio", "Défaut Communication", "Rétablissement Communications",
           # 51
           "Défaut Ligne Téléphonique", "Rétablissement Ligne Téléphonique", "Auto Test", "Coupure Secteur/Fusible", "Rétablissement Secteur/Fusible",
           "Memclé Batterie Faible", "Rétablissement Memclé Batterie Faible", "Réinitialisation Technicien", "Batterie Déconnectée ", "Clavier/Télécommande Batterie Faible",
           "Rétablissement Clavier/Télécommande Batterie Faible", "Clavier/Télécommande Inactif", "Rétablissement Clavier/Télécommande Actif", "Batterie Faible", "Nettoyage Détecteur Incendie",
           "Alarme incendie", "Batterie Faible", "Rétablissement Batterie", "Coupure Secteur", "Rétablissement Secteur",
           "Défaut Supervision (Inactive)", "Rétablissement Supervision (Active)", "Alarme Gaz", "Rétablissement Alarme Gaz", "Défaut Gaz",
           "Rétablissement Défaut Gaz", "Alarme Inondation", "Rétablissement Alarme Inondation", "Défaut X-10", "Rétablissement Défaut X-10",
           # 81
           "Armement Partiel", "Armement Total", "Armement Partiel Instantané", "Armement Total Instantané", "Désarmement",
           "Echec d'armement", "Entrer dans Mode Test", "Sortir du Mode Test", "Fermeture Forcée", "Armement Automatique",
           "Armement Instantané", "Bypass", "Echec d'Armement", "Porte Ouverte", "Communication établie par le panneau de control",
           "Réinitialisation du Système", "Installer Programming", "Mauvais code PIN", "Not Sys Event", "Not Sys Event",
           # 101
           "Alerte Chaleure Extrême", "Rétablissement Alerte Chaleure Extrême", "Alerte Gel", "Rétablissement Alerte Gel", "Alerte Froid",
           "Rétablissement Alerte Froid", "Alerte Chaud", "Rétablissement Alerte Chaud", "Défaut Capteur de Température", "Rétablissement Défaut Capteur de Température",

           # New values for PowerMaster and models with partitions
           "PIR Masqué", "Rétablissement PIR Masqué", "Repeater low battery", "Repeater low battery restore", "Repeater inactive",
           "Repeater inactive restore", "Repeater tamper", "Repeater tamper restore", "Siren test end", "Devices test end",
           # 121
           "One way comm. trouble", "One way comm. trouble restore", "Sensor outdoor alarm", "Sensor outdoor restore", "Guard sensor alarmed",
           "Guard sensor alarmed restore", "Date time change", "System shutdown", "System power up", "Missed Reminder",
           "Pendant test fail", "Basic KP inactive", "Basic KP inactive restore", "Basic KP tamper", "Basic KP tamper Restore",
           "Heat", "Heat restore", "LE Heat Trouble", "CO alarm", "CO alarm restore",
           # 141
           "CO trouble", "CO trouble restore", "Sortir Mode Installeur", "Entrer Mode Installeur", "Self test trouble",
           "Self test restore", "Confirm panic event", "n/a", "Soak test fail", "Fire Soak test fail",
           "Gas Soak test fail", "n/a", "n/a", "n/a", "n/a",
           "n/a", "n/a", "n/a", "n/a", "n/a",
           "n/a", "n/a", "n/a", "n/a", "n/a",
           "n/a", "n/a", "n/a", "n/a", "n/a",
           "n/a", "n/a", "n/a", "n/a", "n/a",
           "n/a")
}

You wished you never asked now 🤣

davesmeghead commented 2 months ago

First Problem is like others. I upgraded via HACS and ended up with a second "alarm_control_panel_visonic_alarm"

I've looked at users log files and I have no idea why this is happening, I'm sorry but you'll need to fix this manually in HA.

Second Problem has to do with the "Panel Reconnect" Service.

The integration is working as designed and it looks like it's a problem with your operating system not releasing the resources correctly when I close the connection, this is the clue in the log you show:

2024-08-21 16:35:24.188 DEBUG (MainThread) [custom_components.visonic.client] P0 Setting TCP socket Options Exception 
[Errno 111] Connection refused

So it stops the integration from making the ethernet connection. Regards Dave

haforme commented 2 months ago

Thanks for the Visonic bible you sent in regard to my question. I am looking through it.

For problem one I did fix it in HA. Just wanted to let you know.

As for the "Panel Reconnect" service I run the HA OS. I do have one pending OS upgrade to 13.1 I may test that later. Any thoughts on a work around?

haforme commented 2 months ago

I was able to extract the information that I needed for question one. Thanks I wonder if the Panel Reconnection issue is the same problem that the Intergration Reload encounters. Maybe sleeping for 30 seconds after the close command would fix the problem.

davesmeghead commented 2 months ago

This is the code in client.py that I use to make the Ethernet connection

            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
            sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
            sock.setblocking(1)  # Set blocking to on, this is the default but just make sure
            sock.settimeout(1.0)  # set timeout to 1 second to flush the receive buffer
            sock.connect((address, port))

            # Flush the buffer, receive any data and dump it
            try:
                dummy = sock.recv(10000)  # try to receive 10000 bytes
                self.logstate_debug("Buffer Flushed and Received some data!")
            except socket.timeout:  # fail after 1 second of no activity
                #self.logstate_debug("Buffer Flushed and Didn't receive data! [Timeout]")
                pass

            # set the timeout to infinite
            sock.settimeout(None)

            return sock

Are you able to edit the code? Perhaps it's one of these settings, you need to keep the sock = socket.socket line and sock.connect line so do not alter these, but try commenting out sock.setsockopt 'settimeout' and 'setblocking' lines with a # to see if that makes a difference.

You could also insert debug lines to the log to see which one it is like this

            self.logstate_debug("Here A")
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.logstate_debug("Here B")
            sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
            self.logstate_debug("Here C")
            sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
            self.logstate_debug("Here D")
            sock.setblocking(1)  # Set blocking to on, this is the default but just make sure
            self.logstate_debug("Here E")
            sock.settimeout(1.0)  # set timeout to 1 second to flush the receive buffer
            self.logstate_debug("Here F")
            sock.connect((address, port))
            self.logstate_debug("Here G")

            # Flush the buffer, receive any data and dump it
            try:
                dummy = sock.recv(10000)  # try to receive 10000 bytes
                self.logstate_debug("Buffer Flushed and Received some data!")
            except socket.timeout:  # fail after 1 second of no activity
                #self.logstate_debug("Buffer Flushed and Didn't receive data! [Timeout]")
                pass

            # set the timeout to infinite
            sock.settimeout(None)

            return sock

Let's say it puts Here D in the log file, but not Here E and gives the Connection refused exception then the line in between is the problem. I hope you understand my logic here, give it a go. Keep a backup copy of client.py so you can put it back to how it was. D

haforme commented 2 months ago

Okay, I added the debug code and performed the commenting out of the various code that you suggested. No change in the operation of "Panel Reconnect" service or the Integration Reload. They both still bomb out. It worked fine in the 0.8.5.2 Maybe you could look back at that code to see what changed.

davesmeghead commented 2 months ago

I'm thinking about splitting the lastevent attribute in to 2 attributes and not using a forward slash in a single attribute.

There are 2 advantages:

What do you think, it's an easy change but I wouldn't want to leave the existing attribute, I would replace it with 2 new attributes, or use lastevent for the string before the "/" and a new attribute for the string after.

davesmeghead commented 2 months ago

Maybe you could look back at that code to see what changed.

Haha, there's lots of code that changes since that release, lots and lots. But not much in the code that makes the connection so I haven't spotted anything that much different.

EDIT: You said that you put in the "Here xxxx" log entries but you didn't mention which one is printed in the log file just before it created the exception, which specific line creates the exception?

haforme commented 2 months ago

The specific state that is printed just before the error is; sock.connect((address, port)) self.logstate_debug("Here G")

haforme commented 2 months ago

In regard to splitting the lastevent field it would be a pain but then again, it's just a few minor logic changes to accommodate it. I would ask the Joao-Sousa-71 with the case about" Update to 0.9.6.14 downgrade previous/existing functionalities #131" for his opinion. He seems to be a heavy user of the field. I just have a few sensors that use it.

davesmeghead commented 2 months ago

Linked to issue https://github.com/davesmeghead/visonic/issues/131

I've decided to do both! I'll keep lastevent as per the dev_B0 release but I'll also add 2 new Attributes with their individual strings so it's backwards compatible. At the moment HA does not support language translations for the values of attributes so until that changes I'll do the above (if it ever does as the HA coders think that other fancy new capabilities are more important than the core capability like fully supporting languages, rant over). Ironically there's language support to translate lastevent in to other languages but not the actual values that it can be set to. Why only do half a job? ...... I'm still ranting aren't I :wink:

davesmeghead commented 2 months ago

Please see dev_B0 release 0.9.7.7 I've also added 2 new attributes to the alarm panel entity to split lastevent Please also take a look at the language "Panel" setting. Go in to configure and you can now edit the language, and set it to "Panel".

Joao-Sousa-71 commented 2 months ago

In regard to splitting the lastevent field it would be a pain but then again, it's just a few minor logic changes to accommodate it. I would ask the Joao-Sousa-71 with the case about" Update to 0.9.6.14 downgrade previous/existing functionalities #131" for his opinion. He seems to be a heavy user of the field. I just have a few sensors that use it.

I was spliting that attribute with two template sensors but Dave kindly add it and in fact they are usefull. I'm atonished with the dedication and commitment of Dave and really hope that the community can recognize it with some caffeine for this incredible developper. Cheers!

davesmeghead commented 2 months ago

Thankyou :smile: I've just released "0.9.7.9 - English Translation File, Logic Updates and Bug Fixes" to dev_B0, if you get the chance please give it a try.

davesmeghead commented 1 month ago

Hi, I've just released dev_B0 0.9.8.0 as per the main forum https://community.home-assistant.io/t/visonic-powermax-and-powermaster-integration/316702/538

Please give it a try Dave

davesmeghead commented 1 month ago

I'll close this issue as I've just created a HACS Master release 0.9.9.3. Any further problems (with 0.9.9.3) I'd rather they were in new issues please.