From fa62046e1da734f8bd8665131b4408528e057c20 Mon Sep 17 00:00:00 2001 From: Jonas Leder <jonas@jonasled.de> Date: Sat, 25 Jan 2025 13:28:46 +0100 Subject: [PATCH] sort keys by alphabet and fix time in csv --- csv/main.go | 21 ++++++++++++--------- helper/sortMapKeys.go | 13 +++++++++++++ mqttclient/main.go | 1 + 3 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 helper/sortMapKeys.go diff --git a/csv/main.go b/csv/main.go index 79d41c0..8d0a341 100644 --- a/csv/main.go +++ b/csv/main.go @@ -15,7 +15,7 @@ func JsonToCsv(jsonData string) { panic(err) } - currentDate := time.Now().Format("2006-01-02 13:44") + currentDate := time.Now().Local().Format("2006-01-02 15:04:05") file, err := os.OpenFile(os.Getenv("OUTPUT_FILE_NAME"), os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { @@ -23,28 +23,31 @@ func JsonToCsv(jsonData string) { } defer file.Close() + // Create a CSV writer writer := csv.NewWriter(file) defer writer.Flush() + // Check if file is empty to write header fileInfo, err := file.Stat() if err != nil { panic(err) } + + // Sort keys for consistent column order + keys := helper.SortMapKeys(data) + + // Write the header if the file is empty if fileInfo.Size() == 0 { - // Write header - header := []string{"Date"} - for key := range data { - header = append(header, key) - } + header := append([]string{"Date"}, keys...) if err := writer.Write(header); err != nil { panic(err) } } - // Write data as a single line with the date + // Write data row with the current date row := []string{currentDate} - for _, value := range data { - row = append(row, helper.AnyToString(value)) + for _, key := range keys { + row = append(row, helper.AnyToString(data[key])) } if err := writer.Write(row); err != nil { panic(err) diff --git a/helper/sortMapKeys.go b/helper/sortMapKeys.go new file mode 100644 index 0000000..f35d28b --- /dev/null +++ b/helper/sortMapKeys.go @@ -0,0 +1,13 @@ +package helper + +import "sort" + +// Helper function to get sorted keys from a map +func SortMapKeys(data map[string]interface{}) []string { + keys := make([]string, 0, len(data)) + for key := range data { + keys = append(keys, key) + } + sort.Strings(keys) // Sort keys alphabetically + return keys +} diff --git a/mqttclient/main.go b/mqttclient/main.go index c90d00c..d35a2aa 100644 --- a/mqttclient/main.go +++ b/mqttclient/main.go @@ -16,6 +16,7 @@ var messagePubHandler mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Me var messagePubHandlerBoiler mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message) { log.Log.Debugf("Received message for boiler: %s from topic: %s\n", msg.Payload(), msg.Topic()) + log.Log.Info("Received new boiler data") csv.JsonToCsv(string(msg.Payload())) } -- GitLab