Skip to content

Skripten / Logik

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

16.6k Themen 213.6k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Themen
    49k Beiträge
    D
    Danke habe ich gemacht. ( 1punkt) Die Objekt-ID "aktuell erzeugte Energie" wäre bei mir: Objekt-ID: 0_userdata.0.Charge_Control.Allgemein.IstPvErtragLM0_kWh plus Objekt-ID: 0_userdata.0.Charge_Control.Allgemein.IstPvErtragLM1_kWh (zusatz WR) wie kann ich das bewerkstelligen?
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Themen
    79k Beiträge
    HomoranH
    @Takahara sagte in Objekt ID auf Textinhalt prüfen // Current Radio Station: Wie kann ich den Textinhalt des Objektes "Current Radio Station" was immer "Textinhalt" sein soll, wäre vermutlich "Wert von"
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Themen
    13k Beiträge
    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 Stimmen
    2 Beiträge
    84 Aufrufe
    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 Stimmen
    6 Beiträge
    711 Aufrufe
    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 Stimmen
    8 Beiträge
    236 Aufrufe
    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 Stimmen
    10 Beiträge
    269 Aufrufe
    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.
  • URL Request: CA signature digest algorithm too weak

    javascript security multimedia
    6
    0 Stimmen
    6 Beiträge
    913 Aufrufe
    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 Stimmen
    7 Beiträge
    560 Aufrufe
    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 Stimmen
    2 Beiträge
    154 Aufrufe
    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 Stimmen
    2 Beiträge
    250 Aufrufe
    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

    Verschoben
    24
    0 Stimmen
    24 Beiträge
    2k Aufrufe
    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 Stimmen
    2 Beiträge
    211 Aufrufe
    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 Stimmen
    4 Beiträge
    453 Aufrufe
    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 Stimmen
    9 Beiträge
    735 Aufrufe
    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 Stimmen
    10 Beiträge
    777 Aufrufe
    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 Stimmen
    22 Beiträge
    2k Aufrufe
    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 Stimmen
    3 Beiträge
    244 Aufrufe
    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

    Ungelöst blockly communication javascript monitoring
    50
    0 Stimmen
    50 Beiträge
    10k Aufrufe
    caravandriverC
    @paul53 [image: 1640858388399-screenshot-2021-12-30-105916.jpg] Bei mir klappt das nicht. Warum?
  • Brother MFC-7440N - Druckerinformationen auslesen

    13
    3
    0 Stimmen
    13 Beiträge
    1k Aufrufe
    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 Stimmen
    4 Beiträge
    7k Aufrufe
    haselchenH
    @invidianer Soooo ist es :)
  • Alle States des HM 6-fach Tasters subscriben

    javascript
    5
    0 Stimmen
    5 Beiträge
    152 Aufrufe
    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 Stimmen
    4 Beiträge
    292 Aufrufe
    paul53P
    @fred-freund sagte: kann mich nicht Erinnern das eingetragen zu haben Das ist die Voreinstellung.

829

Online

32.7k

Benutzer

82.4k

Themen

1.3m

Beiträge