mirror of
https://github.com/lumapu/ahoy.git
synced 2025-06-10 14:41:37 +02:00
0.8.970003-zero
This commit is contained in:
parent
dab72f3777
commit
eb3df78b58
4 changed files with 53 additions and 39 deletions
|
@ -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 {
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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__
|
||||||
|
|
|
@ -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ö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ö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ö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ö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ö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<EFBFBD>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 / <EFBFBD>berhaupt gel<65>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öffnen, sondern direkt im Discord melden."),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
if(maxGroups > obj.groups.length) {
|
if(maxGroups > obj.groups.length) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue