Seite 1 von 5

Betriebsstundenzähler

Verfasst: 16.02.2010, 21:21
von rkhomematic
Man möchte die Betriebsstunden eines Verbrauchers messen:
Nachfolgende Beispiele eignen sich für die aktuelle Betriebssystemversion 1.5 und vorhergehende. Bei Betriebssystem 1.5 kann die Einschaltzeit als Zeichenkette dargestellt werden, was bei vorhergehenden Betriebssystemen noch nicht möglich ist. Der Unterschied besteht in der Darstellung der Einschaltzeit und ist nicht relevant für die Betriebsstundenzählung.

Inhalt:
1. Version für Betriebssystem 1.5
1.1 Systemvariable
1.2 Basisprogramm
1.3 Erweiterung zur Aktualisierung der Betriebsstunden in 'Echtzeit'
2. Version für vorhergehende Betriebssysteme
2.1 Systemvariable
2.2 Basisprogramm
2.3 Erweiterung zur Aktualisierung der Betriebsstunden in 'Echtzeit'
3. Reset des Betriebsstundenzählers

1. Darstellung mit Betriebssystemversion 1.5 und Zeichenketten
BZ_02_Bild.jpg
BZ_02_Bild.jpg (22.42 KiB) 27718 mal betrachtet
1.1 Systemvariable erstellen
BZ_02_Systemvariable.jpg
BZ_02_Systemvariable.jpg (21.73 KiB) 27718 mal betrachtet
1.2 Programm erstellen
BZ_02_Prog.jpg
1.2.1 Script Wenn dann ..

Code: Alles auswählen

var EinZeit= dom.GetObject("BZ_02_Einschaltzeit");
EinZeit.State(system.Date("%F %T")); !Speichern der Einschaltzeit
1.2.2 Script Sonst ...

Code: Alles auswählen

!Die Systemvariablen einbinden
var EinZeit= dom.GetObject("BZ_02_Einschaltzeit");
var KumZeit= dom.GetObject("BZ_02_Betriebsstunden");

! Den Einschaltzeit String aus der Systemvariablen in ein Zeitobjekt umwandeln
time t = EinZeit.Variable().ToTime(); 

! Die aktuelle (Ausschalt)Zeit String erzeugen und in ein Zeitobjekt umwandeln
time t1 = system.Date("%F %T").ToTime(); 

! Das Zeitobjekt Einschaltzeit in Sekunden seit 1.1.1970 umwandeln
var x = t.ToInteger(); 

! Das Zeitobjekt aktuelle Zeit in Sekunden seit 1.1.1970 umwandeln
var x1 = t1.ToInteger(); 

!Die Differnz ist die Einschaltdauer in Stunden umgerechnet
var x0 = 0.01*(x1-x)/36; 

! Die Einschaltdauer kumulieren = Betriebsstunden
var kumuliert = x0 + KumZeit.Variable(); 

!Die Betriebsstunden in die Systemvariable einstellen
KumZeit.State (kumuliert); 
Damit ist das Programm fertig. Allerdings wird die Anzeige der Betriebsstunden nur beim Ausschalten des Aktors aktualisiert (gemessen wird trotzdem richtig). Sollen die Betriebsstunden auch in kürzeren Zeitintervallen aktualisiert werden, kann zusätzlich zum obigen Programm 1.2 noch folgendes Timerprogramm laufen:
1.3 Zusätzliches Timerprogramm um die Betriebsstunden regelmäßig zu aktualisieren
BZ_02_Prog_Timer.jpg
1.3.1 Script Wenn Bedingung erfüllt

Code: Alles auswählen

!Die Systemvariablen einbinden
var EinZeit= dom.GetObject("BZ_02_Einschaltzeit");
var KumZeit= dom.GetObject("BZ_02_Betriebsstunden");

! Den Einschaltzeit String aus der Systemvariablen in ein Zeitobjekt umwandeln
time t = EinZeit.Variable().ToTime(); 

! Die aktuelle (Ausschalt)Zeit String erzeugen und in ein Zeitobjekt umwandeln
time t1 = system.Date("%F %T").ToTime(); 

! Das Zeitobjekt Einschaltzeit in Sekunden seit 1.1.1970 umwandeln
var x = t.ToInteger(); 

