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
    Gibt es Erfahrungen, ob der Solarstream 800 Plus überhaupt per MQTT steuerbar ist?
  • 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
  • Taskmanager(win)/top(unix) aber für Scripte im iobroker?

    2
    0 Votes
    2 Posts
    84 Views
    Thomas BraunT
    @mrpit Per skript? Nein, geht nicht, das läuft alles in einem gemeinsamen Prozess ab.
  • Zahl in Datenpunkt springt zwischen + und -

    6
    3
    0 Votes
    6 Posts
    711 Views
    AsgothianA
    @bostil sagte in Zahl in Datenpunkt springt zwischen + und -: Weitere Pausen einarbeiten bewirkt auch nichts, oder? Weitere Pausen machen das Skript langsamer lassen zu das du um die Problematik herum unsauber arbeitest anstatt gleich sauber zu arbeiten sorgen dafür das das Problem "nur manchmal" auftritt machen das Skript schwer zu debuggen. Neben dem normalen "Async" Problem hast du: die Berechnung von Nebenkosten_Gesamtsumme_FC und Nebenkosten_Gesamtsumme_YTD jeweils um 1 Sekunde verzögert die Berechnung von Nebenkosten_Gesamtsumme_YTD_proMonat, welche auf die oben berechnete Nebenkosten YTD zugreift nicht verzögert die Berechnung von Nebenkosten_Gesamtsumme_FC_proMonat nach dem gleichen Muster nicht verzögert. Dadurch finden die Berechnungen der Summen pro Monat statt bevor die Aufsummierung der Kosten stattfindet. Aber das ist nur die Spitze des Eisberges: Du definierst Konstanten im Skript (echte konstanten) und aktualisierst diese jede Minute, obwohl diese sich nicht ändern können Du berechnest aus diesen Konstanten weitere Konstanten (fix) und speicherst diese auch jede Minute in weiteren Datenpunkten Du führst Berechnungen durch die sich nur monatlich bzw. täglich ändern, und das jede Minute. Letztendlich solltest du das Skript in 3 Teile teilen. Einmal den der nur bei Start ausgeführt wird. Darin sind alle Konstanten abgelegt. Du kannst sie dann im Skript anpassen, und wenn du das Skript neu startest wird ab dann mit den neuen Konstanten gerechnet. Dabei sollten die Werte zunächst in Variablen gespeichert und dann in die Datenpunkte geschrieben werden. Im Skript selber rechnest Du dann weiter mit den Variablen. Einmal den der nur einmal pro Tag laufen muss, in dem du deine Monatlichen und Täglichen Werte berechnest. Auch hier gilt: Berechnung von Zwischenwerten in Variablen machen so das du nie auf Datenpunkte zugreifen musst die du vorher aktualisiert hast. Als letztes den Teil der schneller läuft. Da reicht es die Werte zu berechnen die sich auf die States beziehen die den Stromverbrauch bzw. die Stromlieferung dieses Jahr und/oder diesen Monat referenzierten. Ob dieser wirklich einmal pro Minute laufen soll musst Du dann bewerten. @bostil sagte in Zahl in Datenpunkt springt zwischen + und -: Nun muss ich mich nur noch mit Variablen befassen. Mit variablen solltest Du dich sowieso befassen. Betrachte sie einfach als 'Datenpunkte die nur einen Wert behalten wenn das Skript läuft' A.
  • zeitliche Ausnahme bei Steckdosenschaltung

    8
    1
    0 Votes
    8 Posts
    238 Views
    AsgothianA
    @mading Was machst Du falsch: Die Zeitbedingung passt nicht. Der Baustein Zeit zwischen A und B erwartet das A < B. Diese Regel verletzt du in deinem Falls. Besser wäre hier gewesen: nicht Zeit zwischen 0:00 und 3:00 Uhr die zusätzliche Abfrage im Sonst-Falls ist unnötig, ein "Sonst" hätte gereicht (wenn das Falls denn ok gewesen wäre. Die Falls Bedingung wird nur beim Start des Skriptes überprüft, sprich welchen Zweig der Bedingung du ausführst hängt nur davon ab wann das Skript gestartet wird. Die Variable BatterieLevel ist unnötig. Du kannst an Stelle dieser Variablen den Baustein aus dem Trigger-Bereich nutzen, der mit "Object ID" vorbelegt ist, sofern du diesen auf "Wert" umstellst. Die Sondermeldung bei Batterie < 5 % ist ungünstig in einem sonst Falls verbaut. Das führt dazu das wenn die Batterie unter 5% und die Ladesteckdose noch aus ist keine Warnmeldung das die Batterie so niedrig ist ausgegeben wird Ich würde auf eine gesonderte Meldung verzichten und statt dessen den Text in der Meldung über Bausteine aus dem Textbereich so zusammen setzen: erstelle Text aus Vis Tablett Batterie auf BatterieLevel %. Schalte Strom ein. Dabei hat der Erstelle Text aus Baustein 3 Knoten an denen die 3 folgenden Bausteine angedockt sind. Generell gilt: Trigger (auch Cron Trigger) machen hinter Falls Abfragen nur in Sonderfällen Sinn. Meistens ist es besser, den Trigger allgemein zu definieren und mit einer Falls Abfrage innerhalb des Triggers Zusatzbedingungen (wie die Uhrzeit) abzuprüfen. Was du brauchst: Im Trigger eine Abfrage auf die Uhrzeit, die verhindert das die Steckdose zwischen 0 und 3 Uhr abgeschaltet wird. Einen cron Trigger, der die Steckdose um 0:00 Uhr auf jeden Fall einschaltet. A. p.s. Ich hasse Autokorrektur, insbesondere wenn sie verschlimmbessert.
  • Einige Fragen zu Blockly

    10
    1
    0 Votes
    10 Posts
    269 Views
    AsgothianA
    @gluecksmann Anbei mal ein Vorschlag als Pseudocode. Damit solltest Du Dir das ganze zusammen bauen können. Kern ist die Kombination von "Timeout" zum abschalten nach 3 Minuten und "Intervall" um die Lampen jede Sekunde umzuschalten zum Blinken. Trigger auf "IsOpen", Wert ist kleiner als vorher stopTimeout ausführen Timeout in 3 Minuten Szene Blau ausschalten, alle Lampen ausschalten stopIntervall Lampen Einschalten Lampen auf Blau schalten Warnmeldung per Speak ausgeben ausführen Intervall alle 1 sek Lampen mit "Umschalten" Baustein von an auf aus oder umgekehrt schalten Wenn Du das so aufbaust sollte es nur aktiv werden wenn das "is Open" Objekt von wahr auf falsch wechselt. A.
  • 0 Votes
    6 Posts
    914 Views
    patrickbs96P
    Hallo @ichbinsmart, ich bin gerade zufällig über den Beitrag gestolpert. Hast du mittlerweile eine Lösung gefunden? Ich selbst nutze das Skript hier und damit klappt es ohne Probleme. Ich habe es zwar etwas an meine Bedürfnisse angepasst aber mit der Version sollte es trotzdem funktionieren :-)
  • Uhrzeit: Eingabe in VIS und Skriptbearbeitung

    7
    0 Votes
    7 Posts
    561 Views
    M
    @paul53 ah ja, der Befehl zum stoppen hat mir gefehlt. Sonst hatte ich es ähnlich aufgebaut. Super, vielen Dank.
  • Cron Monthly Rain Counter zurücksetzen

    2
    3
    0 Votes
    2 Posts
    154 Views
    CinimodC
    @drake Mit dem Wizard Zeitplan gibt es so einige Probleme. Nimm besser Cron. Ggf. solltest du auch den Zahlenblock "0" nehmen, wenn dein Datenpunkt numerisch ist.
  • Scriptumstellung CCU ==> iobroker

    2
    0 Votes
    2 Posts
    250 Views
    T
    @tcfigge Selbst herausgefunden: im Bockly unter exec: /usr/bin/curl -s -k --data value=1803 'http://192.168.178.44:8080//user/var/40/10021/0/0/12080' Vielleicht hilft es jemandem...
  • 'request' läuft aus - Umstellen auf `axios` - ein Beispiel

    Moved
    24
    0 Votes
    24 Posts
    2k Views
    SBorgS
    @homoran Noch mal bisserl gepimpt: https://forum.iobroker.net/post/730745 Auswahl des Bundeslandes (hab aktuell nur zwei eingepflegt ^^ ) initial nach Start einmalig Daten holen (unabhängig vom schedule) Anlegen der Datenpunkte Wenn schon, dann auch richtig... :spock-hand:
  • Szenenadapter / Script bzw. Blockly starten

    2
    0 Votes
    2 Posts
    211 Views
    CinimodC
    @fuxxz2 Am besten erstellst du dir einen eigenen Datenpunkt, den du mittels Szene ansteuerst, und den ebenfalls als Trigger für Blockly nutzt. (optional kannst du ja auch einen anderen Datenpunkt benutzen den du mit der Szene sowieso ansteuerst) Wenn du aber sowieso mit Blockly hantieren willst, kannst dir auch die gewünschten SzenenBefehle direkt mit Blockly machen.
  • VIS Datenpunkt mit Javascript

    4
    2
    0 Votes
    4 Posts
    454 Views
    K
    @jamesb du kannst im Javascript den Trigger (ObjectID) nennen, auf welches das Script reagieren soll. Sprich wenn du z.B. auf der VIS einen Schalter hast, musst du diesem eine ObjectID zuordnen. Im Script sagst du dann, dass auf diese ObjectID getriggert werden soll. Bin Javascript-Neuling, konnte dir aber anhand eines bestehenden Scripts dies anpassen und bei mir funktioniert es so: on('0_userdata.0.Nachtmodus.Nachtmodus_ein/aus', function(obj) { if (obj.state.val) { log('eingeschaltet'); } else { log('ausgeschaltet'); } });
  • Einen Sensor überwachen, ob dieser noch Erreichbar ist

    9
    0 Votes
    9 Posts
    735 Views
    Andre 0A
    @bigchris Ich mach das so in Blockly. [image: 1640902455268-30-12-_2021_23-13-51.jpg] Spoiler <xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="vK5H@#I*^M/lcgeE@PRB">gartentor_kontakt</variable> </variables> <block type="controls_if" id="t3;@zJrP8;CshBO=leo" x="84" y="719"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="rU:Gudg8L?)6YAOZY5,i"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="2oCy$Pv4O}CUtN}3R^g"> <field name="VAR" id="vK5H@#I*^M/lcgeE@PRB">gartentor_kontakt</field> </block> </value> <value name="B"> <block type="get_value" id="xC=k;KAoSu;JNEteJxEJ"> <field name="ATTR">ts</field> <field name="OID">zigbee.0.00158d0003122049.contact</field> </block> </value> </block> </value> <statement name="DO0"> <block type="controls_if" id="c2pi$JJp5_@[rqX13Er#"> <value name="IF0"> <block type="logic_compare" id="y=E?U!qZvcnTQGsWeCBr"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="!GY;5QaQ6bN$9qd1g0E8"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.alive_check.kontakt.gartentor</field> </block> </value> <value name="B"> <block type="logic_boolean" id="y5wg5=D=d1sAvo)sK2f"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="telegram" id="7CF?dqO4L~;4.:T|c%"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text"> <field name="TEXT">Temperatur</field> </shadow> <block type="text_join" id="6mr=w-tS^/=cKv,E]?i1"> <mutation items="5"></mutation> <value name="ADD0"> <block type="text" id="Nqcwf:lWk1e{z;!XDsW"> <field name="TEXT">Der Kontaktsensor</field> </block> </value> <value name="ADD1"> <block type="text_newline" id="TYmsFcSPv9its@eR9XfP"> <field name="Type">\n</field> </block> </value> <value name="ADD2"> <block type="text" id="*Lka:pXH$5R{x%RHGer"> <field name="TEXT">Gartentor</field> </block> </value> <value name="ADD3"> <block type="text_newline" id="b]@FQC)^446MEN2L~wd"> <field name="Type">\n</field> </block> </value> <value name="ADD4"> <block type="text" id="F1.mII:L*|_lnF+CTbRD"> <field name="TEXT">hat keine Verbindung!</field> </block> </value> </block> </value> <next> <block type="control" id="s{s7$)2lE}HTx~R8T$KE"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.alive_check.kontakt.gartentor</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id=":jrO(.y4q?mh)a)Cn(U"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </statement> </block> </statement> <statement name="ELSE"> <block type="variables_set" id="$1A3@m9)fZo-+8Y8Ss.8"> <field name="VAR" id="vK5H@#I^M/lcgeE@PRB">gartentor_kontakt</field> <value name="VALUE"> <block type="get_value" id="EI{?gF/btN4y{T^H7-+x"> <field name="ATTR">ts</field> <field name="OID">zigbee.0.00158d0003122049.contact</field> </block> </value> <next> <block type="control" id="wJhCK|P.!}Gt|m6Xv^^@"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.alive_check.kontakt.gartentor</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="yRm2P{,~`kuT|D:ngP=0"> <field name="BOOL">TRUE</field> </block> </value> </block> </next> </block> </statement> </block> </xml>
  • Dyn.Auswahlliste->HTML Widget mit DP Steuerung

    javascript
    10
    0 Votes
    10 Posts
    782 Views
    XantroxX
    @bananajoe Hintergrund für diese Variante war Hauptsächlich das ich aus einer beliebigen API-JSON den "Index" ziehen möchte um sie danach bei Übereinstimmung eines Datenpunktes mit Zusatzdaten anzureichern. Beispiel: API -> weather.api [{"data": {"wind_cdir":"SW", "rh":90, "pod":"n", "timestamp_utc":"2021-12-30T21:00:00", "pres":982.9, "solar_rad":0, "ozone":270.5, "weather":{ usw..... jetzt könnte ich mir rein theoretisch für "Index" Windrichtung zusätzlich Datenpunkte ablegen wie z.B. HTML mit bebilderten Kompass etc. Wenn man das Script einmal hat, ist es easy sich das entsprechend der Anwendung anzupassen
  • Das smarte Bad

    22
    0 Votes
    22 Posts
    2k Views
    F
    @mickym mit diesem gedanken hatte ich auch schon gespielt. Da Problem ist das die Dauer bis die Luftfeuchtigkeit oder der Anstieg davon am BWM ankommt länger ist als die dauer bis das Licht ausgeschaltet wird. Deshalb würde das auch nicht Zuverlässig funktionieren... aber wie gesagt... an dem Gedanken bin ich auch dran. Quasi das Licht icht zu Schalten wenn die Luftfeuchtigkeit gleich einem bestimmten Wert ist... und dann aber auch irgendwie sobald der BWM zum ersten mal danach wieder bewegung erkennt... das wäre ja dann nach dem Duschen das ganz normale skript wieder zu aktiveiren... sonst würde das Licht ja zu lange nicht ausgehen...
  • NMAP liefert im ioBroker falsches Ergebnis

    3
    0 Votes
    3 Posts
    246 Views
    E
    @thomas-braun Danke für Deinen Hinweis: Wie kann man die Rechte prüfen bzw. passend einstellen. Als Hinweis: Auf dem Echo-Dot mit der IP-Adresse 192.168.8.230 funktioniert es nicht; auf einem Echo-Show5 mit der IP-Adresse 192.168.8.225 im gleichen Netz geht es
  • Daten aus Url abfragen und in Datenpunkt schreiben

    Unsolved blockly communication javascript monitoring
    50
    0 Votes
    50 Posts
    10k Views
    caravandriverC
    @paul53 [image: 1640858388399-screenshot-2021-12-30-105916.jpg] Bei mir klappt das nicht. Warum?
  • Brother MFC-7440N - Druckerinformationen auslesen

    13
    3
    0 Votes
    13 Posts
    1k Views
    SBorgS
    @helfi9999 Hi, wie @Latzi schon schrieb, dass ist eine SNMP-Abfrage. Obiges JS ist/war nur nötig, da die gewünschten Werte eben nicht per SNMP übertragen werden, der Rest schon :)
  • Telegram Chat-ID auslesen

    4
    0 Votes
    4 Posts
    7k Views
    haselchenH
    @invidianer Soooo ist es :)
  • Alle States des HM 6-fach Tasters subscriben

    javascript
    5
    0 Votes
    5 Posts
    152 Views
    PeoplesP
    @paul53 Hab's mir am Handy angesehen und das glatt übersehen Sorry
  • isdaytime erst um 18:00 auf false nicht bei Dunkelheit

    4
    0 Votes
    4 Posts
    292 Views
    paul53P
    @fred-freund sagte: kann mich nicht Erinnern das eingetragen zu haben Das ist die Voreinstellung.

330

Online

32.7k

Users

82.4k

Topics

1.3m

Posts