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 }