HM Skript mittels Timer auslösen.

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

Moderator: Co-Administratoren

Antworten
Arthy
Beiträge: 65
Registriert: 17.12.2014, 00:03

HM Skript mittels Timer auslösen.

Beitrag von Arthy » 15.03.2019, 18:36

Hallo Leute,

ich wollte mal fragen, ob es auch möglich ist mittels Timer ein normales Skript auszulösen. Das tcl geht weiß ich für das normale CCU Skript habe ich nichts gefunden. Ich wollte mittels cuxd timer sowohl ein tcl als auch normales Skript auslösen. Gibt es da eine Möglichkeit?
Das Programm sollte wie unten aussehen, nur dass das zweite Skript auch periodisch nach der TCL Datei ausgelöst wird.

Dankeschön

Gruß
Arthy
Druck.jpg
Zuletzt geändert von Arthy am 16.03.2019, 20:19, insgesamt 1-mal geändert.

Benutzeravatar
uwe111
Beiträge: 3833
Registriert: 26.02.2011, 22:22
Kontaktdaten:

Re: HM Skript mittels Timer auslösen.

Beitrag von uwe111 » 16.03.2019, 16:56

Hallo Arthy,

Bitte füge beim nächsten Mal einen besseren Screenshot an.
Arthy hat geschrieben:
15.03.2019, 18:36
ich wollte mal fragen, ob es auch möglich ist mittels Timer ein normales Skript auszulösen. Das tcl geht weiß ich für das normale CCU Skript habe ich nichts gefunden. Ich wollte mittels cuxd timer sowohl ein tcl als auch normales Skript auslösen. Gibt es da eine Möglichkeit?
Ich weiß zwar nicht, wo Du nachgeschaut hast, aber in der CUxD Doku habe ich das mit Beispielen beschrieben.
Arthy hat geschrieben:
15.03.2019, 18:36
Das Programm sollte wie unten aussehen, nur dass das zweite Skript auch periodisch nach der TCL Datei ausgelöst wird.
Welches TCL Script?

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.2.0, RFD-Monitor, Vellemann K8055, SSH KeyDir

Arthy
Beiträge: 65
Registriert: 17.12.2014, 00:03

Re: HM Skript mittels Timer auslösen.

Beitrag von Arthy » 16.03.2019, 21:34

Hallo Uwe,

vielen Dank für deine Antwort. Den Screenshot habe ich bereits in besserer Qualität oben hochgeladen. Ich versuche mein Problem noch einmal zu präzisieren. Also ich weiß, dass ich mittel des CUxD Timers CMD_Exec einfach ein tcl Skript aufrufen kann. Genau das mache ich auch oben im Programm in dem "Dann" Abschnitt alle 60s (siehe unten). Damit hole ich mir ein paar Daten aus einer Api und packe sie in Sysvariablen. Unmittelbar danach würde ich aber gerne noch ein HM Skript ausführen, das im gleichen Zyklus, wie das tcl Skript abläuft. Ich wollte halt fragen, ob ich das auch mittels des CUxD Timers realisieren kann. Dann würde ich halt direkt nach dem ersten Aufruf im Dann-Abschnitt noch einmal den Timer aufrufen, nur halt mit dem HM Skript, falls man es mittels CUxD aufrufen kann.
Hintergrund des Ganzen ist, dass ich im tcl Skript die Daten aus der Api nicht wie gewünscht umgerechnet in die Sysvariablen kriege. Daher danach noch das HM Skript, wo ich mir die Daten noch einmal umrechne und sie in die finalen Sysvariablen reinschreibe. Ich hoffe ich konnte es etwas verständlicher darstellen.

Besten Dank

Gruß
Arthy

tcl.jpg

Benutzeravatar
uwe111
Beiträge: 3833
Registriert: 26.02.2011, 22:22
Kontaktdaten:

Re: HM Skript mittels Timer auslösen.

Beitrag von uwe111 » 17.03.2019, 06:56

