mirror of
https://github.com/lumapu/ahoy.git
synced 2025-08-06 09:58:23 +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)
|
fragment = compose_esb_fragment(packet[i:i+mtu], **params)
|
||||||
yield fragment
|
yield fragment
|
||||||
|
|
||||||
def compose_send_time_payload(cmdId):
|
def compose_send_time_payload(cmdId, alarm_id=0):
|
||||||
"""
|
"""
|
||||||
Build set time request packet
|
Build set time request packet
|
||||||
|
|
||||||
|
@ -493,9 +493,13 @@ def compose_send_time_payload(cmdId):
|
||||||
"""
|
"""
|
||||||
timestamp = int(time.time())
|
timestamp = int(time.time())
|
||||||
|
|
||||||
payload = struct.pack('>B', cmdId) + b'\x00'
|
# indices from esp8266 hmRadio.h / sendTimePacket()
|
||||||
payload = payload + struct.pack('>L', timestamp) # big-endian: msb at low address
|
payload = struct.pack('>B', cmdId) # 10
|
||||||
payload = payload + b'\x00\x00\x00\x00\x00\x00\x00\x00'
|
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)
|
return frame_payload(payload)
|
||||||
|
|
||||||
|
|
|
@ -120,6 +120,11 @@ def poll_inverter(inverter, do_init, retries=4):
|
||||||
string_id = string_id + 1
|
string_id = string_id + 1
|
||||||
print()
|
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:
|
if mqtt_client:
|
||||||
mqtt_send_status(mqtt_client, inverter_ser, data,
|
mqtt_send_status(mqtt_client, inverter_ser, data,
|
||||||
topic=inverter.get('mqtt', {}).get('topic', None))
|
topic=inverter.get('mqtt', {}).get('topic', None))
|
||||||
|
@ -244,6 +249,7 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
mqtt_client = None
|
mqtt_client = None
|
||||||
|
|
||||||
|
event_message_index = {}
|
||||||
command_queue = {}
|
command_queue = {}
|
||||||
mqtt_command_topic_subs = []
|
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', [])]
|
g_inverters = [g_inverter.get('serial') for g_inverter in ahoy_config.get('inverters', [])]
|
||||||
for g_inverter in ahoy_config.get('inverters', []):
|
for g_inverter in ahoy_config.get('inverters', []):
|
||||||
g_inverter_ser = g_inverter.get('serial')
|
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
|
# Enables and subscribe inverter to mqtt /command-Topic
|
||||||
|
|
|
@ -294,10 +294,12 @@ class EventsResponse(UnknownResponse):
|
||||||
|
|
||||||
crc_valid = self.validate_crc_m()
|
crc_valid = self.validate_crc_m()
|
||||||
if crc_valid:
|
if crc_valid:
|
||||||
print(' payload has valid modbus crc')
|
#print(' payload has valid modbus crc')
|
||||||
self.response = self.response[:-2]
|
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
|
chunk_size = 12
|
||||||
for i_chunk in range(2, len(self.response), chunk_size):
|
for i_chunk in range(2, len(self.response), chunk_size):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue