Skip to content

Commit

Permalink
json/mqtt decimal fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
mhendriks committed Mar 27, 2022
1 parent 2713a5d commit f3e8ebc
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 40 deletions.
10 changes: 5 additions & 5 deletions DSMR-API-V2.ino
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ TODO
- eenmalig doorgeven ipadres om het installeren makkelijk te maken (alleen op verzoek en voor maar 15 minuten)
- Opties in de config (bv water/blynk/NTP) obv deze config juiste updates ophalen
- Aanpassen front-end ivm no-history feaure
- telnet update via windows ... invoeren lukt niet
!!! FIXES
- telnet update via windows ... invoeren lukt niet
Arduino-IDE settings for DSMR-logger hardware ESP12S module:
Expand All @@ -38,12 +38,12 @@ Arduino-IDE settings for DSMR-logger hardware ESP12S module:
/******************** compiler options ********************************************/
//#define HAS_NO_SLIMMEMETER // define for testing only!
//#define SHOW_PASSWRDS // well .. show the PSK key and MQTT password, what else?
#define DEBUG_MODE
//#define V2_COMPATIBLE // Spiffs version firmware 2.x compatible ESP-M(2/3) HARDWARE
//#define DEBUG_MODE
//#define V2_COMPATIBLE // Spiffs version firmware 2.x compatible ESP-M(2/3) HARDWARE

//----- EXTENSIONS
//#define USE_WATER_SENSOR 1
#define USE_APP 4 // define if the Arduino IOT app could be used
#define USE_WATER_SENSOR
//#define USE_APP // define if the Arduino IOT app could be used
#define HA_DISCOVER

#ifdef USE_WATER_SENSOR
Expand Down
2 changes: 2 additions & 0 deletions Helper.ino
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,8 @@ float typecastValue(FixedValue i)
return i;
}



