Howto - Zähler-Skripte für HM-ES-TX-WM (per zPNP)

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Howto - Zähler-Skripte für HM-ES-TX-WM (per zPNP)

Beitrag von dtp » 18.04.2016, 09:41

Einleitung

Nachfolgend möchte ich Euch drei Skripte für die Verwendung mit der Zählersensor-Sendeeinheit, HM-ES-TX-WM, zur Ermittlung des täglichen Strom-, Gas- und Wasserverbrauchs vorstellen. Dazu wird um eine einstellbare Zeit (vorzugsweise 23:59 Uhr) das WebUI-Programm "UG HWR PRG Energiezähler" ausgeführt, das die drei Skripte im Dann-Zweig enthält.
UG HWR PRG Energiezähler.png
Jedes Skript legt automatisch jeweils drei Systemvariablen "UG HWR SV XXXverbrauch Tag", "UG HWR SV XXXverbrauch Liste" und "UG HWR SV XXXzähler Stand" an, sofern diese noch nicht existieren, wobei "XXX" für "Strom", "Gas" oder "Wasser" steht.
Systemvariablen_Strom.png
Systemvariablen_Strom.png (12.44 KiB) 13202 mal betrachtet
Systemvariablen_Gas.png
Systemvariablen_Gas.png (11.37 KiB) 13202 mal betrachtet
Systemvariablen_Wasser.png
Systemvariablen_Wasser.png (12.17 KiB) 13202 mal betrachtet
Die Namen der Systemvariablen können selbstverständlich individuell in den Skripten durch entsprechendes Setzen der lokalen Skriptvariablen "svDay", "svList" und "svValue" angepasst werden. Bei mir unterliegt die Nomenklatur sämtlicher Geräte, Kanäle, Programme, Systemvariablen und virtuellen Kanäle der Systematik "Ort Typ Funktion", wobei "Typ" mit "PRG", "SV" oder "VT" belegt wird. Dies hat den Vorteil, dass es keine Doppelbezeichnungen geben kann und ich immer eine schnelle und eindeutige Zuordnung erziele.

ACHTUNG: Ab Version 3.4 sind die bis dahin benutzten Systemvariablen "UG HWR SV XXXverbrauch Woche" nicht mehr gültig, da sie durch die neuen Systemvariablen "UG HWR SV XXXverbrauch Liste" ersetzt wurden. Ihr müsst also die Systemvariablen "UG HWR SV XXXverbrauch Woche" manuell löschen und das Zählerprogramm ein Mal manuell starten, um die Sytemvariablen automatisch anlegen zu lassen (siehe unter Ersteinrichtung).

Man kann festlegen, an welchen Tagen eine Push-Nachricht mit den Energieverbräuchen gesendet werden soll und welchen zurückliegenden Zeitraum diese abdecken soll.

Code: Alles auswählen

! +++++ Liste der Wochen- oder Monatstage, an dem eine Push-Nachricht gesendet werden soll (Trennung beliebig) +++++
! z.B. "1 6 10 20", "1 Sonntag", "Montag Mittwoch Freitag", "täglich"; keine Nachricht: ""
string sendDatesList = "1 15 Sonntag";

! +++++ Anzahl der Tage, für die die zurückliegenden Verbrauchswerte angezeigt werden sollen +++++
integer numDays = 14;
Diese Nachricht wird dann jeweils an den in der lokalen Variablen "sendDatesList" eingetragenen Monats- und/oder Wochetagen um die im Zeitmodul des Zählerprogramms gesetzte Zeit als Übersicht mit den Werten des in der lokalen Variablen "numDays" zurückliegenden Zeitraums mittels des zentralen Push-Nachrichten-Programms (zPNP) gesendet (siehe Signatur). Dazu müssen noch die lokalen Skriptvariablen "svPushText", "svPushPrio" und "zPNP" definiert werden. Es ist auch möglich, das Programm manuell über "Status und Bedienung | Programme" zu triggern (s.u.). Dann werden immer der Tageswert, der absolute Zählerstand und der jüngste Wert in der Liste aktualisiert, während die Listenwerte der zurückliegenden Tage unberührt bleiben. Die Skripte verhindert also eine Doppelanzeige von Verbräuchen am selben Tag, da immer nur der gesamte Tagesverbrauch eines einzelnen Tages angezeigt wird. Das ist so gewollt.

