Skip to content

Skripten / Logik

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

16.4k Themen 211.8k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 48k
    2k Themen
    48k Beiträge
    RaspiUserR
    @peterfido sagte in Abruf PSA Corsa Daten: vergleich doch mal die Javascripte miteinander ... da ich Null-Ahnung von der Materie habe müßte ich jeden einzelnen Befehl / dessen Funktion nachschlagen, das kann nur schief gehen. Ich hatte / habe die Hoffnung, dass ein Script-Spezialisten das ursprüngliche Script reparieren kann ... oder ich nutze deinen oder meinen Vorschlag ...
  • Hilfe für Skripterstellung mit Blockly

    6k 78k
    6k Themen
    78k Beiträge
    I
    Hallo Paul, beide Deiner Vorschläge funktionieren! Und auch Deine Beobachtung, dass, wenn man den Punkt vor UNREACH weglässt, auch STICKY_UNREACH mitgeliefert wird, stimmt. Ich könnte schwören, dass ich an dem Ausdruck seit Monaten nichts verändert habe. Vielen Dank!
  • Hilfe für Skripterstellung mit Node-RED

    952 13k
    952 Themen
    13k Beiträge
    HomoranH
    @fiddle sagte in [Gelöst]: Adapter per {Node Red | JS} (de)aktivieren: Ok, nicht als "Wert" schreiben, sondern als "Befehl". Dann scheint ihn das zu beeindrucken. du zeigst ja nichts, aber es geht mit true/false [image: 1763416200051-screenshot_20251117-224854_firefox.jpg] gesteuert über eigenen DP vom typ Bool
  • Dieses Thema wurde gelöscht!

    5
    0 Stimmen
    5 Beiträge
    37 Aufrufe
  • Sonne blendet -> Jalousie

    19
    0 Stimmen
    19 Beiträge
    640 Aufrufe
    UweRLPU
    @chris-1 sagte in Sonne blendet -> Jalousie: Wobei.... es scheint mir so, dass der Ansatz dahinter ein anderer ist.... Bei mir sollen die Jalousien prinzipiell immer oben sein, nur dann, wenn ich geblendet werde, Nunja ob du geblendet wirst ist ja ausschließlich von dir abhängig. Ob man sowas automatisieren kann ist fraglich. Am einfachsten stelle ich mir bei der Aufgabenstellung ein Alexa Komando bzw. vis-Bedienung vor die du auslöste wenn du geblendet wirst. Details zum Adapter selbst kann ich dir leider nicht beantworten weil ich diesen nicht selbst nutze. Ich habe per Blockly und vier Temperatursensoren (alle Himmelsrichtungen und Temperatur Differenz) einen Sonnenschutz kreiert der für mich funktionell ist.
  • History, InfluxDB Datenpunkte werden automatisch deaktiviert

    4
    0 Stimmen
    4 Beiträge
    117 Aufrufe
    T
    @homoran kann weg
  • Übersicht über DP Typen

    5
    0 Stimmen
    5 Beiträge
    219 Aufrufe
    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 Stimmen
    1 Beiträge
    308 Aufrufe
    Niemand hat geantwortet
  • Überleben Timeouts einen Restart?

    11
    0 Stimmen
    11 Beiträge
    648 Aufrufe
    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 Stimmen
    7 Beiträge
    503 Aufrufe
    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 Stimmen
    6 Beiträge
    362 Aufrufe
    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 Stimmen
    8 Beiträge
    471 Aufrufe
    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 Stimmen
    7 Beiträge
    632 Aufrufe
    Z
    @thomas-braun Ok vielen Dank. Ich werde es ausprobieren.
  • Lichtauswertung zählt gedimmte Lichter nicht

    2
    0 Stimmen
    2 Beiträge
    193 Aufrufe
    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 Stimmen
    15 Beiträge
    1k Aufrufe
    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

    Verschoben
    10
    0 Stimmen
    10 Beiträge
    1k Aufrufe
    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 Stimmen
    41 Beiträge
    4k Aufrufe
    K
    @paul53 und nochmal was gelernt, vielen Dank!!
  • InfluxDB - Datenmigration für neue Sensoren?

    18
    0 Stimmen
    18 Beiträge
    1k Aufrufe
    W
    @marc-berg Danke, werde ich am WE gleich ausprobieren.
  • Zeitsteuerung mit An/Aus Intervallen und manuellem override

    5
    0 Stimmen
    5 Beiträge
    521 Aufrufe
    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 Stimmen
    5 Beiträge
    407 Aufrufe
    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 Stimmen
    17 Beiträge
    1k Aufrufe
    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 Stimmen
    10 Beiträge
    789 Aufrufe
    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 Stimmen
    2 Beiträge
    235 Aufrufe
    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 }

908

Online

32.4k

Benutzer

81.5k

Themen

1.3m

Beiträge