"alle laufenden Verzögerungen ... beenden"

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Norfolk
Beiträge: 85
Registriert: 27.12.2014, 20:20
Hat sich bedankt: 8 Mal
Danksagung erhalten: 2 Mal

"alle laufenden Verzögerungen ... beenden"

Beitrag von Norfolk » 06.02.2017, 20:27

Hallo,

eine Verständnisfrage zu dem Hakerl bei "Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden": Was tut dieses? Bei mir nämlich nicht das, was ich erwartet hätte...

Mein Programm - siehe Screenshot im Anhang - soll als "Fenster-Offen-Alarm" mit Verzögerung 4x melden, und zwar nach 5, 10, 20 und 40 Sekunden, sowie beim Schliessen 1x die Info "Fenster geschlossen".

Das funktioniert zwar im Prinzip, aber es werden alle verzögerten Meldungen übermittelt. Ich hätte erwartet, das beim Schliessen durch das besagte Hakerl alle Verzögerungen beendet werden, so haben es auch Forumskollegen in gleichartig aufgebauten Programmen verwendet.

D.h. die Meldungen sehen z.B. so aus:

Zeit - Aktion
0 Sek - meine Aktion: "Fenster öffnen"
5 Sek - Meldung 1: Fenster seit 5 Min. geöffnet
6 Sek - meine Aktion: "Fenster schliessen"
8 Sek - Meldung 2: Fenster geschlossen
10 Sek - Meldung 3: Fenster seit 10 Min. geöffnet
20 Sek - Meldung 4: Fenster seit 20 Min. geöffnet
40 Sek - Meldung 5: Fenster seit 12h geöffnet

Warum wird das durch "laufende Verzögerungen beenden" nicht abgebrochen, bzw. was mache ich falsch?

Die Randinfos:

Die CCU2 läuft auf YAHM mit FW 2.25.15.

"Aussentemp" ist eine Systemvariable, die alle 5 Minuten in einem anderen Skript gesetzt wird.

Bei dem Fenster ist sowohl ein optischer, als auch ein Drehgriff-Sensor im Einsatz. Ich habe das Script auch ohne den Drehgriff und nur mit dem optischen Sensor getestet, mit gleichem Effekt.

Alle im Screenshot verwendeten Skripte sind wie folgend aufgebaut, teilweise mit bzw. ohne die IF-Abfrage, und mit angepassten Temperaturwerten (4, 10, 15°C in der IF-Abfrage) bzw. unterschiedlichen Messagetexten:

Code: Alles auswählen

if( dom.GetObject("Aussentemp").Value() <= 10) {
    string message = "Fenster seit 10 min offen";
    string chatid = "XYZ"; 
    string botAPI = "ABC"; 
    dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -k https://api.telegram.org/bot"#botAPI#"/sendMessage -d text='"#message#"' -d chat_id="#chatid); }
lg,
Norfolk
Dateianhänge
hm.jpg
Screenshot
Zuletzt geändert von alchy am 06.02.2017, 20:33, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

66er
Beiträge: 3083
Registriert: 23.08.2015, 11:06
System: CCU
Hat sich bedankt: 116 Mal
Danksagung erhalten: 111 Mal

Re: "alle laufenden Verzögerungen ... beenden"

Beitrag von 66er » 06.02.2017, 20:51

Hallo,

die Forumssuche liefert:

Die Suche ergab 48 Treffer: verzögerung abbrechen

Suchanfrage: +verzögerung +abbrechen


Nichts dabei?

Ich denke doch!
Stichwort: Systemvariable erstellen und nutzen

LG
66er
Ich übernehme keine Haftung für von mir gegebene Antworten, Tipps und veröffentlichte Projekte! Jeder ist für sich selbst verantwortlich! Arbeiten an 230V sind von einer Elektrofachkraft auszuführen!

Homematic in Betrieb seit 15.08.2015, > 60 HM-Komp. | 3x USV APC ES400 | Visualisierung auf ioBroker | Audio: Home24-Apps

Raspberrymatic auf DS923+ in VMM (Produktivsystem1)
Rollläden, SSD, Wetter, Logging, Licht, RM, Sonos, Shelly

Raspberrymatic auf DS923+ in VMM (Produktivsystem2 )
Erweiterung GMA, Heizung, Licht, Shelly, SSD, Sonos

>100 Shelly-Geräte an Homematic | CCU2 endgültig in Rente | 3 Raspis als Rückfallebene für Raspimatic und ioBroker

Shelly an Homematic | Infrarot-Heizungssteuerung | Fensteröffnungszeit überwachen

BadenPower

Re: "alle laufenden Verzögerungen ... beenden"

Beitrag von BadenPower » 06.02.2017, 21:24

Norfolk hat geschrieben:Warum wird das durch "laufende Verzögerungen beenden" nicht abgebrochen, bzw. was mache ich falsch?
Na, dann fangen wir einmal bei den Grundlagen an.

Laufende Verzögerungen abbrechen" bedeutet, dass alle Verzögerungen, der im ausgeführten Abschnitt verwendeten "Objekte" abgebrochen werden.
Jedes "Objekt" wird durch eine ID auf der CCU repräsentiert.

Und auch ein Skript ist letztendlich ein Objekt, welches eine eindeutige ID hat.

Folglich kann eine verzögerte Ausführung eines Skriptes nur durch die Ausführung des gleichen (also mit der gleichen ID) Skripts abgebrochen werden und eben nicht durch die Ausführung eines anderen Skripts.
.

Norfolk
Beiträge: 85
Registriert: 27.12.2014, 20:20
Hat sich bedankt: 8 Mal
Danksagung erhalten: 2 Mal

Re: "alle laufenden Verzögerungen ... beenden"

Beitrag von Norfolk » 07.02.2017, 07:08

Hallo,

@BadenPower: Danke, der Ansatz sollte mir weiterhelfen - geprüft bzw. überarbeitet wird das Skript heute abend nach der Arbeit ;)

