NEWS
Neuling hat probleme bei Script ausführen
-
Hallo zusammen
mal ein grosses lob an alle ,echt ein geiles forum mit verdammt viel info ,und iobroker ist echt ein geiles ding muss ich schon sagen
bin in kompletter Neuling und habe durch hier schon einige Sachen hin bekommen
jedoch hab ich ein problem beim Script starten
als erstes steht bei mir bei javascript0 Adaptereinstellungen keine NPM Module drinnen ,Ist das so ok ?oder muss ich die eintragen ?
hab dann mal ein script versucht und zwar das
createState('RolAlleHoch', 'false');
on("javascript.0.RolAlleHoch", function (obj) {
if (obj.newState.val === true) {
setTimeout(function () {
setState("hm-rpc.0.NEQ0111945.1.LEVEL"/Jalousien/Küche.LEVEL/, 100);
setTimeout(function () {
setState("hm-rpc.0.NEQ0111962.1.LEVEL"/Jalousien/Arbeitszimmer.LEVEL/, 100);
}, 2000);
}, 2000);
setState("javascript.0.RolAlleHoch", false);
}
});
wenn ich das aktiviere kommt aber im log immer diese meldung
javascript-0 2016-07-21 07:46:08.523 info script.js.common.Skript1: registered 1 subscription and 0 schedules
javascript-0 2016-07-21 07:46:08.511 info Start javascript script.js.common.Skript1
was mache ich denn da falsch
kann mir da einer weiter helfen ??
Danke danke mal an alle im vorraus
-
Willkommen im Forum - und viel Spaß mit iobroker
Du schreibst nicht, was bei Dir schief läuft, bzw was Du erwartest. Die beiden Meldungen sind vollkommen OK.
registered 1 subscription and 0 schedules
Bedeutet, dass dein Script ein Object (javascript.0.RolAlleHoch) überwacht, das ist eine Subscription. Außerdem gibt es keine aktionen, die nach bestimmeten Zeitmuster augeführt werden (Schedules)
Die zweite Meldung besagt, dass Dein Script gestartet ist.
Um deine Rolladen hoch zu fahren, musst Du den Status deiner Variable auf 'true' setzen. Entweder per script, oder testweise in der 'Object' Ansicht.
Bei so einfachen Anwesingen musst Du nicht unbedingt mit einem Timer arbeiten. Da gibt es die praktische Funktion
setStateDelayed('Kitchen.Light.Lamp', true, 1000);// Switch ON the light in the kitchen in one second
Gruß
-
Hallo zusammen
mal ein grosses lob an alle ,echt ein geiles forum mit verdammt viel info ,und iobroker ist echt ein geiles ding muss ich schon sagen
bin in kompletter Neuling und habe durch hier schon einige Sachen hin bekommen
jedoch hab ich ein problem beim Script starten
als erstes steht bei mir bei javascript0 Adaptereinstellungen keine NPM Module drinnen ,Ist das so ok ?oder muss ich die eintragen ?
hab dann mal ein script versucht und zwar das
createState('RolAlleHoch', 'false');
on("javascript.0.RolAlleHoch", function (obj) {
if (obj.newState.val === true) {
setTimeout(function () {
setState("hm-rpc.0.NEQ0111945.1.LEVEL"/Jalousien/Küche.LEVEL/, 100);
setTimeout(function () {
setState("hm-rpc.0.NEQ0111962.1.LEVEL"/Jalousien/Arbeitszimmer.LEVEL/, 100);
}, 2000);
}, 2000);
setState("javascript.0.RolAlleHoch", false);
}
});
wenn ich das aktiviere kommt aber im log immer diese meldung
javascript-0 2016-07-21 07:46:08.523 info script.js.common.Skript1: registered 1 subscription and 0 schedules
javascript-0 2016-07-21 07:46:08.511 info Start javascript script.js.common.Skript1
was mache ich denn da falsch
kann mir da einer weiter helfen ??
Danke danke mal an alle im vorraus `
Herzlich willkommen im Forum,
die Ausgaben sind völlig ok. Es ist schließlich das Log, das zeigt nicht nur Fehler an, sondern auch, wenn etwas geklappt hat. In diesem Fall wird zusammengefasst: Skript gespeichert, es hat eine Subscription (in deinem Fall auf javascript.0.RolAlleHoch) und eine Zeitsteueung (schedule). Zweite Zeile: Skript gestartet (es wartet jetzt auf das Eintreten der Startzeit für den Schedule-Befehl bzw. auf eine Änderung des Objektes aus der Subscription.
Für die Zukunft bitte merken: Code und Logausgaben in die Code-Tags packen (der kleine Knopf "Code" hier im Forum-Fenster).
Dein Skript kann man noch etwas vereinfachen. Bluefox hat den Befehl setStateDelayed(State, Wert, Verzögerung in ms) gebaut. Damit kann man die setTimeout-Gebilde vermeiden.
Ausserdem den boolean-Standardwert in createState nicht in Häkchen packen, sonst ist das ein String.
createState('RolAlleHoch', false); /* besser createState('RolAlleHoch', { type: 'boolean', def: false }); */ on("javascript.0.RolAlleHoch", function (obj) { if (obj.state.val) { // kann so abgekürzt werden. newState = state, "===true" kann man weglassen setStateDelayed("hm-rpc.0.NEQ0111945.1.LEVEL"/*Jalousien/Küche.LEVEL*/, 100, 2000); // Wert 100 nach 2000ms setStateDelayed("hm-rpc.0.NEQ0111962.1.LEVEL"/*Jalousien/Arbeitszimmer.LEVEL*/, 100, 4 * 1000); // Wert 100 nach 4000ms oder 4s setState("javascript.0.RolAlleHoch", false); // wird sofort zurückgestellt, muss nicht abwarten, bis Rollländen gefahren sind log('Alle Rollläden werden hochgefahren'); // optional - damit du siehst, wann das Skript greift. } });
Der setStateDelayed-Befehl erlaubt auch noch mehr Verschachtelungen. So ist es dann möglich, eine weitere Ausgabe zu starten, sobald der Wert nach der eingestellten Verzögerung gesetzt wurde. Ist aber hier erstmal zu kompliziert. Näheres im Readme vom Javascript Adapter: https://github.com/ioBroker/ioBroker.ja … atedelayed
Gruß
Pix
-
Hallo OstfrieseUnterwegs Hallo Pix
Super danke für eure Hilfe
echt geil es funktioniert
Danke nochmals an die Profis für die Hilfe
Gruesse und noch eine schöne Woche
-
Habe da noch eine frage
wie funktioniert das damit der wert nicht gleich wieder auf False zurück fällt sondern erst nachdem die Jalosien unten sind
möchte das mein Widget während der fahrt der Jalousien auf geänderten zustand bleibt
Danke
-
Hallo,
wenn du die Laufzeit der Rollläden kennst, kannst du natürlich statt
setState("javascript.0.RolAlleHoch", false); // wird sofort zurückgestellt, muss nicht abwarten, bis Rollländen gefahren sind
auch diesen Wert verzögert setzen:
setStateDelayed("javascript.0.RolAlleHoch", false, 15 * 1000); // wird nach 15s zurückgestellt
Wenn du aber tatsächlich erst bei Level 100% den Wert umstellen willst, musst die die beiden Rollläden-Level überwachen:
on({id: /.NEQ0111945.1.LEVEL|.NEQ0111962.1.LEVEL$/, // beide Rolläden werden bei Bewegung abgefragt change: 'ne' }, function(obj) { if (getState("hm-rpc.0.NEQ0111945.1.LEVEL").val === 100 && getState("hm-rpc.0.NEQ0111962.1.LEVEL").val === 100) setState("javascript.0.RolAlleHoch", false); });
also zusammen:
!
createState('RolAlleHoch', false); /* besser createState('RolAlleHoch', { type: 'boolean', def: false }); */ ! on("javascript.0.RolAlleHoch", function (obj) { if (obj.state.val) { // kann so abgekürzt werden. newState = state, "===true" kann man weglassen setStateDelayed("hm-rpc.0.NEQ0111945.1.LEVEL"/*Jalousien/Küche.LEVEL*/, 100, 2000); // Wert 100 nach 2000ms setStateDelayed("hm-rpc.0.NEQ0111962.1.LEVEL"/*Jalousien/Arbeitszimmer.LEVEL*/, 100, 4 * 1000); // Wert 100 nach 4000ms oder 4s log('Alle Rollläden werden hochgefahren'); // optional - damit du siehst, wann das Skript greift. } }); ! on({id: /.NEQ0111945.1.LEVEL|.NEQ0111962.1.LEVEL$/, // beide Rolläden werden bei Bewegung abgefragt change: 'ne' }, function(obj) { if (getState("hm-rpc.0.NEQ0111945.1.LEVEL").val === 100 && getState("hm-rpc.0.NEQ0111962.1.LEVEL").val === 100) setState("javascript.0.RolAlleHoch", false); }); !
Gruß
Pix
-
Hallo Pix
mal einen Herzlichen Dank für deine Geduld und Hilfe
hab das script ein wenig umbebaut ,leider funktioniert das mit dem Widget noch ned so richtig
kommt nur eine kurze bestätigung ,also das script bleibt auf false
hab sicher da irgendwo nen fehler drinnen ..vielleicht kannst du noch mal kurz drüber schauen
Gruesse Mario66
createState('RolAlleHoch', false); /* besser createState('RolAlleHoch', { type: 'boolean', def: false }); */ on("javascript.0.RolAlleHoch", function (obj) { if (obj.state.val) { // kann so abgekürzt werden. newState = state, "===true" kann man weglassen setStateDelayed("hm-rpc.0.MEQ1309974.1.LEVEL"/*Jalousien/Wohnzimmer TV.LEVEL*/, 100); // Wert 100 setStateDelayed("hm-rpc.0.MEQ1310286.1.LEVEL"/*Jalousien/Wohnzimmer/Strasse.LEVEL*/, 100); // Wert 100 setStateDelayed("hm-rpc.0.NEQ0111918.1.LEVEL"/*Jalousien/Esszimmer.LEVEL*/, 100); // Wert 100 log('Alle Rollläden werden hochgefahren'); // optional - damit du siehst, wann das Skript greift. } }); on({id: /.MEQ1309974.1.LEVEL|.MEQ1310286.1.LEVEL|.NEQ0111918.1.LEVEL/, // Rolläden werden bei Bewegung abgefragt change: 'ne' }, function(obj) { if (getState("hm-rpc.0.MEQ1309974.1.LEVEL").val === 100 && getState("hm-rpc.0.MEQ1310286.1.LEVEL").val === 100 && getState("hm-rpc.0.NEQ0111918.1.LEVEL").val === 100) setState("javascript.0.RolAlleHoch", false); });