/***************************************************************************
*
* Permission is hereby granted, free of charge, to any person obtaining a
Expand Down
10 changes: 5 additions & 5 deletions JsonCalls.ino
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ DynamicJsonDocument jsonDoc(4100); // generic doc to return, clear() before use
void JsonGas(){
if (!gasDelivered) return;

jsonDoc["gas_delivered"]["value"] = gasDelivered;
jsonDoc["gas_delivered"]["value"] = (int)(gasDelivered*1000)/1000.0;
jsonDoc["gas_delivered"]["unit"] = "m3";
}

Expand Down Expand Up @@ -81,12 +81,12 @@ struct buildJson {
return i;
}

String value_to_json(TimestampedFixedValue i) {
return String(i);
double value_to_json(TimestampedFixedValue i) {
return i.int_val()/1000.0;
}

float value_to_json(FixedValue i) {
return i;
double value_to_json(FixedValue i) {
return i.int_val()/1000.0;
}

}; // buildjson{}
Expand Down
33 changes: 21 additions & 12 deletions MQTT.ino
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@
void SendAutoDiscoverHA(const char* dev_name, const char* dev_class, const char* dev_title, const char* dev_unit, const char* dev_payload, const char* state_class, const char* extrapl ){
char msg_topic[60];
char msg_payload[350];
sprintf(msg_topic,"homeassistant/sensor/%s/config",dev_name);
sprintf(msg_topic,"homeassistant/sensor/%s/config",dev_name);
// Debugln(msg_topic);

if (strlen(dev_class)) sprintf(msg_payload,"{\"uniq_id\":\"%s\",\"dev_cla\": \"%s\",\"name\": \"%s\", \"stat_t\": \"%s%s\", \"unit_of_meas\": \"%s\", \"val_tpl\": \"%s\", \"state_class\":\"%s\"%s }", dev_name,dev_class, dev_title, settingMQTTtopTopic, dev_name, dev_unit, dev_payload,state_class, extrapl);
else sprintf(msg_payload,"{\"uniq_id\":\"%s\",\"name\": \"%s\", \"stat_t\": \"%s%s\", \"unit_of_meas\": \"%s\", \"val_tpl\": \"%s\", \"state_class\":\"%s\"%s }", dev_name, dev_title, settingMQTTtopTopic, dev_name, dev_unit, dev_payload,state_class, extrapl);
if (strlen(dev_class)) sprintf(msg_payload,"{\"uniq_id\":\"%s\",\"dev_cla\": \"%s\",\"name\": \"%s\", \"stat_t\": \"%s%s\", \"unit_of_meas\": \"%s\", \"val_tpl\": \"%s\", \"state_class\":\"%s\"%s }", dev_name,dev_class, dev_title, settingMQTTtopTopic, dev_name, dev_unit, dev_payload,state_class, extrapl);
else sprintf(msg_payload,"{\"uniq_id\":\"%s\",\"name\": \"%s\", \"stat_t\": \"%s%s\", \"unit_of_meas\": \"%s\", \"val_tpl\": \"%s\", \"state_class\":\"%s\"%s }", dev_name, dev_title, settingMQTTtopTopic, dev_name, dev_unit, dev_payload,state_class, extrapl);
// Debugln(msg_payload);
if (!MQTTclient.publish(msg_topic, msg_payload, true) ) DebugTf("Error publish(%s) [%s] [%d bytes]\r\n", msg_topic, msg_payload, (strlen(msg_topic) + strlen(msg_payload)));
}
Expand All @@ -43,21 +43,21 @@ void AutoDiscoverHA(){

SendAutoDiscoverHA("timestamp", "", "DSMR Last Update", "", "{{ strptime(value_json.timestamp[0].value[0:12], \'%y%m%d%H%M%S\') }}","measurement", ",\"icon\": \"mdi:clock\"");

SendAutoDiscoverHA("power_delivered", "power", "Power Delivered", "Wh", "{{ value_json.power_delivered[0].value | round(3) * 1000}}","measurement","");
SendAutoDiscoverHA("power_returned", "power", "Power Returned", "Wh", "{{ value_json.power_returned[0].value | round(3) * 1000}}","measurement","");
SendAutoDiscoverHA("power_delivered", "power", "Power Delivered", "W", "{{ value_json.power_delivered[0].value | round(3) * 1000}}","measurement","");
SendAutoDiscoverHA("power_returned", "power", "Power Returned", "W", "{{ value_json.power_returned[0].value | round(3) * 1000}}","measurement","");

SendAutoDiscoverHA("energy_delivered_tariff1", "energy", "Energy Delivered T1", "kWh", "{{ value_json.energy_delivered_tariff1[0].value | round(3) }}","total_increasing","");
SendAutoDiscoverHA("energy_delivered_tariff2", "energy", "Energy Delivered T2", "kWh", "{{ value_json.energy_delivered_tariff2[0].value | round(3) }}","total_increasing","");
SendAutoDiscoverHA("energy_returned_tariff1", "energy", "Energy Returned T1", "kWh", "{{ value_json.energy_returned_tariff1[0].value | round(3) }}","total_increasing","");
SendAutoDiscoverHA("energy_returned_tariff2", "energy", "Energy Returned T2", "kWh", "{{ value_json.energy_returned_tariff2[0].value | round(3) }}","total_increasing","");

SendAutoDiscoverHA("power_delivered_l1", "power", "Power Delivered l1", "Watt", "{{ value_json.power_delivered_l1[0].value | round(3) * 1000 }}","measurement","");
SendAutoDiscoverHA("power_delivered_l2", "power", "Power Delivered l2", "Watt", "{{ value_json.power_delivered_l2[0].value | round(3) * 1000 }}","measurement","");
SendAutoDiscoverHA("power_delivered_l3", "power", "Power Delivered l3", "Watt", "{{ value_json.power_delivered_l3[0].value | round(3) * 1000 }}","measurement","");
SendAutoDiscoverHA("power_delivered_l1", "power", "Power Delivered l1", "W", "{{ value_json.power_delivered_l1[0].value | round(3) * 1000 }}","measurement","");
SendAutoDiscoverHA("power_delivered_l2", "power", "Power Delivered l2", "W", "{{ value_json.power_delivered_l2[0].value | round(3) * 1000 }}","measurement","");
SendAutoDiscoverHA("power_delivered_l3", "power", "Power Delivered l3", "W", "{{ value_json.power_delivered_l3[0].value | round(3) * 1000 }}","measurement","");

SendAutoDiscoverHA("power_returned_l1", "power", "Power Returned l1", "Watt", "{{ value_json.power_returned_l1[0].value | round(3) * 1000 }}","measurement","");
SendAutoDiscoverHA("power_returned_l2", "power", "Power Returned l2", "Watt", "{{ value_json.power_returned_l2[0].value | round(3) * 1000 }}","measurement","");
SendAutoDiscoverHA("power_returned_l3", "power", "Power Returned l3", "Watt", "{{ value_json.power_returned_l3[0].value | round(3) * 1000 }}","measurement","");
SendAutoDiscoverHA("power_returned_l1", "power", "Power Returned l1", "W", "{{ value_json.power_returned_l1[0].value | round(3) * 1000 }}","measurement","");
SendAutoDiscoverHA("power_returned_l2", "power", "Power Returned l2", "W", "{{ value_json.power_returned_l2[0].value | round(3) * 1000 }}","measurement","");
SendAutoDiscoverHA("power_returned_l3", "power", "Power Returned l3", "W", "{{ value_json.power_returned_l3[0].value | round(3) * 1000 }}","measurement","");

SendAutoDiscoverHA("voltage_l1", "voltage", "Voltage l1", "V", "{{ value_json.voltage_l1[0].value | round(0) }}","measurement","");
SendAutoDiscoverHA("voltage_l2", "voltage", "Voltage l2", "V", "{{ value_json.voltage_l2[0].value | round(0) }}","measurement","");
Expand Down Expand Up @@ -274,7 +274,16 @@ struct buildJsonMQTT {

String value_to_json( String i){
return "\"" + i+ "\"";
}
}

String value_to_json(FixedValue i) {
return String(i.val(), 3);
}

String value_to_json(TimestampedFixedValue i) {
return String(i.val(), 3);
}

}; // buildJsonMQTT

//===========================================================================================
Expand Down
22 changes: 14 additions & 8 deletions Network.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,20 @@
ESP8266WebServer httpServer (80);
ESP8266HTTPUpdateServer httpUpdater(true);

#define MaxWifiReconnect 10
#define MaxWifiReconnect 10
DECLARE_TIMER_SEC(WifiReconnect, 5); //try after x sec

bool isConnected = false;
bool WifiBoot = true;
//bool isConnected = false;
bool WifiBoot = true;
byte WiFiReconnectCount = 0;
bool WifiConnected = false;

void P1StatusWrite();
void P1Reboot();
void LogFile(const char*, bool);
void startWiFi(const char* , int );


// naar setup van https://github.com/gmag11/ESPNtpClient/blob/main/examples/advancedExample/advancedExample.ino
void onWifiEvent (WiFiEvent_t event) {
switch (event) {
Expand All @@ -47,12 +50,15 @@ void onWifiEvent (WiFiEvent_t event) {
Debug (F(" ( gateway: " )); Debug (WiFi.gatewayIP());Debug(" )\n\n");
WiFiReconnectCount = 0;
WifiBoot = false;
WifiConnected = true;
break;
case WIFI_EVENT_STAMODE_DISCONNECTED:
LogFile("Wifi connection lost",true);
delay(1000); //wait longer before retrying
WiFi.reconnect();
if ( (WiFiReconnectCount++ > MaxWifiReconnect) && !WifiBoot ) P1Reboot();
if (DUE(WifiReconnect)) {
if ( WifiConnected ) LogFile("Wifi connection lost",true); //log only once
WifiConnected = false;
WiFi.reconnect();
if ( (WiFiReconnectCount++ > MaxWifiReconnect) && !WifiBoot ) P1Reboot();
}
break;
default:
DebugTf ("[WiFi-event] event: %d\n", event);
Expand All @@ -78,7 +84,7 @@ void startWiFi(const char* hostname, int timeOut)
uint32_t lTime = millis();
String thisAP = String(hostname) + "-" + WiFi.macAddress();

LogFile("Wifi Starting", true);
Debugln(F("Wifi Starting"));
digitalWrite(LED, HIGH); //OFF
WifiBoot = true;
WiFi.onEvent(onWifiEvent);
Expand Down
8 changes: 4 additions & 4 deletions edge/DSMRindex_body.html
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@ <h2>Afgelopen Uren</h2>
</colgroup>
<tr>
<th>Datum/Tijd</th>
<th>Energie<br>Verbruik<br>(Watt)</th>
<th>Energie<br>Teruglevering<br>(Watt)</th>
<th>Energie<br>Verbruik<br>(Wh)</th>
<th>Energie<br>Teruglevering<br>(Wh)</th>
<th>Gas-<br>verbruik<br>(m3)</th>
<th>Water-<br>verbruik<br>(m3)</th>
<!--<th style="text-align: right; border-bottom: 2px solid #ddd;">Kosten</th>-->
Expand Down Expand Up @@ -99,8 +99,8 @@ <h2>Afgelopen Dagen</h2>
<thead>
<tr>
<th>Datum/Tijd</th>
<th>Energie<br>Verbruik<br>(Watt)</th>
<th>Energie<br>Teruglevering<br>(Watt)</th>
<th>Energie<br>Verbruik<br>(Wh)</th>
<th>Energie<br>Teruglevering<br>(Wh)</th>
<th>Gas-<br>verbruik<br>(m3)</th>
<th>Water-<br>verbruik<br>(m3)</th>
<th>Kosten</th>
Expand Down
2 changes: 1 addition & 1 deletion edge/DSMRversion.dat
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v3.3.2 - ota fixes
v3.3.3 - decimal fixes
10 changes: 5 additions & 5 deletions version.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
#define _VERSION_MAJOR 3
#define _VERSION_MINOR 3
#define _VERSION_PATCH 3
#define _VERSION_BUILD 957
#define _VERSION_DATE "20/03/2022"
#define _VERSION_TIME "11:21:33"
#define _VERSION_BUILD 1042
#define _VERSION_DATE "27/03/2022"
#define _VERSION_TIME "12:27:34"
#define _VERSION_ONLY "3.3.3"
#define _VERSION_NOBUILD "3.3.3 (20/03/2022)"
#define _VERSION "3.3.3+957 (20/03/2022)"
#define _VERSION_NOBUILD "3.3.3 (27/03/2022)"
#define _VERSION "3.3.3+1042 (27/03/2022)"
//The version information is created automatically, more information here: https://github.com/rvdbreemen/autoinc-semver

0 comments on commit f3e8ebc

Please sign in to comment.