@66er: Das Problem ist mit der Suche und umfangreichen Hits liegt für mich als Laie darin, dass sie nicht unbedingt weiterhelfen. Ich habe solche Suche mehrfach versucht bzw. mache es auch vorab. Aber ohne Detailwissen erkenne ich nicht, was in den gefundenen Postings und Themen korrekt ist und was nicht. Wenn Du Dich - wie ich annehme - gut in diesen Sachen auskennst, siehst Du vmtl. auf den ersten Blick was korrekt ist, und übergehst die Fehler, für mich ist es aber ein häufiges Trial-and-Error. Man findet im Forum Lösungen, testet dies und ... es funktioniert trotzdem nicht.
Zusammenfassend sieht das ungefähr so aus: Suche => 120 Hits gefunden. Davon 60 Hits ebenfalls Anfragen ohne Lösung, die man nach einiger Zeit (20-30 Minuten?) aussortiert hat. Weiter 50 Hits sind vermeindliche Lösungen, die sich in 200-seitigen Threads verstecken, wo man zwar viel lernt über alles Mögliche, aber - nachdem man alles durchgelesen hat (1-2 Stunden?) - aber das letzte Posting in solchen Threads a la "es geht einfach nicht, k.a. warum" häufig ein Zurück-zum-Start ist, bzw. wird dies nichtmal ausgesprochen, sondern das Thema verläuft sich im Sand. Die letzten 10 Hits, die man nach 2-3 Abenden durchblättert, haben vielleicht die Lösung. Weiss man nicht, weil man es erst ausprobieren muss.
Im konkreten Fall gab es Postings, die auf den ersten Blick genau meine Lösung darstellten, jedoch unausgesprochen mit dem Zwischenschritt einer Systemvariable. Ich hatte weder in diesem noch in vergleichbaren Themen die Info gefunden, dass dieser Zwischenschritt notwendig ist, dachte mir, ich kann es abkürzen und erst durch den Tip von BadenPower scheint es mir, als wäre das der Fehler in meinem Programm. Das werde ich heute testen... ;)

lg,
Norfolk

Benutzeravatar
Sammy
Beiträge: 9172
Registriert: 09.09.2008, 20:47
Hat sich bedankt: 15 Mal
Danksagung erhalten: 174 Mal

Re: "alle laufenden Verzögerungen ... beenden"

Beitrag von Sammy » 07.02.2017, 08:27

Der einfache allgemeine Lösungsansatz ist wie immer:
Statt ein Skript direkt zu starten und dort Verzögerungen einzubauen, lieber auf einen Auslöser reagierend zeitversetzt eine Systemvariable setzen, deren Änderung dann ein 2. Programm mit dem dann benötigten Skript-(Teil) aufruft.
Bei vorzeitigem Abbruch kann man dann sehr einfach die verzögert zu setzenden Variablen einfach direkt sofort wieder "aus" schalten, womit eben die Verzögerungen abgebrochen werden.

Gruß Sammy
Links: CCU-Logik, Tipps für Anfänger, WebUI-Doku, Expertenparameter, virtuelle Aktorkanäle
Inventur vom 22.01.14: 516 Kanäle in 165 Geräten, 132 Programme, 270 Direkte Verknüpfungen
Ich übernehme für alle von mir gegebenen Hinweise, Tipps und Links keine Haftung! Das Befolgen meiner Tipps ist nur für Fachkundige gedacht und erfolgt auf eigene Gefahr!

