parse sensor json values

This commit is contained in:
Travis Shears 2026-03-25 10:04:40 +01:00
parent 6c0711acd5
commit a1020b80d2
Signed by: travisshears
GPG key ID: CB9BF1910F3F7469
5 changed files with 46 additions and 14 deletions

View file

@ -1,5 +1,5 @@
import gleam/bit_array
import gleam/erlang/process
import gleam/io
import gleam/list
import gleam/otp/actor
import sensors
@ -17,11 +17,13 @@ fn handle_message(
state: State,
update: mqtt.Update,
) -> actor.Next(State, mqtt.Update) {
echo update
case parse_mqtt_update(update) {
Ok(reading) -> {
Ok(readings) -> {
// Publish to all subscribers
echo readings
list.each(state.subscribers, fn(subscriber) {
process.send(subscriber, reading)
list.each(readings, fn(reading) { process.send(subscriber, reading) })
})
actor.continue(state)
}
@ -29,12 +31,20 @@ fn handle_message(
}
}
fn parse_mqtt_update(update: mqtt.Update) -> Result(sensors.SensorReading, Nil) {
io.println("GOT MQTT MESSAGE!")
echo update
// TODO: Implement parsing logic based on your MQTT topic/payload structure
// For now, return an error
Error(Nil)
fn parse_mqtt_update(
update: mqtt.Update,
) -> Result(List(sensors.SensorReading), Nil) {
case update {
mqtt.ReceivedMessage(topic, payload, _) -> {
let assert Ok(payload_str) = bit_array.to_string(payload)
case topic {
"homeassistant/sensor/bws/node1/state1" ->
Ok(sensors.parse_topic_1(payload_str))
_ -> Error(Nil)
}
}
_ -> Error(Nil)
}
}
pub fn start(