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

Silverhawk
Beiträge: 40
Registriert: 25.06.2014, 14:29

Re: Howto - Zähler-Skripte für HM-ES-TX-WM, V2.2

Beitrag von Silverhawk » 16.02.2018, 19:47

Hallo,
ich würde gerne das Script nutzen, habe jedoch kein Zählererfassungssystem sondern nur ein Reed kontakt, was mit 0,1m³ Gasverbrauch per taster meldet.
Das funktioniert auch ganz gut, ich speichere mir meinen aktuellen Stand als Systemvariable ab.

Code: Alles auswählen

var x;
object obj = dom.GetObject('HWR_Gaszähler_Stand');
x=obj.State(obj.State()+0.1);
Die Frage ist nun, wäre es möglich, das Script anzupassen, dass ich es so übernehmen könnte?
ich würde gerne den Tagesverbrauch abrufen, mir eine Wochenübersicht erstellen und per push nachricht senden lassen.

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

Re: Howto - Zähler-Skripte für HM-ES-TX-WM, V2.2

Beitrag von dtp » 20.02.2018, 12:41

Sorry für die späte Antwort. Ist mir irgendwie untergegangen. Versuch's mal damit:

Code: Alles auswählen

! Berechnet den tagesaktuellen Stand des Gaszählers
! ACHTUNG: Dieses Skript erfordert eine CCU-Firmware ab Version 2.29.22
! Autor: dtp

! Startwert des Gaszählers als reelle Zahl (Ersteinrichtung und Reset: -1.0)
real offset = 5698.77;

! Zählerstand setzen 
! sofort: 0, Regelbetrieb (täglich 23:59): 1
integer setpoint = 1; 

! +++++ Bargraph-Anzeige; range = 0 schaltet die Anzeige aus
real range = 7.0; ! Maximaler Verbrauchswert in m³ 
real bars = 10.0; ! Anzahl der Bars innerhalb range

! Benötigte Systemvariablen
string svCounter = "HWR_Gaszähler_Stand" ! aktueller Gaszähler-Wert aus Reed-Kontakt
string svDay = "UG HWR SV Gasverbrauch Tag"; ! Gasverbrauch des aktuellen Tags
string svWeek = "UG HWR SV Gasverbrauch Woche"; ! Liste des täglichen Gasverbrauchs pro Woche
string svValue = "UG HWR SV Gaszähler Stand"; ! Tagesaktueller Stand des Gaszählers
string svPushText = "CCU SV Push Text"; ! Text der zu übertragenden Push-Nachricht gem. zPNS-xx
string svPushPrio = "CCU SV Push Prio"; ! Prioritäten der Push-Nachrichten gem. zPNS-xx

! Name des zentralen Push-Nachrichten-Programms
string zPNP = "CCU PRG Push-Nachrichten";

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

! +++++ weitere Variablendeklarationen +++++
real meterDiff; real meterValue; real barIndex = 0.0;
string list; string weekday; string bargraph = ""; string message;
string week = "Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag";
object svObject; object svObjectList;

! +++++ Systemvariablen erzeugen bzw. falls vorhanden, auslesen +++++
if(!svDay){svDay = "UG HWR SV Gasverbrauch Tag";}
svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svDay);
if(!svObject){   
  svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID()); 
  svObject.Name(svDay); svObject.DPInfo("Gasverbrauch aktueller Tag"); svObject.Internal(false); svObject.Visible(true); 
  svObject.ValueType(ivtFloat); svObject.ValueSubType(istGeneric); svObject.ValueUnit("m³"); svObject.ValueMin(0); svObject.ValueMax(65000); dom.RTUpdate(true);
}

if(!svWeek){svWeek = "UG HWR SV Gasverbrauch Woche";}
svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svWeek);
if(!svObject){   
  svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
  svObject.Name(svWeek); svObject.DPInfo("Liste des täglichen Gasverbrauchs pro Woche"); svObject.Internal(false); svObject.Visible(true);
  svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.ValueUnit("m³"); dom.RTUpdate(true);
}
else{list = (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svWeek)).Value(); if(list.Find("???") != -1){list = "";}}

if(!svValue){svValue = "UG HWR SV Gaszähler Stand";}
svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svValue);
if(!svObject){   
  svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
  svObject.Name(svValue); svObject.DPInfo("Tagesaktueller Stand des Gaszählers"); svObject.Internal(false); svObject.Visible(true);
  svObject.ValueType(ivtFloat); svObject.ValueSubType(istGeneric); svObject.ValueUnit("m³"); svObject.ValueMin(0); svObject.ValueMax(99999); dom.RTUpdate(true);
}
else{meterValue = offset + (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svCounter)).Value(); meterDiff = meterValue - (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svValue)).Value();}

