Hi Thorsten,
da ich ein begeisterter Fan bin von Deinen Skripten bin, wollte ich nun auch diese integrieren.
Folgendes Problem. Ich habe die Initialisierung durchgeführt und den den Wert eingefügt:
Code: Alles auswählen
! Berechnet den tagesaktuellen Stand des Wasserzählers mittels der Zählersensor-
! Sendeinheit HM-ES-TX-WM und sendet eine Übersicht als Push-Nachricht mittels zPNP
! Version 3.5.2, Autor: dtp
! +++++ Startwert des Wasserzählers als reelle Zahl (Ersteinrichtung und Reset: -1.0) +++++
! real offset = 476.044;
real offset = -1.0;
! +++++ Zählerstand setzen +++++
! sofort bei Ausführung des Programms: false; Regelbetrieb (täglich um setTime): true
boolean regular = true;
string setTime = "23:59";
! +++++ Bargraph-Anzeige (range = 0 schaltet die Anzeige aus) +++++
real range = 1.0; ! Maximaler Verbrauchswert in m³
real bars = 10.0; ! Anzahl der Bars innerhalb range
! +++++ Parameter der Zählersensor-Sendeeinheit +++++
string channel = "Energiezaehler Wasser:1";
string iecFlag = false; ! Für Sendeeinheit ab FW-Version 2.2 mit ES-IEC-Sensor auf true setzen
! +++++ 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 = "täglich";
! +++++ Anzahl der Tage, für die die zurückliegenden Verbrauchswerte angezeigt werden sollen +++++
integer numDays = 7;
! +++++ Name einer anzufügenden Bilddatei (wenn auf "" gesetzt, wird kein Bild übertragen) +++++
! die Datei muss zuvor in das tmp-Verzeichnis der CCU gespeichert worden sein
string image = "";
! +++++ Benötigte Systemvariablen +++++
string svDay = "Haus SV Wasserverbrauch Tag"; ! Wasserverbrauch des aktuellen Tags
string svList = "Haus SV Wasserverbrauch Liste"; ! Liste der täglichen Wasserverbräuche
string svValue = "Haus SV Wasserzähler Stand"; ! Tagesaktueller Stand des Wasserzählers
string svPushText = "CCU SV Push Text"; ! Text der zu übertragenden Push-Nachricht gem. zPNS-xx
string svPushPrio = "CCU SV Push Prio"; ! Priorität der Push-Nachricht gem. zPNS-xx
string svPushImage = "CCU SV Push Bild"; ! Link für ein zu sendendes Bild 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 listMod = ""; string listElement; string bargraph = ""; string message;
string weekday; string monthday; string week = "Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag";
integer cnt = 0;
object svObject; object svObjectList;
! +++++ Systemvariablen erzeugen bzw. falls vorhanden, auslesen +++++
if(!svDay){svDay = "Haus SV Wasserverbrauch 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("Wasserverbrauch 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(!svList){svList = "Haus SV Wasserverbrauch Liste";}
svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svList);
if(!svObject){
svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
svObject.Name(svList); svObject.DPInfo("Liste der täglichen Wasserverbräuche"); 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(svList)).Value(); if(list.Contains("???")){list = "";}}
if(!svValue){svValue = "Haus SV Wasserzä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 Wasserzä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{
if(!iecFlag){meterValue = offset + (dom.GetObject(ID_CHANNELS).Get(channel)).DPByHssDP("GAS_ENERGY_COUNTER").Value();}
else{meterValue = offset + (dom.GetObject(ID_CHANNELS).Get(channel)).DPByHssDP("IEC_ENERGY_COUNTER").Value();}
meterDiff = meterValue - (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svValue)).Value();
}
! +++++ Auslesen der aktuellen Datumswerte +++++
weekday = week.StrValueByIndex(" ", system.Date("%w")); ! Wochentag
monthday = system.Date("%d").LTrim("0"); ! Monatstag
! +++++ Korrektur im Falle des COUNTER-Überlaufs +++++
while(meterDiff <= -0.01){meterValue = meterValue + 838860.7; meterDiff = meterDiff + 838860.7;}
meterDiff = meterDiff.Abs();
! +++++ Zurücksetzen, falls offset = -1 +++++
if(offset == -1.0){
meterValue = 0;
if(!iecFlag){meterDiff = (dom.GetObject(ID_CHANNELS).Get(channel)).DPByHssDP("GAS_ENERGY_COUNTER").Value();}
else{meterDiff = (dom.GetObject(ID_CHANNELS).Get(channel)).DPByHssDP("IEC_ENERGY_COUNTER").Value();}
regular = false;
}
! +++++ 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#" ";
}
! +++++ Liste auf Zeitfenster begrenzen und vermeiden aufeinanderfolgender Einträge am Sendetag +++++
if(list){
foreach(listElement, list.Split("\n")){
if((cnt == 0) && (listElement.Contains(weekday))){listElement = "";}
else{listElement = listElement#"\n";}
if(cnt >= numDays-1){listElement = "";}
listMod = listMod#listElement;
cnt = cnt + 1;
}
}
list = bargraph#meterDiff.ToString(2)#" m³, "#weekday#", "#system.Date('%d')#"."#system.Date('%m')#".\n"#listMod;
! +++++ Setzen der Systemvariablen +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svList)).State(list);
if(regular){
if(system.Date("%H:%M") == setTime){
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svValue)).State(meterValue);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svDay)).State(meterDiff);
}
else{regular = false;}
}
else{
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svValue)).State(meterValue);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svDay)).State(meterDiff);
}
! +++++ Senden der Push-Nachricht +++++
if((sendDatesList.Contains(weekday)) || (sendDatesList.Contains(monthday)) || (sendDatesList.Contains("täglich")) || (!regular)){
! ----- Erzeugen der Nachricht -----
if(offset == -1.0){message = "Initialisierung Wasserzähler\noffset = Zählerstand - "#meterDiff#" m³ eintragen!";}
else{
message = meterValue.ToString(2)#" m³ Wasser verbraucht.\nTagesverbrauchswerte:\n"#list;
if(!regular){
if(system.Date("%H:%M") != setTime){message = "<font color=red>Fehler Wasserzähler: Für den regulären Betrieb Zeitmodul des Programms auf "#setTime#" Uhr setzen!</font>";}
else{message = message#"<font color=orange>Achtung: ggf. regular wieder auf true setzen!</font>";}
}
}
! ----- 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();
}
Ergebnis:
Sobald ich den realen offset eingebe, passiert ncichts.
Der Programmaufruf schaut so aus:
Und das Zeitmodul:
- Zeitmodul.png (22.47 KiB) 1630 mal betrachtet
Wo mache ich denn was falsch?
Viele Grüße