mirror of
https://github.com/lumapu/ahoy.git
synced 2025-08-03 08:28:20 +02:00
RPI: Request alarm when alarm id changes
This commit is contained in:
parent
f3e1bf2fae
commit
fb6250a109
3 changed files with 21 additions and 7 deletions
|
@ -482,7 +482,7 @@ def compose_esb_packet(packet, mtu=17, **params):
|
|||
fragment = compose_esb_fragment(packet[i:i+mtu], **params)
|
||||
yield fragment
|
||||
|
||||
def compose_send_time_payload(cmdId):
|
||||
def compose_send_time_payload(cmdId, alarm_id=0):
|
||||
"""
|
||||
Build set time request packet
|
||||
|
||||
|
@ -493,9 +493,13 @@ def compose_send_time_payload(cmdId):
|
|||
"""
|
||||
timestamp = int(time.time())
|
||||
|
||||
payload = struct.pack('>B', cmdId) + b'\x00'
|
||||
payload = payload + struct.pack('>L', timestamp) # big-endian: msb at low address
|
||||
payload = payload + b'\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
# indices from esp8266 hmRadio.h / sendTimePacket()
|
||||
payload = struct.pack('>B', cmdId) # 10
|
||||
payload = payload + b'\x00' # 11
|
||||
payload = payload + struct.pack('>L', timestamp) # 12..15 big-endian: msb at low address
|
||||
payload = payload + b'\x00\x00' # 16..17
|
||||
payload = payload + struct.pack('>H', alarm_id) # 18..19
|
||||
payload = payload + b'\x00\x00\x00\x00' # 20..23
|
||||
|
||||
return frame_payload(payload)
|
||||
|
||||
|
|
|
@ -120,6 +120,11 @@ def poll_inverter(inverter, do_init, retries=4):
|
|||
string_id = string_id + 1
|
||||
print()
|
||||
|
||||
if 'event_count' in data:
|
||||
if event_message_index[inv_str] < data['event_count']:
|
||||
event_message_index[inv_str] = data['event_count']
|
||||
command_queue[inv_str].append(hoymiles.compose_send_time_payload(InfoCommands.AlarmData, alarm_id=event_message_index[inv_str]))
|
||||
|
||||
if mqtt_client:
|
||||
mqtt_send_status(mqtt_client, inverter_ser, data,
|
||||
topic=inverter.get('mqtt', {}).get('topic', None))
|
||||
|
@ -244,6 +249,7 @@ if __name__ == '__main__':
|
|||
|
||||
mqtt_client = None
|
||||
|
||||
event_message_index = {}
|
||||
command_queue = {}
|
||||
mqtt_command_topic_subs = []
|
||||
|
||||
|
@ -286,7 +292,9 @@ if __name__ == '__main__':
|
|||
g_inverters = [g_inverter.get('serial') for g_inverter in ahoy_config.get('inverters', [])]
|
||||
for g_inverter in ahoy_config.get('inverters', []):
|
||||
g_inverter_ser = g_inverter.get('serial')
|
||||
command_queue[str(g_inverter_ser)] = []
|
||||
inv_str = str(g_inverter_ser)
|
||||
command_queue[inv_str] = []
|
||||
event_message_index[inv_str] = 0
|
||||
|
||||
#
|
||||
# Enables and subscribe inverter to mqtt /command-Topic
|
||||
|
|
|
@ -294,10 +294,12 @@ class EventsResponse(UnknownResponse):
|
|||
|
||||
crc_valid = self.validate_crc_m()
|
||||
if crc_valid:
|
||||
print(' payload has valid modbus crc')
|
||||
#print(' payload has valid modbus crc')
|
||||
self.response = self.response[:-2]
|
||||
|
||||
status = self.response[:2]
|
||||
status = struct.unpack('>H', self.response[:2])[0]
|
||||
a_text = self.alarm_codes.get(status, 'N/A')
|
||||
print (f' Inverter status: {a_text} ({status})')
|
||||
|
||||
chunk_size = 12
|
||||
for i_chunk in range(2, len(self.response), chunk_size):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue