NEWS
[geloest] Javascript Schedule am nächsten Tag nicht mehr aktiv?
-
Hallo zusammen,
ich habe ein Script aus dem Mi Robot Vakuum Thread in Benutzung, welches für jeden Tag ein Schedule erstellt um den Sauger zu starten.
Dies klappt auch perfekt wenn ich das Script an dem jeweiligen Tag ausführe und die Schedules erstellt werden.
Mache ich dies einen Tag vorher, ist der Schedule offensichtlich am nächsten Tag nicht mehr aktiv, und führt die gewollten Kommandos nicht aus. Im Log habe ich dann zu der gewünschten Uhrzeit auch keine Einträge.
Hat jemand eine Idee woran das liegen könnte?
Hier das verwendete Script:
!
// Programm Steuert den Sauger nach Schedule // und Wochenplan ! // Einstellbereich // var IDFlag = "javascript.0.Xiaomi.WeekSchedule"; // Schedule Path ! var xiaomiStart = "mihome-vacuum.0.control.start"; // bei true Starten des Saugvorganges var xiaomiState = "mihome-vacuum.0.info.state"; // bei False pause - bei true fortsetzen - toggle var xiaomiHome = "mihome-vacuum.0.control.home"; // bei state false und home true = go home ! // Startzeiten var cronMoMinute = 01; // aktivzeit Minute var cronDiMinute = 01; //Aktivzeit stunde var cronMiMinute = 01; // aktivzeit Minute var cronDoMinute = 01; // aktivzeit Minute var cronFrMinute = 01; // aktivzeit Minute var cronSaMinute = 01; // aktivzeit Minute var cronSoMinute = 01; // aktivzeit Minute ! // Ende einstellungen var StateWeekSchedule; var weekday = new Date().getDay(); ! // Montags StateWeekSchedule = IDFlag+ ".1-Monday"; createState(StateWeekSchedule, false, {read: true, write: true, type: 'boolean', name: 'Xiaomi Start Weekday', desc: 'Xiaomi Start Weekday'}); var Monday = getState(StateWeekSchedule).val; StateWeekSchedule = IDFlag+ ".1-Monday-Start"; createState(StateWeekSchedule, 11, {read: true, write: true, type: 'number', name: 'Xiaomi Start Starttime', desc: 'Xiaomi Start Starttime'}); var cronMoStunde = getState(StateWeekSchedule).val; //Aktivzeit stunde // Dienstags StateWeekSchedule = IDFlag+ ".2-Tuesday"; createState(StateWeekSchedule, false, {read: true, write: true, type: 'boolean', name: 'Xiaomi Start Weekday', desc: 'Xiaomi Start Weekday'}); var Tuesday = getState(StateWeekSchedule).val; StateWeekSchedule = IDFlag+ ".2-Tuesday-Start"; createState(StateWeekSchedule, 11, {read: true, write: true, type: 'number', name: 'Xiaomi Start Starttime', desc: 'Xiaomi Start Starttime'}); var cronDiStunde = getState(StateWeekSchedule).val; //Aktivzeit stunde // Mittwochs StateWeekSchedule = IDFlag+ ".3-Wednesday"; createState(StateWeekSchedule, false, {read: true, write: true, type: 'boolean', name: 'Xiaomi Start Weekday', desc: 'Xiaomi Start Weekday'}); var Wednesday = getState(StateWeekSchedule).val; StateWeekSchedule = IDFlag+ ".3-Wednesday-Start"; createState(StateWeekSchedule, 11, {read: true, write: true, type: 'number', name: 'Xiaomi Start Starttime', desc: 'Xiaomi Start Starttime'}); var cronMiStunde = getState(StateWeekSchedule).val; //Aktivzeit stunde // Donnerstags StateWeekSchedule = IDFlag+ ".4-Thursday"; createState(StateWeekSchedule, false, {read: true, write: true, type: 'boolean', name: 'Xiaomi Start Weekday', desc: 'Xiaomi Start Weekday'}); var Thursday = getState(StateWeekSchedule).val; StateWeekSchedule = IDFlag+ ".4-Thursday-Start"; createState(StateWeekSchedule, 11, {read: true, write: true, type: 'number', name: 'Xiaomi Start Starttime', desc: 'Xiaomi Start Starttime'}); var cronDoStunde = getState(StateWeekSchedule).val; //Aktivzeit stunde // Freitags StateWeekSchedule = IDFlag+ ".5-Friday"; createState(StateWeekSchedule, false, {read: true, write: true, type: 'boolean', name: 'Xiaomi Start Weekday', desc: 'Xiaomi Start Weekday'}); var Friday = getState(StateWeekSchedule).val; StateWeekSchedule = IDFlag+ ".5-Friday-Start"; createState(StateWeekSchedule, 11, {read: true, write: true, type: 'number', name: 'Xiaomi Start Starttime', desc: 'Xiaomi Start Starttime'}); var cronFrStunde = getState(StateWeekSchedule).val; //Aktivzeit stunde // Samstags StateWeekSchedule = IDFlag+ ".6-Saturday"; createState(StateWeekSchedule, false, {read: true, write: true, type: 'boolean', name: 'Xiaomi Start Weekday', desc: 'Xiaomi Start Weekday'}); var Saturday = getState(StateWeekSchedule).val; StateWeekSchedule = IDFlag+ ".6-Saturday-Start"; createState(StateWeekSchedule, 11, {read: true, write: true, type: 'number', name: 'Xiaomi Start Starttime', desc: 'Xiaomi Start Starttime'}); var cronSaStunde = getState(StateWeekSchedule).val; //Aktivzeit stunde // Sonntags StateWeekSchedule = IDFlag+ ".7-Sunday"; createState(StateWeekSchedule, false, {read: true, write: true, type: 'boolean', name: 'Xiaomi Start Weekday', desc: 'Xiaomi Start Weekday'}); var Sunday = getState(StateWeekSchedule).val; StateWeekSchedule = IDFlag+ ".7-Sunday-Start"; createState(StateWeekSchedule, 11, {read: true, write: true, type: 'number', name: 'Xiaomi Start Starttime', desc: 'Xiaomi Start Starttime'}); var cronSoStunde = getState(StateWeekSchedule).val; //Aktivzeit stunde ! schedule(cronMoMinute + " " + cronMoStunde +" * * *", function () { // jenden Tag um diese Uhrzeit if (Monday && weekday === 1 ) { log("Roboter eingeschaltet" ,"info"); setState(xiaomiStart,true); } }); // end of schedule ! schedule(cronDiMinute + " " + cronDiStunde +" * * *", function () { // jenden Tag um diese Uhrzeit if (Tuesday && weekday === 2 ) { log("Roboter eingeschaltet" ,"info"); setState(xiaomiStart,true); } }); // end of schedule schedule(cronMiMinute + " " + cronMiStunde +" * * *", function () { // jenden Tag um diese Uhrzeit if (Wednesday && weekday === 3 ) { log("Roboter eingeschaltet" ,"info"); setState(xiaomiStart,true); } }); // end of schedule ! schedule(cronDoMinute + " " + cronDoStunde +" * * *", function () { // jenden Tag um diese Uhrzeit if (Thursday && weekday === 4 ) { log("Roboter eingeschaltet" ,"info"); setState(xiaomiStart,true); } }); // end of schedule schedule(cronFrMinute + " " + cronFrStunde +" * * *", function () { // jenden Tag um diese Uhrzeit if (Friday && weekday === 5 ) { log("Roboter eingeschaltet" ,"info"); setState(xiaomiStart,true); } }); // end of schedule schedule(cronSaMinute + " " + cronSaStunde +" * * *", function () { // jenden Tag um diese Uhrzeit if (Saturday && weekday === 6 ) { log("Roboter eingeschaltet" ,"info"); setState(xiaomiStart,true); } }); // end of schedule schedule(cronSoMinute + " " + cronSoStunde +" * * *", function () { // jenden Tag um diese Uhrzeit if (Sunday && weekday === 0 ) { log("Roboter eingeschaltet" ,"info"); setState(xiaomiStart,true); } }); // end of schedule !
Gruß
Michèl
-
Gabs einen Neustart des Adapters oder so?
Ansonsten kannst DU in das Cron an der letzten Stelle auch den Weekday reinschreiben. SO sparst Du dir den Check im Code
-
Gabs einen Neustart des Adapters oder so?
Ansonsten kannst DU in das Cron an der letzten Stelle auch den Weekday reinschreiben. SO sparst Du dir den Check im Code `
Hi!
Ich konnte die Logfiles erst heute prüfen. Leider gab es keinen Neustart des Javascript Adapters. Daran kann es also nicht liegen.
Das mit der Scriptoptimierung stimmt natürlich, aber da gehe ich mal jetzt noch nicht dran bis ich weiss warum es am nächsten Tag nicht mehr sauber läuft.
Mein Workaround ist jetzt das ausführen des Scripts um 6 Uhr Morgens. Das scheint erstmal zu funktionieren, erklärt aber das Problemchen nicht.
Gruß
Michèl
-
Ich verstehe den Sinn des Skripts nicht so ganz. Wozu soviele States erzeugen?
Wenn ich Apollon richtig verstehe könntest du doch den ganzen oberen Krams weglassen, und einfach direkt 7 CronJobs anlegen mit dem jeweiligen Tag und Uhrzeit? Ganz abgesehen davon, dass
Das würde doch das Skript auf 1/3 reduzieren?
Aber vielleicht verstehe ich ja auch den tieferen Sinn nicht, ist sehr gut möglich. Oder willst du das so machen, um via VIS die States beschreiben zu können, also einen Reinigungsschedule einstellbar zu machen am Tablet oder wie auch immer? Dann würde ich zumindest den Sinn der States nachvollziehen können.
Nachtrag:
Was soll die Abfrage des "if Monday" / Tuesday usw?
Es gibt doch nur einen state je Tag, ich sehe aber nicht, wo der nun von false auf true gesetzt werden sollte?
Kannst du mal einen Screen der angelegten States einfügen?
-
Ich verstehe den Sinn des Skripts nicht so ganz. Wozu soviele States erzeugen? `
Das Script ist von mir und war ein quick und dirty script. Jetzt fühle ich mich irgendwie verprügeltWas optimiert werden kann ist der Wochentag - aber das ist ja nicht das Problem.
Das Script plant den Sauger für jeden Tag der Woche ein. Die States werden dazu über VIS gesetzt. Daher die vielen create states.
Ist ja schon minimiert, da nur die Stunde gespeichert wird.
Wenn das script gestartet wird, dann wird zunächst mal der schedule eingestellt. Alles gut.
Wenn eine Aenderung gemacht wird, dann habe ich einen State der einfach das Programm neu startet. Damit wird auch der schedule aktualisiert.
also deaktivieren/aktivieren. Hierfür kann vielleicht auch eine intelligentere Lösung gefunden werden. Ist aber auch nicht das Problem.
Es scheint so, dass bei darkbrain85 der schedule ab dem zweiten Tag nicht mehr funktioniert. Das liegt aber nicht am script. Bei mir funktioniert es einwandfrei. Aus meiner Sicht ist es ein ganz normaler schedule.
Das Programm kann über klick deaktiviert werden. Möglicherweise passiert da was. Das geht aber über die Standardobjekte und VIS aber ist nicht Programmgesteuert. Daher muss irgendwas anderes faul sein.
So weit waren wir aber noch nicht gekommen.
vG Looxer
EDIT:
und hier nochmal der Ausgangspunkt
-
Looxer:
das musst du nicht. Vielmehr ist es sicherlich meine mangelnde Expertise im Bereich Javascript. Wenn da steht "ich verstehe es nicht", beschreibt das schlicht den Umstand als solchen.
Wenn eine Aenderung gemacht wird, dann habe ich einen State der einfach das Programm neu startet. `
Ist es nicht genau der, der fehlt? Oder übersehe ich den einfach?
-
schon klar. War ja auch nicht bitter ernst.
Ich vermute (kann aber nur vermuten, weil die Info nicht vorliegt), dass aus irgendeinem Grunde das Programm deaktiviert wird (über Objekte).
-
Ist es nicht genau der, der fehlt? Oder übersehe ich den einfach? `
nein, der fehlt nicht. Es ist einfach der State im VIS eingebunden. Das Programm weiss nix davon.
und wenn das Flag aus irgendeinem Grunde nach dem ersten schedule deaktiviert wird, dann laufen auch die nächsten schedules nicht mehr
-
Hi zusammen!
Ich habe das extra hier hin ausgelagert, da es ja nicht wirklich zum Mi Robot Adapter gehört.
Ich kann das Script auch als 100% funktionsfähig bestätigen. Es muss bei mir irgendwas faul sein.
Ich weiß nur nicht was es ist. Ich habe nochmal sämtliche Einstellungen mit den von looxers bereitgestellter View verglichen. Alles soweit gleich. Nur das ich statt der Checkbox zum aktivieren des Script einen toggle Button benutze.
Edit:
Hier mal meine View im Anhang! Vielleicht kann looxer01 mal drüber gucken ob ich irgendwo ein Brett vor dem Kopf habe?
Gruß
Michèl
1860_robby_view.txt -
Hi Michèl,
ich habe leider kein System im Zugriff, da ich unterwegs bin.
Aus meiner Sicht gibt es zwei Quellen, die Probleme machen könnten:
- Das Programm wird aus irgendeinem Grund deaktiviert
Bitte überprüfe das indem du zu dem Zeitpunkt wo es nicht mehr funktioniert das flag checkst (in den Objekten)
- das programm ist aktiviert aber der schedule wird nicht ausgeführt
hierzu habe ich gerade keine zündende Idee. Zumal ich auch nicht ins System schauen kann. Der erste Punkt ist auch wahrscheinlicher.
Ich nehme an, dass das Programm unverändert ist ?
du bekommst beim Speichern des Programmes die Meldung das 7 schedules eingeplant sind ?
Die Zeiten sind in den States (Objekten) als numerische und gültige Werte zwischen 1 und 0 (eingegeben ?) also 1 und 24 wobei 24 = 0
Checke erstmal die Liste oben. Ich kann leider erst am Freitag testen. Vielleicht hat ja auch jemand anders noch Ideen.
vG Looxer
-
Aus meiner Sicht gibt es zwei Quellen, die Probleme machen könnten: `
Konntest du checken, ob das Program deaktiviert wird ?
vG Looxer
-
Aus meiner Sicht gibt es zwei Quellen, die Probleme machen könnten: `
Konntest du checken, ob das Program deaktiviert wird ?
vG Looxer `
Hi!
Das kann ich ausschließen. Das Script war auch bei nicht aktivierung des Saugers immer aktiv. Heute ist er pünktlich gestartet, allerdings war auch mein "Workaround" aktiv der Morgens um 6 das Script automatisch neu startet.
Ich werde diesen jetzt mal deaktiveren und dann muss ich bis Morgen abwarten. Echt schwierig den Fehler zu finden wenn man immer einen Tag warten muss.
Danke für deine Geduld!
Edit:
Heute ist der Sauger trotz korrekt eingestellter Parameter um 11 statt um 13 Uhr losgefahren.
~~![](</s><URL url=)<link_text text="http://forum.iobroker.net/download/file ... 452e1c03f9">http://forum.iobroker.net/download/file.php?mode=view&id=12988&sid=133eff53914e61768fdd24452e1c03f9</link_text>" />
Hier ein Auszug aus dem Log:
2017-07-20 11:01:00.261 - [32minfo[39m: javascript.0 script.js.common.Robby_Einsatzplan: Roboter eingeschaltet 2017-07-20 11:01:05.660 - [32minfo[39m: javascript.0 script.js.common.Robby_Alexa: getState(id=javascript.0.Scenen.robby, timerId=1) => {"val":false,"ack":false,"ts":1500459494328,"q":0,"from":"system.adapter.javascript.0","lc":1500459494328} 2017-07-20 11:01:05.661 - [32minfo[39m: javascript.0 script.js.common.Robby_Alexa: setForeignState(id=javascript.0.Scenen.robby, state=true) 2017-07-20 11:01:05.665 - [32minfo[39m: javascript.0 script.js.common.Robby_Alexa: getState(id=mihome-vacuum.0.info.state, timerId=1) => {"val":5,"ack":true,"ts":1500541265654,"q":0,"from":"system.adapter.mihome-vacuum.0","lc":1500541265654} 2017-07-20 11:01:05.665 - [32minfo[39m: javascript.0 script.js.common.Robby_Alexa: 5
Gruß
-
ok, ich habe eine neue Version des Programms erstellt. Damit sollte das Problem erledigt sein.
Allerdings habe ich noch keinen vollen Zyklus getestet. Bin aber optimistisch
vG Looxer
Edit:
Programm: siehe weiter unten
-
ok, ich habe eine neue Version des Programms erstellt. Damit sollte das Problem erledigt sein.
Allerdings habe ich noch keinen vollen Zyklus getestet. Bin aber optimistisch
vG Looxer
Xiaomi_Control.txt `
Heute ist der Sauger wie geplant um 13 Uhr los gefahren. Sehr merkwürdig!
Ich installiere mal deine neue Version und werde berichten!
Edit: Schonmal vielen Dank für deine Geduld und Mühe! Top Arbeit!
-
So, heute startete der Sauger um 13 und um 15 Uhr. Eingestellt war 14 Uhr. 13 war für Freitag eingestellt, 15 für Sonntag.
Irgendwas stimmt noch nicht…
Gesendet von iPad mit Tapatalk
-
Hi,
es gab noch einen Fehler bei den schedules.
Zuviel copy & paste
probier das hier nochmal. (2 Korrekturen der Schedules)
da wurde die Sonntagsplanung am Samstag ausgeführt.
Allerdings zweimal an einem Tag kann nicht sein. Hast du evt noch das alte Programm laufen ?
vG Looxer
-
Hi,
es gab noch einen Fehler bei den schedules.
Zuviel copy & paste
probier das hier nochmal. (2 Korrekturen der Schedules)
da wurde die Sonntagsplanung am Samstag ausgeführt.
Allerdings zweimal an einem Tag kann nicht sein. Hast du evt noch das alte Programm laufen ?
vG Looxer
filename="xiaomi_control.txt" index="0">~~ `
Nein, ich habe das Script direkt per copy&paste ausgetauscht.
Werden denn die schedules beim Neustart des Programms auch verworfen, oder kann es sein das noch alte aktiv sind?
Edit: Sorry, mein Fehler. Ich habe das alte Programm tatsächlich kopiert und auch noch gestartet gehabt. Die neue Version läuft jetzt. Ich teste dann mal…
Gesendet von iPad mit Tapatalk
-
Ich habe das alte Programm tatsächlich kopiert und auch noch gestartet gehabt. `
Dann sollte es jetzt funktionieren (wenn ich nicht noch ein C&P Problem erzeugt habe
Falls es funktioniert, dann stelle den Thread doch bitte auf [geloest]
vG Looxer
-
Ich habe das alte Programm tatsächlich kopiert und auch noch gestartet gehabt. `
Dann sollte es jetzt funktionieren (wenn ich nicht noch ein C&P Problem erzeugt habe
Falls es funktioniert, dann stelle den Thread doch bitte auf [geloest]
vG Looxer `
Klar… aber lass mich mal eine Woche testen:-)
Edit:
Ich denke es ist tatsächlich vollbracht! Funktioniert die letzten Tage hervorragend! Vielen Dank an Dich und deine Geduld!
Gesendet von iPad mit Tapatalk