Browse Source

Merge pull request #277 from chehrlic/rpi_alarmid

RPI: Request alarm when alarm id changes
pull/283/head^2
lumapu 2 years ago
committed by GitHub
parent
commit
99c2b9f7a9
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      tools/rpi/hoymiles/__init__.py
  2. 10
      tools/rpi/hoymiles/__main__.py
  3. 6
      tools/rpi/hoymiles/decoders/__init__.py

12
tools/rpi/hoymiles/__init__.py

@ -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)

10
tools/rpi/hoymiles/__main__.py

@ -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

6
tools/rpi/hoymiles/decoders/__init__.py

@ -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…
Cancel
Save