Skip to content

Skripten / Logik

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

16.6k Topics 213.6k Posts

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Topics
    49k Posts
    D
    @arnod Schon wieder ich. Diesen Datenpunkt habe ich nicht, wurde der ersetzt? 0_userdata.0.Charge_Control.Allgemein.EigenverbrauchDurchschnitt_kWh Siehe Bild [image: 1771685220871-charge-kontrol-fehlt.png] Oder was hast Du da reingemacht? Vieeeelen DANK.
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Topics
    79k Posts
    paul53P
    @13patrick37 sagte: Szenen nur Buttons sind Deshalb wird auf "ist wahr" getriggert. Hat die "Scene Abschalten" eine besondere Bedeutung (Licht aus)? Falls nicht, kann man auch einen Selektor für den Trigger verwenden.
  • 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
  • Ordner im Skript Verzeichnis werden nicht angezeigt

    3
    2
    0 Votes
    3 Posts
    265 Views
    J
    @djmarc75 Danke Manchmal ist es einfacher als man denkt.
  • 0 Votes
    2 Posts
    2k Views
    R
    @ostpower Ich habe auch einen Kostal WR, an dem allerdings ein BYD Speicher hängt und deshalb direkt eine Frage. Was versteht du/Kostal unter "intelligent laden" beim Kostal und dem schonenden laden? Es ist doch so, dass der WR den PV-Ertrag wie folgt verteilt: Erst den aktuellen Eigendarf decken, mit dem Überschuss den Akku laden und wenn der Akku voll ist wird der Überschuss eingespeist. Dabei kann mein Kostal (gem. Datenblatt) max.13A zur Ladung/Entladung nutzen. Daraus folgert bei den BYD-Akkus eine minimale Zeit von 2 Stunden zur vollständigen Ladung. Vorausgesetzt, es steht genügend Überschuss parat. Also 1/2 C, wie man es im Modellbau bezeichnen würde. Meine LiPos für das Modellauto lade ich sehr schonend mit 1C und sie können mit max. 80C entladen werden. Von daher ist 1/2C schon ein sehr schonender Wert. Bei mir ist der Speicher oft schon am Vormittag voll, sodass der max. Ladestrom selten ausgenutzt wird. Was würde es bringen, die Ladeleistung weiter zu drosseln und gleichzeitig einzuspeisen oder erst einspeisen und später am Tag den eigenen Akku laden? Wenn die PV-Anlage so groß dimensioniert wurde, dass ein Teil des Überschusses nicht eingespeist werden darf (70%-Regelung), würde ich lieber den Speicher vergrößern und mehr/länger einspeichern oder den WR vergrößern (damit dann die 70% kleiner sind als die installierten KWPeak). Was anderes wäre es in Verbindung mit Tibber, wenn du gerne deinen Speicher zu Zeiten von günstigen Tarifen laden möchtest um dann den gespeicherten Strom zu teureren Zeiten zu verbrauchen. Dazu müsstest du die Batteriesteuerung von intern auf extern umstellen. Das kann man nur über den Installateurzugang. Leider habe ich keinen, sonst hätte ich dies längst mal getestet. Wenn du mir an dieser Stelle unter die Arme greifen kannst, würde ich mich über eine private Nachricht freuen :) Ein sehr grober Versuch wäre noch, die Batterieladung/ -entladung über die WR "Zeitgesteuerte Batterienutzung" zu beeinflussen. Dann könnte man zu günstigen Strom-Tageszeiten oder hohen PV-Leistungen die Batterieentladung sperren und zu teurer Zeiten oder geringeren PV-Leistungen freigeben. Jedoch kann der WR die Batterie nicht aus dem Netz aufladen. Evtl. wird also der Speicher nicht voll. Hier würde mir nur einfallen, die min SoC zu billigen Stromzeiten auf 100% zu stellen, in der Hoffnung, dass der WR die Batterie dann auflädt und dazu auch aus dem Netz bezieht. Vorgesehen ist es scheinbar nicht, die Batterie aus dem Netz zu laden. LG RGT
  • Problem mit Bewegwungsmelderskript

    27
    1
    0 Votes
    27 Posts
    3k Views
    Karel PuhliK
    @robert_r sagte in Problem mit Bewegwungsmelderskript: Kann ich mittels Schalter einen Dauerbetrieb für Licht aktivieren? Ja. Auch hier der selbe Link. Da hat @paul53 auch eine sehr schöne Lösung für gefunden. Weiter unten folgen dazu Erklärungen... Link Text
  • Gelöst: Auslöser ermitteln

    javascript
    5
    0 Votes
    5 Posts
    231 Views
    M
    @paul53 sagte in Auslöser ermitteln: @michihorn sagte: Ja String, Dann muss mit "true" verglichen und "false" gesetzt werden. Ja das ist der Plan. Das Projekt soll eine Anwesenheitüberwachung für meine 3 Familienmitglieder im Geo Umkreis von 500 Meter machen, das klappt auch. Ich habe zwei weitere Dienste im IOT hinterlegt "Ankunft" triggert an der Grenze zu Holland und schaltet schon mal den Kühlschrank im Ferienhaus ein, stellt die Heizung/Klima auf 21Grad. 1h 20 min reichen aus. Ein weiter Dienst heisst Heimreise und der löst schon 30 km nach dem Verlassen des FH aus, Kühlschrank aus, Heizung auf 10 Grad. Der Hintergrund meiner Anfrage ist das Gegeseitige verriegeln von Anreise und Heimreise. Wenn ich z.B Heimreise soll falls meine Frau oder der Sohn noch vor Ort bleiben, nur mein Dienst "Anreise" auf false gesetzt werden. Das Script für Anreise sieht so aus: /*****GEOfancy ANREISE ***************************************** ** Januar 2022 ** IOT, EgiGeo ** (true), (false) ** erstellt: 24.01.22, ** geändert: 14.06.23 ***********************************************************************/ var logging = true; const idFrigo = "tuya.0.bfce754681c6e2c8faowag.2" const idMedia = "tuya.0.bf292a4c8b62843697ntvv.1" const idTempIn = "tuya.0.73103057e868e768284a.3" const idHeizung = "tuya.0.73103057e868e768284a.2" const idAirCo = "daikin.0.control.power" const idAW = "0_userdata.0.Giethoorn.AW.AW" const ids = $('iot.*.services.custom_Anreise'); const idCnt = "0_userdata.0.Giethoorn.AW.Anreise" var text function cntAnreise() { let cnt = 0; ids.each(function (id, i) { if (getState(id).val == 'true') cnt++; }); setState(idCnt, cnt, true); if (getState(idCnt).val >= 1) { log("Anreise erkannt") setState(idFrigo, true) setState(idMedia, true) setState(idHeizung, 22) text = '\ud83d\ude98 Anreise von 🇩🇪 nach 🇳🇱 erkannt ' createEventlog("GTHRN", text) if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+491xxxxx' }); if ((getState(idTempIn).val >= 30)) { setState(idAirCo, true) } } }; cntAnreise(); // Skriptstart ids.on(cntAnreise); EDIT: Anbei der Objektbaum vom IOT [image: 1697463057268-screenshot-2023-10-16-152935.png] Als Lösung funktioniert nun folgendes Script: /*****GEOfancy ANREISE ***************************************** ** Januar 2022 ** IOT, EgiGeo ** (true), (false) ** erstellt: 24.01.22, ** geändert: 14.06.23 ***********************************************************************/ var logging = true; const idFrigo = "tuya.0.bfce754681c6e2c8faowag.2" const idMedia = "tuya.0.bf292a4c8b62843697ntvv.1" const idTempIn = "tuya.0.73103057e868e768284a.3" const idHeizung = "tuya.0.73103057e868e768284a.2" const idAirCo = "daikin.0.control.power" const ids = $('iot.*.services.custom_Anreise'); const idCnt = "0_userdata.0.Giethoorn.AW.Anreise" var text function cntAnreise() { let cnt = 0; ids.each(function (id, i) { if (getState(id).val == 'true') cnt++; }); setState(idCnt, cnt, true); if (getState(idCnt).val >= 1) { log("Anreise erkannt") setState(idFrigo, true) setState(idMedia, true) setState(idHeizung, 22) text = '\ud83d\ude98 Anreise von 🇩🇪 nach 🇳🇱 erkannt ' createEventlog("GTHRN", text) if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+491xxxx149' }); if ((getState(idTempIn).val >= 30)) { setState(idAirCo, true) } } }; cntAnreise(); // Skriptstart ids.on(cntAnreise); var newstring ids.each(function (id) { // Skriptstart if (getState(id).val) setState(id, true); }); ids.on(function (dp) { if (dp.state.val) { log("INFO: " + dp.id); var string = dp.id newstring = string.replace("custom_Anreise", "custom_Heimreise"); log("Ergebnis: " + newstring) setState(newstring, "false") } }); Und für die Heimreise sieht das Script dann so aus. /*****GEOfancy HEIMREISE ***************************************** ** Januar 2022 ** IOT, EgiGeo ** (true), (false) ** erstellt: 24.01.22, ** geändert: 14.6.23 ***********************************************************************/ var logging = true; const idFrigo = "tuya.0.bfce754681c6e2c8faowag.2" const idMedia = "tuya.0.bf292a4c8b62843697ntvv.1" const idTempIn = "tuya.0.73103057e868e768284a.3" const idHeizung = "tuya.0.73103057e868e768284a.2" const idAirCo = "daikin.0.control.power" const idAW = "0_userdata.0.Giethoorn.AW.AW" const ids = $("iot.*.services.custom_Heimreise"); const idCnt = "0_userdata.0.Giethoorn.AW.Heimreise" var text function cntHeimreise() { let cnt = 0; ids.each(function (id, i) { if (getState(id).val == 'true') cnt++; }); setState(idCnt, cnt, true); if (getState(idCnt).val >= 1) { log("Heimreise erkannt") setState(idFrigo, false) setState(idMedia, false) setState(idHeizung, 10) setState(idAirCo, false) text = '\ud83d\ude98 Heimreise von 🇳🇱 nach 🇩🇪 erkannt ' createEventlog("GTHRN", text) if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+49xxxxx149' }); } }; cntHeimreise(); // Skriptstart ids.on(cntHeimreise); var newstring ids.each(function (id) { // Skriptstart if (getState(id).val) setState(id, true); }); ids.on(function (dp) { if (dp.state.val) { log("INFO: " + dp.id); var string = dp.id newstring = string.replace("custom_Heimreise", "custom_Anreise"); log("Ergebnis: " + newstring) setState(newstring, "false") } });
  • Gesamtlaufzeit ermitteln

    monitoring javascript
    6
    0 Votes
    6 Posts
    296 Views
    amg_666A
    @paul53 @ticaki: Erstmal danke für die Rückmeldung, ich werde das Skript und den Adapter mal anschaun.
  • IR-Codes für Telekom Media Receiver gesucht

    1
    0 Votes
    1 Posts
    287 Views
    No one has replied
  • Blockly - Alle Skripte exportieren geht nicht.

    10
    1
    0 Votes
    10 Posts
    385 Views
    GlasfaserG
    @stenmic sagte in Blockly - Alle Skripte exportieren geht nicht.: es funktioniert jetzt, kannst du uns mal bitte deine Daten zeigen!! Zeige die Full Ausgabe von iob diag
  • Array befüllen, Abfragen und löschen

    10
    0 Votes
    10 Posts
    703 Views
    T
    @great-sun Manchmal sieht man den Wald vor Bäumen nicht. Wie kann ich den Thread schließen?
  • InfluxDB V2 - Daten löschen im Adapter funktioniert nicht

    3
    0 Votes
    3 Posts
    311 Views
    Marc BergM
    @tp1de sagte in InfluxDB V2 - Daten löschen im Adapter funktioniert nicht: (InfluxDB Adapter Version 3.2.0) Das Löschen von InfluxDb 2.x Daten wird erst ab der Adapter Version 4.0.0 unterstützt (noch nicht released). Punktlich nach dem Erscheinen von InfluxDB 3 :-)
  • Binding mehrere Werte vergleichen

    19
    0 Votes
    19 Posts
    1k Views
    S
    @OliverIO Naja, Sonderzeichen waren ja in der VIN nicht dabei und es funktioniert ja jetzt auch. Aber egal - Hauptsache es tut wie es soll :-) Vielen Dank!
  • Authentication (redirect uri) ??

    9
    0 Votes
    9 Posts
    689 Views
    NewpicselN
    @oliverio Doch doch, theoretisch kann der Adapter das schon. Mein Blockly hatte ich erstellt bevor es einen Adapter gab 😅 Ich und ein paar weitere Nutzer, nutzen diesen jedoch weiterhin, weil er etwas mehr Funktionen bietet als der Adapter und ich müsste so ohnehin noch ein zusätzliches Blockly erstellen. Das spare ich mir damit und es läuft einfach sehr gut. Einziges Problem ist halt nun die Token Anfrage für neue Nutzer, bei denjenigen, die das Blockly schon vorher genutzt haben (vor der Umstellung) läuft es weiterhin. Außerdem und wohl das wichtigste, es macht mir Spaß daran zu arbeiten und ich lerne sehr viel 😊👍
  • Problem mit roon-api und iobroker

    1
    0 Votes
    1 Posts
    225 Views
    No one has replied
  • Hargassner Heizung Adapter für IOBroker

    3
    0 Votes
    3 Posts
    418 Views
    C
    @sborg ok, trotzdem danke.
  • Zweite Leuchte zufällig nach der ersten einschalten

    blockly javascript
    4
    0 Votes
    4 Posts
    355 Views
    CluniC
    @feinfinger So könnte es aussehen: [image: 1696401865730-dfb97ad8-451b-4c61-8bba-312e263ae138-image.png] Statt auf den Schalter zu reagieren, kannst du das natürlich auch direkt in das Blockly setzen, wo die andere Lampe eingeschaltet wird. Aber so hättest du das gleiche Verhalten, wenn die Lampe per Hand eingeschaltet wird. <xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="OrYsD!vXmG*)iCRkRbvr">max_ms</variable> <variable type="timeout" id="timeout">timeout</variable> </variables> <block type="on" id="XpbZ[Tmj7D8@KRhOiT=B" x="213" y="88"> <field name="OID">shelly.0.SHSW-1#55E26A#1.Relay0.Switch</field> <field name="CONDITION">true</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="variables_set" id="f#3wpm3R7{E{@]y%/D(m"> <field name="VAR" id="OrYsD!vXmG*)iCRkRbvr">max_ms</field> <value name="VALUE"> <block type="math_number" id="N(,RpK8o[n+$@mcQp~ij"> <field name="NUM">10000</field> </block> </value> <next> <block type="timeouts_settimeout_variable" id="Q9^8eV3{DtixTk.NA!f:"> <field name="NAME">timeout</field> <value name="DELAY_MS"> <block type="math_arithmetic" id="Aj7QYN~GSI|68maE.LVU"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="5A=2M5})|F$TAz@w5dv_"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="rJW$P1w*YV}vv;}P21UR"> <field name="VAR" id="OrYsD!vXmG*)iCRkRbvr">max_ms</field> </block> </value> <value name="B"> <shadow type="math_number" id="m`;3qY)ZQ6xY|e_;Lo)J"> <field name="NUM">1</field> </shadow> <block type="math_random_float" id="@]{0d^;[tiL@F9JmUff4"></block> </value> </block> </value> <statement name="STATEMENT"> <block type="control" id="Lb=G?yzLpZgJ0XG7%#Rx"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">hm-rpc.0.OEQ0360604.1.STATE</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="O=oblat=~*zl$x!_%c,g"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> </block> </next> </block> </statement> </block> </xml>```
  • HyperHDR steuern per ioBroker und JSON

    1
    0 Votes
    1 Posts
    273 Views
    No one has replied
  • Probleme mit Shelly 2PM Plus im Cover Mode

    2
    1
    0 Votes
    2 Posts
    604 Views
    paul53P
    @grisu73 Log-Ausgaben bitte in Code tags posten. Current position unknown! Offenbar hat die Kalibrierung nicht geklappt. Die Endlagenschalter sind mit eingebunden? Siehe hier. Welche Laufzeit hat der Stellantrieb? @grisu73 sagte in Probleme mit Shelly 2PM Plus im Cover Mode: PI-Regler (3-Punkt Regler) Der programmierte PI-Regler ist ein analoger Regler (Ausgang 0 - 100%). Der Shelly macht aus dem Analogsignal eine 3-Punkt-Ansteuerung des Stellantriebs. EDIT: Lässt sich der Antrieb über "Open", "Close" und "Stop" steuern?
  • blockly Skript Müllkalender telegram

    6
    0 Votes
    6 Posts
    336 Views
    CluniC
    @haus-automatisierung Hmmmm - ok. Konnte daraus nicht schlau werden.
  • 0 Votes
    3 Posts
    322 Views
    L
    @paul53 sagte in einfache ein/aus schaltung eines shelly objekts über blockly: @ltsalvatore Wechselt der Datenpunkt "pressed double" zwischen false und true? Dann ändere den Trigger auf "ist wahr". [image: 1696107369070-blockly_temp.jpg] danke paul53. genau da war der denkfehler bzw. habe ich nun verstanden, dass der wert auf wahr gesetzt werden muss, wen ein objekt automatisch den zustand von true wieder auf false setzt, da sonst der trigger für beide zustände ausgelöst wird. :-) und danke auch für den tipp mit dem "umschalten" anstelle der if abfrage. 👍👍😊
  • Modbus Adapter Formeln

    6
    0 Votes
    6 Posts
    511 Views
    Maik KrauseM
    Vielen Dank! Habe es nun so gelöst das im Modbus Adapter der Faktor steht und über Alias die negativen Werte ignoriert werden!
  • Wärmemenge berechnen

    Moved
    12
    0 Votes
    12 Posts
    1k Views
    HomoranH
    @merbes klingt fast so, wie in den letzten Jahren bei mir. Ich denke die Art Wärmemengenbereechnung hat deutlich mehr Unwägbarkeiten, als wenn du tatsächlich nur mit dem Gasverbrauch die verbrauchte Energie berechnest. Hab ich mit der esp32cam gemacht und alke 3 Minuten den Zählerstand ausgelesen und über Brennwert die verbrauchte Energie errechnet. Den Abgasverlust habe ich ignoriert, um noch ein wenig Spielraum für die WP zu haben.

693

Online

32.7k

Users

82.4k

Topics

1.3m

Posts