Browse Source

0.8.970003-zero

pull/1535/head
Patrick Amrhein 1 year ago
parent
commit
eb3df78b58
  1. 2
      src/defines.h
  2. 59
      src/plugins/zeroExport/powermeter.h
  3. 5
      src/plugins/zeroExport/zeroExport.h
  4. 16
      src/web/html/setup.html

2
src/defines.h

@ -13,7 +13,7 @@
//------------------------------------- //-------------------------------------
#define VERSION_MAJOR 0 #define VERSION_MAJOR 0
#define VERSION_MINOR 8 #define VERSION_MINOR 8
#define VERSION_PATCH 970002 #define VERSION_PATCH 970003
//------------------------------------- //-------------------------------------
typedef struct { typedef struct {

59
src/plugins/zeroExport/powermeter.h

@ -1,24 +1,28 @@
//-----------------------------------------------------------------------------
// 2024 Ahoy, https://ahoydtu.de
// Creative Commons - https://creativecommons.org/licenses/by-nc-sa/4.0/deed
//-----------------------------------------------------------------------------
#ifndef __POWERMETER_H__ #ifndef __POWERMETER_H__
#define __POWERMETER_H__ #define __POWERMETER_H__
#include <AsyncJson.h> #include <AsyncJson.h>
#include <Base64.h>
#include <HTTPClient.h> #include <HTTPClient.h>
#include <base64.h> #include <base64.h>
#include <string.h> #include <string.h>
#include <list> #include <list>
#include "SML.h" #include <SML.h>
#include <Base64.h>
#include "config/settings.h" #include "config/settings.h"
typedef struct { typedef struct {
const unsigned char OBIS[6]; const unsigned char OBIS[6];
void (*Fn)(double&); void (*Fn)(double &);
float* Arg; float *Arg;
} OBISHandler; } OBISHandler;
class powermeter { class powermeter {
public: public:
powermeter() { powermeter() {
@ -58,11 +62,11 @@ class powermeter {
break; break;
case 5: case 5:
result = getPowermeterWattsTibber(logObj, group); result = getPowermeterWattsTibber(logObj, group);
if (result) { // if (result) {
logObj["export"] = String(_powerMeterExport); // logObj["export"] = String(_powerMeterExport);
logObj["import"] = String(_powerMeterImport); // logObj["import"] = String(_powerMeterImport);
logObj["power"] = String(_powerMeter1Power); // logObj["power"] = String(_powerMeter1Power);
} // }
break; break;
} }
if (!result) { if (!result) {
@ -408,9 +412,7 @@ class powermeter {
const std::list<OBISHandler> smlHandlerList{ const std::list<OBISHandler> smlHandlerList{
{{0x01, 0x00, 0x10, 0x07, 0x00, 0xff}, &smlOBISW, &_powerMeter1Power}, {{0x01, 0x00, 0x10, 0x07, 0x00, 0xff}, &smlOBISW, &_powerMeter1Power},
{{0x01, 0x00, 0x01, 0x08, 0x00, 0xff}, &smlOBISWh, &_powerMeterImport}, {{0x01, 0x00, 0x01, 0x08, 0x00, 0xff}, &smlOBISWh, &_powerMeterImport},
{{0x01, 0x00, 0x02, 0x08, 0x00, 0xff}, &smlOBISWh, &_powerMeterExport} {{0x01, 0x00, 0x02, 0x08, 0x00, 0xff}, &smlOBISWh, &_powerMeterExport}};
};
bool getPowermeterWattsTibber(JsonObject logObj, uint8_t group) { bool getPowermeterWattsTibber(JsonObject logObj, uint8_t group) {
bool result = false; bool result = false;
@ -423,8 +425,8 @@ class powermeter {
HTTPClient http; HTTPClient http;
http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS); http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
http.setUserAgent("Ahoy-Agent"); http.setUserAgent("Ahoy-Agent");
http.setConnectTimeout(500); http.setConnectTimeout(1000);
http.setTimeout(500); http.setTimeout(1000);
http.addHeader("Content-Type", "application/json"); http.addHeader("Content-Type", "application/json");
http.addHeader("Accept", "application/json"); http.addHeader("Accept", "application/json");
@ -434,31 +436,32 @@ class powermeter {
http.begin(url); http.begin(url);
http.addHeader("Authorization", "Basic " + auth); http.addHeader("Authorization", "Basic " + auth);
if (http.GET() == HTTP_CODE_OK) if (http.GET() == HTTP_CODE_OK) {
{
String myString = http.getString(); String myString = http.getString();
char floatBuffer[20]; char floatBuffer[20];
double readVal = 0; double readVal = 0;
unsigned char c; unsigned char c;
for (int i = 0; i < http.getSize(); ++i) for (int i = 0; i < http.getSize(); ++i) {
{
c = myString[i]; c = myString[i];
sml_states_t smlCurrentState = smlState(c); sml_states_t smlCurrentState = smlState(c);
switch(smlCurrentState) switch (smlCurrentState) {
{
case SML_FINAL: case SML_FINAL:
mCfg->groups[group].pmPower = _powerMeter1Power; mCfg->groups[group].pmPower = _powerMeter1Power;
mCfg->groups[group].pmPowerL1 = _powerMeter1Power / 3;
mCfg->groups[group].pmPowerL2 = _powerMeter1Power / 3;
mCfg->groups[group].pmPowerL3 = _powerMeter1Power / 3;
/*mCfg->groups[group].pmPower = _powerMeterImport; /*mCfg->groups[group].pmPower = _powerMeterImport;
mCfg->groups[group].pmPower = _powerMeterExport;*/ mCfg->groups[group].pmPower = _powerMeterExport;*/
return true; // TODO: Ein return an dieser Stelle verhindert das ordnungsgemäße http.end()
result = true;
// return true;
break; break;
case SML_LISTEND: case SML_LISTEND:
// check handlers on last received list // check handlers on last received list
for (auto &handler: smlHandlerList) for (auto &handler : smlHandlerList) {
{
if (smlOBISCheck(handler.OBIS)) { if (smlOBISCheck(handler.OBIS)) {
handler.Fn(readVal); handler.Fn(readVal);
*handler.Arg = readVal; *handler.Arg = readVal;
@ -469,7 +472,13 @@ class powermeter {
} }
} }
http.end(); http.end();
return false;
logObj["P"] = mCfg->groups[group].pmPower;
logObj["P1"] = mCfg->groups[group].pmPowerL1;
logObj["P2"] = mCfg->groups[group].pmPowerL2;
logObj["P3"] = mCfg->groups[group].pmPowerL3;
return result;
} }
private: private:

5
src/plugins/zeroExport/zeroExport.h

@ -1,3 +1,8 @@
//-----------------------------------------------------------------------------
// 2024 Ahoy, https://ahoydtu.de
// Creative Commons - https://creativecommons.org/licenses/by-nc-sa/4.0/deed
//-----------------------------------------------------------------------------
#if defined(PLUGIN_ZEROEXPORT) #if defined(PLUGIN_ZEROEXPORT)
#ifndef __ZEROEXPORT__ #ifndef __ZEROEXPORT__

16
src/web/html/setup.html

@ -1355,7 +1355,7 @@
), ),
// TODO: Hinweis Github/Discord - Entfernen wenn erledigt // TODO: Hinweis Github/Discord - Entfernen wenn erledigt
divRow("ACHTUNG: ", divRow("ACHTUNG: ",
ml("a", {href: "https://discord.com/channels/984173303147155506/1211365440253726851"}, "Bitte auf Github keine Issues zu Zero eröffnen, sondern direkt im Discord melden."), ml("a", {href: "https://discord.com/channels/984173303147155506/1211365440253726851"}, "Bitte auf Github keine Issues zu Zero er&ouml;ffnen, sondern direkt im Discord melden."),
), ),
]), ]),
// Powermeter // Powermeter
@ -1381,7 +1381,7 @@
), ),
// TODO: Hinweis Github/Discord - Entfernen wenn erledigt // TODO: Hinweis Github/Discord - Entfernen wenn erledigt
divRow("ACHTUNG: ", divRow("ACHTUNG: ",
ml("a", {href: "https://discord.com/channels/984173303147155506/1211365440253726851"}, "Bitte auf Github keine Issues zu Zero eröffnen, sondern direkt im Discord melden."), ml("a", {href: "https://discord.com/channels/984173303147155506/1211365440253726851"}, "Bitte auf Github keine Issues zu Zero er&ouml;ffnen, sondern direkt im Discord melden."),
), ),
]), ]),
// Inverter // Inverter
@ -1393,7 +1393,7 @@
), ),
// TODO: Hinweis Github/Discord - Entfernen wenn erledigt // TODO: Hinweis Github/Discord - Entfernen wenn erledigt
divRow("ACHTUNG: ", divRow("ACHTUNG: ",
ml("a", {href: "https://discord.com/channels/984173303147155506/1211365440253726851"}, "Bitte auf Github keine Issues zu Zero eröffnen, sondern direkt im Discord melden."), ml("a", {href: "https://discord.com/channels/984173303147155506/1211365440253726851"}, "Bitte auf Github keine Issues zu Zero er&ouml;ffnen, sondern direkt im Discord melden."),
), ),
]), ]),
// Battery // Battery
@ -1408,7 +1408,7 @@
), ),
// TODO: Hinweis Github/Discord - Entfernen wenn erledigt // TODO: Hinweis Github/Discord - Entfernen wenn erledigt
divRow("ACHTUNG: ", divRow("ACHTUNG: ",
ml("a", {href: "https://discord.com/channels/984173303147155506/1211365440253726851"}, "Bitte auf Github keine Issues zu Zero eröffnen, sondern direkt im Discord melden."), ml("a", {href: "https://discord.com/channels/984173303147155506/1211365440253726851"}, "Bitte auf Github keine Issues zu Zero er&ouml;ffnen, sondern direkt im Discord melden."),
), ),
]), ]),
// Advanced // Advanced
@ -1426,7 +1426,7 @@
), ),
// TODO: Hinweis Github/Discord - Entfernen wenn erledigt // TODO: Hinweis Github/Discord - Entfernen wenn erledigt
divRow("ACHTUNG: ", divRow("ACHTUNG: ",
ml("a", {href: "https://discord.com/channels/984173303147155506/1211365440253726851"}, "Bitte auf Github keine Issues zu Zero eröffnen, sondern direkt im Discord melden."), ml("a", {href: "https://discord.com/channels/984173303147155506/1211365440253726851"}, "Bitte auf Github keine Issues zu Zero er&ouml;ffnen, sondern direkt im Discord melden."),
), ),
]), ]),
// Global // Global
@ -1571,7 +1571,7 @@
modal("{#ZE_GROUP_DELETE_MODAL}: " + obj.name, html); modal("{#ZE_GROUP_DELETE_MODAL}: " + obj.name, html);
function del() { function del() {
// TODO: Es w�re gut, wenn die Defaultwerte nicht hier sondern wie in der settings.h gesetzt w�rden. // TODO: Es waere gut, wenn die Defaultwerte nicht hier sondern wie in der settings.h gesetzt wuerden.
var o = new Object(); var o = new Object();
o.cmd = "ze_save_group"; o.cmd = "ze_save_group";
// General // General
@ -1667,7 +1667,7 @@
])); ]));
} }
// TODO: Das Add sollte anders / �berhaupt gel�st werden // TODO: Das Add sollte anders / ueberhaupt geloest werden
var add = new Object(); var add = new Object();
add.enabled = true; add.enabled = true;
add.id = obj.groups.length; add.id = obj.groups.length;
@ -1690,7 +1690,7 @@
// TODO: Hinweis Github/Discord - Entfernen wenn erledigt // TODO: Hinweis Github/Discord - Entfernen wenn erledigt
e.append( e.append(
divRow("ACHTUNG: ", divRow("ACHTUNG: ",
ml("a", {href: "https://discord.com/channels/984173303147155506/1211365440253726851"}, "Bitte auf Github keine Issues zu Zero eröffnen, sondern direkt im Discord melden."), ml("a", {href: "https://discord.com/channels/984173303147155506/1211365440253726851"}, "Bitte auf Github keine Issues zu Zero er&ouml;ffnen, sondern direkt im Discord melden."),
), ),
); );
if(maxGroups > obj.groups.length) { if(maxGroups > obj.groups.length) {

Loading…
Cancel
Save