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
    azzkikrboyA
    @arnod OK, dann lass ich es leiber so :-) Als ich die neue Version kopiert habe ist mir aufgefallen, dass es ein neues Design für die Übersicht gibt. Wenn ich das neue .js bei mir einbaue, sieht es aber immer noch so aus wie vorher ... Ist zwar nur die Optik, sieht aber besser aus ;-) Woran kann das liegen? neu: [image: 1770466556270-ea702700-2a5a-49aa-bd8f-f6f4a89477dc-grafik.png] alt? (nach einfügen der neuen .js) [image: 1770467005603-d70df4e6-08b4-4c6b-abbc-914ac65bf5fe-grafik.png]
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Topics
    79k Posts
    J
    Es funzt !! DANKE! Anfangs zwar etwas humpelig, weil das Script 3-4x durchlaufen werden muss, aber es geht.. Der Langzeittest steht aus... [image: 1770500349513-dfe1bbbf-36ad-4e83-9fa2-72deca072439-image.png]
  • 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?
  • Zeitabhängige Benachrichtigung über Push Over

    6
    0 Votes
    6 Posts
    279 Views
    B
    @paul53 Top läüft !! Danke dir ! @Homoran Ja du hast recht, das währe ein Skript gewesen das ich zum Anlass zur Übung nehmen hätte können. Ich war mal schon viel weiter drin, Skripten ist aber scheinbar nicht wie Farad fahren, das verlernt Mann schon :-) Danke euch für eure tolle Arbeit hier, ich ge´b mir mehr mühe. Grüße Balu
  • Plausibilität/Aktualität von Messwerten erkennen?

    monitoring
    4
    0 Votes
    4 Posts
    406 Views
    S
    @tugsi Solche Probleme habe ich glücklicherweise nicht und ja das kannst du dann mit dem Zeitstempel abfragen.
  • Frage zu Funktion onLog

    3
    0 Votes
    3 Posts
    324 Views
    P
    @mcu Echt jetzt? Was da rauskommt, steht doch in der verlinkten Doku: "To receive all logs the * could be used. In this case, the log output in handler will be disabled completely." Wenn man auf alle Logeinträge triggert ('*') und dann einen Fehler ins Log schreibt, produziert man eine Endlosschleife. Um dies zu verhindern, wird das Schreiben ins Log deaktiviert. Also console.error wird nicht ausgeführt. Oder?
  • Script funktioniert nur bedingt

    14
    0 Votes
    14 Posts
    936 Views
    CodierknechtC
    @manolo sagte in Script funktioniert nur bedingt: Thema kann geschlossen werden. Das kannst nur Du, indem Du den Eingangspost bearbeitest und ein "[gelöst] - " vor den Titel setzt.
  • Daten mit Blockly aus InfluxDB abrufen

    35
    1
    0 Votes
    35 Posts
    4k Views
    K
    @kdtcat ``` var parm1, parm2, result, BatteryLevel, PowerConsumptionTotal, PowerProductionTotal, EnergyProductionTotalDay, EnergyConsumptionTotalDay, EnergyExternalTotalOutDay, EnergyBatteryChargeDay, EnergyStorageTotalOutDay, StromverbrauchAnteilSolarTag, STromverbrauchAlleTag; // Beschreibe diese Funktion … async function iq(parm1, parm2) { // Beschreibe diese Funktion var ergebnis, fparm, fparm2; fparm = 'from(bucket: "solar") |> range(start: -1m) |> filter(fn: (r) => r["_field"] == ' + parm1 + ') |> aggregateWindow(every: 2m, fn: mean)'; fparm2 = '0_userdata.0.Enpal.' + parm2; sendTo('influxdb.0', 'query', fparm, async (result) => { test0 = (await jsonataExpression(result,'*[0]._value ')); setStateDelayed(fparm2, test0, true, parseInt(((0) || '').toString(), 10), false); }); return ergebnis; } schedule("*/2 * * * *", async () => { result = await iq('"Energy.Battery.Charge.Level"', 'BatteryLevel'); await wait(3000); BatteryLevel = Math.round(getState('0_userdata.0.Enpal.BatteryLevel').val * 100) / 100; setStateDelayed('0_userdata.0.Enpal.BatteryLevel', { val: BatteryLevel, ack: false }, parseInt(((0) || '').toString(), 10), false); result = await iq('"Power.Consumption.Total"', 'PowerConsumptionTotal'); await wait(3000); PowerConsumptionTotal = getState('0_userdata.0.Enpal.PowerConsumptionTotal').val; result = await iq('"Power.Production.Total"', 'PowerProductionTotal'); await wait(3000); PowerProductionTotal = getState('0_userdata.0.Enpal.PowerProductionTotal').val; result = await iq('"Energy.Production.Total.Day"', 'EnergyProductionTotalDay'); await wait(3000); EnergyProductionTotalDay = getState('0_userdata.0.Enpal.EnergyProductionTotalDay').val; result = await iq('"Energy.Consumption.Total.Day"', 'EnergyConsumptionTotalDay'); await wait(3000); EnergyConsumptionTotalDay = getState('0_userdata.0.Enpal.EnergyConsumptionTotalDay').val; result = await iq('"Energy.External.Total.Out.Day"', 'EnergyExternalTotalOutDay'); await wait(3000); EnergyExternalTotalOutDay = getState('0_userdata.0.Enpal.EnergyExternalTotalOutDay').val; result = await iq('"Energy.Battery.Charge.Day"', 'EnergyBatteryChargeDay'); await wait(3000); EnergyBatteryChargeDay = getState('0_userdata.0.Enpal.EnergyBatteryChargeDay').val; result = await iq('"Energy.Storage.Total.Out.Day"', 'EnergyStorageTotalOutDay'); await wait(3000); EnergyStorageTotalOutDay = getState('0_userdata.0.Enpal.EnergyStorageTotalOutDay').val; StromverbrauchAnteilSolarTag = EnergyProductionTotalDay - EnergyExternalTotalOutDay; StromverbrauchAnteilSolarTag = StromverbrauchAnteilSolarTag - EnergyBatteryChargeDay; setStateDelayed('0_userdata.0.Enpal.StromverbrauchAnteilSolarTag', { val: StromverbrauchAnteilSolarTag, ack: false }, parseInt(((0) || '').toString(), 10), false); STromverbrauchAlleTag = StromverbrauchAnteilSolarTag + EnergyStorageTotalOutDay + EnergyConsumptionTotalDay; setStateDelayed('0_userdata.0.Enpal.StromverbrauchAlleTag', { val: STromverbrauchAlleTag, ack: false }, parseInt(((0) || '').toString(), 10), false); console.info((['1: ',BatteryLevel,', 2: ',PowerConsumptionTotal,', 3: ',PowerProductionTotal,', 4: ',EnergyProductionTotalDay,', 5: ',EnergyConsumptionTotalDay,', 6: ',EnergyExternalTotalOutDay,', 7: ',EnergyBatteryChargeDay,', 8: ',EnergyStorageTotalOutDay,', 9: ',StromverbrauchAnteilSolarTag,', 10: ',STromverbrauchAlleTag].join(''))); });
  • Funktion zum Seitenabruf per Get funktioniert nicht mehr

    10
    0 Votes
    10 Posts
    801 Views
    jolicJ
    @haus-automatisierung said in Funktion zum Seitenabruf per Get funktioniert nicht mehr: @jolic Dann schau gerne mal in die Doku und verwende die asynchronen Funktionen httpGetAsynx und httpPostAsync. Dann haste auch ein Promise. Danke dir, das ist gut zu wissen! Da der interne httpGet-Befehl in ioBroker nativ verfügbar ist, werde ich mir diesen bei meinem nächsten Projekt genauer anschauen.
  • Telegram-Bot: Anzeige „1 Nutzer“

    27
    0 Votes
    27 Posts
    2k Views
    I
    Die Fehlermeldung unten in meinem geposteten Bild sieht ja auch nicht gesund aus. Ist zwar bei allen drei Bots so, daher wird es an dem Problem der Anzeige "1 User" nichts ändern, aber komisch ist es ja schon.
  • Schleife über alle Datenpunkte

    Moved
    13
    0 Votes
    13 Posts
    3k Views
    R
    @paul53 Mit der Doku tue ich mich noch schwer, daher herzlichen Dank dass Du mir genau die richtige Stelle zum Nachlesen zeigst.
  • [GELÖST] Seit x Javascript Updates keine Module mehr geladen

    23
    1
    0 Votes
    23 Posts
    2k Views
    F
    @haus-automatisierung sagte in [GELÖST] Seit x Javascript Updates keine Module mehr geladen: Danke, Ein großes Danke geht vor Allem an Dich für deinen tollen Support und die vielen Neuerungen im Adapter!
  • Datenpunkt extern beschreiben

    monitoring communication
    4
    1
    0 Votes
    4 Posts
    286 Views
    R
    glaub hab mein fehler gefunden, datenpunkt anlegen und dann simple_api und web usw neustarten, schon kann beschrieben werden.
  • JAVA - Script Parse Error

    5
    0 Votes
    5 Posts
    436 Views
    haus-automatisierungH
    @seeandfeel sagte in JAVA - Script Parse Error: hätte ich wohl genauer suchen müssen das "request" deprecated ist. Normalerweise solltest Du vor dem Upgrade eine große Warnung bekommen haben, dass das der Fall ist. Und diese muss man manuell bestätigen. https://github.com/ioBroker/ioBroker.javascript/blob/d5772eaf30e865c4089b83c1198a86e2aac73774/io-package.json#L343-L383 Es ist erforderlich, alle Skripte zu aktualisieren, die das "Request"-Paket verwenden! Dieses Paket wird in zukünftigen Versionen entfernt. Bitte nutze die neuen "Bockly"-Blöcke für "httpGet" oder nutze eine andere Bibliothek (wie axios) im JavaScript-Code.
  • einen json String filtern und Bereiche löschen.

    17
    1
    0 Votes
    17 Posts
    997 Views
    S
    @mickym gebe zu... auch geil!
  • PV Überschuss Wallbox

    3
    0 Votes
    3 Posts
    364 Views
    paul53P
    @u66 sagte: Wärmepumpe, der ebenfalls mit Script gesteuert wird automatisch auszuschalten beim anstecken des Fahrzeugs an die Wallbox ? // IDs eintragen! const idConnect = ''; const idSoc = ''; const idPrio = '0_userdata.0.Wallbox.Ladeprio'; // Datenpunkt in Überschusssteuerung für WP prüfen! const idWP = 'tuya.0.46778228e09806828487.1'; var connect = getState(idConnect).val; var soc = getState(idSoc).val; function setPrio() { setState(idPrio, connect && soc < 95, true); // Grenzwert anpassen! } setPrio(); // Skriptstart on(idConnect, function(dp) { connect = dp.state.val; setPrio(); }); on(idSoc, function(dp) { soc = dp.state.val; setPrio(); }); on({id: idPrio, change: 'gt'}, function() { setState(idWP, false); });
  • [Vorlage] Anwesenheitssimulation - Script

    Moved
    271
    1
    1 Votes
    271 Posts
    69k Views
    L
    Hi, die Funktionalität des Scriptes ist soweit ausentwickelt. (für den Moment) Ich habe noch ein bischen Sanitäres gemacht im Coding, das Logging verbessert und eine check routine eingeführt, falls die Gruppen Definitionen inkonsistent eingestellt werden. Es gibt dann eine harte Fehlermeldung und Programmabbruch. Die Version 1.20 ist hochgeladen und steht im ersten Post zum Download bereit. vG Looxer
  • Liste aller CRON Jobs (2024)

    6
    0 Votes
    6 Posts
    455 Views
    Rene55R
    @liv-in-sky Ok. Bevor ich dann jemandem unnötig Arbeit aufhalse, lasse ich das mit dem Issue sein. Ich habs gerade in einem frischen Browser getestet. Hatte ich bisher tatsächlich noch nie so festgestellt.
  • [gelöst] getHistory - aggregate macht nichts?

    3
    1
    0 Votes
    3 Posts
    283 Views
    haus-automatisierungH
    @bananajoe sagte in getHistory - aggregate macht nichts?: Und kann mir - vermutlich selbst - die Frage beantworten: Ich muss auch die Schrittgröße step passend angeben? Genau. Damit definiert man die Größe der Bereiche für die Aggregierungs-Funktion.
  • Schreiben von Datenpunkten [gelöst]

    7
    2
    0 Votes
    7 Posts
    486 Views
    CodierknechtC
    @randyandy sagte in Schreiben von Datenpunkten [gelöst]: Ich dachte immer aktualisieren nimmt man bei Variablen und steuern bei Objekten die ewas ausführen. Variablen schreibt man mit "Setze ... auf". "Aktualisiere" nimmt man bei eigenen DP, "Steuere" bei DP die einem Adapter gehören. https://forum.iobroker.net/topic/70481/blockly-for-dummies-starthilfe-und-tipps/6
  • Skript Shelly 3EM zu Shelly 3EM Pro Messungen aufzeichnen

    4
    0 Votes
    4 Posts
    373 Views
    S
    @paul53 ok dann werde ich mal den Adapter anschauen und mich da mal einlesen.
  • Blockly: Garagentor automatisch schließen lassen

    11
    1
    0 Votes
    11 Posts
    807 Views
    L
    @lastactionhero nach nun 2 Wochen testen habe ich das Script noch um den Fall erweitert, dass bspw. bei Dunkelheit oder Dämmerung der Bewegungssensor gar keine Bewegung bei Öffnung des Tores erkannt hat. Damit funktioniert das Script ziemlich gut! Für alle, die es kopieren wollen, hier der Export: <xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable type="timeout" id="timeout_garagentor">timeout_garagentor</variable> </variables> <block type="on_ext" id="Rc,RDdc5.6wG*^S365kb" x="63" y="213"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="2"></mutation> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="8hnUfm/?(yNLdqZYZioq"> <field name="oid">hm-rpc.1.000920C99B440F.1.MOTION</field> </shadow> </value> <value name="OID1"> <shadow type="field_oid" id="8AnIbRH(B2Z0mq*E[{%["> <field name="oid">hm-rpc.1.002420C995C575.1.DOOR_STATE</field> </shadow> </value> <statement name="STATEMENT"> <block type="timeouts_cleartimeout" id="T?qf2^:iUp,w(UT*ZQz;"> <field name="NAME">timeout_garagentor</field> <next> <block type="controls_if" id="Mn:.=S/[gc[Thv5A|uXj"> <value name="IF0"> <block type="logic_multi_and" id="bfL7b$l[:-;i~hIrK|wL"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="3"></mutation> <value name="AND0"> <block type="logic_compare" id="*W{+nK5#|V!oF:.8L*s+"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="[r~|BdaEIVXhiu6{JM5X"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Garage_Autoclose</field> </block> </value> <value name="B"> <block type="logic_boolean" id="q=1%9$-8B}Z0U8%28k#)"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <value name="AND1"> <block type="logic_compare" id="Qq5B,Q|db2el8:aKjBWq"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="nx62AQcvUCmy#c@$Asax"> <field name="ATTR">val</field> <field name="OID">hm-rpc.1.000920C99B440F.1.MOTION</field> </block> </value> <value name="B"> <block type="logic_boolean" id="e1x]U3dj#0ZIAq`Xk+Gd"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <value name="AND2"> <block type="logic_compare" id="_7d#`#s};ypO29N9upu6"> <field name="OP">NEQ</field> <value name="A"> <block type="get_value" id="mS]!-(O0uD9,u}`A#`td"> <field name="ATTR">val</field> <field name="OID">hm-rpc.1.002420C995C575.1.DOOR_STATE</field> </block> </value> <value name="B"> <block type="math_number" id="BV9G(8uj+VE?A.^me=a5"> <field name="NUM">0</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="comment" id="JQ!5`+_8gzc?@iT^Mi|C"> <field name="COMMENT">Nach 5 min ohne Bewegung automatisch schließen</field> <next> <block type="comment" id="BP05f8xMWyF:n[eD!g7H"> <field name="COMMENT">2 min davon vorgegeben vom Bewegungsmelder</field> <next> <block type="timeouts_settimeout" id="w?3#}$|H,rD_$OA}6lO="> <field name="NAME">timeout_garagentor</field> <field name="DELAY">3</field> <field name="UNIT">min</field> <statement name="STATEMENT"> <block type="control" id="eyPVpw@h|Otg_5=%p_iG"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">hm-rpc.1.002420C995C575.1.DOOR_COMMAND</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="5O?]J$QiwJydKxtg5!`Q"> <field name="NUM">3</field> </block> </value> </block> </statement> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </statement> </block> </xml>
  • Blockly mit Liste funktioniert nicht (Warnungen)

    blockly javascript
    2
    1
    0 Votes
    2 Posts
    219 Views
    paul53P
    @oberfragger sagte: wo ist mein Fehler...? Die Variable i enthält keine Datenpunkt-ID, sondern den Vergleichstext. Anstelle der Schleife würde ich den Block "suche" verwenden. [image: 1722013697613-blockly_temp.jpg]

526

Online

32.6k

Users

82.2k

Topics

1.3m

Posts