! Das Zeitobjekt aktuelle Zeit in Sekunden seit 1.1.1970 umwandeln
var x1 = t1.ToInteger(); 

!Die Differnz ist die Einschaltdauer in Stunden umgerechnet
var x0 = 0.01*(x1-x)/36; 

! Die Einschaltdauer kumulieren = Betriebsstunden
var kumuliert = x0 + KumZeit.Variable(); 

!Die Betriebsstunden in die Systemvariable einstellen
KumZeit.State (kumuliert); 
EinZeit.State(system.Date("%F %T")); !Speichern der simulierten Einschaltzeit
2. Darstellung mit vorhergehenden Betriebssystemversionen, bei denen noch keine Zeichenkettendarstellung möglich ist:
BZ_03_Bild.jpg
BZ_03_Bild.jpg (20.43 KiB) 27718 mal betrachtet
2.1 Systemvariable erstellen
BZ_03_Systemvariable.jpg
2.2 Programm erstellen
BZ_03_Prog.jpg
2.2.1 Script Wenn dann ..

Code: Alles auswählen

var EinZeit= dom.GetObject("BZ_03_Einschaltzeit");
time t = system.Date("%F %T").ToTime(); 
! Das Zeitobjekt Einschaltzeit in Sekunden seit 1.1.1970 umwandeln
EinZeit.State (t.ToInteger()); 
2.2.2 Script sonst ....

Code: Alles auswählen

!Die Systemvariablen einbinden
var EinZeit= dom.GetObject("BZ_03_Einschaltzeit");
var KumZeit= dom.GetObject("BZ_03_Betriebsstunden");

! Das Einschaltzeit in Sekunden seit 1.1.1970 aus der Systemvariablen einlesen
var x = EinZeit.Variable().ToInteger();

! Die aktuelle (Ausschalt)Zeit String erzeugen und in ein Zeitobjekt umwandeln
time t1 = system.Date("%F %T").ToTime(); 

! Das Zeitobjekt aktuelle Zeit in Sekunden seit 1.1.1970 umwandeln
var x1 = t1.ToInteger(); 

!Die Differnz ist die Einschaltdauer in Stunden umgerechnet
var x0 = 0.01*(x1-x)/36; 

! Die Einschaltdauer kumulieren = Betriebsstunden
var kumuliert = x0 + KumZeit.Variable(); 

!Die Betriebsstunden in die Systemvariable einstellen
KumZeit.State (kumuliert); 
Damit ist das Programm fertig. Allerdings werden die Betriebsstunden nur beim Ausschalten des Aktors aktualisiert. Sollen die Betriebsstunden auch in kürzeren Zeitintervallen aktualisiert werden, kann zusätzlich zum obigen Programm 2.2 noch folgendes Timerprogramm laufen:
2.3 Zusätzliches Timerprogramm um die Betriebsstunden regelmäßig zu aktualisieren
BZ_03_Prog_Timer.jpg
2.3.1 Script Wenn Bedingung erfüllt:

Code: Alles auswählen

!Die Systemvariablen einbinden
var EinZeit= dom.GetObject("BZ_03_Einschaltzeit");
var KumZeit= dom.GetObject("BZ_03_Betriebsstunden");

! Das Einschaltzeit in Sekunden seit 1.1.1970 aus der Systemvariablen einlesen
var x = EinZeit.Variable().ToInteger();

! Die aktuelle (Ausschalt)Zeit String erzeugen und in ein Zeitobjekt umwandeln
time t1 = system.Date("%F %T").ToTime(); 

! Das Zeitobjekt aktuelle Zeit in Sekunden seit 1.1.1970 umwandeln
var x1 = t1.ToInteger(); 

!Die Differnz ist die Einschaltdauer in Stunden umgerechnet
var x0 = 0.01*(x1-x)/36; 

! Die Einschaltdauer kumulieren = Betriebsstunden
var kumuliert = x0 + KumZeit.Variable(); 

!Die Betriebsstunden in die Systemvariable einstellen
KumZeit.State (kumuliert); 

!Neue Einschaltzeit
time t = system.Date("%F %T").ToTime(); 
! Das Zeitobjekt Einschaltzeit in Sekunden seit 1.1.1970 umwandeln
EinZeit.State (t.ToInteger()); 
3. Zurücksetzen des Betriebsstundenzählers
Hier wird am Beispiel BZ_03 gezeigt, wie der Betriebsstundenzähler zurückgesetzt werden kann:
3.1 Abbildung in den Favoriten
BZ_03_Bild_Reset.jpg
3.2 Das dahinter liegende Programm sieht wie folgt aus:
BZ_03_Prog_Reset.jpg
Das Programm hat keine WENN-Bedingung und wird deshalb beim Neustart der CCU einmal ausgeführt!
Der Zähler ist gelöscht. Andererseits sind die Zählerstände beim reboot sowieso weg, also was solls....

Re: Betriebstundenzähler

Verfasst: 16.02.2010, 22:16
von teddy278
Dieser Beitrag wurde durch den Autor entfernt.

Re: Betriebstundenzähler

Verfasst: 16.02.2010, 23:18
von rkhomematic
Hallo teddy,
das stimmt, die Einschaltzeit Variable müßte nicht angezeigt werden. Ich habe das nur gemacht, um sie in den Favoriten mit anzuzeigen und um sicher zu sein, daß das Programm auch funktioniert. Man kann ja einfach bei der Variablendefinition die Kanalzuordnung weglassen.

Aber eine andere Frage, woher kommt Deine schöne Darstellung mit den schmalen Rechtecken? :o In meiner WEBUI sind immer nur große dicke Quadrate! :(

Re: Betriebstundenzähler

Verfasst: 17.02.2010, 07:11
von teddy278
Dieser Beitrag wurde durch den Autor entfernt.

Re: Betriebstundenzähler

Verfasst: 03.02.2011, 16:19
von tecki.jo
Hallo

Ich habe bei mir für die E-Heizung den Betriebsstundenzähler aktiviert und dein Script funktioniert einwandfrei.!
Bin leider nicht so fit mit Skripting aber wäre es möglich die Betriebsstunden zusätzlich auch /Woche oder Monat anzuzeigen, ausgenommen nach Reboot da ja alles verloren geht.

Danke
Johann

Re: Betriebstundenzähler

Verfasst: 16.02.2011, 10:45
von User2000
Hallo.
Super Programm.

Aber wie bekommst du die genaue Zeit angezeigt?
Ich sehe zb. bei der Gesammtzeit 21.95

Was müste man umstellen, das man zb. 01:22:23 so eine Zeit Angabe sehen würde?

Danke

Re: Betriebstundenzähler

Verfasst: 19.04.2012, 21:16
von Rodenbeck
Hallo RkHomematik,
rkhomematic hat geschrieben:var EinZeit= dom.GetObject("BZ_02_Einschaltzeit");
EinZeit.State(system.Date("%F %T")); !Speichern der Einschaltzeit
Muss die "BZ_02_Einschaltzeit" durch meien AktorNamen "IEQ0100798:18"
ersetzen ????

Gruß

M.Rodenbeck

Re: Betriebstundenzähler

Verfasst: 19.04.2012, 21:40
von MaxWrestler
Rodenbeck hat geschrieben:Muss die "BZ_02_Einschaltzeit" durch meien AktorNamen "IEQ0100798:18"
ersetzen ????
das ist eine Variable,die muss vorher angelegt werden.
Siehe Punkt 2.1

Betriebstundenzähler

Verfasst: 19.04.2012, 21:58
von joni-blue
Gleich mal am Wochenende testen


Sent from my iPad using Tapatalk HD

Re: Betriebstundenzähler

Verfasst: 20.04.2012, 00:41
von rkhomematic
Muss die "BZ_02_Einschaltzeit" durch meien AktorNamen "IEQ0100798:18"
ersetzen ????

Gruß

M.Rodenbeck
Ergänend zum Kommentar von MaxWrestler:

Der Aktor Namen ist in meinem Beispiel 1.2
Licht Esszimmer Stehlampe
und wird über die Webui angesprochen. Was immer Du dem IEQ0100798:18 für einen Namen gegeben hast, dieser wird dann anstelle
Licht Esszimmer Stehlampe
ausgewählt.

Aber beachte bitte: Kanal 15 - 20 (Sensoren) dieses Moduls sind in der Web UI auf Schaltzustand Ein, wenn der Kontakt geöffnet ist. und Schaltzustand aus, wenn der Kontakt geschlossen ist.
D.h. in der Webui ist dann - anders als im Beispiel - der Schaltzustand:aus als Trigger zu wählen.