Guten Morgen liebe Gemeinde!
Ich habe ein Python Script, welches von meinem Repetier-Server Daten über meine Drucker holt.
Ein at stößt das Script alle 60s an.
Ich würde gerne, wenn der Server Offline ist, dieses anstoßen auf 60s haben, wenn er Online ist, dann soll das alle 15s angestoßen werden.
Meine Idee war ein DOIF zu nutzen, aber da Schein ich wohl auf dem Schlauch zu stehen, was die Umsetzung angeht.
Die Idee wäre hier natürlich auch, wenn der Server Offline ist, alle 5 min zu triggern, wenn er Online ist, alle 60s und wenn einer der Drucker druckt, dann alle 15s.
Und ja, ich weiß, dass ich in einem at auch if else nutzen kann und dieses dann alle 15s ausführen lasse und Prüfe ob der Server läuft, und dann agieren lassen kann.
Kann mir jemand bei der Umsetzung unter die Arme greifen?
Ich Danke!
Beste Grüße
Gear
Nur zur Sicherheit:
du hast bereits ein at oder ein at würde (prinzipiell) funktionieren, dir geht es NUR um die Umstellung der Zeit!?
Du weißt in fhem wenn der Server offline ist!?
Und du weißt in fhem, wenn der Drucker druckt!?
Wenn überall ja, dann hätte ich 3 Lösungen:
1. notify auf Server offline (bzw. online zum zurückstellen) und dann defmod des at auf neues Intervall. Gleiches bei Drucker druckt. Wichtig: event-on-change-reading, damit nicht erneut Events vom Server oder Drucker kommen und das at immer hin und her "defmoded" ;)
Nicht schön, weil damit immer das rote Fragezeichen kommt.
2. genauso wie 1. nur statt defmod: set atPoll modifyTimeSpec NeueZeit
Vorteil gegenüber 1.: kein rotes Fragzeichen
3. ein 1x-liges "relatives" at anlegen, z.B. Zyklus 15s (ist aber egal, ist ja "nur" der "Startwert"). Im at selbst prüfen, wie der aktuelle "Zustand" ist, also Server online/offline oder Drucker druckt und dann eben erneut per defmod "sich selbst" auf den nächsten Triggerzeitpunkt stellen. Also defmod atPoll +00:00:15 (oder eben 00:01:00 oder was auch immer) {PollSub()} Heißt ich würde dann die "Berechnung" des defmod in eine Sub auslagern und diese eben immer wieder "rufen" und innerhalb der Sub (am Ende) das at neu "aufziehen"...
Ich nutze 3. wenn ich zyklisch bestimmte Dinge prüfen will und dann irgendwann aufhören will oder eben die Zeit verlängern/verkürzen etc.
Gruß, Joachim
P.S.: und es gibt (wie so oft) bestimmt 1000 weitere Möglichkeiten...
Timespec über Perl-Funktion?
Hi,
fürs DOIF ein gedanklicher Ansatz:
Presence Device für den Server (LanPing, eigene Perl Funktion z.b. ServiceMonitor)
relative Zeitangaben https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung
define di_python DOIF ([+00:01:00] and [Server] eq "absent") ("python") DOELSEIF ([+00:00:15] and [Server] eq "present") ("python")
attr di_python do always
Hast Du den Status vom Drucker in FHEM abgebildet?
Gruß Otto
Oh man, Otto... Du schon wieder! :P
Da stand ich echt auf dem Schlauch...
Hab den RPi auf dem Repetier-Server läuft nun per WOL eingebunden, da ich diesen ja auch darüber Hoch und runterfahren will, bzw. ein Auto-Off nach dem Drucken umsetzen möchte.
So kann ich auch umsetzen, dass das Python Script nur dann läuft, wenn der Server via WOL als isRunning erkannt wird.
@MadMax-FHEM
Danke, da hab ich nun auch was Neues dazugelernt, was ich für nen anderes Ding brauche!!
Aber der Pi kann kein WOL. Damit hast Du zwar Presence und shutdown cmd - aber zum Starten brauchst Du was anderes?
Hey Otto, ja das weiß ich, das der Pi kein WOL kann.
Vor dem Pi hängt ein SONOFF, welcher den Pi und die Drucker vom Netz trennt, bzw verbindet.
Beim WOL einfach Webcmd "Start" & "Shutdown" und dann mit nem Notify / DOIF darauf reagieren.