Tagesverbrauch an Strom in Red Matic ausrechnen

Node-RED als CCU3/RaspberryMatic Addon, WebApp, HomeKit, ...

Moderator: Co-Administratoren

Stieger
Beiträge: 264
Registriert: 01.05.2014, 18:26
Danksagung erhalten: 1 Mal

Tagesverbrauch an Strom in Red Matic ausrechnen

Beitrag von Stieger » 09.10.2023, 20:43

Hallo zusammen

Leider komme ich nicht weiter und hoffe hier kann mir jemand weiter helfen. Ich habe ein Shelly 3EM verbaut welches mir laufend den aktuellen wert raus gibt. Diesen aktuellen wert habe ich auch in node red und kann ihn auf dem Dashboard ausgeben.

Nun suche ich aber eine Möglichkeit den aktuellen Tagesverbrauch anzuzeigen. Dies ist nicht ganz einfach oder ich stehe komplett auf dem Schlauch. Da das Shelly den wert unregelmässig ausgibt also nicht zuverlässig jede Sekunde müsste da ein script her welches die Daten umrechnet.

Also shelly gibt den aktuellen wert in Wh raus zu "unregelmässigen" Zeiten z.B. jede Sekunde. Nun möchte ich daraus den Tagesbedarf errechnen.

Hat dies schon mejmandg emahct oder eine Idee wo ich weiter suchen kann ?

Danke für eure Hilfe

Thomas

Benutzeravatar
Henke
Beiträge: 1536
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 144 Mal
Danksagung erhalten: 309 Mal

Re: Tagesverbrauch an Strom in Red Matic ausrechnen

Beitrag von Henke » 09.10.2023, 20:51

Der 3EM ist zusätzlich auch noch kritisch was die Datenmengen angeht und die Summe muss auch noch berechnet werden.
Hat etwas gedauert, bis ich den im Griff hatte.
Ergebnis:
Screenshot 2023-10-09 204542.jpg
So etwas suchst du?

Benutzeravatar
Baxxy
Beiträge: 11009
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 631 Mal
Danksagung erhalten: 2280 Mal

Re: Tagesverbrauch an Strom in Red Matic ausrechnen

Beitrag von Baxxy » 09.10.2023, 20:57

Sag bloß die Shelly's haben keinen Tagesenergiezähler?
Bei Tasmota gibt's:
ENERGY Today
ENERGY Yesterday
ENERGY Total

Ansonsten ist das doch recht einfache Mathematik.
Um 00:00 den Zählerstand in den Kontext speichern und bei jeder Aktualisierung den "Kontext-Wert" vom aktuellen Wert abziehen.

Stieger
Beiträge: 264
Registriert: 01.05.2014, 18:26
Danksagung erhalten: 1 Mal

Re: Tagesverbrauch an Strom in Red Matic ausrechnen

Beitrag von Stieger » 09.10.2023, 21:12

ohhh ja genau so was suche ich aber mal ganz einfach nur für den tagesverbrauch zu errechnen. mal zum anfangen. hast du da ein einfaches script ?

Benutzeravatar
Henke
Beiträge: 1536
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 144 Mal
Danksagung erhalten: 309 Mal

Re: Tagesverbrauch an Strom in Red Matic ausrechnen

Beitrag von Henke » 09.10.2023, 21:19

LOL
Theorie und Praxis
Basis MQTT und die ist gut von der Performance her.
Der 3EM liefert kein Total und hat auch keine Möglichkeit Scripte zu hinterlegen. Der Nachfolger kann es.

Wenn es nur um die Energie geht, ist es noch recht harmlos, wobei die Tasmota bestimmt auch zwischen In und Out sowie Summe unterscheiden...

Aber um Live den aktuellen Verbrauch anzuzeigen, muss der Strom her und da fängt es an zu einem Problem der Datenverarbeitung zu werden.
Immer im Hinterkopf, es läuft auf einer CCU3 und darf nicht mehr als 0,5 Prozent der Rechenleistung nutzen. Mein Limit :D
Der Dreh ist, die Werte erst auf 5 Minuten zu berechnen und dann auf einer Stunde anzuzeigen. Der Rest läuft über Energy mit Aufteilung in Stunde, Tag, Monat, Jahr und entsprechender Hochrechnung. Dabei werden die Überläufe, egal ob sie von Shelly oder Homatik kommen natürlich abgefangen und jedes neue Gerät braucht nur den Eintrag Gewerk "Strom" und schon ist es mit dabei.

Das ganze sieht so aus...
Screenshot 2023-10-09 211504.jpg

Benutzeravatar
Henke
Beiträge: 1536
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 144 Mal
Danksagung erhalten: 309 Mal

Re: Tagesverbrauch an Strom in Red Matic ausrechnen

Beitrag von Henke » 10.10.2023, 11:45

Eine simple Lösung wäre der folgende flow.
Input ist ein topic und payload und daraus wird die Differenz berechnet.
Wenn du also einmal am Tag ihn mit dem Energiewert fütterst, hast du am zweiten Tag den Tagesverbrauch.
Läuft mit Stunden oder wie im Test auch mit Zufallswerten und 15 Sekunden.

Code: Alles auswählen

