CUxD Timer läuft unzuverlässig - Ideen?

Anbindung von FS20-Komponenten, ELV-Wetterstationen, EnOcean und DMX an HomeMatic

Moderator: Co-Administratoren

Antworten
MP_Cap
Beiträge: 18
Registriert: 07.01.2022, 18:03
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 1 Mal

CUxD Timer läuft unzuverlässig - Ideen?

Beitrag von MP_Cap » 09.02.2022, 18:42

Hallo Leute,

Ich habe ein Problem mit einem CUxD Timer. Grundsätzlich funktioniert er, aber bei dem Problem weiß ich als Einsteiger leider nicht weiter.

Ich habe mir über die RaspberryMatic einen Radiowecker gebastelt. Herzstück des Weckers ist ein CUxD-Timer, der die Ablaufsteuerung triggert. Zentrale Anforderung von mir war es, dass ich den Wecker über eine Systemvariable stellen kann, damit ich die Uhrzeit als Freitext über PocketControl vorgeben kann. Die dazugehörige SV heißt „Wecker_Weckzeit“ und wird in folgendem Timer-Programm ausgewertet:
F24F8A34-19B6-4583-A864-9BDB3EC1969A.jpeg
Die Vorlage dafür kam hier aus dem HM-Forum. Sinn der Übertragung der Zeit im Sonstzweig ist es, dass bei jeder SV-Aktualisierung außer „Stopp“ der Timer aktualisiert wird. In der Sonst-Anweisung steht folgendes Skript:

Code: Alles auswählen

! Wert aus Systemvariable in Wecker-Timer schreiben

string zeit_wecker = dom.GetObject("Wecker_Weckzeit").Value(); ! Weckzeit aus SV auslesen

integer i_zeit = (3600 * zeit_wecker.StrValueByIndex(":",0).ToInteger()) + (60 * zeit_wecker.StrValueByIndex(":",1).ToInteger()); ! Weckzeit in Interger-Variable "Sekunden seit Mitternacht" umwandeln

integer i_zeit_pre = i_zeit - 300; ! Vorab-Weckzeit für Geräte-Init berechnen (5 Minuten)

var t = system.Date("%F") # "00:00:00";
t = t.ToTime().ToInteger();
t = t + i_zeit_pre;
string weckzeit_pre = t.ToTime().Format("%H:%M:%S").ToString(); ! Zeit seit 01.01.1970 ermitteln und mit Wecker_Pre beaufschlagen

dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State(weckzeit_pre); ! Weckzeit_Pre in CUxD Timer schreiben
Ja, es hat einen Sinn, dass ich die Uhrzeit 5 Minute nach vorne setze, aber darum soll es jetzt nicht gehen. Das wichtige ist: die Übertragung der Uhrzeit an den Timer funktioniert und er löst auch beim ersten Mal nach dem Setzen der Zeit aus:
FB419483-30FA-48B4-A0BF-9193022C5063.jpeg
Im zentralen Weckprogramm wird dann auf den Ablauf des Timers reagiert:
DB1E491C-4F64-4EB6-BE37-616FA6421A8D.jpeg

Nun das Problem: trotz der Tatsache, dass repeat angehakt ist, wird der Timer beim nächsten Ablauf nicht wieder getriggert und das Programm läuft nicht los. Ich habe schon verschiedene Sachen probiert: anderen Timer-Kanal gewählt, Timer Device neu angelegt, auf Formatierungsfehler in der Zeit untersucht… Nichts hilft, der Wecker reagiert nur, wenn ich den Timer manuell stoppe und dann die Zeit neu an die SV übergebe. Das Umrechnen der Zeit aus der SV und Übergabe an das Device funktionieren problemlos, auch wenn ich die Zeit vor dem ersten Auslösen zum Testen mehrfach ändere. Der Timer läuft sicher einmal durch, dann aber kein zweites Mal trotz gesetztem Repeat.
Im SysLog vom CUxD finde ich auch keinen Fehler oder verdächtigen Eintrag. Auch ändere ich in allen anderen Wecker-Unterprogrammen den Zugriff auf den Timer nicht weiter, nur in den oben gezeigten Code-Schnipseln.