Da die Listen in den jeweiligen Systemvariablen erst sukzessive mit jedem Tag gefüllt werden, kann es die in "numDays" eingetragene Anzahl von Tagen dauern, bis die zugehörigen Push-Nachrichten vollständig angezeigt werden.

Weiterhin lässt sich mit "sendDatesList= "";" einstellen, dass man im Regelbetrieb ("regular = true;") gar keine Push-Nachricht erhalten möchte. Im nicht regulären Betrieb ("regular = false;") und bei der Ersteinrichtung bzw. beim Reset ("offset = -1.0;") wird dagegen immer eine Push-Nachricht gesendet.

Mit der lokalen Skriptvariablen "setTime" setzt man in den Skripten die Zeit, zu der das zugehörige WebUI-Programm ausgeführt wird. Also z.B. "23:59".

Code: Alles auswählen

string setTime = "23:59";
Stimmt diese Zeit nicht mit der im Zeitmodul vorgegeben Zeit überein, erhält man eine entsprechende Push-Nachricht als Fehlermeldung.
Push_Energiezähler_setTimeFehler.PNG
Skripte für den Strom-, Gas- und Wasserzähler
Stromzähler351.hsc
(7.97 KiB) 1120-mal heruntergeladen
Gaszähler352.hsc
(7.82 KiB) 618-mal heruntergeladen
Wasserzähler352.hsc
(7.87 KiB) 284-mal heruntergeladen
Ersteinrichtung

Für die Ersteinrichtung müsst ihr neben den obigen lokalen Skriptvariablen noch den Namen des Kanals 1 der jeweiligen Zählersensor-Sendeeinheit, HM-ES-TX-WM, unter "channel" eintragen. Danach setzt ihr die Variable "offset" auf -1.0. Anschließend führt ihr manuell das Programm "UG HWR PRG Energiezähler" im WebUI unter "Status und Bedienung | Programme" aus.

Hinweis für IEC-Sensor: Solltet ihr die Firmware-Version 2.2 auf der Zählersensor-Sendeeinheit HM-ES-TX-WM in Verbindung mit einer IEC-Sensor nutzen, dann müsst ihr die lokale Skriptvariable "iecFlag" auf true setzen.

Sind die benötigten Systemvariablen zu diesem Zeitpunkt noch nicht vorhanden, werden sie automatisch angelegt. Bitte prüft nach dem ersten Durchlauf, ob die Systemvariablen korrekt angelegt wurden.

Danach wiederholt ihr einfach die Programm-Ausführung, woraufhin ihr von jedem Skript eine Push-Nachricht mit folgendem Inhalt erhalten solltet:
Push_Energiezähler.PNG
Dies ist der aktuelle Wert des Parameters "ENERGY_COUNTER", "GAS_ENERGY_COUNTER" bzw. "IEC_ENERGY_COUNTER" der jeweiligen Zählersensor-Sendeeinheit (Wasser- und Gasverbrauch werden gleichermaßen erfasst). Nun müsst ihr noch den tatsächlichen Zählerstand Eures Strom-, Gas- bzw. Wasserzählers ablesen und davon den in der Push-Nachricht angezeigten Wert abziehen. Diesen Wert tragt ihr im jeweiligen Skript in die lokale Skriptvariable "offset" ein.

Nehmen wir mal das obige Beispiel. Hier hat das Stromzählerskript 264.4878 kWh angezeigt. Wenn auf dem Stromzähler nun z.B. 2349 kWh angezeigt werden, müsst ihr in das Stromzähler-Skript "offset = 2048.5122" eintragen. Entsprechend verfahrt ihr mit dem Gas- und dem Wasserzähler.

