From 4e039d96bc851e14da2a4966a51c0694ca266da1 Mon Sep 17 00:00:00 2001 From: Knut Ahlers Date: Wed, 15 Jul 2020 20:41:14 +0200 Subject: [PATCH] Add more settings reader Signed-off-by: Knut Ahlers --- settings.go | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/settings.go b/settings.go index 1680a67..eddf955 100644 --- a/settings.go +++ b/settings.go @@ -2,6 +2,7 @@ package main import ( "encoding/json" + "fmt" "strconv" "strings" "time" @@ -12,16 +13,20 @@ import ( type settingExtractor func([]byte) (interface{}, error) var extractors = map[string]settingExtractor{ - "currentcal": func(p []byte) (interface{}, error) { return extractFloatToInt("CurrentCal", p) }, - "devicename": func(p []byte) (interface{}, error) { return extractGenericJSONValue("DeviceName", p) }, - "ledstate": func(p []byte) (interface{}, error) { return extractFloatToInt("LedState", p) }, - "module": extractModule, - "otaurl": func(p []byte) (interface{}, error) { return extractGenericJSONValue("OtaUrl", p) }, - "powercal": func(p []byte) (interface{}, error) { return extractFloatToInt("PowerCal", p) }, - "teleperiod": func(p []byte) (interface{}, error) { return extractFloatToInt("TelePeriod", p) }, - "timezone": func(p []byte) (interface{}, error) { return extractGenericJSONValue("Timezone", p) }, - "topic": func(p []byte) (interface{}, error) { return extractGenericJSONValue("Topic", p) }, - "voltagecal": func(p []byte) (interface{}, error) { return extractFloatToInt("VoltageCal", p) }, + "currentcal": func(p []byte) (interface{}, error) { return extractFloatToInt("CurrentCal", p) }, + "devicename": func(p []byte) (interface{}, error) { return extractGenericJSONValue("DeviceName", p) }, + "ledstate": func(p []byte) (interface{}, error) { return extractFloatToInt("LedState", p) }, + "module": extractModule, + "otaurl": func(p []byte) (interface{}, error) { return extractGenericJSONValue("OtaUrl", p) }, + "powercal": func(p []byte) (interface{}, error) { return extractFloatToInt("PowerCal", p) }, + "poweronstate": func(p []byte) (interface{}, error) { return extractFloatToInt("PowerOnState", p) }, + "pulsetime1": func(p []byte) (interface{}, error) { return extractPulseTime(1, p) }, + "switchmode1": func(p []byte) (interface{}, error) { return extractFloatToInt("SwitchMode1", p) }, + "switchmode2": func(p []byte) (interface{}, error) { return extractFloatToInt("SwitchMode2", p) }, + "teleperiod": func(p []byte) (interface{}, error) { return extractFloatToInt("TelePeriod", p) }, + "timezone": func(p []byte) (interface{}, error) { return extractGenericJSONValue("Timezone", p) }, + "topic": func(p []byte) (interface{}, error) { return extractGenericJSONValue("Topic", p) }, + "voltagecal": func(p []byte) (interface{}, error) { return extractFloatToInt("VoltageCal", p) }, } func extractSettingValue(setting string, payloadChan chan []byte) (interface{}, error) { @@ -90,3 +95,18 @@ func extractModule(payload []byte) (interface{}, error) { return strconv.Atoi(values[0]) } + +func extractPulseTime(slot int, payload []byte) (interface{}, error) { + // {"PulseTime1":{"Set":15,"Remaining":0}} + var data = map[string]struct{ Remaining, Set int }{} + if err := json.Unmarshal(payload, &data); err != nil { + return nil, errors.Wrap(err, "Unable to unmarshal response") + } + + pt, ok := data[fmt.Sprintf("PulseTime%d", slot)] + if !ok { + return nil, errors.Errorf("Found no response to PulseTime%d", slot) + } + + return pt.Set, nil +}