docs(gateway): update diagrams following review feedback
- Simplify class diagram: remove KEY_* constants, add is_duplicate and on_disconnect, keep only behavior-relevant elements - Update sequence diagram: replace repeated conditions with else, add deduplication step, update payload size to 14 bytes
This commit is contained in:
@@ -1,30 +1,31 @@
|
|||||||
@startuml
|
@startuml
|
||||||
skinparam linestyle ortho
|
skinparam linestyle ortho
|
||||||
|
|
||||||
class Gateway {
|
class Gateway {
|
||||||
- gateway_id: str
|
- gateway_id: str
|
||||||
- mqtt_broker: str
|
- mqtt_broker: str
|
||||||
- mqtt_port: int
|
- mqtt_port: int
|
||||||
- mqttc: MQTTClient
|
- mqttc: MQTTClient
|
||||||
--
|
--
|
||||||
+ KEY_WINDOW: 0x01
|
|
||||||
+ KEY_HUMIDITY: 0x02
|
|
||||||
+ KEY_TEMP: 0x03
|
|
||||||
+ KEY_CO2: 0x04
|
|
||||||
+ KEY_BATTERY: 0x05
|
|
||||||
+ INVALID_VALUE: 0xFFFFFFFF
|
|
||||||
+ EXPECTED_PAYLOAD_SIZE: 14
|
+ EXPECTED_PAYLOAD_SIZE: 14
|
||||||
|
+ DEDUP_WINDOW_SECONDS: 10
|
||||||
|
+ INVALID_VALUE: 0xFFFFFFFF
|
||||||
--
|
--
|
||||||
+ decode_payload(data: bytes): dict
|
+ decode_payload(data: bytes): dict
|
||||||
+ publish(mac: str, data: dict)
|
+ publish(mac: str, data: dict)
|
||||||
|
+ is_duplicate(mac: str): bool
|
||||||
+ on_device_found(device, adv_data)
|
+ on_device_found(device, adv_data)
|
||||||
+ on_connect(client, userdata, flags, reason_code, properties)
|
+ on_connect(...)
|
||||||
+ on_publish(client, userdata, mid, reason_code, properties)
|
+ on_disconnect(...)
|
||||||
|
+ on_publish(...)
|
||||||
+ run()
|
+ run()
|
||||||
}
|
}
|
||||||
|
|
||||||
class BleakScanner {
|
class BleakScanner {
|
||||||
+ start()
|
+ start()
|
||||||
+ stop()
|
+ stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
class MQTTClient {
|
class MQTTClient {
|
||||||
+ connect()
|
+ connect()
|
||||||
+ publish()
|
+ publish()
|
||||||
@@ -32,6 +33,8 @@ class MQTTClient {
|
|||||||
+ username_pw_set()
|
+ username_pw_set()
|
||||||
+ loop_start()
|
+ loop_start()
|
||||||
}
|
}
|
||||||
|
|
||||||
Gateway o-- BleakScanner
|
Gateway o-- BleakScanner
|
||||||
Gateway o-- MQTTClient
|
Gateway o-- MQTTClient
|
||||||
|
|
||||||
@enduml
|
@enduml
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ thingy -> gw : BLE advertising packet
|
|||||||
|
|
||||||
alt company_id != 0xffff
|
alt company_id != 0xffff
|
||||||
gw -> gw : discard packet
|
gw -> gw : discard packet
|
||||||
else company_id == 0xffff
|
else
|
||||||
gw -> gw : check payload size
|
gw -> gw : check payload size
|
||||||
|
|
||||||
alt payload size != 14 bytes
|
alt payload size != 14 bytes
|
||||||
@@ -21,15 +21,19 @@ else company_id == 0xffff
|
|||||||
|
|
||||||
alt unknown key in payload
|
alt unknown key in payload
|
||||||
gw -> gw : discard packet\nlog debug
|
gw -> gw : discard packet\nlog debug
|
||||||
else valid keys
|
else
|
||||||
alt CO2 == 0xFFFFFFFF
|
alt CO2 == 0xFFFFFFFF
|
||||||
gw -> gw : discard CO2 value\n(sensor not ready)
|
gw -> gw : discard CO2 value\n(sensor not ready)
|
||||||
end
|
end
|
||||||
|
|
||||||
gw -> gw : add UTC timestamp
|
alt duplicate within 10 seconds
|
||||||
gw -> broker : publish JSON\n{gateway_id}/{mac}/update
|
gw -> gw : discard packet\n(deduplication)
|
||||||
broker --> gw : on_publish confirmed
|
else
|
||||||
broker -> db : store measurement
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user