Skip to content

Skripten / Logik

Hilfe zu JavaScript, Blockly, TypeScript, Node-RED, Scenes und text2command

16.6k Topics 213.8k Posts

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Topics
    49k Posts
    OliverIOO
    @BertDerKleine Am besten zeigst du mal dein Script, dann kann man bessere Empfehlungen abgeben. Bitte auch mal schreiben warum du aufteilen möchtest obwohl es so funktioniert.
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Topics
    79k Posts
    KPTK
    Hat leider in ioBroker nicht funktioniert. Musste leider auf HomeAssistant umsteigen. Lokale Integration sehr einfach und voll funktionsfähig.
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Topics
    13k Posts
    Marc BergM
    Es gibt in der Verson 1.3.0 einen neuen Node: iob-setObject (Stand 10.02.26 noch beta) Mit dem neuen Node kann man ioBroker-Objektdefinitionen (Metadaten) direkt schreiben und ändern. Hauptfunktionen: Instanz-Konfigurationen ändern - z.B. MQTT publish-Pattern, Intervalle, etc. Objekt-Eigenschaften aktualisieren - Namen, Rollen, Einheiten, Min/Max-Werte ändern es gibt zwei Modi: Merge-Modus : Ändert nur die angegebenen Eigenschaften, alle anderen bleiben erhalten Replace-Modus: Überschreibt das komplette Objekt Typischer Workflow: Objekt mit iob-getobject holen Mit Change-Node gewünschte Properties ändern Mit iob-setobject zurückschreiben
  • Heizungssteuerung zeitabhängig

    Moved
    7
    0 Votes
    7 Posts
    1k Views
    blauholstenB
    Ich denke du hast isTimeInRange nicht als variable bzw Funktion deklarierte. Schau dir das an…http://forum.iobroker.de/viewtopic.php? ... imeinrange
  • $(selector).each(function(id, i) {}); abbrechen

    Moved
    3
    0 Votes
    3 Posts
    2k Views
    bentschikB
    Super, Danke!
  • [GELÖST]Datenpunkt und Funktion(FEHLER???)

    Moved
    7
    2
    0 Votes
    7 Posts
    1k Views
    blauholstenB
    @paul53: Hast Du mal die Zeitstempel der beiden JS-Datenpunkte verglichen ? ` leider nein, habe vorhin alles neu gestartet und dann ging es komischerweise! Deine Veränderungen in der Switch-Anweisung machen sinn! Danke hierfür. Aber die Veränderung beim Aufruf (ON) klappt mit der "Standard" Variante nicht. Wenn ich von aussen den Modus wechsle, würde das im VIS nicht mehr passen. Ich habe es jetzt so gelöst, und es funktioniert endlich alles wie es soll! //*****************DATENPUNKTE*ERZEUGEN**************************************** createState('thermostate.stube.modus', ""); createState('thermostate.bad.modus', ""); createState('thermostate.küche.modus', ""); //*********************STUBE************************************************** function stube() { var a = getState("hm-rpc.0.MEQ0480054.2.CONTROL_MODE").val; switch(a) { case 0: setState("hm-rpc.0.MEQ0480054.2.MANU_MODE", 5.0); // Sollwert toLog(zeit + "->" + "Stube Manuell"); break; default: setState("hm-rpc.0.MEQ0480054.2.AUTO_MODE", true); toLog(zeit + "->" + "Stube Automatik"); } } //********************BAD***************************************************** function bad() { var b = getState("hm-rpc.0.MEQ0447885.4.CONTROL_MODE").val; switch(b) { case 0: setState("hm-rpc.0.MEQ0447885.4.MANU_MODE", 5.0); // Sollwert toLog(zeit + "->" + "Bad Manuell"); break; default: setState("hm-rpc.0.MEQ0447885.4.AUTO_MODE", true); toLog(zeit + "->" + "Bad Automatik"); } } //********************KÜCHE**************************************************** function kueche() { var c = getState("hm-rpc.0.MEQ0447899.4.CONTROL_MODE").val; switch(c) { case 0: setState("hm-rpc.0.MEQ0447899.4.MANU_MODE", 5.0); // Sollwert toLog(zeit + "->" + "Küche Manuell"); break; default: setState("hm-rpc.0.MEQ0447899.4.AUTO_MODE", true); toLog(zeit + "->" + "Küche Automatik"); } } //********************AUFRUFE************************************************** on({id: "javascript.0.thermostate.stube.modus", "val": "stubem"}, function() { stube(); }); on({id: "javascript.0.thermostate.stube.modus", "val": "stubea"}, function() { stube(); }); on({id: "javascript.0.thermostate.bad.modus", "val": "badm"}, function() { bad(); }); on({id: "javascript.0.thermostate.bad.modus", "val": "bada"}, function() { bad(); }); on({id: "javascript.0.thermostate.küche.modus", "val": "küchea"}, function() { kueche(); }); on({id: "javascript.0.thermostate.küche.modus", "val": "küchem"}, function() { kueche(); }); In dem Script könnte man in den Case Anweisung mit "case 3:" nun noch die Boost-Funktion der Thermostate realisieren. Danke für die Hilfe.
  • Skript um bei view in Widget den view zu wechseln

    Moved
    24
    0 Votes
    24 Posts
    8k Views
    BluefoxB
    @Communicate: Danke! Es funktioniert wieder einwandfrei. Für die Zukunft: Helfen Dir solche "Debug-Versuche" oder ist das eher vergebene Liebesmühe? Gruß Dominic ` Auf jeden Fall. Da war mir fast sofort klar, was nicht in Ordnung war. :D
  • IoBroker Input

    Moved
    5
    3
    0 Votes
    5 Posts
    2k Views
    E
    okay, der Umweg ist zwar nachvollziehbar aber die Umsetzung bekomme ich nicht ganz hin. javascript.0.nodeStarted manuell erstellt Wenn ich aber aus Nodered heraus versuche diese dann zu setzten wird ein Objekt unterhalb von nodered.0 angelegt, also nodered.0/javascript/0/nodeStarted. Daran soll es aber erstmal nicht scheitern Wie kann das Script denn auf diese Variable hören?? Aktuell ist das Script per cron getriggert via schedule einer Funktion. Das würde dann ja wegfallen und nur noch durch den flow ausgeführt werden.
  • JavaScript: http/rawSocket

    Moved
    3
    0 Votes
    3 Posts
    2k Views
    H
    @Bluefox: Danke für deine Antwort. Ich wollte es als Adapter mit node.js machen. Nach einer Programmier-Nacht habe ich es selbst rausgefunden. Für alle, die vielleicht das gleiche Problem haben: var net = require('net'); var client = new net.Socket(); client.connect(PORT, HOST, function() {...} var buf2=new Buffer([0x13, 0x0, 0xc8, 0x80, 0x0]); client.write(buf2); Hiermit wird ein byte-Array ohne weiteren Overhead an einen TCP-Server gesendet. Tobias
  • Webseite/HTML parsen

    Moved
    2
    1
    0 Votes
    2 Posts
    1k Views
    E
    Mache es jetzt via indexOf und split per Funktion das klappt ganz gut.
  • Erste Gehversuche

    Moved
    3
    2
    0 Votes
    3 Posts
    2k Views
    E
    Hi Pix, vielen Dank für Deine Antwort. Werde mich in Zukunft dran halten. Merke jetzt schon mehrere Sachen in einen Thread zu diskutieren macht es sehr unübersichtlich. Das Zuordnen des Topics in der vorherigen Function habe ich noch nicht ganz verstanden. [image: 235_2015-10-01_15h24_39.png] Also würde ich hier im ioBroker output node das Topic raus nehmen und in der Function so etwas einbringen (?): [image: 235_2015-10-01_15h26_47.png] Hier das kleine Function Node für die URL: `url = {}; monat = {}; jahr = {}; var dt = new Date(msg.timestamp); jahr.payload = dt.getFullYear(); monat.payload = dt.getMonth()+1; url.payload = "http://www.awg-wuppertal.de/web/awg.php?sid=333&jahr_von="+dt.getFullYear()+"&buchstabe=S&strasse=%20&hausnummer=&monat_von=13&jahr_von="+dt.getFullYear()+"&darstellung=liste"; return [url];` Sobald ich dies dann an http request gebe (also verbinde) erhalte ich im Log [msg] : string No url specified Mir fehlt wahrscheinlich einfach nur die grundlegende Kenntnis wie und in welcher Form in Node-RED die In- und Outputs zu definieren sind. Learning by doing quasi :-) EDIT: msg.url als Rückgabewert und schon klappt es. *g[/url]
  • Countdown täglich zur selben Zeit für 30 Minuten

    Moved
    11
    0 Votes
    11 Posts
    3k Views
    derAugeD
    Super Werde ich nachher testen Der Start heute mittag hatte nicht funktioniert. Bis später Gesendet von meinem BLOOM mit Tapatalk
  • Erste Gehversuche: Mit HM-PB-2-WM55-2 Sonos Wiedergabe start

    Moved
    8
    0 Votes
    8 Posts
    5k Views
    P
    Hallo Jürgen,@derAuge: macht es sinn die SONOS per variable einzutragen. Dann kann man den Script schneller für weitere SONOS nutzen ` das muss jeder selbst wissen. Nach meiner Erfahrung sind Skripte mit vielen Ersetzungen und Kurzschreibweisen schwer zu verstehen, wenn man a) Anfänger oder b) lange aus dem Thema ist. So ein Skript für einen 6fach Taster schreibe ich ja nicht jeden Tag. Wenn ich mir in einigen Monaten / Jahren noch einen Taster anschaffe, dann kann ich das bestehen de einfach kopieren. Es kommt nicht auf die 15min an, die es dauert, die genauen Datenpunktbezeichnungen zu ändern. Die Geschwindigkeit ändert sich bei so einem kurzen Skript sicher nicht. Ich würde das vorher bei den Homematic Datenpunkten machen: Du kannst aber oben im Skript Variablen definieren, die das Ansprechen des Tasters vereinfachen (zB auch, wenn der Taster mal defekt ausgetauscht wird und eine neue Seriennummer hat). zum Beispiel so: var idMitteLinksKurz = "hm-rpc.0.MEQ0027317.3.PRESS_SHORT", idMitteLinksLang = "hm-rpc.0.MEQ0027317.3.PRESS_LONG", idMitteRechtsKurz = "hm-rpc.0.MEQ0027317.4.PRESS_SHORT", idMitteRechtsLang = "hm-rpc.0.MEQ0027317.4.PRESS_LONG", idUntenLinksKurz = ... Gruß, Pix 355_9d1368fd-62a1-49e0-9c29-0e5a8beb4227.jpeg 355_1e53d405-040e-4641-ba7b-ccf13c1819c2.jpeg
  • SetState Acknowledge

    Moved
    2
    0 Votes
    2 Posts
    1k Views
    BluefoxB
    Man kann nicht nur ack setzten. Da musst du val noch mal rein schreiben.
  • [gelöst]Erstmaliges Schreiben eines Objektes

    Moved
    6
    0 Votes
    6 Posts
    1k Views
    H
    Vielen Dank ich hatte erwartet, dass das Objekt 'res' existiert, aber 'res.val' den Wert 'null' hat Tobias
  • Gelöst: Verzögerungszeit bei der Ausführung von Anweisungen

    Moved
    8
    0 Votes
    8 Posts
    3k Views
    R
    @Bluefox: Und das konnte man dann so umschreiben: ` … und hätte es dann (zumindest für mich) auch gleich noch lesbarer und verständlicher, soweit es die "Verwandschaft" zwischen setState und setStateDelayed betrifft. Mann dankt - Ralf
  • Network OWL mit Script einlesen

    Moved
    6
    2
    0 Votes
    6 Posts
    2k Views
    P
    Hallo, hab Ihr OWL-Besitzer auch neuerdings das Problem, dass der json String nicht mehr die Channels liefert und nach dem Batterie-Wert endet? {"id":"44XXXXXXXXXXXXX","signal":{"rssi":"-78","lqi":"77"},"battery":"100%","channels":{"2":null}} Scheinbar wird das notwendige Modul owlintuiion nicht mehr gefunden. 2015-09-25 19:50:31.276 - error: javascript.2 script.js.OWL: Cannot find module '/Users/pix/Documents/iobroker/node_modules/iobroker.javascript/node_modules/owlintuition' at script.js.OWL:80:11 2015-09-25 19:50:31.282 - error: javascript.2 script.js.OWL: TypeError: undefined is not a function Es lässt sich aber auch nicht nachinstallieren 2015-09-25 19:50:26.034 - error: javascript.2 npm ERR! System Darwin 14.4.0 npm ERR! command "node" "/usr/local/bin/npm" "install" "owlintuition" "--production" "--prefix" "/Users/pix/Documents/iobroker/node_modules/iobroker.javascript" ! ```` sudo npm install owlintuition --production --prefix /Users/pix/Documents/iobroker/node_modules/iobroker.javascript Password: npm WARN package.json util@0.10.3 util is also the name of a node core module. npm WARN engine hoek@2.16.3: wanted: {"node":">=0.10.40"} (current: {"node":"0.10.33","npm":"1.4.28"}) / iconv@2.1.11 install /Users/pix/Documents/iobroker/node_modules/iobroker.javascript/node_modules/owlintuition/node_modules/xml2json/node_modules/node-expat/node_modules/iconv node-gyp rebuild ! Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo. ! Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo. ! gyp ERR! build error gyp ERR! stack Error: make failed with exit code: 69 gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:267:23) gyp ERR! stack at ChildProcess.emit (events.js:98:17) gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:810:12) gyp ERR! System Darwin 14.4.0 gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild" gyp ERR! cwd /Users/pix/Documents/iobroker/node_modules/iobroker.javascript/node_modules/owlintuition/node_modules/xml2json/node_modules/node-expat/node_modules/iconv gyp ERR! node -v v0.10.33 gyp ERR! node-gyp -v v1.0.1 gyp ERR! not ok ! npm ERR! iconv@2.1.11 install: node-gyp rebuild npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the iconv@2.1.11 install script. npm ERR! This is most likely a problem with the iconv package, npm ERR! not with npm itself. npm ERR! Tell the author that this fails on your system: npm ERR! node-gyp rebuild npm ERR! You can get their info via: npm ERR! npm owner ls iconv npm ERR! There is likely additional logging output above. npm ERR! System Darwin 14.4.0 npm ERR! command "node" "/usr/local/bin/npm" "install" "owlintuition" "--production" "--prefix" "/Users/pix/Documents/iobroker/node_modules/iobroker.javascript" npm ERR! cwd /Users/pix/Documents/iobroker npm ERR! node -v v0.10.33 npm ERR! npm -v 1.4.28 npm ERR! code ELIFECYCLE npm ERR! not ok code 0 Gruß, Pix
  • Fragen zu Unterputzschalter HM-PB-2-FM

    Moved
    4
    1
    0 Votes
    4 Posts
    1k Views
    H
    O.K. ich probier es einfach mal mit true und sorry dass man fa so wenig erkennen kann. Gelobe Besserung :-) Gesendet von meinem GT-I9505 mit Tapatalk
  • Subscribe/on Optimierung

    Moved
    7
    1
    0 Votes
    7 Posts
    1k Views
    F
    @paul53: Nicht ganz., sondern: … ` Danke. Werde das heute Abend mal ausprobieren. [image: zwinkernde-smilies-0022.gif]~~![](</s><URL url=)<link_text text="http://www.smiliesuche.de/smileys/zwink ... s-0022.gif">http://www.smiliesuche.de/smileys/zwinkernde/zwinkernde-smilies-0022.gif</link_text>" /> Fitti~~
  • SayIt - Ausgabe bei MOTION

    Moved
    7
    0 Votes
    7 Posts
    1k Views
    BluefoxB
    @paul53: @Bluefox: if (obj.newState.val === true || obj.newState.val === "true" || obj.newState.val === 1 || obj.newState.val === "1") ` Javascript macht doch implizite Typwandlungen. Genügt da nicht die Abfrage if (obj.newState.val) egal, welche von den 4 Varianten stimmt ? EDIT: Bei Zeichenketten funktioniert die implizite Typwandlung nicht, da nur leere Zeichenketten (Länge 0) ein false liefern. ` Richtig. Z.B. console.log(!"0") liefert false. Auch console.log(!"false"); liefert false.
  • [gelöst] Skript das Objekt erzeugen soll funktioniert nicht

    Moved
    16
    0 Votes
    16 Posts
    3k Views
    C
    Hallo zusammen, danke BLuefox -> jetzt geht es. Ich hab es jetzt einfach einmal per Hand eingetragen. Das hat funktioniert und danach konnte ich es auch über das Auswahlmenü sehen. Auch eine weitere angelegte Variable war jetzt nahezu sofort sichtbar. Danke nochmal Gruß Dominic
  • [gelöst]Wie einen Timer einstellen

    Moved
    3
    0 Votes
    3 Posts
    2k Views
    S
    Klasse, vielen Dank. Das klappt prima!
  • OK Frage: for ( x in y) -> nur zwei von drei items

    Moved
    4
    0 Votes
    4 Posts
    1k Views
    ruhr70R
    frei nach Bluefox: function main() { // ##### Scriptstart main() ##### } setTimeout(main, 500); // startet main() nach 500 ms

388

Online

32.7k

Users

82.4k

Topics

1.3m

Posts