Zeit zwischen 2 Ereignissen ausgeben

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Antworten
oetzix
Beiträge: 11
Registriert: 01.10.2018, 21:40

Zeit zwischen 2 Ereignissen ausgeben

Beitrag von oetzix » 01.06.2019, 21:19

Hallo zusammen,

bin noch ziemlicher Homematic Anfänger, wie man bestimmt an der Frage merken kann ;-)

Ich habe es hingekriegt, dass ich eine Benachrichtigung aufs Handy kriege, wenn mein Badezimmerfenster länger als 15 Minuten offen ist und auch wenn es dann wieder geschlossen wird.
Jetzt möchte ich ein bisschen weiter experimentieren und beim schließen des Fensters angeben wie lange es offen war.

Ich hatte es mir eigentlich recht simpel vorgestellt. Zweimal den Zeitpunkt (Systemzeit?!) merken und die Differenz berechnen.
Leider bin ich per google immer noch nicht fündig geworden, wie das bei der Homematic funktioniert.

Daher wäre ich zum einen dankbar für eine konkrete Umsetzungshilfe, zum anderen aber auch die Frage, ob es irgendwo eine brauchbare Skript-Doku gibt, mit der man bei solchen Anfängerfragen weiterkommt.

Schönen Gruß
oetzi

Benutzeravatar
Black
Beiträge: 5480
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 424 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

Re: Zeit zwischen 2 Ereignissen ausgeben

Beitrag von Black » 01.06.2019, 22:21

Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

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

Re: Zeit zwischen 2 Ereignissen ausgeben

Beitrag von dtp » 03.06.2019, 13:40

Vielleicht hilft dir das hier als Beispiel auch noch weiter.
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.

oetzix
Beiträge: 11
Registriert: 01.10.2018, 21:40

Re: Zeit zwischen 2 Ereignissen ausgeben

Beitrag von oetzix » 06.06.2019, 14:45

Dank euch, insbesondere das Beispiel von dtp hat mir weitergeholfen um die Lösung dann selber hinzukriegen.

Falls es anderen hilft hier meine Lösung:

Vorbedingung:
Systemvariable vom Typ Zahl und einem ausreichenden Maximalwert (ich hab folgenden genutzt: 2059676718) um die aktuelle Zeit als Integer abspeichern zu können.

Wenn das Fenster geöffnet wird, läuft folgendes Skript:

Code: Alles auswählen

! Aktuelle Zeit abspeichern
! Systemvariable holen
var sv = dom.GetObject("BAD_Zeitpunkt_Fenster-auf");

! Aktuelle Zeit setzen
integer fensterAufZeit; 
fensterAufZeit = (currenttime.Format().ToTime()).ToInteger();

! Aktuelle Zeit in SystemVar schreiben
sv.State(fensterAufZeit);

Beim Fenster schließen läuft dann folgendes Skript ab:

Code: Alles auswählen

! Deklaration Variablen 
string durS; string durM; string durH;
integer fensterAufZeit; integer fensterZuZeit; integer duration; 

! Berechnungen 
! Wert der SysVar (Zeitpunkt Fenster offen) holen
var sv = dom.GetObject("BAD_Zeitpunkt_Fenster-auf");
fensterAufZeit = sv.Value();

fensterZuZeit = (currenttime.Format().ToTime()).ToInteger();

duration = (fensterZuZeit - fensterAufZeit);
durS = duration.ToTime().Format("%S");
durM = duration.ToTime().Format("%M");
durH = duration.ToTime().Format("%H").ToInteger() - 1;

! Nachricht
string po_title="Badezimmerfenster wieder GESCHLOSSEN";
string po_message="Gel%C3%BCftet: "#durH#":"#durM#":"#durS#" Stunden";

Antworten

Zurück zu „HomeMatic allgemein“