Einschaltdauer dynamisch im Programm

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

Moderator: Co-Administratoren

Antworten
alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Einschaltdauer dynamisch im Programm

Beitrag von alchy » 13.06.2018, 09:57

Wir wissen, eine Einschaltdauer an einen Kanal zu übergeben, ist die sicherste Art ein Kanal wieder auszuschalten.
Warum?
Die Einschaltdauer wird mit dem Einschalten direkt an den Aktor übermittelt, im Aktor selber läuft die Zeit ab, er sorgt also selber dafür wie es weiter geht.
Das ist auch der Grund warum einige Kanäle älterer Geräte nicht mittels Einschaltdauer geschalten werden können, da sie "keine interne Uhr" haben.

Schalten wir hingegen z.B. in einem Programm den Kanal ein und dann verzögert wieder aus, ist das bei Weitem nicht so sicher.
Warum?
Der Aktor wird eingeschalten, die Zeit läuft in der CCU ab und wird als separater AusBefehl dann zum Aktor geschickt.
Ist die CCU dann "nicht betriebsbereit" oder erreicht der Ausschaltbefehl nicht den Aktor usw. bleibt der Aktor einfach eingeschalten.


Das als Vorgeschichte, wie benutze ich nun eine dynamische Einschaltdauer.

1. Wir erstellen eine Systemvariable vom Typ Zahl mit Namen SysVarEinschaltdauer
Einschaltdauer_dynamisch_Sysvar.jpg
Typ Zahl
2. Wir machen uns Gedanken, was wir so mit dynamischer Einschaltdauer schalten wollen :mrgreen:

3. wir erstellen ein Programm
Einschaltdauer_dynamisch_Programm.jpg
fertiges Programm
3a. dabei drücken wir nach Auswahl der Option Einschaltdauer aber auf das weiße Blatt hinter
Einschaltdauer_dynamisch_weissesBlatt.jpg
Einschaltdauer_dynamisch_weissesBlatt.jpg (932 Bytes) 6376 mal betrachtet
3b.und wählen die vorher erstellte Systemvariable aus:
Einschaltdauer_dynamisch_Verknüpfung.jpg
und wir sind schon fertig.

In meinem Fall benutze ich das Ändern der Systemvariable gleich als Trigger für das Programm selber.

Was geschieht nun in meinem Beispielprogramm?

auf geeigneten Weg ändere ich die Systemvariable SysVarEinschaltdauer auf einen Wert. Über eine App, ein Script usw.

Hier ein passendes Script:

Code: Alles auswählen

(dom.GetObject(ID_SYSTEM_VARIABLES)).Get("SysVarEinschaltdauer").State(25.0);
Mit dem Ändern der Systemvariablen wird also die Steckdose Wohnzimmer für 25 Sekunden eingeschalten - fertig.

Das Triggern muss natürlich nicht über die Systemvariable selber geschehen.
Man kann auch einen anderen Trigger benutzen und die Einschaltdauer vorher durch z.B. ein anderes Programm umstellen.
Der Fantasie sind wie immer keine Grenzen gesetzt.


Bei Fragen einfach melden

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

MartinBr
Beiträge: 393
Registriert: 25.01.2017, 10:51
Wohnort: Bei Berlin
Hat sich bedankt: 3 Mal
Danksagung erhalten: 8 Mal

Re: Einschaltdauer dynamisch im Programm

Beitrag von MartinBr » 26.06.2018, 08:58

Hallo Alchy,
danke für deinen Tipp. Ich habe das in zwei Programme eingebaut. Ein Programm steuert meine Beregnung des Rasens. Ich habe dort 6 Kreise. Nun steuere ich jetzt "dynamisch" die Beregnungszeit der Kreise, muss aber die Verzögerung im Programm eintragen.
Nun die Frage: Kann man auch die Verzögerungszeit dynamisch steuern?
Gruß
Martin
RaspberryMatic-3.59.6 auf Tinkerboard S, CUxD 2.6, XML-1.20, ioBroker (HM,HMIP, Zigbee, Zwave und Shelly) und Alexa in einer VM unter Proxmox, VitoComfort 200

RamSauer
Beiträge: 59
Registriert: 29.03.2018, 10:11

Re: Einschaltdauer dynamisch im Programm

Beitrag von RamSauer » 11.07.2018, 15:36

MartinBr hat geschrieben:
26.06.2018, 08:58
Nun die Frage: Kann man auch die Verzögerungszeit dynamisch steuern?
Hallo Alchy

Genau diese Frage beschäftigt mich auch brennend. Die Antwort wird mit Sicherheit "Ja!" lauten, doch genau daran schließt sich dann die Frage nach dem "Wie?" an.

Es gibt einen Beitrag viewtopic.php?f=19&t=6606 , der allerdings aus dem Jahre 2011 stammt, nicht wirklich abgeschlossen ist und so richtig werde ich daraus nicht schlau.

@Alchy: Kannst Du mir mitteilen, wie ich meine Beregnung, welche durch 2 Ventile durchgeführt wird (angeschlossen an einen 4 fach HM Hutschienenaktor) auch in der Verzögerung der beiden Ventile dynamisch durchführen kann? Das zweite Ventil soll also nach "Einschaltdauer des ersten Ventils + 10 Sekunden starten".

