HM Skript mittels Timer auslösen.
Moderator: Co-Administratoren
HM Skript mittels Timer auslösen.
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
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
Zuletzt geändert von Arthy am 16.03.2019, 20:19, insgesamt 1-mal geändert.
- uwe111
- Beiträge: 4820
- Registriert: 26.02.2011, 22:22
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 246 Mal
- Kontaktdaten:
Re: HM Skript mittels Timer auslösen.
Hallo Arthy,
Bitte füge beim nächsten Mal einen besseren Screenshot an.
Viele Grüße
Uwe
Bitte füge beim nächsten Mal einen besseren Screenshot an.
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:36ich 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?
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 Download: CUxD 2.11, SSH KeyDir
SPENDEN Download: CUxD 2.11, SSH KeyDir
Re: HM Skript mittels Timer auslösen.
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
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
- uwe111
- Beiträge: 4820
- Registriert: 26.02.2011, 22:22
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 246 Mal
- Kontaktdaten:
Re: HM Skript mittels Timer auslösen.
Hallo Arthy,
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
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 Download: CUxD 2.11, SSH KeyDir
SPENDEN Download: CUxD 2.11, SSH KeyDir
Re: HM Skript mittels Timer auslösen.
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:
Danach müsste ich dieses HM Skript durchlaufen lassen, um die Zeiten entsprechend umzurechnen:
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
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
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") );
Besten Dank im voraus.
Gruß
Arthy
- uwe111
- Beiträge: 4820
- Registriert: 26.02.2011, 22:22
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 246 Mal
- Kontaktdaten:
Re: HM Skript mittels Timer auslösen.
Hallo Arthy,
Einfach noch folgendes hinten anfügen...
Viele Grüße
Uwe
Genau so, wie Du es bereits in Deinem TCL-Script gemacht hast. Da steht ja schon HM-Script drin.
Einfach noch folgendes hinten anfügen...
Code: Alles auswählen
set rega_cmd ""
append rega_cmd "... hier jeweils eine Zeile vom HM-Script ..."
...
append rega_cmd "... hier die letzte Zeile vom HM-Script ..."
rega_script $rega_cmd
Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN Download: CUxD 2.11, SSH KeyDir
SPENDEN Download: CUxD 2.11, SSH KeyDir
Re: HM Skript mittels Timer auslösen.
Hallo Uwe,
genau so habe ich es auch schon vorher probiert aber leider läuft das Skript nicht durch. Habe das tcl Skript mit dem vorletzten Abschnitt folgend ergänzt:
Beim Starten des Skrips über Terminal bekomme ich leider die folgende Fehlermeldung und komme deshalb nicht weiter. Hast du noch eventuell einen Tipp?
Besten Dank
Gruß
Arthy
genau so habe ich es auch schon vorher probiert aber leider läuft das Skript nicht durch. Habe das tcl Skript mit dem vorletzten Abschnitt folgend ergänzt:
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');"
set rega_cmd ""
append rega_cmd "var Laufzeit1 = dom.GetObject("octoprint_printTime_s").Value();"
append rega_cmd "dom.GetObject (ID_SYSTEM_VARIABLES).Get ("octoprint_printTime").State ((Laufzeit1.ToTime () -3600).Format ("%H:%M:%S") );"
rega_script $rega_cmd
Code: Alles auswählen
/usr/local/addons/octoprint$ tclsh octoprintstatus.tcl
Abfrage der Daten:
Job
Lese Werte aus
extra characters after close-quote
while executing
"append rega_cmd "var Laufzeit1 = dom.GetObject("
(file "octoprintstatus.tcl" line 47)
Gruß
Arthy
Re: HM Skript mittels Timer auslösen.
Hallo,
habe noch etwas rumprobiert, nun geht es. Das Problem waren die inneren doppelten Anführungszeichen. Hier musste ich sie alle in einzelne umwandeln. Danach gings.
Gruß
Arthur
habe noch etwas rumprobiert, nun geht es. Das Problem waren die inneren doppelten Anführungszeichen. Hier musste ich sie alle in einzelne umwandeln. Danach gings.
Gruß
Arthur
- uwe111
- Beiträge: 4820
- Registriert: 26.02.2011, 22:22
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 246 Mal
- Kontaktdaten:
Re: HM Skript mittels Timer auslösen.
Hallo Arthur,
ja, Anführungszeichen musst Du entweder escapen oder umschreiben.
Sonst weiß der Interpreter natürlich nicht, wo der String zu Ende ist.
Viele Grüße
Uwe
ja, Anführungszeichen musst Du entweder escapen oder umschreiben.
Sonst weiß der Interpreter natürlich nicht, wo der String zu Ende ist.
Viele Grüße
Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN Download: CUxD 2.11, SSH KeyDir
SPENDEN Download: CUxD 2.11, SSH KeyDir