Skip to content

Skripten / Logik

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

16.5k Topics 213.4k Posts

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Topics
    49k Posts
    A
    hy ist es möglich die Preisdaten Tibber simulieren Tibberadapter pausiert nu sagt das skript Pausiert-keine Preisdaten! in VIS hab meine aktuellen preise von anderen Anbieter händisch eingetragen jedoch wird nicht damit geregelt was kann da angepasst werden um es wieder zum laufen zu bekommen da die berechnung dahinter mir schon gefällt
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Topics
    79k Posts
    M
    @schweiger2 Übergabe der Daten an command? z.B. DP: hue.0.Hue_Bridge.Schubladen.command {"on":true,"bri":128,"r":255,"g":0,"b":0,"transitiontime":0}
  • 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
  • History, InfluxDB Datenpunkte werden automatisch deaktiviert

    4
    0 Votes
    4 Posts
    118 Views
    T
    @homoran kann weg
  • Übersicht über DP Typen

    5
    0 Votes
    5 Posts
    220 Views
    crunchipC
    @codierknecht sagte in Übersicht über DP Typen: Achtung - der Erbsenzähler ist wieder da Falls hier jemand mitliest, der sich für die Pflege der Doku verantwortlich fühlt: https://forum.iobroker.net/category/186/dokumentations-support jeder darf und kann da mitwirken:stuck_out_tongue_winking_eye:
  • Stiebel Eltron ISG auslesen

    1
    0 Votes
    1 Posts
    325 Views
    No one has replied
  • Überleben Timeouts einen Restart?

    11
    0 Votes
    11 Posts
    755 Views
    HomoranH
    @liv-in-sky genau so! aber ob das @liv-in-sky sagte in Überleben Timeouts einen Restart?: doch nicht so wild: ist, lasse ich jetzt mal offen.
  • [suche] Blockly Goto oder Stop

    7
    0 Votes
    7 Posts
    586 Views
    HomoranH
    @simplyclever dann verstehe ich deine Eingangsfrage nicht, bzw. kann sie nicht zuordnen. Wenn du ein stop über eine Logik auslösen könntest, sollte die gleiche Logik bei eventbasiertem Skripting nicht umfangreicher sein.
  • Typ falsch, bzw. number wird als string erwartet (alias)

    6
    0 Votes
    6 Posts
    366 Views
    H
    @paul53 Es sieht zumindest so aus, als wäre nicht klar, was es sein soll. Nach Anlage steht "" in min und max. Nach Schreiben ist es null. Wenn ich Werte eintrage, also eine Ansage mache, was es denn sein soll, passt es. Ich danke euch.
  • "Alles-Aus"-Taster mit "Speicherung"

    scenes
    8
    0 Votes
    8 Posts
    519 Views
    ChaotC
    Die Idee klingt interessant, aber ich denke das sich das in der Realität schnell wieder erledigen wird. Ich kann mir für mich persönlich jetzt keine Situation vorstellen bei der ich beim Betreten der Wohnung die gleichen Zustände wie beim Verlassen benötige. Ich möchte jetzt nach der Weihnachtszeit ein Projekt angehen das auch ungefähr in deine Richtung geht. Wenn beim Betreten der Wohnung ein Taster gedrückt wird soll je nach Helligkeit, Tageszeit und Wochentag ein bestimmtes Szenario geschaltet werden. Beispielsweise: Werktags 17 Uhr, Dunkel, Kalt - Heizung Absenkmodus aus, Licht Korridor an, Licht Küche an, Heizung Bad für die nächste Stunde auf "Boost" Aktuell bin ich dabei die für mich/uns benötigten Szenarien und Zeiten aufzulisten um einen Überblick zu bekommen wie Umfangreich meine Vorstellung sein wird.
  • Einstellung Instanz per Script ändern

    7
    1
    0 Votes
    7 Posts
    695 Views
    Z
    @thomas-braun Ok vielen Dank. Ich werde es ausprobieren.
  • Lichtauswertung zählt gedimmte Lichter nicht

    2
    0 Votes
    2 Posts
    204 Views
    mickymM
    @marsmännchen Meines Erachtens musst Du die Bedingungen ab Zeile 325 aufbohren und in den Du eine weitere Bedingung eingibst. Ich bin aber kein JS Programmierer und habe das Script nur überflogen. if (LightIsOnWhen.indexOf(SensorVal[x]) != -1) { // Suche in Lichtereinnarray, wenn gefunden, Status auf on setzen SensorVal[x] = "on"; } else if (LightIsOffWhen.indexOf(SensorVal[x]) != -1) { // Suche in Lichterausarray, wenn gefunden, Status auf off setzen SensorVal[x] = "off"; }; else if (typeof SensorVal[x] === "number") { // Überwachter Datenpunkt enthält nummerische Werte SensorVal[x] = SensorVal[x] > 0 ? "on" : "off"; }; Wenn das aber verschiedene Zustände für an aus und den Dimmer sind, dann musst halt ein Alias nehmen, der Dir halt ein on oder off beim Lesen ausgibt:
  • Fehler bei Adapter tvspielfilm

    15
    0 Votes
    15 Posts
    1k Views
    tugsiT
    @homoran Stimmt, ist nur in dem Beta Repository, sorry, ist bei mir eingestellt, da denk ich dann nicht dran ;) Die Datenpunkte für den Tagestipp kannst Du löschen, werden ja nicht mehr aktualisiert. Aber auch so, wenn Du ausversehen "zuviele" Datenpunkte löscht, beim nächsten Aufruf, schreibt die Instanz die neu.
  • [gelöst] Mittelwert ohne feste Abtastrate

    Moved
    10
    0 Votes
    10 Posts
    1k Views
    D
    @paul53 Ich habe mich auch gerade damit beschäftigt und meine, dass da ein kleiner Fehler drinsteckt: Es sollte heißen: if(i + 1 < result.result.length) integral = integral + result.result[i].val * (result.result[i+1].ts - result.result[i].ts); Mein Dank gebührt trotzdem @paul53. Ohne ihn hätte ich den Ansatz nicht gefunden! Mein Code sieht komplett dann so aus (für die Nachwelt): var end = Date.now(); sendTo('history.0', 'getHistory', { id: 'mqtt.0.heizung.HzAnlage.Laststellung', options: { start: end - 86400000, end: end, aggregate: 'none' } }, function (result) { var integral = 0; console.log("Anzahl: "+result.result.length); for (var i=0; i < result.result.length; i++) { console.log(i+"---"+result.result[i].ts + "---"+ result.result[i].val); } // Test for (var i=0; i < result.result.length; i++) { // var zeitdiff = 0; // zeitdiff = result.result[i+1].ts - result.result[i].ts; // console.log(i+"--diff--" + zeitdiff); if (i + 1 < result.result.length) { integral = integral + ( result.result[i].val * (result.result[i+1].ts - result.result[i].ts) ) ; } else { integral = integral + result.result[i].val * (end - result.result[i].ts); } // Else Ende } // Schleifen Ende var gesamtzeit = end - result.result[0].ts; console.log("Gesamtzeit in sek: " + gesamtzeit/1000 + " = "+ gesamtzeit/(1000*60) + " min = " + gesamtzeit/(1000*60*60) + " h"); var mittelwert = integral / gesamtzeit; console.log("Mittelwert: " + mittelwert); // Hier Zuweisung an eine iobroker Variable }); // function ende
  • JSON Wert mit Blockly schreiben

    41
    2
    0 Votes
    41 Posts
    4k Views
    K
    @paul53 und nochmal was gelernt, vielen Dank!!
  • InfluxDB - Datenmigration für neue Sensoren?

    18
    0 Votes
    18 Posts
    1k Views
    W
    @marc-berg Danke, werde ich am WE gleich ausprobieren.
  • Zeitsteuerung mit An/Aus Intervallen und manuellem override

    5
    0 Votes
    5 Posts
    557 Views
    crunchipC
    @silbaer dann mach nen neuen Thread dazu auf, mit Details, wie, was und wo du installiert bzw gemacht hast
  • Kurze Frage zur Ressourceneinsparung, wenn dann Regel

    5
    0 Votes
    5 Posts
    477 Views
    paul53P
    @maduuto sagte: sondern Wired. Dann spielt der Duty cycle natürlich keine Rolle, aber unnötig versendete Telegramme erhöhen die Wahrscheinlichkeit von Kollisionen auf dem Bus, die wiederum zum wiederholten Senden der Telegramme führen.
  • [GELÖST] - Temperatur soll Heizung (Smart Plug) regeln...

    17
    1
    0 Votes
    17 Posts
    1k Views
    M
    @silbaer Okay, ich habe das gerade auch mal im Handbuch überflogen. Hört sich recht hilfreich an :) @Cinimod Okay, danke. Aber ja, das scheint wohl erst einmal unbrauchbar zu sein. War nur ein Gedanke, den ich hatte .
  • Momentanverbrauch auf 0 setzen nach 1 min

    10
    1
    0 Votes
    10 Posts
    861 Views
    S
    @jschmied Ich mache etwas ähnliches mit dem Stromverbrauch. Da wird auch der aktuelle Zählerstand genommen. Immer wenn sich der ändert, nehme ich den aktuellen Wert und ziehe den Vorigen Zählerstand ab. Dann hole ich mir den Zeitstamp der letzten Änderung des vorigen Wertes und ziehe den von dem Timestamp des aktuellen Wertes ab. Dann speichere ich den aktuellen Wert als vorigen Wert. Mit den beiden Differenzwerten habe ich den "Momentan"-Verbrauch. Bei dieser Art der Berechnung hast du immer das Problem, dass du nur in die Vergangenheit schauen kannst, d.h. den Zustand "kein Verbrauch" kannst du nicht zuverlässig feststellen. Ich glaube ich würde an deiner Stelle das Script für den m³ counter so ändern, das nach einer gewissen Zeit der Wert auf jeden Fall aktualisiert wird. Dann kannst du oberes Shema verwenden um den Momentanverbrauch zu errechnen. Schlägt der Timer zu und der Wert hat sich nicht geändert ist die Differenz 0 und der Momentanverbrauch dann auch. Doof ist dann nur, das beim nächsten mal hochzählen wahrscheinlich ein zu hoher Momentanverbrauch angezeigt wird. Da musst du wahrscheinlich ein bisschen mit den Zeiten spielen.
  • [Gelöst] Wert in dyn. schedule nicht vorhanden

    javascript
    2
    0 Votes
    2 Posts
    249 Views
    PeoplesP
    Für die, die es interessiert ;-) Habe es gelöst bekommen aber durch eine Änderung im Script (2 Funktionen), vielleicht braucht es mal jemand: In der ersten Funktion werden die schedules erstellt und übergeben an eine zweite Funktion dann die aktuelle Zeit beim Auslösen des Schedule-Befehls async function scheduleDeviceStates(){ try { for(var i = 0; i < devices.length; i++) { await clearExistingSchedules(devices[i].deviceName); if(getState(instanz + pfad0 + devices[i].deviceName + '.onTime1').val != 'OFF'){ deviceSchedules[devices[i].deviceName + '.onTime1'] = schedule({hour: getState(instanz + pfad0 + devices[i].deviceName + '.onTime1').val.split(':')[0], minute: getState(instanz + pfad0 + devices[i].deviceName + '.onTime1').val.split(':')[1]}, function (deviceID) { switchDevicesByTime(new Date().getHours() +':'+ new Date().getMinutes(),'onTime1'); }); deviceSchedules[devices[i].deviceName + '.offTime1'] = schedule({hour: getState(instanz + pfad0 + devices[i].deviceName + '.offTime1').val.split(':')[0], minute: getState(instanz + pfad0 + devices[i].deviceName + '.offTime1').val.split(':')[1]}, function () { switchDevicesByTime(new Date().getHours() +':'+ new Date().getMinutes(),'offTime1'); }); } if(getState(instanz + pfad0 + devices[i].deviceName + '.onTime2').val != 'OFF'){ deviceSchedules[devices[i].deviceName + '.onTime2'] = schedule({hour: getState(instanz + pfad0 + devices[i].deviceName + '.onTime2').val.split(':')[0], minute: getState(instanz + pfad0 + devices[i].deviceName + '.onTime2').val.split(':')[1]}, function () { switchDevicesByTime(new Date().getHours() +':'+ new Date().getMinutes(),'onTime2'); }); deviceSchedules[devices[i].deviceName + '.offTime2'] = schedule({hour: getState(instanz + pfad0 + devices[i].deviceName + '.offTime2').val.split(':')[0], minute: getState(instanz + pfad0 + devices[i].deviceName + '.offTime2').val.split(':')[1]}, function () { switchDevicesByTime(new Date().getHours() +':'+ new Date().getMinutes(),'offTime2'); }); } } } catch (error) { log(`Unexpected error - ${error}`, 'error'); } } Die zweite Funktion, schaltet dann in einem Intervall alle Elemente der Reihe nach durch, bei denen die Übermittelte Uhrzeit als Auslösezeit eingetragen ist. function switchDevicesByTime(swTime,dp){ var hours = swTime.split(':')[0] < 10 ? '0' + swTime.split(':')[0] : swTime.split(':')[0]; var minutes = swTime.split(':')[1] < 10 ? '0' + swTime.split(':')[1] : swTime.split(':')[1]; var swValue; var i =0; var DevicesInterval = setInterval(function() { if(i < devices.length){ log(hours+':'+minutes+'----------------'+dp) if(dp.substr(0,dp.length -1) == 'onTime'){ if(devices[i].deviceType == 'state') swValue = true; if(devices[i].deviceType == 'level') swValue = 100; } if(dp.substr(0,dp.length -1) == 'offTime'){ if(devices[i].deviceType == 'state') swValue = false; if(devices[i].deviceType == 'level') swValue = 0; } if(getState(instanz + pfad0 + devices[i].deviceName + '.'+dp).val.indexOf(hours+':'+minutes)!=-1){ if(getState(devices[i].deviceID).val != swValue)setState(devices[i].deviceID, swValue); } i++; }else { clearInterval(DevicesInterval); } }, 1000); // alle 1 Sekunden ausführen }
  • Air Quality Monitor alle 7 Minuten auslesen

    10
    3
    0 Votes
    10 Posts
    633 Views
    S
    Hallo, seit nun mehr 4 Stunden läuft die Abfrage zuverlässig ab. Danke euch allen [image: 1670079733296-air-quality4.jpg]
  • Befehl an Tasmota Berry Konsole senden

    blockly javascript
    1
    0 Votes
    1 Posts
    360 Views
    No one has replied

656

Online

32.6k

Users

82.3k

Topics

1.3m

Posts