NEWS
[gelöst] Newbie - Skript startet nicht?
-
Hi Leute,
ich versuche mich mit einem sehr einfachen Skript:
Die Lautstärke des Chromecast soll auf den Wert 10 gesetzt werden.
Als Trigger habe ich "alle 10 Sekunden" gewählt.
Meins Skript (mit Blocky unter "global" erstellt) sieht dann so aus:
schedule("*/10 * * * * *", function () { setState("chromecast.0.Wohnzimmer-Chromecast.status.volume"/*Wohnzimmer-Chromecast.status.volume*/, 10, true); setState("chromecast.0.Wohnzimmer-Chromecast.status.volume"/*Wohnzimmer-Chromecast.status.volume*/, 10); });
Da ich noch nicht den Unterschied zwischen aktualisiere / steuere kenne, habe ich beide Aktionen ausgewählt.
Nach der Aktivierung des Skriptes passiert aber gar nichts. Debug und Hilfe-Ausgabe habe ich auch noch aktiviert, aber auch im Log erscheint nichts. Ist mein Skript fehlerhaft oder ist meine Installation evtl. nicht richtig?
-
Hallo,
deine Cronjob-Syntax ist falsch.
Es gibt nur 5 Sterne, wobei der erste die Minuten definiert, nicht Sekunden.
` > * * * * * Befehl der ausgeführt werden soll
| | | | |
| | | | +–--- Wochentag (0 - 7) (Sonntag ist 0 und 7; oder Namen, siehe unten)
| | | +------- Monat (1 - 12)
| | +--------- Tag (1 - 31)
| +----------- Stunde (0 - 23)
+------------- Minute (0 - 59; oder Namen, siehe unten) ` Versuche es so:
schedule("*/1 * * * *", function () { ````für jede Minute… Gruß Pix
-
Also mein erster Tip wäre, solche Scripte NICHT unter "global" anzulegen! Global ist für wirklich global verwendbare Funktionen gedacht und bringt Funktionalitäten und Zusammenhänge mit sich die du zum Testen sicherlich nicht brauchst…
Zweitens muss ich @pix leider widersprechen . Die Cronjob-Sytax mit Sekunden funktioniert durchaus so wie @MichaHidd das geschrieben hat.
Drittens: Das Script kann ja auch nichts ins Log schreiben - versuchs mal so:
schedule("*/10 * * * * *", function () { setState("chromecast.0.Wohnzimmer-Chromecast.status.volume"/*Wohnzimmer-Chromecast.status.volume*/, 10, true); setState("chromecast.0.Wohnzimmer-Chromecast.status.volume"/*Wohnzimmer-Chromecast.status.volume*/, 10); log('Meine Funktion wurde ausgeführt!"); });
-
Es passiert auch mit dem Skript nichts. Aber im Log steht eine Warnmeldung, nach dem ich das eine oder andere Skript starte:
javascript.0 2017-06-05 20:15:47.747 info received all objects
javascript.0 2017-06-05 20:15:47.593 info received all states
javascript.0 2017-06-05 20:15:47.449 info requesting all objects
javascript.0 2017-06-05 20:15:47.448 info requesting all states
javascript.0 2017-06-05 20:15:47.445 info starting. Version 3.3.8 in C:/ioBroker/node_modules/iobroker.javascript, node: v8.0.0
host.Mediacenter 2017-06-05 20:15:46.818 info instance system.adapter.javascript.0 started with pid 9980
host.Mediacenter 2017-06-05 20:15:44.325 info instance system.adapter.javascript.0 terminated with code null ()
host.Mediacenter 2017-06-05 20:15:44.325 warn instance system.adapter.javascript.0 terminated due to SIGTERM
host.Mediacenter 2017-06-05 20:15:44.314 info stopInstance system.adapter.javascript.0 killing pid 6572
host.Mediacenter 2017-06-05 20:15:44.314 info stopInstance system.adapter.javascript.0
-
Verstehe ich das richtig, dass das passiert egal welches Script du startest? Wenn ja hast du irgend einen bösen Fehler drin der den ganzen Javascript-Adapter zum Abstürzen bringt.
Meine Vermutung: Du hast noch mehr Scripte unter "Global" angelegt und in einem davon einen Fehler. Schiebe bitte die Scripte aus "Global" in eine normale Gruppe (oder "KEINE GRUPPE" geht auch) - aber nicht "common"
-
Es waren nur die beiden Skripte (in Blocky und in Java). Aber als ich sie von global nach common verschoben habe, funktionierten beide Skripte - Danke.
Bleibt nur noch die Frage nach den Unterschied zwischen "steuere" und "aktualisiere" (bzw. ohne "true" oder mit "true" am Ende). Die Status wurde nur mit "steuere" (ohne true) verändert, nicht aber mit "aktualisiere" (mit "true")
-
Es waren nur die beiden Skripte (in Blocky und in Java). Aber als ich sie von global nach common verschoben habe, funktionierten beide Skripte - Danke.
Bleibt nur noch die Frage nach den Unterschied zwischen "steuere" und "aktualisiere" (bzw. ohne "true" oder mit "true" am Ende). Die Status wurde nur mit "steuere" (ohne true) verändert, nicht aber mit "aktualisiere" (mit "true") `
ack = false (bzw. ohne true) ist eine Anforderung an den Adapter, auf die State-Änderung zu reagieren. Wenn diese Änderung vorgenommen wurde, bestätigt der Adapter diese durch setzen von ack = true.Deswegen passiert auch nichts, wenn du den State mit ack = true setzt - der Adapter geht dann davon aus, dass er selbst die Änderung bestätigt hat.
-
Schön dass die Scripte jetzt funktionieren, aber warum schiebst du die jetzt wieder in "common" - ich hatte doch extra geschrieben "NICHT in common"!
Was hast du denn dagegen , dir einen ganz normalen Ordner anzulegen und deine Scripte da abzulegen - sofern sie eben nicht für die gemeinsame (common) oder globale Verwendung benötigt werden?
-
Da habe ich die Nachricht wohl nicht bis zum Ende gelesen