Skip to content

Skripten / Logik

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

16.5k Themen 213.3k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Themen
    49k Beiträge
    haus-automatisierungH
    @bitwicht sagte in Plötzlich ReferenceError: request is not defined: Den Schedule habe ich zum Test gesetzt da ich mir auf die Schnelle nicht zu helfen wusste :-) Wenn Du gar keinen Trigger drumherum baust, wird die gesamte Logik ja bei jedem Script-Start einmalig ausgeführt. Dann musst Du gar nicht warten.
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Themen
    79k Beiträge
    I
    @peterfido Danke! Das wäre eine weitere Alternative, wenn ich mit dem TadoAdapter am Ende scheitere. Dann würde ich den Weg gehen wollen, das ganze via Matter zu lösen. Hab oben ja schonmal kurz erwähnt, dass ich schon einen Sonoff MG25 Thread Dongle hier liegen habe. Den habe ich allerdings noch nicht geflasht und im PI eingerichtet. Wenn es nur der Batteriestatus ist der fehlt, damit könnte ich leben. Den könnte ich mir ja dann immernoch aus dem TadoAdapter nehmen, wenn ich das möchte
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Themen
    13k Beiträge
    S
    welche Palette hast du installiert, damit du den "AND" Baustein hast?
  • [suche] Blockly Goto oder Stop

    7
    0 Stimmen
    7 Beiträge
    571 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
    365 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
    515 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
    691 Aufrufe
    Z
    @thomas-braun Ok vielen Dank. Ich werde es ausprobieren.
  • Lichtauswertung zählt gedimmte Lichter nicht

    2
    0 Stimmen
    2 Beiträge
    199 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
    548 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
    477 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
    858 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
    249 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 }
  • Air Quality Monitor alle 7 Minuten auslesen

    10
    3
    0 Stimmen
    10 Beiträge
    620 Aufrufe
    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 Stimmen
    1 Beiträge
    358 Aufrufe
    Niemand hat geantwortet
  • verpassten timer nach reboot ausführen

    1
    0 Stimmen
    1 Beiträge
    164 Aufrufe
    Niemand hat geantwortet
  • yr Wettervorhersage morgens/mittags/abends/nachts

    1
    2
    0 Stimmen
    1 Beiträge
    182 Aufrufe
    Niemand hat geantwortet
  • [Gelöst] - GetState in Schleife liefert zuerst false

    javascript
    13
    0 Stimmen
    13 Beiträge
    824 Aufrufe
    CodierknechtC
    @fastfoot Danke! :+1:
  • Lichtwecker mit alexa2

    23
    0 Stimmen
    23 Beiträge
    2k Aufrufe
    mickymM
    @renegade-0 sagte in Lichtwecker mit alexa2: @mickym OK, hast du mal eine vernünftige wiki für JSONata? nur das; https://docs.jsonata.org/overview Das hast Du sicher schon gefunden. Das try Ding nutze ich aber oft. Aber in Deinem Fall ist nicht viel zu tun. Einfach Eigenschaft der Nachricht *+-/ andere Eigenschaft der Nachricht usw. Also wenn Du Dein 1. Beispiel nimmst und die Eigenschaften: msg.pre_time = 10, msg.start = 20, msg.ende = 80 ist, dann berechnest Du das Delta pro Minute einfach [image: 1669749315445-ed402842-616b-4f2c-9e52-79e19aa9ee5e-image-resized.png] Spoiler [ { "id": "7ee6cbae1ec58d73", "type": "change", "z": "289f539dcc33814e", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "(ende-start)/pre_time", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 570, "y": 320, "wires": [ [ "817491f5d7cea76b" ] ] }, { "id": "182d6f4da623b547", "type": "inject", "z": "289f539dcc33814e", "name": "", "props": [ { "p": "pre_time", "v": "10", "vt": "num" }, { "p": "start", "v": "20", "vt": "num" }, { "p": "ende", "v": "80", "vt": "num" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "x": 370, "y": 320, "wires": [ [ "7ee6cbae1ec58d73", "e553c3b2eee51e91" ] ] }, { "id": "817491f5d7cea76b", "type": "debug", "z": "289f539dcc33814e", "name": "Delta/Min", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 760, "y": 320, "wires": [] }, { "id": "e553c3b2eee51e91", "type": "debug", "z": "289f539dcc33814e", "name": "Eingabe", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 560, "y": 260, "wires": [] } ]

705

Online

32.6k

Benutzer

82.2k

Themen

1.3m

Beiträge