Skip to content

Skripten / Logik

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

16.6k Themen 214.1k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Themen
    49k Beiträge
    HomoranH
    @BertDerKleine sagte in Skript aufteilen möglich?: Ich wiederhole nochmal was die Intention ist: Langes Javaskript in zwei kleinere Skripte aufteilen. Soll trotzdem noch weiter funktionieren. zB Hauptfunktionen in A, Nebenfunktionen in B oder was auch immer als Splitkriterium. Leider hat diese "Beschreibung" keinerlei Aussagekraft, was du mit "lang" und "weiter funktionieren" meinen könntest.
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    paul53P
    @Qlink sagte: Das sonst falls beinhaltet bereits "somebody@home = falsch" richtig ? Richtig, sonst = nicht Wert = abwesend.
  • 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
  • Letzter Tick aus CRON?

    5
    2
    0 Stimmen
    5 Beiträge
    391 Aufrufe
    A
    @stefan-falt wäre es nicht sinnvoller, den letzten lauf immer zu protokollieren? dann hast du zwar mit jeder ausführung eine aktualisierung, aber das wäre dann auch die "wahrheit", falls das script mal abbricht (server startet durch, iobroker stürzt ab, ...). nebeneffekt wäre, dass dann automatisch um 3:59 die aktulaisierung mit drin steht und du das nicht zusätzlich abfangen musst.
  • Kryptokurse von CoinMarketCap abfragen

    9
    0 Stimmen
    9 Beiträge
    1k Aufrufe
    OliverIOO
    @shellyrulestheworld ist hier evtl nicht so wichtig, aber toFixed rundet nicht kaufmännisch (1.104).toFixed(2) = 1.10 (1.105).toFixed(2) = 1.10 (1.106).toFixed(2) = 1.11 besser ist (Math.round(1.104*100)/100).toFixed(2) = 1.10 (Math.round(1.105*100)/100).toFixed(2) = 1.11 (Math.round(1.106*100)/100).toFixed(2) = 1.11 toFixed ist nur als Formatierungsfunktion zu gebrauchen um 0 aufzufüllen damit man auf die Anzahl nachkommastellen kommt Als allgemeine Funktion kann man sowas nehmen, diese Funktion bildet auch andere Zahlsysteme ab, aber alles was anders wie 10 ist, muss man noch weitere Schritte vornehmen. also einfach nur console.log(toFixedNumber(1.105,2)); function toFixedNumber(num, digits, base){ const pow = Math.pow(base ?? 10, digits); return Math.round(num*pow) / pow; }```
  • Object Max Wert lässt setValue Wert nicht zu

    37
    0 Stimmen
    37 Beiträge
    4k Aufrufe
    U
    @tomtomsen sagte in Object Max Wert lässt setValue Wert nicht zu: Funktioniert natürlich einwandfrei Verstehe ich nicht! Was funktioniert einwandfrei? Ausserdem könntest Du ... nachdem Du das Thema aufgebracht hast und auch das Problem hast... ein debug log vom Adapter zur Verfügung stellen. Die Leute hier wollen Dir (und anderen) nur helfen. Mit Deinem sparbetrieb an Informationen beim Wolf Support angefragt wird das gleich im Papierkorb landen @mcm1957 sagte in Object Max Wert lässt setValue Wert nicht zu: OK - wenn der Adapter kein offizielles Api benutzt mag es kontraproduktiv zu sein ioBroker zu erwähnen. Aber wenn es auch am offiziellen Portal (das so wie ich vermute der Adapter ausliest) nicht stimmt dann könnte Wolf helfen. Der Adapter wird schon die "offizielle" API nutzen. Ich habe trotz intensiver Suche noch keine Beschreibung einer API gefunden. Wen da jemand mehr hat?
  • openHASP

    1
    0 Stimmen
    1 Beiträge
    192 Aufrufe
    Niemand hat geantwortet
  • Zeitabhängige Benachrichtigung über Push Over

    6
    0 Stimmen
    6 Beiträge
    288 Aufrufe
    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 Stimmen
    4 Beiträge
    423 Aufrufe
    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 Stimmen
    3 Beiträge
    332 Aufrufe
    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 Stimmen
    14 Beiträge
    942 Aufrufe
    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 Stimmen
    35 Beiträge
    4k Aufrufe
    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 Stimmen
    10 Beiträge
    821 Aufrufe
    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 Stimmen
    27 Beiträge
    2k Aufrufe
    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

    Verschoben
    13
    0 Stimmen
    13 Beiträge
    3k Aufrufe
    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 Stimmen
    23 Beiträge
    2k Aufrufe
    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 Stimmen
    4 Beiträge
    290 Aufrufe
    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 Stimmen
    5 Beiträge
    464 Aufrufe
    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 Stimmen
    17 Beiträge
    1k Aufrufe
    S
    @mickym gebe zu... auch geil!
  • PV Überschuss Wallbox

    3
    0 Stimmen
    3 Beiträge
    374 Aufrufe
    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

    Verschoben
    271
    1
    1 Stimmen
    271 Beiträge
    71k Aufrufe
    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 Stimmen
    6 Beiträge
    483 Aufrufe
    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 Stimmen
    3 Beiträge
    297 Aufrufe
    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.

294

Online

32.7k

Benutzer

82.5k

Themen

1.3m

Beiträge