Skip to content

Skripten / Logik

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

16.5k Topics 213.2k Posts

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Topics
    49k Posts
    P
    Oben steht, dass der Server öfter mal offline ist. Da ist ping meine erste Idee. Ob der Server auf Pings antwortet, weiß ich nicht. Reagiert der Server nicht auf ping, dann evtl. als Ersatz einen httpcheck nehmen. httpcheck nutze ich auf der Synology, bevor die auf den ioBroker zugreift. # ===== HTTP-Check statt Ping ===== curl -s --connect-timeout 3 "$BASE/system.adapter.admin.0.alive" > /dev/null || exit 1 Ist allerdings ein Bash-Skript. Das muss für die Zwecke angepasst werden.
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Topics
    79k Posts
    S
    @TT-Tom Vielen Dank für den Tip.
  • 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?
  • FritzBox Onlinezeit von Teilnehmern verlängern

    22
    1
    0 Votes
    22 Posts
    2k Views
    S
    @bananajoe Anbei das Script <xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="}/BV?J`ZBj[g9)lo@/Xb">Spielzeit</variable> <variable type="interval" id="Intervall">Intervall</variable> <variable id="ew40Bf2{8Yw8DtK6weyX">Bonuszeit</variable> <variable type="interval" id="Intervall2">Intervall2</variable> </variables> <block type="on_ext" id="5/ZEq7o$e2CNvj5jJlHX" x="-4505" y="-3273"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <comment pinned="true" h="80" w="160">Tägliche Spielzeit</comment> <value name="OID0"> <shadow type="field_oid" id="t4`1=0WacF/7lwKvu(Cg"> <field name="oid">tr-064.1.devices.ps5-61c94dlan.active</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="H4kymGZi,S/A#4@/o{1{"> <value name="IF0"> <block type="logic_compare" id="$$O,t76l+aa8c(]0i43_"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="igDb+CncG)X!rO5Vu%Lc"> <field name="ATTR">val</field> <field name="OID">tr-064.1.devices.ps5-61c94dlan.active</field> </block> </value> <value name="B"> <block type="logic_boolean" id="Ri5vcHZx_XV!-7M:jV@z"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="J*VPf~+lNGw$P];BN]5_"> <field name="VAR" id="}/BV?J`ZBj[g9)lo@/Xb">Spielzeit</field> <value name="VALUE"> <block type="get_value" id="7,TyJg}[afyM3GYn!WBF"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Playstation.Spielzeit</field> </block> </value> <next> <block type="timeouts_clearinterval" id="_i)|aBOk-+gG6k+}~Mxy"> <field name="NAME">Intervall</field> <next> <block type="timeouts_setinterval" id="nh_mg|XZDI2A]T7k24K*"> <field name="NAME">Intervall</field> <field name="INTERVAL">1</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="math_change" id="Vv{m[XOiXR;=x3VpTS6n"> <field name="VAR" id="}/BV?J`ZBj[g9)lo@/Xb">Spielzeit</field> <value name="DELTA"> <shadow type="math_number" id="d+;Dk{:1B#R0y!u80D;,"> <field name="NUM">-1</field> </shadow> </value> <next> <block type="update" id=".~)p{s$FPpIp[`Cg^VcW"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Playstation.Spielzeit</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="cU7rCPb,n.s|5yGD?(|f"> <field name="VAR" id="}/BV?J`ZBj[g9)lo@/Xb">Spielzeit</field> </block> </value> <next> <block type="controls_if" id="d;8#gYb(h@)[|[5=cb67"> <value name="IF0"> <block type="logic_compare" id="V5|yFTv}ud64?E7BWj3k"> <field name="OP">LTE</field> <value name="A"> <block type="variables_get" id="pmH-*R?j_F:.6cxA^T/N"> <field name="VAR" id="}/BV?J`ZBj[g9)lo@/Xb">Spielzeit</field> </block> </value> <value name="B"> <block type="math_number" id="w:w`pMlaG+l@AD,C{i}l"> <field name="NUM">0</field> </block> </value> </block> </value> <statement name="DO0"> <block type="timeouts_clearinterval" id="[C$s~CNZ%``pv`rXQ4bU"> <field name="NAME">Intervall</field> <next> <block type="control" id="u:{aZ$a`y1pEKVwdU0Bh"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">tr-064.1.states.command</field> <field name="WITH_DELAY">FALSE</field> <comment pinned="true" h="80" w="160">Command Befehl vom TR064 Adapter. NewDisallow: 1= Gerät wird gespertt 0= Geräte wieder freigeschaltet </comment> <value name="VALUE"> <block type="text" id="4}qm.Z8#Y[A4Le2O)kkN"> <field name="TEXT">{ "service": "urn:dslforum-org:service:X_AVM-DE_HostFilter:1", "action": "DisallowWANAccessByIP", "params": { "NewIPv4Address": "192.168.178.118", "NewDisallow": 1 } }</field> </block> </value> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </statement> </block> </statement> <next> <block type="on_ext" id="#{+.-:M($}0:gUxj]xk1"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="kI1r9AD7*Tz`}A:uKb2B"> <field name="oid">0_userdata.0.Playstation.Bonuszeit_Aktivator</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="#*2B^/XUIN#JV9E(Yzkd"> <value name="IF0"> <block type="logic_compare" id="_64G!8.HoP7*RGMlu|4o"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="m7ZLAgsEOHtrK=7:fDQ_"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Playstation.Bonuszeit_Aktivator</field> </block> </value> <value name="B"> <block type="logic_boolean" id="H,FV%ShQCi5GT8x#l7$p"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="Oj80pJCR}+*)DlD7$(,)"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">tr-064.1.states.command</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="-:{k+}jPr}rv)p)G(7Zf"> <field name="TEXT">{ "service": "urn:dslforum-org:service:X_AVM-DE_HostFilter:1", "action": "DisallowWANAccessByIP", "params": { "NewIPv4Address": "192.168.178.118", "NewDisallow": 0 } }</field> </block> </value> <next> <block type="update" id="+6$r)*skoKdB%TW37-9n"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Playstation.Extrazeit</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="6+tKP`C3rVwPK,KwJCWO"> <field name="NUM">1800</field> </block> </value> <next> <block type="variables_set" id="bscs6L0+m`?]=6(a,4]p"> <field name="VAR" id="ew40Bf2{8Yw8DtK6weyX">Bonuszeit</field> <value name="VALUE"> <block type="get_value" id="GI?clIE]o%sgbN1+$~uz"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Playstation.Extrazeit</field> </block> </value> <next> <block type="timeouts_clearinterval" id="!{i%+gK)aqs00*9i9hO5"> <field name="NAME">Intervall2</field> <next> <block type="timeouts_setinterval" id="`0`zG3^f1IY1km|y`}Td"> <field name="NAME">Intervall2</field> <field name="INTERVAL">1</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="math_change" id="PKl]c;Q/DDv}NCp|3*cn"> <field name="VAR" id="ew40Bf2{8Yw8DtK6weyX">Bonuszeit</field> <value name="DELTA"> <shadow type="math_number" id=".{vboei$0X.Jy){kSTU2"> <field name="NUM">-1</field> </shadow> </value> <next> <block type="update" id="+M8VoW5o7SVdgMR-7.D+"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Playstation.Extrazeit</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="P3c9U.Xo^vSObZ:V?ejD"> <field name="VAR" id="ew40Bf2{8Yw8DtK6weyX">Bonuszeit</field> </block> </value> <next> <block type="controls_if" id="I~^3=?vpN0,9u(g)QbQ!"> <value name="IF0"> <block type="logic_compare" id="VI,6xaUA1u}sAdum8l~Y"> <field name="OP">LTE</field> <value name="A"> <block type="variables_get" id="]wrti}f7XbqcTmJGZgX~"> <field name="VAR" id="ew40Bf2{8Yw8DtK6weyX">Bonuszeit</field> </block> </value> <value name="B"> <block type="math_number" id="1lKv4F@t-EP2eZ_ww3~q"> <field name="NUM">0</field> </block> </value> </block> </value> <statement name="DO0"> <block type="timeouts_clearinterval" id="JeD[K:Y-KD5-thJyRpK="> <field name="NAME">Intervall2</field> <next> <block type="control" id="o;0vLTy1:G0khe9,Oix?"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">tr-064.1.states.command</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="..tJUyU1=CLa$$Y,EfY;"> <field name="TEXT">{ "service": "urn:dslforum-org:service:X_AVM-DE_HostFilter:1", "action": "DisallowWANAccessByIP", "params": { "NewIPv4Address": "192.168.178.118", "NewDisallow": 1 } }</field> </block> </value> <next> <block type="update" id="NO`p]!;Di0]4`nr}8,4u"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Playstation.Bonuszeit_Aktivator</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="~/awpVORNqBC?RGed9:y"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </next> </block> </xml>
  • Bräuchte untersützung bei python

    2
    0 Votes
    2 Posts
    206 Views
    A
    hat sich erledigt.. habs geschafft.
  • [gelöst] Probleme mit AppleTV steuern über "hass" Adapter

    12
    0 Votes
    12 Posts
    662 Views
    CinimodC
    @ticaki Funktioniert soweit einwandfrei, dank nochmal
  • +/- Watt-Wert (Power) in 2 kWh-Werte (Energy) trennen lassen

    3
    0 Votes
    3 Posts
    305 Views
    M
    Wow, vielen herzlichen Dank!
  • gelöst: Alias, Konvertierungsfunktion, Zeit hh:mm anzeigen

    4
    0 Votes
    4 Posts
    328 Views
    G
    Moin, Moin @paul53 said in Alias, Konvertierungsfunktion, Zeit hh:mm anzeigen lassen: @geophysiker sagte: Ich hätte gerne führende Nullen Vorschlag: Math.floor(val / 3600).toString().padStart(2, '0') + ':' + ((val % 3600) / 60).toFixed().padStart(2, '0') 00:08h :)))) Wie soll ... Ich bin begeistert. Danke!! Tschö, Ralf
  • Scripts für PV Anlage

    13
    0 Votes
    13 Posts
    1k Views
    S
    @gukerl Werde ich mir irgendwann in Ruhe anschauen, derzeit ist zigbee2mqtt wichtiger
  • Gelöst: Tabelle mit dem Zustand der PING Zustände erstellen

    javascript
    19
    1
    0 Votes
    19 Posts
    1k Views
    M
    @paul53 sagte in Gelöst: Tabelle mit dem Zustand der PING Zustände erstellen: Starte mal die Javascript-Instanz neu. Danke jetzt ist alles ohne Leichen
  • Objekte finden in verschiedenen Skripten

    2
    0 Votes
    2 Posts
    189 Views
    T
    @hotspot_2 Die Suchfunktion im Javascript-Adapter schon ausprobiert? Oder überhaupt gesehen das es die gibt? (war bei mir so :D )
  • Sporadische Aussetzer Shelly 1 PM mit Tasmota

    1
    2
    0 Votes
    1 Posts
    169 Views
    No one has replied
  • source does not exist for "read" function

    52
    1
    0 Votes
    52 Posts
    4k Views
    HomoranH
    @thomas-braun sagte in source does not exist for "read" function: Fand es auch immer unübersichtlich mit den ganzen Ansätzen. stimmt! deswegen immer nativ! (die drei aliases die ich bisher hab)
  • IPhone Kurzbefehl "Garage öffnen" via Telegram-Bot

    7
    0 Votes
    7 Posts
    938 Views
    T
    @codierknecht Bedingung wäre, dass da ein HomePod o... Ups, stimmt :)
  • eCharts mit Telegram-Adapter

    6
    0 Votes
    6 Posts
    732 Views
    Q
    @bananajoe Vielen Dank. Ich schaue mir das mal an. iobroker.inst@3.0.0 /opt/iobroker ├─┬ iobroker.echarts@1.9.2 │ ├── canvas@2.11.2 │ └─┬ jsdom@25.0.0 │ └── canvas@2.11.2 deduped └─┬ iobroker.energiefluss@3.6.2 └── canvas@2.11.2 deduped iobroker@raspberrypi:/opt/iobroker/node_modules/canvas $ npm rebuild rebuilt dependencies successfully Telegram-Grafiken werden wieder angezeigt. Ein Rebuild war ausreichend/hilfreich. Merci. Ich nehme "nur" die Versionen, die mir "offiziell" zum Update auch angeboten werden. Danach war der Adapter up-to-date.
  • io.javascript.0 immer bei rund 100%

    15
    0 Votes
    15 Posts
    972 Views
    mcm1957M
    @tasuanetrukiat Eher schon spät aber noch ne Nachfrage: Hast du nach dem Stoppen aller Scripte im Adapter auch mal den ganzen Rechner (nicht nur ioBroker) neu gestartet? Es kann ja auch sein, dass ein Prozess amok gelaufen ist den ioBroker gar nicht mehr als einen eigenen erkannt hat. Und der könnte dann nur z.B. manuell gestoppt werden oder ebern durch einen Reboot des Betriebssystems.
  • HEOS Player Queue als html tabelle?

    2
    0 Votes
    2 Posts
    211 Views
    icebearI
    @icebear Ich antworte mir mal selber. Habs rausgefunden mit jsonata = $.payload.{"Art": image_url, "Artist":artist, "album": album, "Titel": song} Bring als Ergebnis: [ { "Art": "https://m.media-amazon.com/images/I/B1EQ4x6+cPL.jpg", "Artist": "Kx5", "album": "Take Me High", "Titel": "Take Me High" }, { "Art": "https://m.media-amazon.com/images/I/617MVZdW+9L.jpg", "Artist": "Papa Roach", "album": "Who Do You Trust? [Explicit]", "Titel": "The Ending" }, { "Art": "https://m.media-amazon.com/images/I/614X7vU4kvL.jpg", "Artist": "Swedish House Mafia", "album": "Paradise Again [Explicit]", "Titel": "Heaven Takes You Home" }, { "Art": "https://m.media-amazon.com/images/I/91WFfUhav8L.jpg", "Artist": "Fred again..", "album": "Turn On The Lights again.. (feat. Future) [Explicit]", "Titel": "Turn On The Lights again.. (feat. Future)" }, { "Art": "https://m.media-amazon.com/images/I/71nY9Fa-06L.jpg", "Artist": "Gorgon City", "album": "Dreams (Terrace Dub / Amazon Original)", "Titel": "Dreams (Terrace Dub / Amazon Original)" }, { "Art": "https://m.media-amazon.com/images/I/91859e+jTSL.jpg", "Artist": "Papa Roach", "album": "Dying To Believe", "Titel": "Dying To Believe [Explicit]" }, { "Art": "https://m.media-amazon.com/images/I/81pg+33+WiL.jpg", "Artist": "Fred again..", "album": "Actual Life 3 (January 1 - September 9 2022) [Explicit]", "Titel": "Clara (the night is dark)" }, { "Art": "https://m.media-amazon.com/images/I/81bZ4dEMUhL.jpg", "Artist": "Chase & Status", "album": "What Came Before [Explicit]", "Titel": "Mixed Emotions" }, { "Art": "https://m.media-amazon.com/images/I/81pg+33+WiL.jpg", "Artist": "Fred again..", "album": "Actual Life 3 (January 1 - September 9 2022) [Explicit]", "Titel": "Kammy (like i do)" }, { "Art": "https://m.media-amazon.com/images/I/910MrctHG9L.jpg", "Artist": "Biffy Clyro", "album": "A Celebration Of Endings [Explicit]", "Titel": "Instant History" }, { "Art": "https://m.media-amazon.com/images/I/A1LKu3twuLL.jpg", "Artist": "John Summit", "album": "Human (feat. Echoes)", "Titel": "Human (feat. Echoes)" }, { "Art": "https://m.media-amazon.com/images/I/81+lGZN8RaL.jpg", "Artist": "070 Shake", "album": "Modus Vivendi [Explicit]", "Titel": "Morrow [Explicit]" }, { "Art": "https://m.media-amazon.com/images/I/61+IZElnaJL.jpg", "Artist": "London Grammar", "album": "Californian Soil [Explicit]", "Titel": "Lose Your Head" }, { "Art": "https://m.media-amazon.com/images/I/71Zv20vA1KL.jpg", "Artist": "Sigala", "album": "Melody", "Titel": "Melody" }, { "Art": "https://m.media-amazon.com/images/I/A19aTcXcAZS.jpg", "Artist": "gardenstate", "album": "Take Me There (Falden Remix)", "Titel": "Take Me There" }, { "Art": "https://m.media-amazon.com/images/I/81vMxIyDZ9L.jpg", "Artist": "Glass Animals", "album": "Dreamland [Explicit]", "Titel": "Heat Waves" }, { "Art": "https://m.media-amazon.com/images/I/81ClMoKQXtL.jpg", "Artist": "Anne-Marie", "album": "Don't Play", "Titel": "Don't Play" }, { "Art": "https://m.media-amazon.com/images/I/81CZHVekd3L.jpg", "Artist": "Olly Alexander (Years & Years)", "album": "Night Call (New Year's Edition) [Explicit]", "Titel": "Sooner Or Later" }, { "Art": "https://m.media-amazon.com/images/I/51mcmSwN3yL.jpg", "Artist": "SUB-X", "album": "What You Do To Me", "Titel": "What You Do To Me" }, { "Art": "https://m.media-amazon.com/images/I/A1n4oQ6tvkL.jpg", "Artist": "Robin Schulz", "album": "Young Right Now", "Titel": "Young Right Now" }, { "Art": "https://m.media-amazon.com/images/I/71A9YljT53L.jpg", "Artist": "Kx5", "album": "Alive", "Titel": "Alive" }, { "Art": "https://m.media-amazon.com/images/I/71RMVPlE8sL.jpg", "Artist": "Topic", "album": "All Or Nothing", "Titel": "All Or Nothing" }, { "Art": "https://m.media-amazon.com/images/I/812T5aAeMRL.jpg", "Artist": "Daniel Blume", "album": "Better", "Titel": "Better" }, { "Art": "https://m.media-amazon.com/images/I/71RyhGdHj4L.jpg", "Artist": "Purple Disco Machine", "album": "Exotica (Deluxe)", "Titel": "Hypnotized" }, { "Art": "https://m.media-amazon.com/images/I/A1Aq18EMk9L.jpg", "Artist": "Fred again..", "album": "Jungle (Rico Nasty Remix) [Explicit]", "Titel": "Jungle (Rico Nasty Remix) [Explicit]" }, { "Art": "https://m.media-amazon.com/images/I/71Xcvw1W3sS.jpg", "Artist": "Becky Hill", "album": "Only Honest On The Weekend [Clean]", "Titel": "My Heart Goes (La Di Da)" }, { "Art": "https://m.media-amazon.com/images/I/91oU-LoTeBL.jpg", "Artist": "TSHA", "album": "Dancing In The Shadows", "Titel": "Dancing In The Shadows" }, { "Art": "https://m.media-amazon.com/images/I/81bZ4dEMUhL.jpg", "Artist": "Chase & Status", "album": "What Came Before [Explicit]", "Titel": "Don't Be Scared [feat. Takura]" }, { "Art": "https://m.media-amazon.com/images/I/91JwD4kecOL.jpg", "Artist": "Grafix", "album": "Half Life", "Titel": "Feel Alive" }, { "Art": "https://m.media-amazon.com/images/I/81bZ4dEMUhL.jpg", "Artist": "Chase & Status", "album": "What Came Before [Explicit]", "Titel": "When It Rains [Explicit]" }, { "Art": "https://m.media-amazon.com/images/I/71v4TvAQ7UL.jpg", "Artist": "Mabel", "album": "Overthinking [Explicit]", "Titel": "Overthinking [Explicit]" }, { "Art": "https://m.media-amazon.com/images/I/71f-F6A-SpL.jpg", "Artist": "Alesso", "album": "Words", "Titel": "Words" }, { "Art": "https://m.media-amazon.com/images/I/717MR4yRF5L.jpg", "Artist": "Fred again..", "album": "Jungle [Explicit]", "Titel": "Jungle [Explicit]" }, { "Art": "https://m.media-amazon.com/images/I/81biZj+P+GL.jpg", "Artist": "Mazzy Star", "album": "So Tonight That I Might See", "Titel": "Fade Into You" }, { "Art": "https://m.media-amazon.com/images/I/A1UJ43C7DzL.jpg", "Artist": "Tion Wayne", "album": "IFTK [Explicit]", "Titel": "IFTK [Explicit]" }, { "Art": "https://m.media-amazon.com/images/I/61SdrYe7XGL.jpg", "Artist": "Sub Focus", "album": "Ready To Fly (Sub Focus & Dimension)", "Titel": "Ready To Fly (Sub Focus & Dimension)" }, { "Art": "https://m.media-amazon.com/images/I/B1EQ4x6+cPL.jpg", "Artist": "Kx5", "album": "Take Me High", "Titel": "Take Me High" }, { "Art": "https://m.media-amazon.com/images/I/617MVZdW+9L.jpg", "Artist": "Papa Roach", "album": "Who Do You Trust? [Explicit]", "Titel": "The Ending" }, { "Art": "https://m.media-amazon.com/images/I/614X7vU4kvL.jpg", "Artist": "Swedish House Mafia", "album": "Paradise Again [Explicit]", "Titel": "Heaven Takes You Home" }, { "Art": "https://m.media-amazon.com/images/I/91WFfUhav8L.jpg", "Artist": "Fred again..", "album": "Turn On The Lights again.. (feat. Future) [Explicit]", "Titel": "Turn On The Lights again.. (feat. Future)" }, { "Art": "https://m.media-amazon.com/images/I/71nY9Fa-06L.jpg", "Artist": "Gorgon City", "album": "Dreams (Terrace Dub / Amazon Original)", "Titel": "Dreams (Terrace Dub / Amazon Original)" }, { "Art": "https://m.media-amazon.com/images/I/91859e+jTSL.jpg", "Artist": "Papa Roach", "album": "Dying To Believe", "Titel": "Dying To Believe [Explicit]" }, { "Art": "https://m.media-amazon.com/images/I/81pg+33+WiL.jpg", "Artist": "Fred again..", "album": "Actual Life 3 (January 1 - September 9 2022) [Explicit]", "Titel": "Clara (the night is dark)" }, { "Art": "https://m.media-amazon.com/images/I/81bZ4dEMUhL.jpg", "Artist": "Chase & Status", "album": "What Came Before [Explicit]", "Titel": "Mixed Emotions" }, { "Art": "https://m.media-amazon.com/images/I/81pg+33+WiL.jpg", "Artist": "Fred again..", "album": "Actual Life 3 (January 1 - September 9 2022) [Explicit]", "Titel": "Kammy (like i do)" }, { "Art": "https://m.media-amazon.com/images/I/910MrctHG9L.jpg", "Artist": "Biffy Clyro", "album": "A Celebration Of Endings [Explicit]", "Titel": "Instant History" }, { "Art": "https://m.media-amazon.com/images/I/A1LKu3twuLL.jpg", "Artist": "John Summit", "album": "Human (feat. Echoes)", "Titel": "Human (feat. Echoes)" }, { "Art": "https://m.media-amazon.com/images/I/81+lGZN8RaL.jpg", "Artist": "070 Shake", "album": "Modus Vivendi [Explicit]", "Titel": "Morrow [Explicit]" }, { "Art": "https://m.media-amazon.com/images/I/61+IZElnaJL.jpg", "Artist": "London Grammar", "album": "Californian Soil [Explicit]", "Titel": "Lose Your Head" }, { "Art": "https://m.media-amazon.com/images/I/71Zv20vA1KL.jpg", "Artist": "Sigala", "album": "Melody", "Titel": "Melody" }, { "Art": "https://m.media-amazon.com/images/I/A19aTcXcAZS.jpg", "Artist": "gardenstate", "album": "Take Me There (Falden Remix)", "Titel": "Take Me There" }, { "Art": "" } ] und dann in VIS-2 [image: 1737967156014-playlist.png] Jetzt muß ich nur noch schauen wie ich das in ein blockly bekomme
  • Rutenbeck TCR IP4 wie korrekt schalten

    5
    3
    0 Votes
    5 Posts
    944 Views
    B
    Ich habe mir folgenden JS-Code mit Hilfe von ChatGPT erstellt: const dgram = require('dgram'); const deviceIP = 'xxx.xxx.xxx.xxx'; // IP-Adresse der Zeitschaltuhr const port = 30303; // UDP-Port der Zeitschaltuhr const states = ['OUT1', 'OUT2', 'OUT3', 'OUT4']; // Zustände (ohne Temperatur) const warnCooldown = {}; // Warnungstimer für Statusabweichungen const retryAttempts = 3; // Anzahl der Wiederholungen bei Abfrageabweichungen const warnLimit = 2; // Anzahl maximaler Warnungen pro Abweichung // Datenpunkte im ioBroker erstellen states.forEach(state => { createState(`javascript.0.Zeitschaltuhr.${state}`, false, { name: `${state} Schalter`, type: 'boolean', def: false, read: true, write: true }); }); // Spezieller Datenpunkt für Temperatur createState(`javascript.0.Zeitschaltuhr.Temperatur`, 0, { name: 'Temperatur Status', type: 'mixed', def: 0, read: true, write: false }); // Funktion, um UDP-Befehl zu senden und Antwort abzurufen function sendUDPCommandAndReceive(command, callback) { const message = Buffer.from(command); const client = dgram.createSocket('udp4'); client.on('message', (msg, rinfo) => { const response = msg.toString(); // Antwort analysieren und Datenpunkte aktualisieren if (response.startsWith('T')) { const parts = response.split('='); if (parts.length > 1) { const value = parseFloat(parts[1].trim()); if (!isNaN(value)) { const currentState = getState(`javascript.0.Zeitschaltuhr.Temperatur`).val; if (value === -27) { if (currentState !== 'nicht angeschlossen') { setState(`javascript.0.Zeitschaltuhr.Temperatur`, 'nicht angeschlossen', true); } } else { if (currentState !== value) { setState(`javascript.0.Zeitschaltuhr.Temperatur`, value, true); } } } } } else { states.forEach(state => { if (response.startsWith(state)) { const parts = response.split('='); if (parts.length > 1) { const value = parseInt(parts[1].trim(), 10); if (value === 0 || value === 1) { const currentState = getState(`javascript.0.Zeitschaltuhr.${state}`).val; if (currentState !== (value === 1)) { setState(`javascript.0.Zeitschaltuhr.${state}`, value === 1, true); } } } } }); } client.close(); if (callback) callback(response); }); client.send(message, 0, message.length, port, deviceIP, (err) => { if (err) { console.error(`Fehler beim Senden: ${err.message}`); client.close(); } }); } // Funktion zur Steuerung der Ports (ein- und ausschalten) function controlPort(portNumber, state) { if (portNumber < 1 || portNumber > 4) { console.error('Ungültige Portnummer. Bitte 1 bis 4 angeben.'); return; } if (state !== 0 && state !== 1) { console.error('Ungültiger Zustand. Bitte 0 (aus) oder 1 (ein) angeben.'); return; } const command = `OUT${portNumber} ${state}`; sendUDPCommandAndReceive(command, () => { let attempts = 0; let warnings = 0; function checkStatus() { const queryCommand = `OUT${portNumber} ?`; sendUDPCommandAndReceive(queryCommand, (response) => { const parts = response.split('='); if (parts.length > 1) { const value = parseInt(parts[1].trim(), 10); if (value === state) { setState(`javascript.0.Zeitschaltuhr.OUT${portNumber}`, value === 1, true); } else { attempts++; if (attempts < retryAttempts) { setTimeout(checkStatus, 500); // Wiederholen nach 500ms } else { warnings++; if (warnings <= warnLimit) { console.warn(`Status von OUT${portNumber} stimmt nicht überein: Erwartet ${state}, erhalten ${value}`); } } } } }); } // Erste Statusprüfung nach 1 Sekunde setTimeout(checkStatus, 1000); }); } // Listener für Schalter in ioBroker states.forEach((state, index) => { on({ id: `javascript.0.Zeitschaltuhr.${state}`, change: 'any' }, (obj) => { const newState = obj.state.val ? 1 : 0; controlPort(index + 1, newState); }); }); // Funktion zur regelmäßigen Abfrage function queryStates() { states.concat('T').forEach((state) => { const command = `${state} ?`; sendUDPCommandAndReceive(command); }); } // Intervall für regelmäßige Abfragen (alle 10 Sekunden) setInterval(queryStates, 10000); // Initialer Aufruf queryStates(); Der Code ließt den aktuellen Zustand der Ports 1-4 sowie der Temperatur (Ich besitze keinen Sensor und kann die Ausgabe der Temp. nicht testen) per UDP-Protokoll und erstellt in ioBroker passende Datenpunkte. Diese können dann aus ioBroker oder VIS geschaltet werden.
  • Syntaxerror JSON Fehler abfangen

    14
    1
    0 Votes
    14 Posts
    1k Views
    P
    Quick and dirty, er soll es 2x versuchen :-) [image: 1737789632714-6dad05d7-5a1b-4489-9fd9-9759af83e876-8bf80c08-a497-4200-8b22-00d2e12cf589.png]
  • Alle Datenpunkte umziehen und Skripte automatisiert anpassen

    6
    0 Votes
    6 Posts
    622 Views
    T
    @mlapp Punkt 2 da hättest du den Datenbaum exportier können, im erhaltenen JSON die Datenpunkt ändern und wieder importieren können Sonst sie sehe ich kein vernesserungspotenzial 😊
  • Script Hilfe für Abfrage Serielle Kommunikation gesucht!

    Moved
    192
    0 Votes
    192 Posts
    30k Views
    Axel KoenekeA
    @spawnsen 6.0.2 = 1 6.0.3 = 1 6.0.4 = 0
  • Ulanzi T001 / AWTRIX Unwetterwarnung

    7
    3
    1 Votes
    7 Posts
    565 Views
    F
    @chefkochts Dann muss es irgendwo hier liegen: // Hilfsfunktion für Farben function setWarningColor(app, level) { const colors = { 0: { text: '#ffff00', bg: '#000000' }, 1: { text: '#ffff00', bg: '#000000' }, 2: { text: '#ffff00', bg: '#000000' }, 3: { text: '#ff0000', bg: '#000000' }, 4: { text: '#ffffff', bg: '#ff0000' }, default: { text: '#ffffff', bg: '#000000' } }; const color = colors[level] || colors.default; setState(`awtrix-light.0.apps.${app}.textColor`, color.text); setState(`awtrix-light.0.apps.${app}.backgroundColor`, color.bg); Das die Zuordnung des Level der Warnung nicht passt, aber dann sollte der default-Wert genommen werden.
  • Blockley Heizstab verschiedene Phasen bei PV-Überschuss

    3
    0 Votes
    3 Posts
    389 Views
    MaschlM
    @paul53 Danke für die schnelle Antwort, sieht sehr vielversprechend aus :-) Das werde ich ausprobieren, dauert aber eine weile bis ich dazu kommen werde

530

Online

32.6k

Users

82.2k

Topics

1.3m

Posts