Ich denke es ist auch kein Programmierfehler oder Syntax-Fehler im Programm: ich lasse mir zum Debuggen eine pockeControl Push Nachricht in dem o.g. Weckprogramm senden sofort wenn der DANN Zweig aktiviert wird. Beim ersten mal ist alles gut, beim zweiten mal aber wird keine Nachricht getriggert. Es ist also tatsächlich so, dass das Programm nicht losläuft, weil die erste Bedingung nicht wahr wird (bevor jemand fragt: Ja, die zweite Variable ist auf EIN).

Das ist mein erstes Projekt mit einem CUxD-Timer und ich bin auch alles andere als programmiererfahren. Hat jemand eine Idee was da nicht stimmt oder was ich noch versuchen könnte?
CUxD und RM sind auf dem jeweils aktuellen Stand.



Für Hinweise und Hilfe wäre ich sehr dankbar.

Viele Grüße,
Martin

Benutzeravatar
Baxxy
Beiträge: 10830
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 608 Mal
Danksagung erhalten: 2227 Mal

Re: CUxD Timer läuft unzuverlässig - Ideen?

Beitrag von Baxxy » 09.02.2022, 20:02

MP_Cap hat geschrieben:
09.02.2022, 18:42
was ich noch versuchen könnte?
Ich werde die Sache mal begutachten, dazu habe ich erstmal eine minimales Testprogramm mit 2 Timern aufgesetzt.
Timer-Dev:3 = 06:20:00
Timer-Dev:4 = 06:21:00
RM_CUxD_Timer_Test.JPG
Du kannst erstmal testweise den Trigger umstellen, so wie bei mir in der ersten Zeile zu sehen.
Zuletzt geändert von Baxxy am 17.02.2022, 15:13, insgesamt 1-mal geändert.

Xel66
Beiträge: 14165
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 585 Mal
Danksagung erhalten: 1500 Mal

Re: CUxD Timer läuft unzuverlässig - Ideen?

Beitrag von Xel66 » 09.02.2022, 21:05

Also ich kann mich über meine Wecker-Umsetzung nicht beschweren. Ich habe einen Wecker, der im Zusammenspiel mit mehreren boolschen Systemvariablen in mehreren Schaltszenarien (2x Rollladensteuerungen, eine Schaltsteckdose) eingesetzt wird. Meine Umsetzung habe ich im unteren Script in diesem Thread kurz umrissen.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Benutzeravatar
uwe111
Beiträge: 4820
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 246 Mal
Kontaktdaten:

Re: CUxD Timer läuft unzuverlässig - Ideen?

Beitrag von uwe111 » 09.02.2022, 22:04

Hallo Martin,
MP_Cap hat geschrieben:
09.02.2022, 18:42
Hat jemand eine Idee was da nicht stimmt oder was ich noch versuchen könnte?
hast Du schon auf der CUxD-Statusseite geprüft, ob der Timer wirklich läuft? Dazu hattest Du nichts geschrieben.

Als nächstes würde ich dann das Logging für das CUxD Timer-Gerät auf der CCU aktivieren und im CCU Systemprotokoll prüfen, ob und welche Ereignisse beim Ablauf des Timers vom CUxD gesendet werden.

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.11, SSH KeyDir

MP_Cap
Beiträge: 18
Registriert: 07.01.2022, 18:03
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 1 Mal

Re: CUxD Timer läuft unzuverlässig - Ideen?

Beitrag von MP_Cap » 09.02.2022, 22:51

Hallo zusammen,

Danke für eure raschen Antworten und Hilfestellungen!

@Baxxy: ich habe mir mal einen alternativen Anweisungszweig verODERt, der auf den Schaltzustand: Ein bei Aktualisierung triggert. Mal schauen, ob es einen Unterschied macht. Ich werde berichten.

@Xel66: stimmt, von dir hatte ich die Idee übernommen, die bei „Projektvorstellungen“ veröffentlicht wurde. Das meinte ich oben mit „Vorlage hier aus dem HM-Forum“. Verzeih, dass ich den Credit nicht weiter namentlich herausgesucht hatte. Ich habe deine Idee grundlegend übernommen, habe nur statt der Werteliste mit festen Werten den Weg über die freie Beschreibung der SV genutzt - wobei das meiner bescheidenen Meinung nach keinen Unterschied machen sollte, denn ab dem Zeitpunkt der Übergabe der SV an das Device sollte es doch eigentlich egal sein, woher die Zeitbeschreibung kommt (oder?). Ich grübele an dem Problem jetzt offen gesagt schon eine Weile und ich dachte, ich hätte ein paar Zeilen deines Codes zum Testen schon mal 1:1 kopiert - weiß aber gerade nicht mehr das Ergebnis. Ich muss wie gesagt immer erst wieder bis zum nächsten Repeat warten um eine Aussage darüber zu haben, ob eine Änderung eine Auswirkung hatte oder nicht. Ich ändere daher gerade immer nur einen Parameter und schaue dann das Ergebnis an. Wenn ich mit den anderen Tipps nicht zum Erfolg komme, schaue ich mir deine Umsetzung nochmal genau an. Vielleicht bin ich ja dann doch gezwungen eine andere Wertevorgabe zu nutzen :?

