diff --git a/doc_resources/gateway/class_diagram.puml b/doc_resources/gateway/class_diagram.puml index ee8ea84..4c1121f 100644 --- a/doc_resources/gateway/class_diagram.puml +++ b/doc_resources/gateway/class_diagram.puml @@ -1,30 +1,31 @@ @startuml skinparam linestyle ortho + class Gateway { - gateway_id: str - mqtt_broker: str - mqtt_port: int - mqttc: MQTTClient -- - + KEY_WINDOW: 0x01 - + KEY_HUMIDITY: 0x02 - + KEY_TEMP: 0x03 - + KEY_CO2: 0x04 - + KEY_BATTERY: 0x05 - + INVALID_VALUE: 0xFFFFFFFF + EXPECTED_PAYLOAD_SIZE: 14 + + DEDUP_WINDOW_SECONDS: 10 + + INVALID_VALUE: 0xFFFFFFFF -- + decode_payload(data: bytes): dict + publish(mac: str, data: dict) + + is_duplicate(mac: str): bool + on_device_found(device, adv_data) - + on_connect(client, userdata, flags, reason_code, properties) - + on_publish(client, userdata, mid, reason_code, properties) + + on_connect(...) + + on_disconnect(...) + + on_publish(...) + run() } + class BleakScanner { + start() + stop() } + class MQTTClient { + connect() + publish() @@ -32,6 +33,8 @@ class MQTTClient { + username_pw_set() + loop_start() } + Gateway o-- BleakScanner Gateway o-- MQTTClient + @enduml diff --git a/doc_resources/gateway/sequence_data_collection.puml b/doc_resources/gateway/sequence_data_collection.puml index 0198ea8..679d5f4 100644 --- a/doc_resources/gateway/sequence_data_collection.puml +++ b/doc_resources/gateway/sequence_data_collection.puml @@ -11,7 +11,7 @@ thingy -> gw : BLE advertising packet alt company_id != 0xffff gw -> gw : discard packet -else company_id == 0xffff +else gw -> gw : check payload size alt payload size != 14 bytes @@ -21,15 +21,19 @@ else company_id == 0xffff alt unknown key in payload gw -> gw : discard packet\nlog debug - else valid keys + else alt CO2 == 0xFFFFFFFF gw -> gw : discard CO2 value\n(sensor not ready) end - gw -> gw : add UTC timestamp - gw -> broker : publish JSON\n{gateway_id}/{mac}/update - broker --> gw : on_publish confirmed - broker -> db : store measurement + alt duplicate within 10 seconds + gw -> gw : discard packet\n(deduplication) + else + gw -> gw : add UTC timestamp + gw -> broker : publish JSON\n{gateway_id}/{mac}/update + broker --> gw : on_publish confirmed + broker -> db : store measurement + end end end end