Achtung: auf jeden Fall den Wert als relle Zahl mit mindestens einer Nachkommastelle eintragen und als Komma den Punkt verwenden!

In den Push-Nachrichten steht noch der Hinweis, dass ihr ggf. die lokale Variable "regular" wieder auf true setzen müsst. Das ist für die Ersteinrichtung nicht notwendig, da das automatisch mit offset = -1.0 ein- und mit offset ~= -1.0 wieder ausgeschaltet wird.

Übrigens, ihr könnt auf diese Weise jeden Zähler einzeln initialisieren. Ihr könnt aber auch zwei oder drei Skripte auf einmal ausführen. Ganz, wie es euch beliebt.

Regelbetrieb

Wenn ihr nun den tatsächlichen Wert für "offset" eingetragen habt, müsst ihr das Skript eigentlich nur noch abspeichern und warten, bis es durch das WebUI-Programm ausgeführt wird. Um 23:59 Uhr sollten dann alle Systemvariablen mit ersten Werten befüllt sein.

Die zugesandten Push-Nachrichten für den zurückliegenden Zeitraum sehen dann so aus, wobei der jüngste Wert immer ganz oben in der Liste steht.
Push-Nachicht_Verbräuche.png
Überlaufen

Die Skripte fangen das Überlaufen von "ENERGY_COUNTER", "GAS_ENERGY_COUNTER" bzw. "IEC_ENERGY_COUNTER" automatisch ab, so dass ihr Euch hierüber keine Gedanken machen müsst. Dazu gibt es eine while-Schleife, die ausgehend vom eingetragenen offset-Wert bei einem Sprung von z.B. 830 auf 2 den Wert 838.8607 (beim Standard-Stromzähler) bzw. 838860.7 (beim Gas-, Wasser- und IEC-Zähler) so lange hinzu addiert, bis das Resultat positiv ist. Dies ist besonders für den Standard-Stromzähler notwendig, da hier die Wh gezählt werden, was zu einem relativ schnellen Überlaufen führt. Beim Gas-, Wasser- und IEC-Zähler dürfte es dagegen in der Regel kaum zum Überlauf kommen.

Manuelles Setzen der Systemvariablen

Zum zwischenzeitlichen Setzen der Systemvariablen und zum Überprüfen eines Zwischenverbrauchs muss man die lokale Variable "regular" auf den Wert false setzen. Führt man dann das WebUI-Programm "UG HWR PRG Energiezähler" wie in der Ersteinrichtung beschrieben aus, werden alle Systemvariablen unmittelbar beschrieben.

Aber Achtung: die Tageswerte zeigen immer die Differenz zwischen zwei Triggerzeitpunkten an, was bedeutet, dass sie bei manueller Auslösung eben keine Tageswerte sind. Dies ist nur beim Regelbetrieb gewährleistet. Das ist aber nicht weiter tragisch, da zum übernächsten Triggerzeitpunkt im Regelbetrieb wieder automatisch die Tageswerte angezeigt werden. Andererseits kann man damit aber auch sehr bequem einen Zwischenverbrauch ermitteln, indem man das Programm ein Mal vor und ein Mal nach dem gewünschten Zeitfenster triggert.

Nach dem manuellen Betrieb solltet ihr die lokale Variable "regular" für den Regelbetrieb wieder auf true setzen. Daran werdet ihr aber auch durch die Push-Nachrichten erinnert.

Bargraph-Anzeige