Vielen Dank für die Hilfe!

Markus

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Einschaltdauer dynamisch im Programm

Beitrag von alchy » 11.07.2018, 15:56

Ohne jetzt groß drüber nachzudenken, dafür ist es noch zu früh.

Wir sind uns soweit einig, wenn du es so machst, wie ich oben geschrieben habe, kannst du durch welche Bedingungen auch immer eine Einschaltdauer X an einen Kanal übergeben und durch das Schreiben der Einschaltdauer in eine Variable auch gleich noch den Kanal schalten für die Zeit X ?

Nun willst du aber einen 2. Kanal im Anschluss an den 1. Kanal schalten ebenfalls für die Zeit X. ?
Dann reagiere doch auf das Ausschalten des 1. Kanal als Trigger für den 2. Kanal.
Am besten noch eine Systemvariable "Automatisches Berieseln" welche du im Programm prüfst, damit nicht jedes Mal, wenn du den 1. Kanal schaltest, automatisch irgendwann der 2. Kanal auch schaltet.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

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

Re: Einschaltdauer dynamisch im Programm

Beitrag von Black » 11.07.2018, 16:16

jap, die verzögerungszeit lässt sich auch anpassen, wird allerdings ein wenig komplizierter und ist auch nicht so ganz gradlinig und einfach wie die Einschaltdauer.

Die Verzögerungszeiten zu jeder Anweisung (SingleDestination) verbergen sich unter
DestinationValueParamType ()
0x00 heisst sowort, 0x1A bedeutet verzögert um.

und der Verzögerungswert wird definiert in DestinationValueParam (), muss allerdings als String übergebene werden im Bezug, Datumsstring (eigentlich egal) und format stunde, minute sekunde, woebei diese allerdings die Verzögerung in Sekunden repräsentieren. möglich ist eine maximale Verzögerung vom 86399 Sekunden, entspricht 23:59:59.

Vllt schreib ich dazu mal ein paar Zeilen eines kleinen Programmes, welches die Singledestination einer bestimmen Rule Adressiert und zugriff auf die beiden Methoden ermöglicht.

Black
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

RamSauer
Beiträge: 59
Registriert: 29.03.2018, 10:11

Re: Einschaltdauer dynamisch im Programm

Beitrag von RamSauer » 12.07.2018, 08:47

Hallo zusammen
alchy hat geschrieben:
11.07.2018, 15:56
Wir sind uns soweit einig, wenn du es so machst, wie ich oben geschrieben habe, kannst du durch welche Bedingungen auch immer eine Einschaltdauer X an einen Kanal übergeben und durch das Schreiben der Einschaltdauer in eine Variable auch gleich noch den Kanal schalten für die Zeit X ?
Korrekt! Und so mache ich es bereits.
alchy hat geschrieben:
11.07.2018, 15:56
Nun willst du aber einen 2. Kanal im Anschluss an den 1. Kanal schalten ebenfalls für die Zeit X. ?
Dann reagiere doch auf das Ausschalten des 1. Kanal als Trigger für den 2. Kanal.
Am besten noch eine Systemvariable "Automatisches Berieseln" welche du im Programm prüfst, damit nicht jedes Mal, wenn du den 1. Kanal schaltest, automatisch irgendwann der 2. Kanal auch schaltet.
Das ist der WorkAround, wenn ich die Sache nicht in ein Programm hineinbekomme.

Dennoch hätte ich die ganze Geschichte lieber in einem Programm, da mir meine Programmierungen langsam auch etwas unübersichtlich werden, wenn ich für ein Problem 2 oder mehr Programme erstellen muss.
Black hat geschrieben:
11.07.2018, 16:16
jap, die verzögerungszeit lässt sich auch anpassen, wird allerdings ein wenig komplizierter und ist auch nicht so ganz gradlinig und einfach wie die Einschaltdauer.
Warum bietet hier EQ3 nicht auch die Möglichkeit, dass genau wie die Einschaltdauer via Systemvariable und zusammenklicken umzusetzen? Das sollte doch eigentlich nicht wirklich ein Problem darstellen, oder? Bei der Einschaltdauer haben sie das ja auch geschafft?!?!
Black hat geschrieben:
11.07.2018, 16:16
Die Verzögerungszeiten zu jeder Anweisung (SingleDestination) verbergen sich unter
DestinationValueParamType ()
0x00 heisst sowort, 0x1A bedeutet verzögert um.
Gibt es dazu irgendwo eine verständliche Dokumentation?
Black hat geschrieben:
11.07.2018, 16:16
Vllt schreib ich dazu mal ein paar Zeilen eines kleinen Programmes, welches die Singledestination einer bestimmen Rule Adressiert und zugriff auf die beiden Methoden ermöglicht.
JAAAAAAAAAAAAAAAAAA!!!! Bitte!! Das wäre großartig, dann könnte ich zusätzlich noch die Systemvariable mal auf verständliche Minuten umstellen und programmintern in Sekunden umrechnen.

In heller Vorfreude

Markus

Antworten

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