Hallo Arthy,
Arthy hat geschrieben:
16.03.2019, 21:34
Unmittelbar danach würde ich aber gerne noch ein HM Skript ausführen, das im gleichen Zyklus, wie das tcl Skript abläuft. Ich wollte halt fragen, ob ich das auch mittels des CUxD Timers realisieren kann.
Ja, Du kannst Dein HM-Script z.B. direkt in Dein TCL-Script einbetten, oder in ein zweites TCL-Script und dieses unmittelbar nach dem ersten TCL-Script in der CMD_EXEC-Befehlszeile (per Semikolon getrennt) aufrufen.

Für die Einbindung von HM-Script in TCL-Script kannst Du Dir Beispiele im cuxd/extra/ Verzeichnis ansehen (z.B. timer.tcl).

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.2.0, RFD-Monitor, Vellemann K8055, SSH KeyDir

Arthy
Beiträge: 65
Registriert: 17.12.2014, 00:03

Re: HM Skript mittels Timer auslösen.

Beitrag von Arthy » 18.03.2019, 21:27

Hallo Uwe,

Danke für deine Tipps. Habe mir die tcl Skripte sowie die Doku angeschaut, kriege das aber irgendwie nicht hin. Wie du oben an dem Programm erkennen kannst, lasse ich sobald der Drucker an ist die Timerfunktion aufrufen. Also mit dem tcl Skript, das ich alle 60 Sekunden mit Hilfe der Timer CMD_Exec Funktion aufrufe hole ich mir ein paar Daten und schreibe sie in die Systemvariablen:

Code: Alles auswählen

...

 # Werte aus Datei auslesen
 # ========================
 puts "Lese Werte aus"
 regexp {\"state\": \"(.*?)\"} $input dummy state
 regexp {\"completion\": (.*?)\,} $input dummy completion
 regexp {\"printTime\": (.*?)\,} $input dummy printTime
 regexp {\"printTimeLeft\": (.*?)\,} $input dummy printTimeLeft
 regexp {\"name\": (.*?)\,} $input dummy name

 set rega_cmd ""
 append rega_cmd "var w0 = dom.GetObject('octoprint_status');"
 append rega_cmd "w0.State('$state');"
 append rega_cmd "var w1 = dom.GetObject('octoprint_completion');"
 append rega_cmd "w1.State('$completion');"
 append rega_cmd "var w2 = dom.GetObject('octoprint_printTime_s');"
 append rega_cmd "w2.State('$printTime');"

 append rega_cmd "var w3 = dom.GetObject('octoprint_printTimeLeft_s');"
 append rega_cmd "w3.State('$printTimeLeft');"

 append rega_cmd "var w4 = dom.GetObject('octoprint_name');"
 append rega_cmd "w4.State('$name');"

rega_script $rega_cmd
Danach müsste ich dieses HM Skript durchlaufen lassen, um die Zeiten entsprechend umzurechnen:

Code: Alles auswählen

var Laufzeit1 = dom.GetObject("octoprint_printTime_s").Value(); 
! WriteLine ("Laufzeit in s: " # Laufzeit1)
! WriteLine ("Laufzeit im Stundenformat: " # (Laufzeit1.ToTime () -3600).Format ("%H:%M:%S"));
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("octoprint_printTime").State ((Laufzeit1.ToTime () -3600).Format ("%H:%M:%S") );

var Laufzeit2 = dom.GetObject("octoprint_printTimeLeft_s").Value(); 
! WriteLine ("Verbliebene Druckzeit in s: " # Laufzeit2)
! WriteLine ("Verbliebene Druckzeit im Stundenformat: " # (Laufzeit2.ToTime () -3600).Format ("%H:%M:%S"));
! WriteLine ("Fertig um: " # (localtime+Laufzeit2).Format ("%H:%M:%S")); 
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("octoprint_endTime").State ((localtime+Laufzeit2).Format ("%H:%M:%S") );
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("octoprint_printTimeLeft").State ((Laufzeit2.ToTime () -3600).Format ("%H:%M:%S") );
Kannst du mir bitte sagen, wie ich am besten das Programm oben anpasse, damit ich entweder das HM Skript in das tcl Skript einfüge oder es nochmal mittels der Timerfunktion aufrufe. Das wäre super.
Besten Dank im voraus.

Gruß
Arthy

Antworten

Zurück zu „CUxD“