Es gibt die Möglichkeit einer vorangestellten Bargraph-Anzeige für die Tagesverbrauchswerte in der Wochenliste. Dazu gebt ihr mit der lokalen Varialben "range" den maximalen Verbrauchswert und mit der lokalen Variablen "bars" die Anzahl der Bars bis zum Erreichen des maximalen Verbrauchswerts an. Hier müsst ihr einfach etwas experimentieren, was Euch von der Optik und Euren individuellen Verbrauchswerten her am besten gefällt. In den obigen Skripten sind jeweils 10 Bars eingestellt, die sich beim Stromzählerskript über den Bereich von 0 bis 12 kWh, beim Gaszählerskript von 0 bis 7 m³ und beim Wasserzählerskript von 0 bis 1 m³ Tagesverbrauch erstrecken. Überschreitet der Tagesverbrauchswert den eingestellten Wert für "range", wird der Bargraph orange bzw. fett dargestellt.

Mit "range = 0" kann die Bargraph-Anzeige vollständig ausgeblendet werden.

Batterie- und/oder Zählerwechsel

Nach einem Batterie- und/oder Zählerwechsel dürfte in der Regel eine Neueinrichtung notwendig sein. In diesem Fall verfahrt ihr, wie unter dem Punkt "Ersteinrichtung", wobei natürlich die Seriennummern der jeweiligen Zählersensor-Sendeeinheit schon in den Skripten eingetragen ist. Im Falle eines Batteriewechsels sollte eine Ausführung des Programms nun jeweils den Wert 0.0 liefern, so dass ihr einfach nur den tatsächlich angezeigten Wert des jeweiligen Zählers als offset einzutragen braucht. Nach einem Zählerwechsel könnte ein negativer Offset notwendig sein. Das stellt aber kein Problem für die Skripte dar.

Gruß,

Thorsten
Zuletzt geändert von dtp am 02.08.2021, 09:31, insgesamt 69-mal geändert.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Optionaler Bildversand unter Nutzung des ioBroker

Beitrag von dtp » 21.04.2016, 09:25

Hier folgt demnächst eine Beschreibung zur Erzeugung von Screenshots mit dem ioBroker und zum Versand mit dem zPNP ab V3.0.
iobroker_zähler.png

Code: Alles auswählen

var path = 'javascript.'+instance+'.vis.'; // Pfad der String-Datenpunkte
var listd = ['VerbrauchStromTag','VerbrauchGasTag','VerbrauchWasserTag'];

for(i = 0; i < listd.length; i++){
  createState(path+listd[i], 0, {
    read: true,
    write: true,
    name: 'Tagesverbrauchswert',
    type: 'string',
    def: '0'
  });
}

schedule('00 58 23 * * *', function(){//
  setState(path+listd[0], getState('hm-rega.0.5483').val + ' kWh'); // Strom
  setState(path+listd[1], getState('hm-rega.0.5482').val + ' m%B3'); // Gas
  setState(path+listd[2], getState('hm-rega.0.5584').val + ' m%B3'); // Wasser
});
iobroker_javascript_vis.png
flot_stromverbrauch_01.png
flot_stromverbrauch_02.png
phantomjs.png
phantomjs.png (2.73 KiB) 19398 mal betrachtet

Code: Alles auswählen

schedule('30 58 23 * * 0', function(){
  sendTo('phantomjs.0', 'send', {
      url: 'http://localhost:8082/flot/...topover&aggregateSpan=300',
      output: '/opt/iobroker/phantomjs_images/Stromverbrauch.png',
      width: 1024,
      height: 768,
      'clip-width': 600,
      'clip-height': 300
  }, function (result) {
      console.log(result.error + ' ' + result.output);
  });
  
  sendTo('phantomjs.0', 'send', {
      url: 'http://localhost:8082/flot/...topover&aggregateSpan=300',
      output: '/opt/iobroker/phantomjs_images/Gasverbrauch.png',
      width: 1024,
      height: 768,
      'clip-width': 600,
      'clip-height': 300
  }, function (result) {
      console.log(result.error + ' ' + result.output);
  });

  sendTo('phantomjs.0', 'send', {
      url: 'http://localhost:8082/flot/...topover&aggregateSpan=300',
      output: '/opt/iobroker/phantomjs_images/Wasserverbrauch.png',
      width: 1024,
      height: 768,
      'clip-width': 600,
      'clip-height': 300
  }, function (result) {
      console.log(result.error + ' ' + result.output);
  });
});
Zuletzt geändert von dtp am 25.03.2018, 18:28, insgesamt 6-mal geändert.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Strom- und Gaszählerwerte wöchentlich per Push-Nachricht