@Uwe: das habe ich tatsächlich noch nicht geprüft, eben wie ich noch nicht wusste, dass ich da auch schauen kann. Bin wie gesagt Novize mit CUxD und meine Frage hatte indirekt auch auf mögliche Debugging-Optionen in CUxD selber abgezielt.
Jedenfalls schein der Timer zu laufen, wenn ich das auf der Status-Seite richtig sehe (?):

Aktuelle Geräteeinstellungen - 3 Gerät(e), 48 Channel(s):

CUX2800001:1 state(1) timer(23358s) set(05:15:00):0 repeat
CUX2800001:2 state(1) timer(0s)
CUX2800001:3 state(1) timer(0s)
Ich habe inzwischen auf eine andere Weckzeit umgestellt (einerseits zum Testen, andererseits muss ich morgen tatsächlich eher aufstehen).
Das Logging des Timer-Kanals werde ich parallel mal anwerfen und schauen, ob sich da was Verdächtiges findet.


Ich melde mich dann wieder.


Danke nochmal und guten Abend,
Martin

MP_Cap
Beiträge: 18
Registriert: 07.01.2022, 18:03
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 1 Mal

Re: CUxD Timer läuft unzuverlässig - Ideen?

Beitrag von MP_Cap » 20.02.2022, 18:25

Hallo zusammen,

ich habe die Sache jetzt mal vergangene Woche beobachtet und was soll ich sagen… es hat jedesmal zuverlässig funktioniert. Die einzige Änderung die ich Programm vorgenommen habe, war die Erweiterung der Auswertung um ein „ODER Schaltzustand == EIN“, alles andere habe gelassen. Aber ob diese Änderung wirklich das Zünglein an der Waage war…?

Ist mir gerade etwas peinlich - Treiben verrückt machen und dann steckt nichts dahinter… :oops: Tut mir leid dafür. Ich schwöre euch aber, dass es nicht ging - ich würde ja sonst nicht den Thread eröffnen.

Naja, wie dem auch sei, es läuft jetzt. Thema kann geschlossen werden.


Danke nochmal für die Hilfestellungen,
Martin

Benutzeravatar
Baxxy
Beiträge: 10830
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 608 Mal
Danksagung erhalten: 2227 Mal

Re: CUxD Timer läuft unzuverlässig - Ideen?

Beitrag von Baxxy » 20.02.2022, 18:33

MP_Cap hat geschrieben:
20.02.2022, 18:25
Die einzige Änderung die ich Programm vorgenommen habe, war die Erweiterung der Auswertung um ein „ODER Schaltzustand == EIN“, alles andere habe gelassen.
Damit hast du die Analyse aber verfälscht.
Schaltzustand = EIN triggert nach meiner Erfahrung immer korrekt
TIMER_GET <= 0 hatte auch bei mir zumindest einen Aussetzer, das Logging vom Timer-Kanal zeigte aber keine Auffälligkeiten.

Da du keine doppelte Triggerung brauchst hau einen der beiden Trigger raus.
Ich würde "Schaltzustand = EIN" behalten.

MP_Cap
Beiträge: 18
Registriert: 07.01.2022, 18:03
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 1 Mal

Re: CUxD Timer läuft unzuverlässig - Ideen?

Beitrag von MP_Cap » 20.02.2022, 19:08

Ja sicher habe ich damit die Analyse verfälscht, ich habe da in dem Moment nicht dran gedacht - wollte zumindest erstmal, dass der Wecker sicher läuft.

Den TIMER_GET habe ich rausgeworfen und probiere es weiter mit dem Schaltzustand EIN. Mal sehen, ob es nochmal streikt.

Danke dir und schönen Abend noch,
Martin

Antworten

Zurück zu „CUxD“