40 lines
1.2 KiB
Go
40 lines
1.2 KiB
Go
package mqttingest
|
|
|
|
import "encoding/json"
|
|
|
|
// WS90Payload matches your JSON keys.
|
|
type WS90Payload struct {
|
|
Model string `json:"model"`
|
|
ID int64 `json:"id"`
|
|
BatteryOK int `json:"battery_ok"`
|
|
BatteryMV int `json:"battery_mV"`
|
|
TemperatureC float64 `json:"temperature_C"`
|
|
Humidity float64 `json:"humidity"`
|
|
WindDirDeg float64 `json:"wind_dir_deg"`
|
|
WindAvgMS float64 `json:"wind_avg_m_s"`
|
|
WindMaxMS float64 `json:"wind_max_m_s"`
|
|
UVI float64 `json:"uvi"`
|
|
LightLux float64 `json:"light_lux"`
|
|
Flags int `json:"flags"`
|
|
RainMM float64 `json:"rain_mm"`
|
|
RainStart int64 `json:"rain_start"`
|
|
SupercapV float64 `json:"supercap_V"`
|
|
Firmware int `json:"firmware"`
|
|
Data string `json:"data"`
|
|
MIC string `json:"mic"`
|
|
Protocol string `json:"protocol"`
|
|
RSSI int `json:"rssi"`
|
|
Duration int64 `json:"duration"`
|
|
}
|
|
|
|
func ParseWS90(b []byte) (*WS90Payload, map[string]any, error) {
|
|
var p WS90Payload
|
|
if err := json.Unmarshal(b, &p); err != nil {
|
|
return nil, nil, err
|
|
}
|
|
// Keep the full payload as JSONB too.
|
|
var raw map[string]any
|
|
_ = json.Unmarshal(b, &raw)
|
|
return &p, raw, nil
|
|
}
|