! +++++ Auslesen der aktuellen Werte +++++
! Auslesen des aktuellen Wochentags
weekday = week.StrValueByIndex(" ", system.Date("%w"));
 
! Zurücksetzen, falls offset = -1
if(offset == -1){meterValue = 0; meterDiff = (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svCounter)).Value(); list = ""; setpoint = 0;}

! Ausgabe als Bargraph
if(range > 0){
  while((barIndex < meterDiff) && (barIndex <= (range - range/bars))){
    bargraph = bargraph#"|"; 
    barIndex = barIndex + range/bars;
  }
  if(meterDiff > range){bargraph = "<font color=orange>"#bargraph#"</font>";}
  bargraph = bargraph#" ";
}
 
! 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#meterDiff.ToString(2)#" m³, "#weekday#"\n"#list;
 
! Setzen der Systemvariablen
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svWeek)).State(list);
if(setpoint == 1){
  if(system.Date("%H:%M") == "23:59"){
    (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svValue)).State(meterValue);
    (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svDay)).State(meterDiff);
  }
}
if(setpoint == 0){
  (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svValue)).State(meterValue);
  (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svDay)).State(meterDiff);
}

! ++++ Senden der Verbrauchswerte per Push-Nachricht am Sonntag ++++
if((weekday == "Sonntag") || (setpoint == 0)){
  ! Erzeugen der Nachricht
  if(offset == -1.0){message = "Initialisierung Gaszähler\noffset = Zählerstand - "#meterDiff#" m³ eintragen!";}
  else{
    message = meterValue.ToString(2)#" m³ Gas verbraucht.\nTagesverbrauchswerte in KW "#system.Date('%W')#":\n"#list;
    if(setpoint == 0){message = message#"Achtung: ggf. setpoint wieder auf 1 setzen!";}
  }
  
  ! Setzen der Priorität für die Push-Nachricht
  (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State("-1");
 
  ! +++++ zPNP ausführen ++++
  (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
  (dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
}
Ist aber ein Schnellschuss ohne Erfolgsgarantie. ;)

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.

Silverhawk
Beiträge: 40
Registriert: 25.06.2014, 14:29

Re: Howto - Zähler-Skripte für HM-ES-TX-WM, V2.2

Beitrag von Silverhawk » 22.02.2018, 09:04

Hallo Thorsten,

vielen Dank für diene Hilfe. Leider klappt das Script noch nicht bei mir. Wenn ich das Programm von Hand auslöse bzw. automatisch um 23:59 auslöst, sendet es keine Push Nachricht.
An Variablen wird nur der Gasverbrauch Woche geändert, der Rest bleibt unberührt.

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

Re: Howto - Zähler-Skripte für HM-ES-TX-WM, V2.2

Beitrag von dtp » 23.02.2018, 08:44

Kurze Frage. Hast du das Skript mit "offset = -1.0" initialisiert?

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.

Silverhawk
Beiträge: 40
Registriert: 25.06.2014, 14:29

Re: Howto - Zähler-Skripte für HM-ES-TX-WM, V2.2

Beitrag von Silverhawk » 24.02.2018, 15:50

Ja, das hatte ich getan. Darauf hin habe ich eine Nachricht erhalten und den Zählerstand eingetragen. Nun folgt aber keine Nachricht mehr.
Kann ich das Programm theoretisch auch manuell triggern?

Update: gestern am Sonntag kam eine Nachricht mit dem Verbrauch. Sieht auch ganz vernünftig aus.

Bleibt die Frage, wieso die tägliche Nachricht nicht kommt und ob man den aktuellen Stand abfragen kann.
Zudem sind in der Nachricht so viele |||| , woher kommen die?
IMG_20180226_081509.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: Howto - Zähler-Skripte für HM-ES-TX-WM, V2.2

Beitrag von dtp » 27.02.2018, 10:31

Vielleicht liest du dir noch mal das Ausgangsposting dieses Threads vollständig durch. Da sollten deine Fragen beantwortet werden. 8)

Ich bin übrigens am überlegen, das Skript um eine Grafikfunktion zu erweitern. Das macht dann aber eigentlich nur in Verbindung mit dem ioBroker, sowie dem Flot- und dem phantomjs-Adapter Sinn.

Dann kann man sich statt reiner Textmeldungen auch Diagramme per Pushover und/oder Telegram zusenden lassen. Bei mir wären das z.B. die folgenden:
Stromverbrauch.png
Stromverbrauch.png (14.88 KiB) 2408 mal betrachtet
Gasverbrauch.png
Gasverbrauch.png (17.56 KiB) 2408 mal betrachtet
Wasserverbrauch.png
Wasserverbrauch.png (15.99 KiB) 2408 mal betrachtet
Ich arbeite gerade dran. Wenn es funktoniert, demnächst mehr.

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.

Alexxx2005
Beiträge: 250
Registriert: 17.12.2014, 18:56
Hat sich bedankt: 19 Mal
Danksagung erhalten: 3 Mal

Re: Howto - Zähler-Skripte für HM-ES-TX-WM, V3.0

Beitrag von Alexxx2005 » 20.10.2018, 08:35

Hallo Thorsten

ich habe alles genau so gemacht wie in der Anleitung,
mein Zähler heißt : UG HWR Zählersensor Strom
mein Channel1 : UG HWR Zählersensor Parameter

Beim initialsieren mit -1 bekomme ich keine Push Nachricht
jedoch im "CCU SV Push Text" oder "CCU SV Push Text Ref"
wird es angezeigt.

Hast du eine Idee an was das liegen könnte.

Viele Grüße Alex

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

Re: Howto - Zähler-Skripte für HM-ES-TX-WM, V3.0

Beitrag von dtp » 24.10.2018, 15:11

Hi Alex,

läuft das zPNP bei dir ansonsten?

Hast du das Zählerskript zwei Mal nach der Ersteinrichtung manuell gestartet?

Hier noch mal die Einstellungen, mit denen du es erstmalig einrichten solltest:

Code: Alles auswählen

! Startwert des Stromzählers als reelle Zahl (Ersteinrichtung und Reset: -1.0)
real offset = -1.0;

! Zählerstand setzen
! sofort: 0, Regelbetrieb (täglich 23:59): 1
integer setpoint = 0;

! Bargraph-Anzeige; range = 0 schaltet die Anzeige aus
real range = 12.0; ! Maximaler Verbrauchswert in kWh
real bars = 10.0; ! Anzahl der Bars innerhalb range

! Name von Kanal 1 des Zählersensors
string channel = "UG HWR Zählersensor Parameter";

! Name einer anzufügenden Bilddatei (wenn auf "" gesetzt, wird kein Bild übertragen)
string image = ""; 
Wenn du ansonsten Push-Nachrichten über das zPNP erhältst, sollte eigentlich spätestens nach dem zweiten Start eine Push-Nachricht kommen. Poste doch ansonsten bitte mal den Inhalt der Systemvariablen "CCU SV Push Text" und "CCU SV Push Text Ref".

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.

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

Re: Howto - Zähler-Skripte für HM-ES-TX-WM, V3.0

Beitrag von dtp » 15.01.2019, 07:33

So,

gestern stand der turnusmäßige Wechsel unseres Gaszählers an. War schon gespannt, ob das mit den Zählerskripten alles so funktionieren würde.

Glücklicherweise haben wir den gleichen Zähler wieder bekommen, so dass der vorhandene Cyble-Sensor einfach nur umgesetzt werden musste.

Anschließend dann
  1. den Offset im Gaszählerskript auf -1.0 gesetzt,
  2. das Programm manuell gestartet und
  3. den Wert aus der Push-Nachricht abzüglich des tatsächlichen Zählerstandes (waren auch schon wieder 1,84 m³) als neuen Offset-Wert in das Skript eingetragen.
Fertig. Der neue Offset-Wert ist nun natürlich erst mal stark negativ. Aber das ist ja kein Problem.

Bis dann,

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.

funzel1607
Beiträge: 132
Registriert: 13.10.2015, 14:34
Hat sich bedankt: 2 Mal

Re: Howto - Zähler-Skripte für HM-ES-TX-WM, V3.0

Beitrag von funzel1607 » 17.01.2019, 12:09

Hallo zusammen,

für meinen HM-ES-TX-WM habe ich dein Script gut verwenden können und bin total zufrieden! Vielen Dank erst mal dafür!

Nun habe ich meinen Easymeter Q3B mittels USB-IR-Lese-/Schreibkopf von Volkszähler an einem Pi mit ioBroker laufen,
der mit dem dem Smartmeter-Aadapter und Node-Red die Werte alles 30 Sekunden in zwei Variablen (aktueller Verbrauch und Zählerstand) in die CCU schreibt.

Nun würde ich gern das Strom-Script nutzen, um die Verbrauchswerte schöner zu haben. Hat jemand evtl. Lust/Zeit mir dabei behilflich zu sein, welchen Teil des Scripts ich weglassen kann bzw. ändern muss?

Vielen Dank im Voraus!

LG,
funzel1607

Antworten

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