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

Benutzeravatar
DiJe
Beiträge: 566
Registriert: 04.03.2015, 05:51
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

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

Beitrag von DiJe » 26.02.2017, 08:41

Hallo Thorsten,
habe deine Vorgänger Version am laufen,würde die auch gerne weiter nutzen.
Bin sehr zufrieden damit, bis auf einige falsche Tagesverbräuche.
Passiert aber sehr selten. Vieleicht liegt es ja am Überlauf.
Welche Script Zeilen muß ich in das alte Script einbauen, damit der Überlauf nicht zuschlägt.
Gruß Dieter
Gruß Dieter
----------------------------------------------------------------------------------------
RaspiMatic auf Raspi4 - 4Gb -nach Kernel Upgrade Temp.~50° - m.Addons: ioBroker, RedMatic, CCU-Historian, CUxD, Email, XMl Api
Geräte 120, davon DIY Geräte 35 -Variablen 213 - Programme 160 / Visualisierung mit Mediola auf 24" Acer DA241HL / läuft alles stabil

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

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

Beitrag von dtp » 01.03.2017, 07:20

Hi Dieter,

irgendwie habe ich Dein Posting ganz übersehen. Kannst Du mal Dein(e) Skript(e) hier in Code-Tags stellen oder sie mir per PN zukommen lassen? Dann kann sie entsprechend anpassen.

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.

Benutzeravatar
DiJe
Beiträge: 566
Registriert: 04.03.2015, 05:51
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

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

Beitrag von DiJe » 01.03.2017, 16:21

Hallo Thorsten,
hier mal das Orginalscript von dir:

Code: Alles auswählen

! Berechnet den tagesaktuellen Stand des Stromzählers
! Version 1.2, Autor: dtp

! +++++ Parameter einstellen +++++
! Startwert des Stromzählers in kWh
real offset =143389.45;

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

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

! Zählersensor Kanal
string device = "BidCos-RF.MEQ0705634:1.ENERGY_COUNTER";

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

! +++++ weitere Variablendeklarationen +++++
real counter_day;
real energy_cnt; 
real bar_index = 0.0; 
string counter_value; 
string list; 
string weekday; 
string bargraph = ""; 
string nachricht;
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 "Stromverbrauch Woche"
list = dom.GetObject("Stromverbrauch Woche").Value();
if(list.Find("???") != -1){list = "";}
 
! Berechnen der Werte
energy_cnt = dom.GetObject(device).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("Stromverbrauch Tag").Value().ToFloat();

! Ausgabe als Bargraph
if(range > 0){
  while((bar_index < counter_day) && (bar_index <= (range - range/bars))){
    bargraph = bargraph#"|"; 
    bar_index = bar_index + range/bars;
  }
  if(counter_day > range){bargraph = "<b>"#bargraph#"</b>";}
  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#counter_day.ToString(2)#" kWh, "#weekday#"\n"#list;
 
! Setzen der Systemvariablen "Stromverbrauch Woche" und "Stromverbrauch Tag"
dom.GetObject("Stromverbrauch Woche").State(list);
if(setpoint == 1){
  if(system.Date("%H:%M") == "23:59"){dom.GetObject("Stromverbrauch Tag").State(counter_value);}
}
if(setpoint == 0){
  dom.GetObject("Stromverbrauch Tag").State(counter_value);
}

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

dom.GetObject("CUxD.CUX2801001:4.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -d token=xxxxxxxxxxxxxxxxxxxxxxxxxx -d xxxxxxxxxxxxxxxxxxxx -d message='"#nachricht#"' -d sound=bike http://api.pushover.net/1/messages.json");
danke für deine Rückmeldung,
Gruß Dieter
Gruß Dieter
----------------------------------------------------------------------------------------
RaspiMatic auf Raspi4 - 4Gb -nach Kernel Upgrade Temp.~50° - m.Addons: ioBroker, RedMatic, CCU-Historian, CUxD, Email, XMl Api
Geräte 120, davon DIY Geräte 35 -Variablen 213 - Programme 160 / Visualisierung mit Mediola auf 24" Acer DA241HL / läuft alles stabil

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

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

Beitrag von dtp » 02.03.2017, 08:03

Hallo Dieter,

versuch's mal damit:

Code: Alles auswählen

! Berechnet den tagesaktuellen Stand des Stromzählers
! Benötigt werden die folgenden Systemvariablen:
! "Stromverbrauch Tag": Stromverbrauch des aktuellen Tags als Zahl
! "Stromverbrauch Woche": Liste des täglichen Stromverbrauchs pro Woche als Zeichenkette
! "Stromzähler Stand": Tagesaktueller Stand des Stromzählers als Zahl (optional)
! Version 1.4a, Autor: dtp

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

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

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

! Zählersensor Kanal
string device = "BidCos-RF.MEQ0705634:1.ENERGY_COUNTER";

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

! +++++ weitere Variablendeklarationen +++++
real meter_diff; real meter_value; real bar_index = 0.0;
string list; string weekday; string bargraph = ""; string nachricht;
string week = "Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag";
 
! +++++ Auslesen der aktuellen Werte +++++
! Aktueller Wochentag
weekday = week.StrValueByIndex(" ", system.Date("%w"));

! Systemvariable "Stromverbrauch Woche"
list = dom.GetObject("Stromverbrauch Woche").Value();
if(list.Find("???") != -1){list = "";}

! +++++ Berechnungen
meter_value = offset + dom.GetObject(device).Value()/1000;
meter_diff = meter_value - dom.GetObject("UG HWR SV Stromzähler Stand").Value();

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

! Vermeidung zu hoher Tageswerte
if(meter_diff > 100.00){meter_diff = 0.00;}

! Zurücksetzen, falls offset = -1
if(offset == -1){meter_value = 0; meter_diff = dom.GetObject(device).Value()/1000; list = ""; setpoint = 0;}

! Ausgabe als Bargraph
if(range > 0){
  while((bar_index < meter_diff) && (bar_index <= (range - range/bars))){
    bargraph = bargraph#"|";
    bar_index = bar_index + range/bars;
  }
  if(meter_diff > range){bargraph = "<b>"#bargraph#"</b>";}
  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#meter_diff.ToString(2)#" kWh, "#weekday#"\n"#list;

! +++++ Setzen der Systemvariablen
dom.GetObject("Stromverbrauch Woche").State(list);
if(setpoint == 1){
  if(system.Date("%H:%M") == "23:59"){
!    dom.GetObject("Stromzähler Stand").State(meter_value);
    dom.GetObject("Stromverbrauch Tag").State(meter_diff);
  }
}
if(setpoint == 0){
!  dom.GetObject("Stromzähler Stand").State(meter_value);
  dom.GetObject("Stromverbrauch Tag").State(meter_diff);
}

! ++++ Senden der Verbrauchswerte per Push-Nachricht ++++
!if((weekday == "Sonntag") || (setpoint == 0)){
  ! Erzeugen der Nachricht
  if(offset == -1.0){nachricht = "Initialisierung Stromzähler\noffset = Zählerstand - "#meter_diff#" kWh eintragen!";}
  else{
    nachricht = meter_value.ToString(2)#" kWh Strom verbraucht.\nTagesverbrauchswerte in KW "#system.Date('%W')#":\n"#list;
    if(setpoint == 0){nachricht = nachricht#"Achtung: ggf. setpoint wieder auf 1 setzen!";}
  }
 
  dom.GetObject("CUxD.CUX2801001:4.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -d token=xxxxxxxxxxxxxxxxxxxxxxxxxx -d xxxxxxxxxxxxxxxxxxxx -d message='"#nachricht#"' -d sound=bike http://api.pushover.net/1/messages.json");
!}
Nicht vergessen, die Keys für Pushover einzutragen.

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.

Benutzeravatar
DiJe
Beiträge: 566
Registriert: 04.03.2015, 05:51
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

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

Beitrag von DiJe » 06.03.2017, 06:34

Hallo Thorsten,
danke für deine Antwort.
In dem Script sind die Zeilen
------------------------

! +++++ Setzen der Systemvariablen
dom.GetObject("Stromverbrauch Woche").State(list);
if(setpoint == 1){
if(system.Date("%H:%M") == "23:59"){
! dom.GetObject("Stromzähler Stand").State(meter_value);
dom.GetObject("Stromverbrauch Tag").State(meter_diff);
}
}
if(setpoint == 0){
! dom.GetObject("Stromzähler Stand").State(meter_value);
dom.GetObject("Stromverbrauch Tag").State(meter_diff);
}
-----------------------------------------------------------
auskommentiert.
ist bestimmt nicht richtig, oder?
Gruß Dieter
Gruß Dieter
----------------------------------------------------------------------------------------
RaspiMatic auf Raspi4 - 4Gb -nach Kernel Upgrade Temp.~50° - m.Addons: ioBroker, RedMatic, CCU-Historian, CUxD, Email, XMl Api
Geräte 120, davon DIY Geräte 35 -Variablen 213 - Programme 160 / Visualisierung mit Mediola auf 24" Acer DA241HL / läuft alles stabil

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

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

Beitrag von dtp » 06.03.2017, 07:34

Hi Dieter,

doch, weil Du ja auch bisher diese Systemvariable nicht benutzt hattest. Wenn Du sie benutzen möchtest, musst Du sie nur anlegen und die Zeilen entsprechend auskommentieren.

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.

Benutzeravatar
DiJe
Beiträge: 566
Registriert: 04.03.2015, 05:51
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

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

Beitrag von DiJe » 06.03.2017, 13:42

Danke Thorsten,

Gruß Dieter
Gruß Dieter
----------------------------------------------------------------------------------------
RaspiMatic auf Raspi4 - 4Gb -nach Kernel Upgrade Temp.~50° - m.Addons: ioBroker, RedMatic, CCU-Historian, CUxD, Email, XMl Api
Geräte 120, davon DIY Geräte 35 -Variablen 213 - Programme 160 / Visualisierung mit Mediola auf 24" Acer DA241HL / läuft alles stabil

djangp
Beiträge: 166
Registriert: 11.09.2014, 10:43
Wohnort: Bayern
Hat sich bedankt: 3 Mal

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

Beitrag von djangp » 02.05.2017, 20:07

Kann man das Script auch umbauen, damit mir eine E-Mail mit dem Addon geschickt wird?
RaspberryMatic auf RPi 3 - AIO Creator NEO

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

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

Beitrag von dtp » 03.05.2017, 07:25

Klar kann man das. Einfach diese Codezeilen

Code: Alles auswählen

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

  ! +++++ Programm "CCU PRG Push-Nachrichten" ausführen ++++
  dom.GetObject("CCU SV Push Text").State(message);
  dom.GetObject("CCU PRG Push-Nachrichten").ProgramExecute();
durch die entsprechenden Codezeilen zum Senden einer Email ersetzen. Da ich aber keine Emails nutze, müsste das jemand machen, der das tut. Oder man sucht sich hier im Forum die passenden Codezeilen zusammen. Im Thread für das Email-Addon dürfte sich sicherlich was finden lassen.

EDIT:

Versuch's mal damit, wobei Du die ersten beiden Codezeilen auch nach oben ins Skript verschieben kannst:

Code: Alles auswählen

var MailId = "01"; ! Mailvorlage (01 - 50) des Email-Addon
var MailCuxdId = "CUX2801001:1"; ! ID des auf der CCU angelegten CUxD-EXEC-Geräts

(dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#MailCuxdId#".CMD_EXEC").State("/etc/config/addons/email/email "#MailId#" '"#message#"'");
Natürlich muss die Mailvorlage entsprechend eingerichtet sein und im Email-Addon funktionieren. Die obigen Codezeilen entstammen übrigens Alchys Allinclusive-Skript.

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.

djangp
Beiträge: 166
Registriert: 11.09.2014, 10:43
Wohnort: Bayern
Hat sich bedankt: 3 Mal

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

Beitrag von djangp » 03.05.2017, 19:28

Hallo,
vielen DANK. Hätte noch ein paar Fragen.

1) Ich nutze als Mail das Mail-Addon, welches sonst schon läuft. Wie finde ich die Mail-CuxD ID?

2) Beim ausführen des Scriptes werden zwar die Variablen gefüllt, aber nur alle mit einer "0" - das einzige was korrekt
eingetragen wird ist der Tag Mittwoch?
Wo kann mein Fehler noch liegen?
Edit: Hab jetzt auf den Script 1.4a umgestellt - jetzt werden keinerlei Werte mehr eingetragen - die Systemvariablen habe ich umbenannt
RaspberryMatic auf RPi 3 - AIO Creator NEO

Antworten

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