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

Alexxx2005
Beiträge: 252
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 » 10.04.2019, 09:57

dtp hat geschrieben:
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?

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
Hey Thorsten,

ich habe mich nun mal wieder hingesetzt aber leider immer noch kein Ergebnis :

"UG HWR Zählersensor Strom Parameter" heißt mein Zähler
"UG HWR Zählersensor Strom Parameter:1" heißt mein Zähler Kanal 1

nach dem ich dein Skript mit Offset "-1.0" gestartet habe (Variablen wurden angelegt"
starte ich es erneut ca. 5 Sek später. die Variablen "CCU SV Push Text" "CCU SV Push Text Ref"
werden mit

Code: Alles auswählen

 19429.60 kWh Strom verbraucht.
Tagesverbrauchswerte in KW 14:
0.00 kWh, Mittwoch
Achtung: ggf. setpoint wieder auf 1 setzen! 
gefüllt. Jedoch bekomme ich keine
Nachricht im Telegramm.

Hast du eine Idee an was das liegt ? Heißt der Zähler falsch mit :1 bin ich mir nicht sicher.
Desweiteren auf was muss die SV Prio stehen.

Danke, Grüße Alex

dtp
Beiträge: 10658
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 » 10.04.2019, 10:12

Hi Alex,

die Prio musst du nicht setzen. Das macht das Stromzähler-Skript selbst.

In die lokale Varialbe "channel" muss der Name von Kanal 1 deines Zählersensors eingetragen werden. Also mit ":1" am Ende, wenn er denn so heißt.

Bekommst du ansonsten Telegram-Nachrichten über das zPNP oder geht das generell nicht?

Lass das Zählerskript bitte nochmals mit "offset = -1.0;" und "image = "";" durchlaufen,

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: 252
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 » 10.04.2019, 11:17

Ok der Fehler war das :1 er meldet danach dann Initialisierung... bitte Wert... eintragen.
Beim erneuten Drücken wird wieder dieser Initialisierungswert geschrieben aber ich
erhalte keine Telegram.

Nachdem ich dann meinen Referenzwert berechnet habe und erneut das Programm
manuell starte wird in CCU SV Push Text und CCU SV Push Text Ref den Stromverbrauch
am Mittwoch eingetragen .

Als Hinweis meldet er das man den Setpoint auf "1" setzen soll , jedoch erhalt ich wieder
keine Telegram Nachricht obwohl Nachrichtendienst auf Telegram steht...

Wenn ich mittels deinen Testnachrichten im ZPNP teste bekomme ich ohne Probleme
Nachrichten im Telegram , echt komisch was da los ist von demher passt ja Cuxd und der
Rest....

Grüße Alex

dtp
Beiträge: 10658
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 » 10.04.2019, 11:38

Poste mal bitte dein Zählerskript sowie ein Screenshot der zugehörigen Systemvariablenwerte.
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: 252
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 » 10.04.2019, 12:31

Ja okay , ich habe extra alles genau gleich Bezeichnet wie du
zum erst mal richtig testen. Als Anlage die Screenshots und hier
noch einmal das Programm

Code: Alles auswählen

! Berechnet den tagesaktuellen Stand des Stromzählers und sendet einen Flot-Screenshot
! ACHTUNG: Dieses Skript erfordert eine CCU-Firmware ab Version 2.29.22
! Für den Flot-Screenshot wird der phantomjs-Adapter des ioBroker benötigt
! Version 3.0.3, Autor: dtp

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

! 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 Strom Parameter:1";

! Name einer anzufügenden Bilddatei (wenn auf "" gesetzt, wird kein Bild übertragen)
string image = ";"; 

! Benötigte Systemvariablen
string svDay = "UG HWR SV Stromverbrauch Tag"; ! Stromverbrauch des aktuellen Tags
string svWeek = "UG HWR SV Stromverbrauch Woche"; ! Liste des täglichen Stromverbrauchs pro Woche
string svValue = "UG HWR SV Stromzähler Stand"; ! Tagesaktueller Stand des Stromzä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 #####
! #####################################################################

! +++++ Deklaration weiterer Variablen +++++
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 Stromverbrauch 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("Stromverbrauch aktueller Tag"); svObject.Internal(false); svObject.Visible(true); 
  svObject.ValueType(ivtFloat); svObject.ValueSubType(istGeneric); svObject.ValueUnit("kWh"); svObject.ValueMin(0); svObject.ValueMax(65000); dom.RTUpdate(true);
}

if(!svWeek){svWeek = "UG HWR SV Stromverbrauch 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 Stromverbrauchs pro Woche"); svObject.Internal(false); svObject.Visible(true);
  svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.ValueUnit("kWh"); dom.RTUpdate(true);
}
else{list = (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svWeek)).Value(); if(list.Find("???") != -1){list = "";}}

if(!svValue){svValue = "UG HWR SV Stromzä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 Stromzählers"); svObject.Internal(false); svObject.Visible(true);
  svObject.ValueType(ivtFloat); svObject.ValueSubType(istGeneric); svObject.ValueUnit("kWh"); svObject.ValueMin(0); svObject.ValueMax(999999); dom.RTUpdate(true);
}
else{meterValue = offset + (dom.GetObject(ID_CHANNELS).Get(channel)).DPByHssDP("ENERGY_COUNTER").Value()/1000; meterDiff = meterValue - (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svValue)).Value();}

! +++++ Auslesen der aktuellen Werte +++++
! Aktueller des aktuellen Wochentags
weekday = week.StrValueByIndex(" ", system.Date("%w"));

! +++++ Korrektur im Falle des ENERGY_COUNTER-Überlaufs +++++
while(meterDiff <= -0.01){
  meterValue = meterValue + 838.8607;
  meterDiff = meterDiff + 838.8607;
}

! +++++ Zurücksetzen, falls offset = -1 +++++
if(offset == -1){meterValue = 0; meterDiff = (dom.GetObject(ID_CHANNELS).Get(channel)).DPByHssDP("ENERGY_COUNTER").Value()/1000; 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)#" kWh, "#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 Push-Nachricht +++++
if((weekday == "Sonntag") || (setpoint == 0)){
  ! ----- Erzeugen der Nachricht -----
  if(offset == -1.0){message = "Initialisierung Stromzähler\noffset = Zählerstand - "#meterDiff#" kWh eintragen!";}
  else{
    message = meterValue.ToString(2)#" kWh Strom 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);
  if(image){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushImage)).State("/tmp/"#image);}
  (dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
}
Dateianhänge
Variablen.PNG
Programm.PNG
Aktor.PNG
Aktor.PNG (24.21 KiB) 1590 mal betrachtet

dtp
Beiträge: 10658
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 » 10.04.2019, 12:41

Nur zur Sicherheit. Auf was steht die lokale Variable "prioMinList" in deinem zPNS-Tg?

Setze ggf. mal den Wert "-1" in der Zeile

Code: Alles auswählen

  ! ----- Setzen der Priorität für die Push-Nachricht -----
  (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State("-1");
deines Zählerskripts auf 1 (also einfach das Minuszeichen entfernen) und führe das Zählerprogramm dann noch mal aus.

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: 252
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 » 10.04.2019, 13:02

Hey Thorsten, solangsam kommen wir der Sache näher :-)

Im TG31 ist

Code: Alles auswählen

string prioMinList = "01|0";
eingestellt

Sobald ich im Zählskript das -1 auf 1 änder erhalte ich eine Nachricht

Code: Alles auswählen

19763.65 kWh Strom verbraucht.
Tagesverbrauchswerte in KW 14:
|||||||||| 750.53 kWh, Mittwoch
Achtung: ggf. setpoint wieder auf 1 setzen!
wird gemeldet....

Grüße Alex

Alexxx2005
Beiträge: 252
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 » 10.04.2019, 19:45

Hey Thorsten,

Habe beim Stromzähler die Batterien entfernt und neu eingelegt dann
war der Ref Wert 0.

Wenn ich jetzt den setpoint auf 1 machen und dann nochmal das
Programm starte bekomme ich keine Nachricht (was ja richtig ist)
aber er schreibt dann einen KWH Wert weg wo realistisch ist.
Um 23:59 müsste er ja dann den Wert vom MI überschreiben.

Dann kommt der Donnerstag usw. und am Sonntag schickt er mir dann
die Liste über die ganze Woche. Dann müsste es jetzt funktionieren...

Wäre es auch möglich die Werte täglich mittels Telegram senden zu lassen.

dtp
Beiträge: 10658
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 » 11.04.2019, 10:33

Hallo Alex,

mit der Einstellung

Code: Alles auswählen

string prioMinList = "01|0";
im zPNS-Tg unterdrückst du Push-Nachrichten mit Prio < 0. Das würde ich ändern in "01|-2" oder "", es sei denn, du willst wirklich keine Push-Nachrichen dieser Prio erhalten.

Wenn du die Nachricht jeden Tag erhalten möchtest, dann musst du im Zählerskript die Zeile

Code: Alles auswählen

if((weekday == "Sonntag") || (setpoint == 0)){
ändern in

Code: Alles auswählen

if((weekday == "Montag") || (weekday == "Dienstag") || (weekday == "Mittwoch") || (weekday == "Donnerstag") || (weekday == "Freitag") || (weekday == "Samstag") || (weekday == "Sonntag") || (setpoint == 0)){
Auf diese Weise kannst du auch

Code: Alles auswählen

if((weekday == "Sonntag") || (weekday == "Mittwoch") || (weekday == "Freitag") || (setpoint == 0)){
eintragen, wenn du die Nachricht am Sonntag, Mittwoch und Freitag erhalten möchtest.

Bis dann,

Thorsten
Zuletzt geändert von dtp am 13.04.2019, 11:57, insgesamt 2-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.

Alexxx2005
Beiträge: 252
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 » 12.04.2019, 21:19

Hey Thorsten,

du meinst direkt bei

Code: Alles auswählen

! +++++ Senden der Push-Nachricht +++++
  if(setpoint == 0){
  ! ----- Erzeugen der Nachricht -----
leider funktioniert das nicht , Prio habe ich geändert
wenn ich bei Prio "" eingebe verstehe ich es so das es
nicht beachtet wird.

Grüße Alex

Antworten

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