41 lines
1.0 KiB
Plaintext
41 lines
1.0 KiB
Plaintext
@startuml
|
|
skinparam sequenceMessageAlign center
|
|
|
|
collections "BLE broadcaster" as thingy
|
|
participant "Gateway\n(Raspberry Pi)" as gw
|
|
participant "MQTT Broker\n(RabbitMQ)" as broker
|
|
participant "Database\n(InfluxDB)" as db
|
|
|
|
== Data collection ==
|
|
thingy -> gw : BLE advertising packet
|
|
|
|
alt company_id != 0xffff
|
|
gw -> gw : discard packet
|
|
else
|
|
gw -> gw : check payload size
|
|
|
|
alt payload size != 14 bytes
|
|
gw -> gw : discard packet\n(non-Thingy device)
|
|
else
|
|
gw -> gw : decode_payload()
|
|
|
|
alt unknown key in payload
|
|
gw -> gw : discard packet\nlog debug
|
|
else
|
|
alt CO2 == 0xFFFFFFFF
|
|
gw -> gw : discard CO2 value\n(sensor not ready)
|
|
end
|
|
|
|
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
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
@enduml
|