add u_bat, drop label sending to device

This commit is contained in:
Wolfgang Hottgenroth 2023-05-17 21:49:11 +02:00
parent ac4a032b62
commit c2516fe0b7
Signed by: wn
GPG Key ID: 836E9E1192A6B132

View File

@ -91,7 +91,6 @@ def mqttOnMessageCallback(client, userdata, message):
logger.debug(f"mqtt message received: {topic} -> {payload}") logger.debug(f"mqtt message received: {topic} -> {payload}")
parse_payload = json.loads(payload) parse_payload = json.loads(payload)
sendSetupMessage = False
device_id = parse_payload['end_device_ids']['device_id'] device_id = parse_payload['end_device_ids']['device_id']
dbh = DbOp(config) dbh = DbOp(config)
@ -107,19 +106,9 @@ def mqttOnMessageCallback(client, userdata, message):
frame = base64.b64decode(parse_payload['uplink_message']['frm_payload']) frame = base64.b64decode(parse_payload['uplink_message']['frm_payload'])
status = struct.unpack('<H', frame[0:2])[0] status = struct.unpack('<H', frame[0:2])[0]
logger.debug(f"{frame=}, {status=}") u_bat = struct.unpack('<H', frame[2:2])[0]
logger.debug(f"{frame=}, {status=}, {u_bat=}")
if (status == 4):
logger.info(f"Start up message received from {device_id}, {device['label']}")
for i in range(0, num_of_sensors):
start_index = 2 + (i * 8)
end_index = start_index + 8
received_sensor_address = struct.unpack('<Q', frame[start_index:end_index])[0]
logger.debug(f"sensor {i}: 0x{received_sensor_address:016x}")
if (received_sensor_address not in sensors):
raise UnknownSensorException(received_sensor_address)
sendSetupMessage = True
else:
logger.info(f"Regular message received from {device_id}, {device['label']}") logger.info(f"Regular message received from {device_id}, {device['label']}")
measurement = { measurement = {
'label': device['label'], 'label': device['label'],
@ -127,7 +116,8 @@ def mqttOnMessageCallback(client, userdata, message):
'measurements': [] 'measurements': []
} }
for i in range(0, num_of_sensors): for i in range(0, num_of_sensors):
addr_start_index = 2 + (i * (8 + 4)) try:
addr_start_index = 4 + (i * (8 + 4))
addr_end_index = addr_start_index + 8 addr_end_index = addr_start_index + 8
received_sensor_address = struct.unpack('<Q', frame[addr_start_index:addr_end_index])[0] received_sensor_address = struct.unpack('<Q', frame[addr_start_index:addr_end_index])[0]
if (received_sensor_address not in sensors): if (received_sensor_address not in sensors):
@ -141,31 +131,10 @@ def mqttOnMessageCallback(client, userdata, message):
"value": value, "value": value,
"label": sensors[received_sensor_address][1] "label": sensors[received_sensor_address][1]
}) })
dbh.storeMeasurement(measurement)
if (sendSetupMessage):
sendSetupMessage = False
setupMessage = bytes()
null = 0
null = null.to_bytes(1, byteorder='big')
for sk, sv in sensors.items():
logger.debug(f"{sk=}, {sv=}")
setupMessage += struct.pack('<Q', sk) + sv[0].to_bytes(1, byteorder='big') + bytes(sv[1], 'ASCII') + null
setupMessage = base64.b64encode(setupMessage).decode('ASCII')
logger.debug(f"about to send setup message {setupMessage}")
setupTopic = f"v3/{config['APPLICATION_TENANT']}/devices/{device_id}/down/push"
client.publish(setupTopic, json.dumps({
"downlinks": [
{
"f_port": 1,
"frm_payload": setupMessage,
"priority": "NORMAL"
}
]
}))
except UnknownSensorException as e: except UnknownSensorException as e:
logger.error(f"unknown sensor in message {e.sensorAddress}") logger.error(f"unknown sensor in message {e.sensorAddress}")
dbh.storeMeasurement(measurement)
except DeviceNotFoundException as e: except DeviceNotFoundException as e:
logger.error(f"message from unknown device {e.deviceId}") logger.error(f"message from unknown device {e.deviceId}")
except Exception as e: except Exception as e: