Betriebstundenzähler

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

rkhomematic
Beiträge: 139
Registriert: 04.12.2009, 09:28
Wohnort: FFM

Betriebstundenzähler

Beitrag von rkhomematic » 16.02.2010, 21:21

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) 14242 mal betrachtet
1.1 Systemvariable erstellen
BZ_02_Systemvariable.jpg
BZ_02_Systemvariable.jpg (21.73 KiB) 14242 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) 14242 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....
Zuletzt geändert von rkhomematic am 16.02.2010, 23:12, insgesamt 1-mal geändert.

teddy278

Re: Betriebstundenzähler

Beitrag von teddy278 » 16.02.2010, 22:16

Dieser Beitrag wurde durch den Autor entfernt.
Zuletzt geändert von teddy278 am 12.06.2011, 00:45, insgesamt 1-mal geändert.

rkhomematic
Beiträge: 139
Registriert: 04.12.2009, 09:28
Wohnort: FFM

Re: Betriebstundenzähler

Beitrag von rkhomematic » 16.02.2010, 23:18

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! :(
ca. 120 Geräte
Zusatzsoftware:
Homeputer CL
CL Webserver
XML-API
CUx-Daemon

teddy278

Re: Betriebstundenzähler

Beitrag von teddy278 » 17.02.2010, 07:11

Dieser Beitrag wurde durch den Autor entfernt.
Zuletzt geändert von teddy278 am 12.06.2011, 00:45, insgesamt 1-mal geändert.

tecki.jo
Beiträge: 1
Registriert: 01.02.2011, 12:25

Re: Betriebstundenzähler

Beitrag von tecki.jo » 03.02.2011, 16:19

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

User2000
Beiträge: 103
Registriert: 22.11.2010, 11:15

Re: Betriebstundenzähler

Beitrag von User2000 » 16.02.2011, 10:45

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

Rodenbeck
Beiträge: 46
Registriert: 23.06.2009, 23:49

Re: Betriebstundenzähler

Beitrag von Rodenbeck » 19.04.2012, 21:16

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

MaxWrestler
Beiträge: 237
Registriert: 11.12.2011, 12:19

Re: Betriebstundenzähler

Beitrag von MaxWrestler » 19.04.2012, 21:40

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

Benutzeravatar
joni-blue
Beiträge: 964
Registriert: 04.01.2012, 12:20
Wohnort: Hannover

Betriebstundenzähler

Beitrag von joni-blue » 19.04.2012, 21:58

Gleich mal am Wochenende testen


Sent from my iPad using Tapatalk HD
Reboot tut gut ! ! !

rkhomematic
Beiträge: 139
Registriert: 04.12.2009, 09:28
Wohnort: FFM

Re: Betriebstundenzähler

Beitrag von rkhomematic » 20.04.2012, 00:41

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.
ca. 120 Geräte
Zusatzsoftware:
Homeputer CL
CL Webserver
XML-API
CUx-Daemon

Antworten

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