Weiter zum Inhalt

Skripten / Logik

16.7k Themen 215.8k Beiträge

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

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    3k 50k
    3k Themen
    50k Beiträge
    S
    Habe mal "Claude" ausprobiert und das Skript überarbeiten lassen. ;-)
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    W
    @paul53 Bombe! Vielen Dank! Gleich die erste Version passt perfekt. Möchte nur um 11 Uhr entscheiden ob es sinnvoll ist die Klima einzuschalten. Brauch das nur im Sommer, drum interessiert Winterzeit nicht. Vielen Dank Dir
  • Hilfe für Skripterstellung mit Node-RED

    964 13k
    964 Themen
    13k Beiträge
    OliverIOO
    @andibr habe mir mal aus deinem screenhot oben die daten extrahiert. aber wie gesagt das ist nur annahme und folgenden testflow gemacht Spoiler [ { "id": "a349e5287a176ccf", "type": "inject", "z": "593468e.75a0498", "name": "Start button", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 110, "y": 60, "wires": [ [ "6602913b9103c8e9" ] ] } ] [image: 1786207414578-c8d4ff59-1786-4ce5-ab57-cabbb1b537c9-image.jpeg] 1.das erste ist ein inject node zum manuellen starten des flows, den brauchst du nicht. bei dir wird aus der rs232 getriggert 2.diese node stellt den test text bereit, bei dir wäre das dann die rs232 node 3.hier wird nun aus dem ankommenden text die daten aufbereitet verarbeitet wird nur wenn text kommt text muss mindestens 9 zeichen lang sein text wird dann in einzelne zeilen aufgeteilt evtl leerzeilen werden ausgefiltert jede zeile wird mit regex in spalten aufgeteilt, dabei fliegen die leezeichen raus jeder match wird dann in ein battery objekt in das entsprechende feld gelegt aus jedem zeilen objekt wird dann ein eigenes messag objekt erzeugt wenn alle zeilen verarbeitet sind, werden alle messages an node red zum weiterverarbeiten zurückgegeben debug node: die gibt dann für jede einzelne message (also jede zeile) eine nachricht im debug fenster (käfer symbol) aus. vgl screenshot danach darfst du damit machen was du willst :)
  • Sonnenuntergang als Trigger

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    1k Aufrufe
    modmaxM
    Um mehr als JA zu sagen: In Blockly den Auswahlpunkt "trigger" auswählen. Dort finden man das Blockly für "Astro", das per default auf Sonnenuntergang steht, aber direkt im Blockly geändert werden kann.
  • [GELÖST] Datum heute, morgen, übermorgen etc.

    Verschoben
    10
    0 Stimmen
    10 Beiträge
    3k Aufrufe
    T
    Hi Buzzy, dann wird uebermorgen aber zum 01.04.2018 und nicht zum 31.03.2018. Gruß, Tom
  • Keine Log Ausgabe mehr innerhalb der javascript Instanz

    Verschoben
    4
    1
    0 Stimmen
    4 Beiträge
    908 Aufrufe
    GoerschG
    bei Verwendung von redis klappen auch die Log Ausgaben. Ich sah da keinen Zusammenhang, weshalb ich nicht erwähnt habe, dass ich von redis auf Datei gewechselt bin :oops:
  • Rechnen mit Blockly

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    1k Aufrufe
    G
    Hallo, ich bin zwar ganz neu in der ioBroker-Welt, aber als Lösungsansatz würde ich so etwas versuchen (geht sicherlich einfacher). [image: 6538_unbenannt.jpg] ! ```` <xml xmlns="http://www.w3.org/1999/xhtml"><block type="schedule" id="D)hjst=#bI8.q{.M8fo%" x="13" y="13"><field name="SCHEDULE">/30 * 23 * * </field> <statement name="STATEMENT"><block type="comment" id="o9y2~.e+vl#wd5,emL%K"><field name="COMMENT">folgend nur als Platzhalter. Müssen natürlich Fenster rein</field> <next><block type="variables_set" id="H;Lll,Sw2!-bbt%,3/GB"><field name="VAR">1</field> <value name="VALUE"><block type="logic_boolean" id="nBU_d4mW]MSVU%p~0SA"><field name="BOOL">TRUE</field></block></value> <next><block type="variables_set" id="bz.(J_3V2bd}T8H#UCW"><field name="VAR">2</field> <value name="VALUE"><block type="logic_boolean" id="249z^BAWy_HNwO[[kxv"><field name="BOOL">TRUE</field></block></value> <next><block type="variables_set" id=".hVrZQaUq^I%+Or/_b~K"><field name="VAR">3</field> <value name="VALUE"><block type="logic_boolean" id="fX3yd}EAb?YAce9l6*#"><field name="BOOL">TRUE</field></block></value> <next><block type="variables_set" id="F]vJ:rMtL-9TZD7-|c+"><field name="VAR">4</field> <value name="VALUE"><block type="logic_boolean" id="TjC~)yjRJ/9-Ra#QD]q"><field name="BOOL">TRUE</field></block></value> <next><block type="variables_set" id="x/I11bjv7svsunHvlpeL"><field name="VAR">zähler</field> <value name="VALUE"><block type="math_number" id="ab.EyO6l5M++q!g/SF(4"><field name="NUM">0</field></block></value> <next><block type="comment" id="[4iH@I@/}|xy/=YEMS.{"><field name="COMMENT">jedes Fenster Prüfen und Variable zählen lassen</field> <next><block type="controls_if" id="OZ+StWRC@Zqcye+/E~{i"><value name="IF0"><block type="logic_compare" id="~QXY]|v4b-wp#]:AT~vF"><field name="OP">EQ</field> <value name="A"><block type="variables_get" id="-H5XGpx!5(7lVzV:A!-T"><field name="VAR">1</field></block></value> <value name="B"><block type="logic_boolean" id="GeU#JdwRus3FEyifXNpf"><field name="BOOL">TRUE</field></block></value></block></value> <statement name="DO0"><block type="math_change" id="h#SsZj1*Ye8r1?LmM1Q#"><field name="VAR">zähler</field> <value name="DELTA"><shadow type="math_number" id="N%H;6~+E3!W@xS+cGqX/"><field name="NUM">1</field></shadow></value> <next><block type="debug" id="8o4=8V.}Iuny[%A~Sd,"><field name="Severity">warn</field> <value name="TEXT"><shadow type="text" id="j,-n2A{leL_s%W=@LzMF"><field name="TEXT">in if</field></shadow></value></block></next></block></statement> <next><block type="controls_if" id="z:EaXZkW~FyI{Ed/LTtf"><value name="IF0"><block type="logic_compare" id="Y0f2m+Z+[0gzPF]CioL"><field name="OP">EQ</field> <value name="A"><block type="variables_get" id="9^Ybgh/WErrq6RmJQA^k"><field name="VAR">2</field></block></value> <value name="B"><block type="logic_boolean" id="tK*pH~1ef([hAml|48u("><field name="BOOL">TRUE</field></block></value></block></value> <statement name="DO0"><block type="math_change" id="A8@B~xf+KZkI+IENd3jf"><field name="VAR">zähler</field> <value name="DELTA"><shadow type="math_number" id="OiiqN#NTd}Gc=KaP)iJ"><field name="NUM">1</field></shadow></value></block></statement> <next><block type="controls_if" id="nO?BtyB%s35K/vv/q22-"><value name="IF0"><block type="logic_compare" id=".aN)Ni##oiN+~?!LWd|H"><field name="OP">EQ</field> <value name="A"><block type="variables_get" id="MTL=c1~7jf+6R8h5eisF"><field name="VAR">3</field></block></value> <value name="B"><block type="logic_boolean" id="yN0.eUv]0N9cAB,6KRiq"><field name="BOOL">TRUE</field></block></value></block></value> <statement name="DO0"><block type="math_change" id="s1wJ?e,Icyms5~O4q1=F"><field name="VAR">zähler</field> <value name="DELTA"><shadow type="math_number" id="5H5:q7S,K~u_1V^7H,52"><field name="NUM">1</field></shadow></value></block></statement> <next><block type="controls_if" id="@5p=K|.2lM[O:VfQl]."><value name="IF0"><block type="logic_compare" id="@QfQx7Q%~cC3LzyV{+J|"><field name="OP">EQ</field> <value name="A"><block type="variables_get" id="U0/!q|W{dy|^u1|NykyS"><field name="VAR">4</field></block></value> <value name="B"><block type="logic_boolean" id="Q#SGuc.5Z:G969o!G:K?"><field name="BOOL">TRUE</field></block></value></block></value> <statement name="DO0"><block type="math_change" id="|*{16Ec]c@|88#e#IkHg"><field name="VAR">zähler</field> <value name="DELTA"><shadow type="math_number" id="avk,t|,CMHEjnLLC%cCu"><field name="NUM">1</field></shadow></value></block></statement> <next><block type="comment" id="T,.QZ#!H6=;-9ZE?P8"><field name="COMMENT">Ergebnis ein Datenpunkt schreiben</field> <next><block type="control" id="X;]{87[yzCK?CKF~{pAM"><mutation delay_input="false"></mutation> <field name="OID">vis.0.counter</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="convert_tonumber" id="Z+i4oT~C:;cYj4Q+i5ca"><value name="VALUE"><block type="variables_get" id="T0._2!.Ud1eeI2A:oPAu"><field name="VAR">zähler</field></block></value></block></value></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></statement></block></xml>
  • Sonoff Neustart per http bei Verbindungsabbruch im LOG

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    414 Aufrufe
    J
    Kann man Daten aus dem Log iwie in Blockly einfügen?!
  • Variablen 0 / 1 und wahr / False Blockly

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    860 Aufrufe
    P
    man kann in der EasyESP oberfläche einstellen was er machen soll, wenn gedrückt wird. Wie du schon sagtest.. Wert 1 so lange gedrückt wird oder er wächselt den wert immer, wenn gedrückt wird, also er behält den Wert 1, bis noch mal gedrückt wird. Leider halt nur 1 und 0 (was ich persönlich besser finde) und nicht Wahr und False
  • Datenfile in Blockly aufrufen und Daten vergleichen

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    267 Aufrufe
    Niemand hat geantwortet
  • Wie name/role/type/def usw. mit js auslesen?

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    612 Aufrufe
    N
    Vielen Dank :-)
  • [gelöst]Zeit zwischen Aktualisierung eines Datenpunktes ermitteln

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    S
    es kann so einfach sein… vielen dank, klappt wunderbar! on({id: 'javascript.0.Stromzaehler.Normalstrom.Zaehlerstand_input', change:'any'}, function(data) { // in data.state.ts steht der aktuelle Timestamp // in data.oldState.ts steht der Timestamp der letzten Aktualisierung // Sind Zahlen in ms, also mit ... console.log(((data.state.ts-data.oldState.ts)/1000) + ' Sekunden seit letzter Aktualisierung'); setState("javascript.0.Stromzaehler.Normalstrom.Umdrehung_Zeit"/*Umdrehung_Zeit*/, ((data.state.ts-data.oldState.ts)/1000), true); });
  • Dimmwert mit Zeitsteuerung

    Verschoben
    25
    0 Stimmen
    25 Beiträge
    4k Aufrufe
    madjack84M
    ich habe gleiches mit dem virtuellen Kanal 2 gelöst. Ein CCU2 Programm setzt nun Kanal 2 um 21:00 auf 40% und um 5:00 wieder auf 100% Das Licht schaltet nachts nur auf 40%. soweit ok. Leider lässt sich dann allerdings der Dimmwert per Taster am Dimmer nicht mehr nach oben regulieren, da der Taster Kanal 1 steuert. >> Unter 40% geht dann noch aber durch die Verknüpfung nicht über 40% Setze ich dann in den Einstellungen die Taster am Kanal 2 nicht mehr auf inaktiv, sondern ein/aus heller/dunkler, dann lässt sich der Dimmer gar nicht mehr aktivieren. Wie wäre die Einstellung hier richtig um abends trotzdem bei Bedarf das Licht per Tastern noch zu erhöhen? Kann das leider aus den Beschreibungen nicht herauslesen :/ ja ich nutze auch ioBroker, aber ging davon aus, dass dies auch über die virtuellen Kanäle gehen muss. Bin ja eh schon begeistert über das Vorhandensein dieser Funktion :D grüße
  • Blockly Problem mit Variable

    Verschoben
    11
    1
    0 Stimmen
    11 Beiträge
    1k Aufrufe
    wendy2702W
    OK. Dann geht es nur über Script.
  • Servicemeldungen per Mail?

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    2k Aufrufe
    paul53P
    Wenn Du ausschließlich eine Mail versenden willst, kann das Script stark vereinfacht werden, function sendMail(txt) { sendTo("email", { subject: "Servicemeldung", text: formatDate(new Date(), "YYYY-MM-DD hh:mm:ss.sss ") + txt + "\n" }); } on(/\.UNREACH|LOWBAT|CONFIG_PENDING|FAULT_REPORTING$/, function(dp) { var val = dp.state.val; var old = dp.oldState.val; if (val != old) { if(dp.common.name) sendMail(dp.common.name + ": " + val); else sendMail(dp.id + ": " + val); } });
  • [gelöst] exec-Prozess abbrechen.

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    296 Aufrufe
    J
    Mit "ps -ax" in der Konsole zeigt er mir folgendes an: 10902 ? S 0:00 /bin/sh -c omxplayer /opt/Ansagen/CountDown.mp3 10903 ? S 0:00 /bin/bash /usr/bin/omxplayer /opt/Ansagen/CountDown.mp3 10911 ? Sl 0:00 /usr/bin/omxplayer.bin /opt/Ansagen/CountDown.mp3 Zum Erfolg bringt mich der Befehl: killall omxplayer.bin Mein Problem ist alsogelöst ….. natürlich erst nachdem ich hier gefragt habe. Sorry Gruß Jörg
  • [gelöst]js-Skript runden auf 3 Stellen nach dem Komma

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    2k Aufrufe
    S
    okay… hab den Fehler gefunden, eine Klammer war fasch gesetzt... function precisionRound(number, precision) { var factor = Math.pow(10, precision); return Math.round(number * factor) / factor; } on({id: 'javascript.0.Stromzaehler.Normalstrom.Zaehlerstand_input', change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setState("javascript.0.Stromzaehler.Normalstrom.Zaehlerstand_kWh"/*Zaehlerstand_kWh*/, (precisionRound((getState("javascript.0.Stromzaehler.Normalstrom.Zaehlerstand_input").val / 75), 3)), true); });
  • 0 Stimmen
    11 Beiträge
    1k Aufrufe
    K
    Das Problem war, dass ich nach einer Lösung mit Socket IO gesucht habe (so wie Eingangs vorgeschlagen wurde). Aber der benötigte Adapter hierzu heißt nicht Socketio sondern Simple API ;)! Inzw. läuft mein Versuchsaufbau wunderbar! Vielen Dank für die Hilfe.
  • [Gelöst] Wert in Telegram ausgeben

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    1k Aufrufe
    BuZZyB
    Kann jedem mal passieren.. Dafür haben wir ja so eine tolle Community. :) Gruß
  • Google-Kalenderdaten usw. morgens täglich an Telegram

    Verschoben
    14
    1
    0 Stimmen
    14 Beiträge
    2k Aufrufe
    Paulchen67P
    @tempestas: Mit diesem Skript ! ```` // Skript schaut täglich um 18h, ob im Kalender das Wort "Morgen" vorkommt. Wenn ja, wird ein Telegram geschickt mit dem betreffenden Termin bzw Terminen // tempestas 13.2.2018 ! // Skripteinstellungen ! var debug = false; ! // Suchfunktion für Termin-Cutoff function nthIndex(str, pat, n){ var L= str.length, i= -1; while(n-- && i++ <l){ i="str.indexOf(pat," i);/if/(i/</0)/break;/}/i_search="i;" funktion/function/warnung()/{/var/inhalt="getState("ical.0.data.html").val.toString();" hier/deine/müll-kalender/instanz/eingeben/count="inhalt.split("Morgen").length" -1;/wie/häufig/wird/"morgen"/gefunden?/posstart="inhalt.indexOf(" 'morgen',/0);/sucht/das/erste/mal/if(debug)/log("posstart/"+posstart);/if(posstart/!="-1){" falls/gefunden/wurde/gehts/weiter/stringshort="inhalt.substring(posStart," inhalt.length);/abschneiden/von/allem,/was/links/vom/ersten/treffer/steht/log("gekürzt/:"/+stringshort);/nthindex(stringshort,/'</span="">', count); // hier wird nun geschaut, wo es rechts abgeschnitten werden muss stringCut = stringShort.slice(0,i_search); // hier wird alles rechts abgeschnitten und so der finale String extrahiert if(debug) log("Fast Final: "+stringCut); ! // aufbereiten für telegram, entfernen von HTML Tags ! stringCut = stringCut.replace(' ',"\n"); // Zeilenumbruch html durch telegram umbruch ersetzen ! // remove all inside SCRIPT and STYLE tags stringCut=stringCut.replace(/<script.>[\w\W]{1,}(.?)[\w\W]{1,}</script>/gi, ""); stringCut=stringCut.replace(/<style.>[\w\W]{1,}(.?)[\w\W]{1,}</style>/gi, ""); // remove BR tags. stringCut=stringCut.replace(/ /gi, ""); stringCut=stringCut.replace(/<br\s>/gi, ""); stringCut=stringCut.replace(/<br>/gi, ""); // remove all else stringCut=stringCut.replace(/<(?:.|\s)*?>/g, ""); // get rid of html-encoded characters: stringCut=stringCut.replace(/ /gi," "); stringCut=stringCut.replace(/&/gi,"&"); stringCut=stringCut.replace(/"/gi,'"'); stringCut=stringCut.replace(//gi,'>'); ! sendTo('telegram', stringCut); } } ! // Trigger Schedule ! schedule('0 18 * * ', function(){ // Täglich um 18h ! Warnung(); }); ! // Bei Start ! Warnung();</br></br\s></style.></script.*></l){> erhälst du eine Telegram Nachricht mit allen Terminen (sei es Müll, Omas Geburtstag..), die morgen anstehen. Voraussetzung ist, dass dein Kalender "ersetze Datum mit Worten" aktiviert hat. Wenn du überall wo "Morgen" steht es auf "Heute" abwandelst, bekommst du alle Termine von heute ` Bei mir läuft das Script nicht. Ersetze Datum mit Worten ist aktiviert. Hab zum testen schedule('0 18 * * *', function(){ // Täglich um 18h auf aktuelle Zeit plus 2 Minuten gestell, aber da tut sich nichts. EDIT!!! Funktioniert jetzt.
  • Gelöst - Erstelltes Script via Shell löschen?

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    P
    @AlCalzone: Hmmmm… dachte das geht. Das iobroker stop javascript.0 sollte aber tun. ` Top. Das geht. Ich habe den Adapter gestoppt, Script gelöscht, Adapter wieder gestartet. Vielen Dank
  • Erkennen von manuellen Änderungen am HMIP WTH

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    212 Aufrufe
    Niemand hat geantwortet
  • Gelöst - Blockly - "kleiner als letztes" Problem bzw. selbst Vergleichen :)

    Verschoben
    6
    1
    0 Stimmen
    6 Beiträge
    4k Aufrufe
    W
    Super Danke, jetzt habe ich es auch verstanden :) Top Support!!! Schönes Wochenende noch!

396

Online

33.0k

Benutzer

83.5k

Themen

1.3m

Beiträge