[
    {
        "id": "2cfc328d8c330698",
        "type": "function",
        "z": "aa39c2c575eb6d3f",
        "name": "diff",
        "func": "if (!msg.topic) {\n    node.warn(\"msg.topic fehlt.\");\n    return;\n}\n\nif (typeof msg.payload !== \"number\") {\n    node.warn(\"msg.payload keine Zahl.\");\n    return;\n}\n\nlet last = context.get(\"last\") || {};\nif (!last[msg.topic]) {\n    last[msg.topic] = msg.payload;\n    node.status({ fill: \"yellow\", shape: \"dot\", text: \"init\" });\n}\nelse {\n    msg.akt = msg.payload;\n    msg.last = last[msg.topic];\n    msg.payload = msg.akt - msg.last;\n    last[msg.topic] = msg.akt;\n    node.status({ fill: \"green\", shape: \"dot\", text: \"diff: \" + msg.payload });\n    return msg;\n}\ncontext.set(\"last\", last);\n",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1610,
        "y": 1280,
        "wires": [
            [
                "7abcf9f881d50d6a"
            ]
        ]
    },
    {
        "id": "7abcf9f881d50d6a",
        "type": "debug",
        "z": "aa39c2c575eb6d3f",
        "name": "debug 367",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 1770,
        "y": 1280,
        "wires": []
    },
    {
        "id": "97fec03e331e15e3",
        "type": "inject",
        "z": "aa39c2c575eb6d3f",
        "name": "Random Temp",
        "props": [
            {
                "p": "topic",
                "vt": "str"
            },
            {
                "p": "payload"
            }
        ],
        "repeat": "15",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "Temperatur",
        "payload": "$round(20+20*$random(), 1)\t",
        "payloadType": "jsonata",
        "x": 1400,
        "y": 1280,
        "wires": [
            [
                "2cfc328d8c330698"
            ]
        ],
        "icon": "font-awesome/fa-play-circle"
    }
]

Stieger
Beiträge: 264
Registriert: 01.05.2014, 18:26
Danksagung erhalten: 1 Mal

Re: Tagesverbrauch an Strom in Red Matic ausrechnen

Beitrag von Stieger » 10.10.2023, 17:40

irgebdwie will diser coe auch nicht genau was ich will. habe ih mal umgebaut da ich diw wattstunden in unregelmössigen abständen als msg.payload number bekome. der code würde dann so aussehen. leider errechnet er mir aber nicht den aktuellen tagesverbrauch anhand der aktuell verbrauchten wh. hmm oder überseh ich da was ?

Mein Sehlly wirf alle paar sekunden den katuellen verbrauch raus als z.b. 320Wh und dann ein paar Sekunden später z.B. 410Wh. MIt disen Zahlen müsste der Tagesverbrauch thoretisch errechnet werden können.

Hier noch der angepasst code:

Code: Alles auswählen

if (typeof msg.payload !== "number") {
    node.warn("msg.payload keine Zahl.");
    return null; // Beende die Verarbeitung, da keine gültige Zahl vorhanden ist.
}

let last = context.get("last") || {};
if (!last[msg.topic]) {
    last[msg.topic] = msg.payload;
    node.status({ fill: "yellow", shape: "dot", text: "init" });
} else {
    msg.akt = msg.payload;
    msg.last = last[msg.topic];
    msg.payload = msg.akt - msg.last;
    last[msg.topic] = msg.akt;
    node.status({ fill: "green", shape: "dot", text: "diff: " + msg.payload });
}

context.set("last", last);
return msg;

Benutzeravatar
Henke
Beiträge: 1536
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 144 Mal
Danksagung erhalten: 309 Mal

Re: Tagesverbrauch an Strom in Red Matic ausrechnen

Beitrag von Henke » 10.10.2023, 18:04

Du verwendest den falschen Datenpunkt. Statt "energy" ist für den Tagesverbrauch "total" besser geeignet.
LINK: https://shelly-api-docs.shelly.cloud/ge ... m-overview

Als nächstes sollte der Wert in einem festen Intervall (Minute,Stunde,Tag) verarbeitet werden. Entweder liefern die Shelly nodes dafür eine Möglichkeit oder der Wert wird zwischengespeichert und dann im Intervall abgerufen.

Angepasster code...
Interessant. Die Fehlerkontrolle auf msg.topic entfernt und trotzdem wird msg.topic weiterverwendet.
Sry, da habe ich keinerlei Verständnis für.

Einen Kommentar hinzugefügt. Gut

return; gegen return null; ersetzt
Da hätte ich gerne gewusst, was das bringen soll.

Stieger
Beiträge: 264
Registriert: 01.05.2014, 18:26
Danksagung erhalten: 1 Mal

Re: Tagesverbrauch an Strom in Red Matic ausrechnen

Beitrag von Stieger » 10.10.2023, 18:08

Da dies schon lange mein Wissen übersteigt habe ich den code mal mit ChatGPT angepasst. jetzt weisst du auch warum unlogisch. :-)


Kannst du mir helfen die nodes so zusammen zu bauen?

Das Sehlly gibt folgendes raus : total_power

Benutzeravatar
Henke
Beiträge: 1536
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 144 Mal
Danksagung erhalten: 309 Mal

Re: Tagesverbrauch an Strom in Red Matic ausrechnen

Beitrag von Henke » 10.10.2023, 18:20

total_power ist die Summe über alle 3 Phasen.
Da ist die Frage, reicht dir das?

Einfacher wäre es, wenn du mal die gesamte Ausgabe der Node zeigen würdest.

Wenn ich es richtig gesehen habe, kann der Status des Shellys abgefragt werden. Wenn bei der inject node ein msg.topic angegeben wird, kommt das auch beim Ergebnis mit raus?

ChatGPT ...
Nicht dein Ernst.

Antworten

Zurück zu „RedMatic“