database prepared
This commit is contained in:
parent
a9d9597e62
commit
b6b40d1d4c
@ -14,22 +14,22 @@ DEVICES = {
|
|||||||
'sensors': [
|
'sensors': [
|
||||||
{
|
{
|
||||||
'address': 0xb8012062f611c728,
|
'address': 0xb8012062f611c728,
|
||||||
'label': '0,5m:',
|
'label': '0,5m ',
|
||||||
'index': 0
|
'index': 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'address': 0xb400000d0ac31928,
|
'address': 0xb400000d0ac31928,
|
||||||
'label': '2,0m:',
|
'label': '2,0m ',
|
||||||
'index': 1
|
'index': 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'address': 0x9400000d6a4f8c28,
|
'address': 0x9400000d6a4f8c28,
|
||||||
'label': '3,0m:',
|
'label': '3,0m ',
|
||||||
'index': 2
|
'index': 2
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'address': 0xd400000d6a863528,
|
'address': 0xd400000d6a863528,
|
||||||
'label': '4,0m:',
|
'label': '4,0m ',
|
||||||
'index': 3
|
'index': 3
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,6 +37,8 @@ DEVICES = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
oldDevice = {}
|
||||||
|
|
||||||
class DeviceNotFoundException (Exception):
|
class DeviceNotFoundException (Exception):
|
||||||
def __init__(self, deviceId):
|
def __init__(self, deviceId):
|
||||||
self.deviceId = deviceId
|
self.deviceId = deviceId
|
||||||
@ -51,6 +53,9 @@ def getDevice(deviceId):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
raise DeviceNotFoundException(deviceId)
|
raise DeviceNotFoundException(deviceId)
|
||||||
|
|
||||||
|
def storeMeasurement(measurement):
|
||||||
|
logger.info(f"Store: {measurement=}")
|
||||||
|
|
||||||
|
|
||||||
def mqttOnConnectCallback(client, userdata, flags, rc):
|
def mqttOnConnectCallback(client, userdata, flags, rc):
|
||||||
logger.info("mqtt connected")
|
logger.info("mqtt connected")
|
||||||
@ -65,8 +70,14 @@ 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']
|
||||||
device = getDevice(device_id)
|
device = getDevice(device_id)
|
||||||
|
global oldDevice
|
||||||
|
if (device != oldDevice):
|
||||||
|
logger.info("device configuration in database has changed")
|
||||||
|
oldDevice = device
|
||||||
|
sendSetupMessage = True
|
||||||
num_of_sensors = len(device['sensors'])
|
num_of_sensors = len(device['sensors'])
|
||||||
sensors = { x['address']:[x['index'], x['label']] for x in device['sensors']}
|
sensors = { x['address']:[x['index'], x['label']] for x in device['sensors']}
|
||||||
|
|
||||||
@ -85,6 +96,33 @@ def mqttOnMessageCallback(client, userdata, message):
|
|||||||
logger.debug(f"sensor {i}: 0x{received_sensor_address:016x}")
|
logger.debug(f"sensor {i}: 0x{received_sensor_address:016x}")
|
||||||
if (received_sensor_address not in sensors):
|
if (received_sensor_address not in sensors):
|
||||||
raise UnknownSensorException(received_sensor_address)
|
raise UnknownSensorException(received_sensor_address)
|
||||||
|
sendSetupMessage = True
|
||||||
|
else:
|
||||||
|
logger.info(f"Regular message received from {device_id}")
|
||||||
|
# continue to parse and process message
|
||||||
|
measurement = []
|
||||||
|
# sensor_addrs = []
|
||||||
|
# sensor_values = []
|
||||||
|
for i in range(0, num_of_sensors):
|
||||||
|
addr_start_index = 2 + (i * (8 + 4))
|
||||||
|
addr_end_index = addr_start_index + 8
|
||||||
|
received_sensor_address = struct.unpack('<Q', frame[addr_start_index:addr_end_index])[0]
|
||||||
|
if (received_sensor_address not in sensors):
|
||||||
|
raise UnknownSensorException(received_sensor_address)
|
||||||
|
# sensor_addrs.append(received_sensor_address)
|
||||||
|
value_start_index = addr_end_index
|
||||||
|
value_end_index = value_start_index + 4
|
||||||
|
value = struct.unpack('<i', frame[value_start_index:value_end_index])[0] / 128
|
||||||
|
logger.debug(f"sensor {i}: 0x{received_sensor_address:016x} = {value:.2f} °C")
|
||||||
|
measurement.append({
|
||||||
|
"address": received_sensor_address,
|
||||||
|
"value": value,
|
||||||
|
"label": sensors[received_sensor_address][1]
|
||||||
|
})
|
||||||
|
storeMeasurement(measurement)
|
||||||
|
|
||||||
|
if (sendSetupMessage):
|
||||||
|
sendSetupMessage = False
|
||||||
setupMessage = bytes()
|
setupMessage = bytes()
|
||||||
null = 0
|
null = 0
|
||||||
null = null.to_bytes(1, byteorder='big')
|
null = null.to_bytes(1, byteorder='big')
|
||||||
@ -104,22 +142,6 @@ def mqttOnMessageCallback(client, userdata, message):
|
|||||||
]
|
]
|
||||||
}))
|
}))
|
||||||
|
|
||||||
else:
|
|
||||||
logger.info(f"Regular message received from {device_id}")
|
|
||||||
# continue to parse and process message
|
|
||||||
sensor_addrs = []
|
|
||||||
sensor_values = []
|
|
||||||
for i in range(0, num_of_sensors):
|
|
||||||
addr_start_index = 2 + (i * (8 + 4))
|
|
||||||
addr_end_index = addr_start_index + 8
|
|
||||||
received_sensor_address = struct.unpack('<Q', frame[addr_start_index:addr_end_index])[0]
|
|
||||||
if (received_sensor_address not in sensors):
|
|
||||||
raise UnknownSensorException(received_sensor_address)
|
|
||||||
sensor_addrs.append(received_sensor_address)
|
|
||||||
value_start_index = addr_end_index
|
|
||||||
value_end_index = value_start_index + 4
|
|
||||||
sensor_values.append(struct.unpack('<i', frame[value_start_index:value_end_index])[0] / 128)
|
|
||||||
logger.debug(f"sensor {i}: 0x{sensor_addrs[i]:016x} = {sensor_values[i]:.2f} °C")
|
|
||||||
|
|
||||||
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}")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user