NEWS
Script in einem Widget mit HTTP GET Befehl
-
OK, mit dem kreierten Datenpunkt wird der Befehl immerhin schon 1x ausgeführt statt 2x.
Habe nach wie vor noch die Fehlermeldung, die ich oben schon genannte hatte und jetzt folgende im Log:
ReferenceError: Datenpunkt_VIS is not defined at send (script.js.Lautstärke_hoch:15:19) at Object. (script.js.Lautstärke_hoch:22:7) at Object.subs.callback
(/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1324:48) at /opt/iobroker/node_modules/iobroker.javascript/javascript.js:584:48 at getObjectEnums
(/opt/iobroker/node_modules/iobroker.javascript/javascript.js:3185:45) at checkPatterns (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:580:17) at Object.utils.adapter.stateChange
(/opt/iobroker/node_modules/iobroker.javascript/javascript.js:252:17) at Object.that.states.States.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:2226:37) at Socket.
(/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:45:30) at Socket.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-emitter/index.js:133:20)
-
Hi,
Bin komme leider noch nicht an den PC, aber bei:
setState ('Datenpunkt_VIS', false)
Muss natürlich auch dein erstellter Datenpunkt eingetragen werden.
-
Besser wäre dann aber vermutlich diese Schreibweise….
var befehl = ""; //hier deine url eingeben var request = require('request'); var counter = 2; //hier die Anzahl der Wiederholungen einstellen var idWidget = ""; //hier die ID deine erstellen Datenpunktes eintragen createState('Datenpunkt_VIS', false); function send(){ for(var i = 0; i < counter; i++){ request(befehl, function(error, response){ if(err){ log(error, 'error'); } }) if(i+1 === counter){ setState(idWidget, false) } } } on(idWidget, function(obj){ if(obj.newState.val){ send(); } });
Dann brauchst du nur oben am Skript Anfang die Eintragungen zu tätigen.
-
Das Script sieht nun wie folgt aus:
var befehl = "http://192.168.178.20/goform/formiPhoneAppDirect.xml?MVUP"; //hier deine url eingeben var request = require('request'); var counter = 2; //hier die Anzahl der Wiederholungen einstellen var idWidget = "w00205"; //hier die ID deine erstellen Datenpunktes eintragen createState('Lautstärke_mehrfach_erhoehen', false); function send(){ for(var i = 0; i < counter; i++){ request(befehl, function(error, response){ if(err){ log(error, 'error'); } }) if(i+1 === counter){ setState(idWidget, false) } } } on(idWidget, function(obj){ if(obj.newState.val){ send(); } });
Wenn ich auf das Widget klicke passiert nichts, aber auch im Log keine Fehlermeldung.
Aber noch immer die Warnings: "Don't make funktions with a loop" und "missing semikolon
War das mit der Widget ID ok?
-
Schau mal in dem Skript oben rechts steht ID einfügen. Dort suchst du den Datenpunkt den du erstellt hast. Den findest du unter deiner JavaScript Instanz. Der sollte bei dir vermutlich sowas wie "javascript.0.Lautstärke_mehrfach_erhöhen" sein.
Da klickst du dann auf einfügen.
-
Passiert wieder nichts, keine Fehlermeldung im Log, außer dem Warning im Script.
var befehl = "http://192.168.178.20/goform/formiPhoneAppDirect.xml?MVUP"; //hier deine url eingeben var request = require('request'); var counter = 2; //hier die Anzahl der Wiederholungen einstellen var idWidget = "javascript.0.Lautstaerke_mehrfach_erhoehen"; //hier die ID deine erstellen Datenpunktes eintragen createState('Lautstaerke_mehrfach_erhoehen', false); function send(){ for(var i = 0; i < counter; i++){ request(befehl, function(error, response){ if(err){ log(error, 'error'); } }) if(i+1 === counter){ setState(idWidget, false) } } } on(idWidget, function(obj){ if(obj.newState.val){ send(); } });
-
Passiert wieder nichts, keine Fehlermeldung im Log, außer dem Warning im Script.
var befehl = "http://192.168.178.20/goform/formiPhoneAppDirect.xml?MVUP"; //hier deine url eingeben var request = require('request'); var counter = 2; //hier die Anzahl der Wiederholungen einstellen var idWidget = "javascript.0.Lautstaerke_mehrfach_erhoehen"; //hier die ID deine erstellen Datenpunktes eintragen createState('Lautstaerke_mehrfach_erhoehen', false); function send(){ for(var i = 0; i < counter; i++){ request(befehl, function(error, response){ if(err){ log(error, 'error'); } }) if(i+1 === counter){ setState(idWidget, false) } } } on(idWidget, function(obj){ if(obj.newState.val){ send(); } }); ```` `
Ich probiere es wenn ich zuhause bin.
-
OK, danke!
Ich nehme übrigens das hqwidgets - on/off und trage bei Objekt ID den Datenpunkt ein unter "javascript.0" und nicht den von scriptEnabled.
-
OK, danke!
Ich nehme übrigens das hqwidgets - on/off und trage bei Objekt ID den Datenpunkt ein unter "javascript.0" und nicht den von scriptEnabled. `
So habe es bei mir kurz ausprobiert. Allerdings ohne request! Bei mir haut das soweit hin. Ich habe den Code nochmal etwas abgeändert und zum testen ob dein Datenpunkt im VIS richtig konfiguriert ist, ein Log eingefügt.Das mit der Meldung dürfte nur eine Warnung sein, lasse mich aber gerne berichtigen!
var befehl = "http://192.168.178.20/goform/formiPhoneAppDirect.xml?MVUP"; //hier deine url eingeben var request = require('request'); var counter = 2; //hier die Anzahl der Wiederholungen einstellen var idWidget = "javascript.2.Lautstaerke_mehrfach_erhoehen"; //hier die ID deine erstellen Datenpunktes eintragen createState('Lautstaerke_mehrfach_erhoehen', false); function send(){ for(var i = 0; i < counter; i++){ request.get(befehl).on('error', function(error){ if(error){log(error, 'error');} }) if(i+1 === counter){setState(idWidget, false);} } } on(idWidget, function(obj){ log("Tastendruck erkannt"); //Nur zum Test ob deine Zuordnung stimmt if(obj.newState.val){ send(); } });
-
Jetzt geht es halbwegs.
Sind immer noch 2 Warnings drin.
Wenn ich 2 Schleifendurchgänge einstelle, wird nur um 0,5dB erhöht, bei 4 Durchgängen wird um 1dB erhöht. Irgendwas stimmt da mit der Schleife wohl noch nicht. Mir reicht es aber so, ich werde es einfach so einstellen, dass sich pro Tastendruck um 1,5dB erhöht.
Danke nochmals!