Benutzeravatar
stan23
Beiträge: 2030
Registriert: 13.12.2016, 21:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Altmühltal
Hat sich bedankt: 577 Mal
Danksagung erhalten: 335 Mal
Kontaktdaten:

Re: "alle laufenden Verzögerungen ... beenden"

Beitrag von stan23 » 07.02.2017, 12:25

Hi Sammy,

zeitversetzt eine Systemvariable zu setzen und auf dessen Änderung ein anderes Programm zu starten ist mir klar.
Aber wie sieht der Abbruch aus?
Man kann die Variable ja nicht rücksetzen bevor sie (verzögert) gesetzt worden ist?

Grüße
stan
Viele Grüße
Marco

RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)

Benutzeravatar
Sammy
Beiträge: 9172
Registriert: 09.09.2008, 20:47
Hat sich bedankt: 15 Mal
Danksagung erhalten: 174 Mal

Re: "alle laufenden Verzögerungen ... beenden"

Beitrag von Sammy » 07.02.2017, 13:00

Doch, genau das ist ja der Grund, das so zu lösen.
Links: CCU-Logik, Tipps für Anfänger, WebUI-Doku, Expertenparameter, virtuelle Aktorkanäle
Inventur vom 22.01.14: 516 Kanäle in 165 Geräten, 132 Programme, 270 Direkte Verknüpfungen
Ich übernehme für alle von mir gegebenen Hinweise, Tipps und Links keine Haftung! Das Befolgen meiner Tipps ist nur für Fachkundige gedacht und erfolgt auf eigene Gefahr!

manfredh
Beiträge: 4155
Registriert: 09.09.2012, 10:41
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 78 Mal
Danksagung erhalten: 301 Mal

Re: "alle laufenden Verzögerungen ... beenden"

Beitrag von manfredh » 07.02.2017, 15:22

stan23 hat geschrieben: Man kann die Variable ja nicht rücksetzen bevor sie (verzögert) gesetzt worden ist?
Genau genommen hast du recht. Sammy meint sicher "durch (nochmaliges) setzen der Systemvariable auf ihren aktuellen Zustand die laufende Verzögerung zum Setzen derselben abbrechen".

Im Ergebnis also eher "das verzögerte Setzen zurücksetzen". :-)
Es gibt 10 Arten von Menschen: solche die Binärcode verstehen und solche, die ihn nicht verstehen.

Benutzeravatar
Sammy
Beiträge: 9172
Registriert: 09.09.2008, 20:47
Hat sich bedankt: 15 Mal
Danksagung erhalten: 174 Mal

Re: "alle laufenden Verzögerungen ... beenden"

Beitrag von Sammy » 07.02.2017, 15:31

Ich meinte:
Bei boolschen Variablen gibt es true und false
"setzen" bedeutet da "auf true setzen"
"zurücksetzen" bedeutet da "auf false setzen" und nicht "auf einen alten (vorherigen) aber gemerkten Zustand (der true sein könnte) zurück setzen"
Links: CCU-Logik, Tipps für Anfänger, WebUI-Doku, Expertenparameter, virtuelle Aktorkanäle
Inventur vom 22.01.14: 516 Kanäle in 165 Geräten, 132 Programme, 270 Direkte Verknüpfungen
Ich übernehme für alle von mir gegebenen Hinweise, Tipps und Links keine Haftung! Das Befolgen meiner Tipps ist nur für Fachkundige gedacht und erfolgt auf eigene Gefahr!

Benutzeravatar
stan23
Beiträge: 2030
Registriert: 13.12.2016, 21:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Altmühltal
Hat sich bedankt: 577 Mal
Danksagung erhalten: 335 Mal
Kontaktdaten:

Re: "alle laufenden Verzögerungen ... beenden"

Beitrag von stan23 » 07.02.2017, 20:42

Die Sache mit setzen (TRUE) und rücksetzen (FALSE) ist mir klar, auch wenn ich im Job mal so und mal so spreche :)

Deine Vorgehensweise verstehe ich aber immer noch nicht, vielleicht liegt es an eine HM-Eigenart.

SysVar hat den Wert 0.

Programm 1:
WENN
bei Änderung von xy
DANN
setze SysVar auf 1, verzögert um 5 Minuten

Programm 2:
WENN
SysVar gleich 1
DANN
tu was getan werden muss

Wenn ich SysVar innerhalb der 5 Minuten Verzögerung "nochmal" den Wert 0 zuweise, werden dann die restlichen Minuten Wartezeit abgebrochen?
Im Prinzip ändert sich der Wert von SysVar ja dadurch nicht.

Oder muss das Rücksetzen/der Abbruch in den SONST-Zweig von Progamm 1, weil dadurch implizit der verzögerte DANN-Zweig abgebrochen wird?
Viele Grüße
Marco

RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“