Beitrag von dtp » 21.04.2016, 09:31

Hier kommt demnächst Teil 2 des Bildversands der phantomjs-Screenshots

Code: Alles auswählen

! phantomjs-Screenshots holen
! Version 1.0, Autor: dtp 

! Daten der mit dem phantomjs-Adapter erstellten Flot-Screenshots 
string imageList = "Stromverbrauch.png\tGasverbrauch.png\tWasserverbrauch.png"; ! Liste der Bilddatei-Namen (trennen mit "\t")
string path = "/volume1/docker/ioBroker/phantomjs_images/"; ! Bildpfad
string IP = "192.168.0.10"; ! IP-Adresse des ioBroker
string login = "root"; ! Login
string port = "40"; ! Port (wenn auf "" gesetzt, wird Port 22 verwendet)

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

! +++++ Deklaration weiterer Variablen +++++
string image;

! +++++ Flot-Screenshots lokal auf CCU speichern +++++
foreach(image, imageList){
  (dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_EXEC")).State("scp -P "#port#" "#login#"@"#IP#":'"#path#image#"' /tmp/");
    WriteLine("scp -P "#port#" "#login#"@"#IP#":'"#path#image#"' /tmp/")
}
Leider scheint es einige Probleme mit den Zugriffsrechten zu geben, so dass das obige Skript nicht so funktioniert, wie gewünscht. Wenn jemand eine Lösung weiß, immer her damit. 8)
Zuletzt geändert von dtp am 24.05.2019, 12:44, insgesamt 4-mal geändert.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Sven_A
Beiträge: 4150
Registriert: 26.01.2016, 08:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Renningen
Hat sich bedankt: 345 Mal
Danksagung erhalten: 281 Mal

Re: Strom- und Gaszählerwerte wöchentlich per Push-Nachricht

Beitrag von Sven_A » 21.04.2016, 09:33

Moin Thorsten,

welchen Wert zeichnest du denn in das Diagramm? Ich bekomme keine kummulierten Tageswerte in ein Diagramm... welchen Kanal zeichnest du denn auf? Ich bekomme nur die Momentanwerte ins Diagramm, hast du vielleicht da einfach die Max-Werte, bzw. den Durchschnitt?

Gruß,
Sven

Nachtrag:
Also wenn ich mir deine Zahlen anschaue dann passt das doch?

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Strom- und Gaszählerwerte wöchentlich per Push-Nachricht

Beitrag von dtp » 21.04.2016, 09:55

Hi Sven!
Sven_A hat geschrieben: welchen Wert zeichnest du denn in das Diagramm? Ich bekomme keine kummulierten Tageswerte in ein Diagramm... welchen Kanal zeichnest du denn auf? Ich bekomme nur die Momentanwerte ins Diagramm, hast du vielleicht da einfach die Max-Werte, bzw. den Durchschnitt?
Für die Diagramme habe ich den Diagrammtyp "Energiemessung" ausgewählt. Dieser bietet keine Möglichkeit zur Auwahl von Max-, Min- oder Durchschnittswerten, sondern liefert die kumulierten Tageswerte (so zumindest meine bisherige Interpretation) als Balkendiagramm. Ausgewählt wurde für die Gaswerte Kanal 1 (gibt ja keinen anderen) vom Wertetyp "Leistung Gas" und für die Stromwerte vom Wertetyp "Leistung".
Sven_A hat geschrieben: Also wenn ich mir deine Zahlen anschaue dann passt das doch?
Wieso? Wie gesagt weichen die per Skript ermittelten und die im Diagramm angezeigten Gaswerte um ca. den Faktor 2 voneinander ab. Und auch bei den Stromwerten gibt es Abweichungen, wenn auch deutlich geringer.

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Sven_A
Beiträge: 4150
Registriert: 26.01.2016, 08:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Renningen
Hat sich bedankt: 345 Mal
Danksagung erhalten: 281 Mal

Re: Strom- und Gaszählerwerte wöchentlich per Push-Nachricht

Beitrag von Sven_A » 21.04.2016, 10:07

Komisch, das Diagramm blieb bei mir leer, ich teste das nochmal.

In deinen Screenshots lese ich für das Script 8,69kWh am Mittwoch. Im Diagramm irgenwas zwischen 6000 und 9000 Wh, mit deutlich näher an 9000Wh. Könnte genau 8,7 kWh sein... Oder verstehe ich die Screenshots falsch?

Nachtrag:
Und auch der Dienstag mit 7,39 sowie der Montag mit 8,54 passt für mich zum Diagramm...


Ok, jetzt hab ich die Screenshots für die Gaswerte gesehen.. keine Ahnung, irgendwie war da noch zu wenig Kaffee im System.

Kaffeesatzlese: Problem könnte sein das der Gasverbrauch ja nie auf 0 sinkt, sondern immer den letzten Wert behält. Ggf. zählt die CCU da weiter? Beim Strom sinkt der Verbrauch nie auf 0, weil immer irgendwas im Haus läuft, da passt das dann.

Sven_A
Beiträge: 4150
Registriert: 26.01.2016, 08:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Renningen
Hat sich bedankt: 345 Mal
Danksagung erhalten: 281 Mal

Re: Strom- und Gaszählerwerte wöchentlich per Push-Nachricht

Beitrag von Sven_A » 22.04.2016, 07:36

@Thorsten: Kurzes Update von mir: Diagramm tut jetzt, keine Ahnung was ich falsch gemacht hatte. Script sagt mir ich hätte heute bisher 0,57m³ Gas verbraucht, das Diagram ist aber schon bei 0,9m³. Wenn ich den Darstellungsbereich auf 24h stelle sehe ich das auch heute nacht, wo kein Gas verbraucht wurde, der letzte Verbrauchswert in diesem Diagramm steht. Das wird in der Tagesansicht dann kummuliert, und zack, steht zu viel im Diagramm... Dieses Diagramm scheint also nicht für diesen Zweck zu taugen.

Interresanterweise: Ich hab schon länger ein anderes Diagramm, wo "Energiezähler Gas" als Linie eingezeichnet wird... da bekomme ich heute Nacht auch die Nulllinie eingezeichnet. Wie/Was ich da genau eingestellt hatte weiß ich aber jetzt nichtmehr, und sehen tu ich das in den Diagrammeinstellungen auch nicht? Oder leide ich schon wieder an Koffeeinentzug?

Gruß,
Sven
Dateianhänge
gas.png

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Strom- und Gaszählerwerte wöchentlich per Push-Nachricht

Beitrag von dtp » 22.04.2016, 09:34

Hi Sven,

vielen Dank für die Info. Ich denke, die Balkendiagramme sind entweder fehlerhaft (wovon ich ausgehe) oder wir interpretieren sie falsch (wovon ich weniger ausgehe). Fakt ist auf alle Fälle, dass sie in dieser Form für mich unbrauchbar sind. Daher werde ich es mal mit den benutzerdefinierten Liniendiagrammen ausprobieren.

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Mikeldk
Beiträge: 157
Registriert: 24.03.2016, 10:25
Danksagung erhalten: 3 Mal

Re: Strom- und Gaszählerwerte wöchentlich per Push-Nachricht

Beitrag von Mikeldk » 25.04.2016, 19:33

Hi,

echt klasse Programm genau das was sich gesucht habe.

Ich habe nur ein kleines Problem mit dem Offset des Zähler den Addiert der Script irgendwie nicht ich finde auch keinen Fehler wenn ich ehrlich bin.


Vielleicht kann hier jemand was sehen


! Berechnet den tagesaktuellen Stand des Stromzählers
! +++++ Startwert des Stromzählers bei Montage des Zählersensors in kWh +++++
real offset = 2685.50;

! +++++ Bargraph-Anzeige
real bars = 40.0;
real range = 38.0;

! +++++ weitere Variablendeklarationen +++++
real counter_day; real offset; real energy_cnt; real bar_index = 0.0;
string counter_value; string list; string weekday; string bargraph; string message;
string week = "Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag";

! +++++ verbrauchte kWh pro Tag und Zählerstand +++++
! Auslesen des aktuellen Wochentags
weekday = week.StrValueByIndex(" ", system.Date("%w"));

! Auslesen der Systemvariablen "Keller Stromverbrauch Woche"
list = dom.GetObject( "Keller Stromverbrauch Woche" ).Value();

! Berechnen der Werte
energy_cnt = dom.GetObject( "BidCos-RF.MEQ0704714:1.ENERGY_COUNTER" ).Value()/1000;
if(energy_cnt < 0){energy_cnt = energy_cnt+838.8607;}
counter_value = (offset+energy_cnt).ToString(2);
counter_day = counter_value.ToFloat()-dom.GetObject( "Keller Stromzähler" ).Value().ToFloat();

! Ausgabe als Bargraph
while((bar_index < counter_day) && (bar_index < range)){bargraph = bargraph#"|"; bar_index = bar_index + range/bars;}

! Beginnen der Liste mit einem Montag und vermeiden doppelter Zeilen pro Wochentag
if(weekday == "Montag"){
list = "";
}
else{
while(list.Find(weekday) != -1){list = list.Substr(list.Find(weekday)+weekday.Length()+1,list.Length());}
}
list = bargraph#" "#counter_day.ToString(2)#" kWh am "#weekday#"\n"#list;

! Setzen der Systemvariablen "Keller Stromverbrauch Woche" und "Keller Stromzähler"
dom.GetObject( "Keller Stromverbrauch Woche" ).State(list);
if(system.Date("%H:%M") == "23:59"){dom.GetObject( "Keller Stromzähler" ).State(counter_value);}

! ++++ Senden der Verbrauchswerte per Push-Nachricht am Sonntag ++++
if(weekday == "Sonntag"){
! Erzeugen der Nachricht
message = counter_value#" kWh Strom verbraucht.\nTagesverbrauchswerte in KW "#system.Date('%W')#":\n"#list;

! Setzen der Priorität für die Push-Nachricht
dom.GetObject("CCU SV Push Prio").State("0");

! +++++ Programm "CCU PRG Push-Nachrichten" ausführen ++++
dom.GetObject("CCU SV Push Text").State(message);
dom.GetObject("CCU PRG Push-Nachrichten").ProgramExecute();
}

Gruß
Mike

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Strom- und Gaszählerwerte wöchentlich per Push-Nachricht

Beitrag von dtp » 25.04.2016, 22:17

Hi Mike,

lass das Programm samt Skript mindestens ein Mal um 23:59 Uhr auslösen. Du solltest dann am darauffolgenden Tag die korrekten Werte erhalten und kannst es danach jederzeit manuell triggern.

Du kannst aber auch zum Ermitteln des Offsets die Skriptzeile

Code: Alles auswählen

if(system.Date("%H:%M") == "23:59"){dom.GetObject("Keller Stromzähler").State(counter_value);}
ersetzen durch

Code: Alles auswählen

dom.GetObject( "Keller Stromzähler" ).State(counter_value);
Dies aber dann für den regulären Betrieb des Skripts wieder rückgängig machen.

Übrigens, 40 Bars für einen Bereich bis 38 kWh scheint mir etwas praxisfremd. Zum Einen wäre das ein extrem hoher Tagesverbrauch; zum Anderen sind 40 Bars zu unübersichtlich. Ich würde nicht mehr, als 10 bis 15 Bars verwenden.

Ach, und noch was. Bitte Skriptcode immer über den Button "Code" als Codefolge in Postings einbinden.

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“