Skip to content

Skripten / Logik

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

16.5k Topics 213.3k Posts

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Topics
    49k Posts
    A
    Neue Version Charge-Control auf GitHub hochgeladen. Version: 1.6.8 Änderungen: Fehler in der Funktion Prognosen_Berechnen() behoben. Hysteresewert für Batterie SOC Schwankungen auf 4% angepasst und neue, frei konfigurierbare Variable am Skriptanfang hinzugefügt.
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Topics
    79k Posts
    D
    Oha. Das war einfach. Danke sehr :-)
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Topics
    13k Posts
    S
    welche Palette hast du installiert, damit du den "AND" Baustein hast?
  • 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
    285 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
    699 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
    296 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
    680 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
    413 Views
    C
    @sborg ok, trotzdem danke.
  • Zweite Leuchte zufällig nach der ersten einschalten

    blockly javascript
    4
    0 Votes
    4 Posts
    349 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
    272 Views
    No one has replied
  • Probleme mit Shelly 2PM Plus im Cover Mode

    2
    1
    0 Votes
    2 Posts
    592 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
    321 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
    500 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.
  • Adapter aWATTar mit zwei Zeiträumen

    12
    0 Votes
    12 Posts
    813 Views
    paul53P
    @judisi sagte: hab ich in der Instanz aWATTar1 eingegeben, dass um 19:05 nur die Preise von 22:00 bis 18:00 beachtet werden sollen. [image: 1695816526888-blockly_temp.jpg] Es wird noch kein Gerät geschaltet.
  • Kann man einem Datenpunkt eine flexible Werteliste zuweisen?

    30
    0 Votes
    30 Posts
    2k Views
    T
    @mickym sagte in Kann man einem Datenpunkt eine flexible Werteliste zuweisen?: Ich glaube das wirst Du Pech haben - man kann nicht mal mit Javascript die enums modifizieren. Vielleicht verstehe ich dich falsch jedoch mit dieser Funktion: async function addToEnum(enumName, newStateId) { if (!await existsObjectAsync(newStateId)) { log(newStateId + ' not exist!', 'warn') return false; } let myEnum = await getObjectAsync(enumName); if (myEnum) { let pos = myEnum.common.members.indexOf(newStateId); if (pos === -1) { try { myEnum.common.members.push(newStateId); myEnum.from = "system.adapter." + "0"; myEnum.ts = new Date().getTime(); await setObjectAsync(enumName, myEnum); return true; } catch (e) {log(e + ' add id: ' + newStateId,'error')} } } return false; } kannst du einem enum ein neues Mitglied verpassen.
  • Zeitangabe von h:m in m umrechnen

    13
    1
    0 Votes
    13 Posts
    979 Views
    S
    @homoran sagte in Zeitangabe von h:m in m umrechnen: @stefanrs sagte in Zeitangabe von h:m in m umrechnen: Hat funktioniert du bist noch ein paar Antworten schuldig! Was war los? Es lag am Blockly. Ich habe es so aufgebaut wie dein Blockly und dann ging es.

322

Online

32.6k

Users

82.2k

Topics

1.3m

Posts