Skip to content

Skripten / Logik

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

16.4k Topics 211.6k Posts

NEWS

Skripten / Logik

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 48k
    2k Topics
    48k Posts
    M
    @arnod Ja, die Abrechnung erfolgt durch den Netzbetreiber über den Stromanbieter. Aber ich (bzw. die Steuerung) muss die Zeiten berücksichtigen. Das macht ja nicht Tibber (oder welcher Stromanbieter auch immer). Die Steuerung müsste bei mir z. B. jetzt im Winter immer zwischen 0 und 4 Uhr den Batteriespeicher und ggf. das Auto laden ...
  • Hilfe für Skripterstellung mit Blockly

    6k 78k
    6k Topics
    78k Posts
    AsgothianA
    @MJAS said in Intelligentere Lösung gesucht - exakter Cronjob: Hallo zusammen, ich benötige bitte Hilfe bei einem Skript, welches mir exakt jede Viertelstunde einen Verbrauchswert, evtl. in separaten Objektpunkten, erfasst. Der normale Cronjob "alle 15 Minuten" ist mir hierfür nicht exakt genug. Zudem möchte ich die Möglichkeit haben, die Werte in einer Google Sheets Tabelle zu archivieren, d.h. die Objektpunkte sollen zum Tageswechsel in genannter Tabelle archiviert werden. Was ist an dem 'normalen' Cron nicht genau genug ? Wie ungenau ist das denn aktuell. Mein Weg ist bisher: Ich hab 96 Objektpunkte angelegt und hab 96 einzelne Cronjobs (00:00, 00:15, 00:30...) in einem Skript, die mir die Objektpunkte mit Daten befüllen. Ist natürlich ein wahnsinniger Aufwand. Aufwand, und letztendlich auch witzlos, weil der Eintrag */15 * * * * letztendlich genau das gleiche Ergebnis hat wie deine 96 Datenpunkte. Die Ungenauigkeiten kommen aus der Laufzeit im System, sprich der Zeit zwischen das OS erkennt das der Zeitpunkt erreicht ist und der Wert ist im DP gespeichert. Gibt es eine intelligentere Lösung, vielleicht mit einer Liste oder Array, die Objektpunkte zu speichern und auch für den "exakten" Cronjob ? Gibt es: Nutz den normalen Cron mit */15 * * * *, stell sicher dass: der Aktuelle Verbrauchswert bereits im Speicher ist (so das du den nicht aus dem Objektbaum oder sogar vom Gerät holen musst) sämtliche notwendigen Berechnungen bereits erfolgt sind das System ansonsten möglichst wenig Zeit-basierte Aktionen macht (sprich idealerweise genau einen cron-Job der zur vollen 1/4 Stunde aktiv wird. Die Systemzeit auf die µs exakt ist (viel Spass dabei) Das System sich zu dem Zeitpunkt idealerweise langweilt, und nicht mit shared resources arbeitet. (Also auf dedizierter Hardware nativ läuft, ohne Docker, VM, Proxxmox, etc, und auch nicht auf einem NAS) Unterm Strich stellt sich die Frage wozu das ganze ? Was muss mit so genauen Heartbeats geschehen das Verzögerungen im 100-300 ms Bereich (und das sollte hoch gegriffen sein) problematisch sind ? Danke schonmal im voraus. Gruß Martin A.
  • Hilfe für Skripterstellung mit Node-RED

    951 13k
    951 Topics
    13k Posts
    P
    @schnipsel71 Häng mal hinter Spots ein Debug-Node mit der Konfig komplettes Nachrichtenobjekt. Dann Alexa bitten, die Helligkeit auf 33 Prozent zu setzen. Die Ausgabe des Debug-Nodes hier posten. Beispiel: Wenn ich sage, Alexa, Gartenlicht 30 Prozent, kommt Folgendes raus: [image: 1761901683637-fb545bab-a095-455b-b86f-ad9759d6bdcb-image.png] Meine Rückmeldung an Alexa sieht so aus: [image: 1761901883296-bfd627c6-ff85-46e1-9475-0786afab94b2-image.png] Spoiler var nodeid = "idDesNodesGartenLicht"; var obj = JSON.parse(msg.payload); var ison=obj.on; var proz=obj.percentage; var hex=obj.rgb; var hell=parseInt(obj.bri*255/100); var color = []; color[0] = parseInt (hex.substring (0, 2), 16); color[1] = parseInt (hex.substring (2, 4), 16); color[2] = parseInt (hex.substring (4, 6), 16); var newMsg={ payload: '' } newMsg.payload= { nodeid: nodeid, on: ison, bri: hell, rgb: color } node.status({text:"on: "+ison+", proz:"+proz}); return newMsg;
  • [GELÖST] SSH-Befehle per Blockly absetzen

    8
    0 Votes
    8 Posts
    858 Views
    T
    Herzlichen Dank für eure Hilfe! Das Script von @falke69 hat mir sehr geholfen und auf dieser Grundlage funktioniert es jetzt. Ein Problem hatte ich unterdessen noch beim Switch gefunden: Hier war die IP einem falschen Interface zugewiesen und daher war der Switch darüber gar nicht zu erreichen, bzw. nur per MAC über upd ansprechbar/konfigurierbar. Zusätzlich dazu habe ich den ioBroker in das gleiche VLAN umgezogen wie das NAS, weil WoL ja nicht netzwerkübergreifend geht - das hatte ich gar nicht bedacht. Hat aber auch nicht geholfen, da der ioB in Docker läuft und daher eh ein anderes Netzwerk hat. Ein SSH-Key war hier mit dem Script gar nicht nötig, zumindest in Bezug auf diesen Switch. Jetzt hab ich schon mal eine funktionierende Grundlage und kann damit weiter testen und Funktionen ausarbeiten. Beste Grüße Marian
  • Benachrichtigung wenn Zeitstempel älter als ist …

    5
    0 Votes
    5 Posts
    403 Views
    C
    @paul53 thx
  • Blockly: Wert aus Datenpunkt in anderen Datenpunkt schreiben

    7
    0 Votes
    7 Posts
    446 Views
    F
    @paul53 ja, da ist dein JS Snippet schon schöner. Bin darin zwar kein Profi, aber diese 3 Zeilen verstehe ich noch. Vielen Dank für deine Unterstützung.
  • Raspberry über ip Adresse anwählen ohne Localhost

    7
    0 Votes
    7 Posts
    535 Views
    HomoranH
    @fummel sagte in Raspberry über ip Adresse anwählen ohne Localhost: Würde das einen sinn machen? dazu doch erst ei mal die Fakten bitte! wie bereits geschrieben geht localhost nur auf dem Rechner auf dem auch iob läuft. Das wäre dann nicht der Raspi mal eben mit einem Linux Befehl, der für einen Pi gedacht war installiert man nichts unter Windows. Was willst du also plattmachen?
  • Blockly Wert schreiben mit Verzögerung

    blockly
    6
    1
    0 Votes
    6 Posts
    424 Views
    F
    @codierknecht Danke! Jetzt hab ich auch die Änderung erkannt
  • [ALEXA]Raum erkennung und befehl ausführung in passenden Raum

    Moved
    9
    0 Votes
    9 Posts
    2k Views
    F
    @djmarc75 Super . Vielen lieben dank . Das hat wirklich geholfen . Bin eigentlich immer auf den neusten stand ,aber die wurde mir nicht angeboten
  • Stromverbraucher: zusammenzählen

    21
    3
    0 Votes
    21 Posts
    860 Views
    paul53P
    @mico sagte: Vom Typ Zeichenkette String also nicht Boolan Sie müssen vom Typ "Zahl" sein. @mico sagte in Stromverbraucher: zusammenzählen: Alexa dann schon gleich an der richtigen Stelle ein Komma in der Zahl setzt Von Alexa habe ich keine Ahnung.
  • Benachrichtigung aus Blockly nicht nach Zeitplan

    16
    1
    0 Votes
    16 Posts
    950 Views
    M
    Hallo @rumper! Kannst du dein endgültiges Blockly hier zum Nachbau einstellen? Das ist eine gute Idee, die ich bei mir auch gern umsetzen will. Danke dir!
  • Script parallel & unabhängig laufen lassen.

    Unsolved
    2
    0 Votes
    2 Posts
    170 Views
    D
    @arno-l du kannst sowohl das script dopelln, als aucb 2 instanzen laufen lassen. Aber ich vermute eher, dass du in deinem script noch irgenwo hard codiert entweder auf dieselbe quelle oder in dasselbe ziel schreibst. Im prinzip brauchst du das script auch nur einmal und kapselst das in ein object, bzw. Closure. Denn der code ist ja identisch, aber du willst quasi 2 verschiedene instanzen haben, also die internen Variablen kapseln. Also mach ein closure drum und rufe es dann 2 mal auf, mit den jeweils unterschiedlichen parametern. Wenn du dich damit beschäftigst, findest du auch ggf. Die stellte, wo noch was hard codiert ist
  • gelöschtes Script spuckt noch rum

    6
    0 Votes
    6 Posts
    324 Views
    BananaJoeB
    @mindthegap und im JavaScript Adapter kannst du einstellen das die Skripte ins Dateisystem gespiegelt werden sollen. Dann kannst du auch dort suchen (und sogar die Skripte ändern)
  • jawascript - Blockly nur Englisch? auf Deutsch umstellen.

    6
    1
    0 Votes
    6 Posts
    419 Views
    K
    @haus-automatisierung Danke Dir, also ein Bug ....
  • Probleme bei Skript

    3
    3
    0 Votes
    3 Posts
    307 Views
    S
    @homoran said in Probleme bei Skript: @schneidy1985 sagte in Probleme bei Skript: der Wert wird auch in den Datenpunkt geschrieben aber nicht als Zahl 123 sonden als String "123". konvertiere nach Zahl und die Meldung sollte verschwinden kannst du mir kurz einen tip geben wie ? ich stehe total auf dem schlauch gerade .... sorry für diese dämliche Frage EDIT: Hab es hin bekommen , danke dir vielmals für den Tip .... manchmal sieht man einfach nicht mehr den Wald vor lauter Bäumen
  • PV Überschuss Steckdose

    7
    0 Votes
    7 Posts
    657 Views
    kmxakK
    nochmal eine neue Version mit einem gleitenden Durchschnitt // Konfiguration var threshold = -1100; // Schwellenwert für den Stromüberschuss var averageTimeMinutes = 30; // Zeitraum für den Durchschnitt in Minuten var powerOnTimeoutMinutes = 30; // Timeout für das Einschalten in Minuten, X Minuten bleibt das Gerät definitiv an. var powerOffTimeoutMinutes = 5; // Timeout für das Ausschalten in Minuten, X Minuten bleibt das Gerät definitiv aus. var devicePowerConsumption = 400; // Leistungsaufnahme des Gerätes in Watt var debugMode = false; // Debug-Modus ein-/ausschalten var entpreller = 0; var istAn = false; var averagePower = []; on({ id: [].concat(['sonoff.0.Hichi_Stromzähler. _16_7_0']), change: 'ne' }, async (obj) => { var value = obj.state.val; var timestamp = obj.state.ts; var deltaTime = 0; if (averagePower.length > 0) { var lastTimestamp = averagePower[averagePower.length - 1].timestamp; deltaTime = (timestamp - lastTimestamp) / (1000 * 60); } var powerChange = 0; if (averagePower.length > 0) { var lastValue = averagePower[averagePower.length - 1].value; powerChange = value - lastValue; } var powerChangeRate = deltaTime > 0 ? powerChange / deltaTime : 0; averagePower.push({ value: value, timestamp: timestamp }); if (averagePower.length > averageTimeMinutes) { averagePower.shift(); } var sumPowerChange = averagePower.reduce((acc, curr, index, array) => { if (index < array.length - 1) { return acc + (curr.value - array[index + 1].value); } else { return acc; } }, 0); var average = Math.round(sumPowerChange / averagePower.length); // Debug-Protokollierung für den aktuellen Wert des Stromzählers if (debugMode) { console.log("Aktueller Wert des Stromzählers: " + value); } // Debug-Protokollierung für den Durchschnitt if (debugMode) { console.log("Durchschnitt über " + averageTimeMinutes + " Minuten: " + average); } if (entpreller == 0 && istAn == false && average < (threshold + devicePowerConsumption) && compareTime('10:00', '19:00', 'between', null)) { entpreller = 1; setState('sonoff.0.Gosund_16A_3.POWER', true); istAn = true; console.log('PV Steckdose ein! Stromüberschuss vorhanden.'); sendTo("telegram.0", "send", { text: 'PV Steckdose ein! Stromüberschuss vorhanden.' }); setTimeout(() => { entpreller = 0; }, powerOnTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden } if (entpreller == 0 && istAn == true && average > (threshold - devicePowerConsumption)) { entpreller = 1; setState('sonoff.0.Gosund_16A_3.POWER', false); istAn = false; console.log('PV Steckdose aus! Kein Stromüberschuss vorhanden.'); sendTo("telegram.0", "send", { text: 'PV Steckdose aus! Kein Stromüberschuss vorhanden.' }); setTimeout(() => { entpreller = 0; }, powerOffTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden } });
  • Shelly Plus 1PM - BLE-Daten per MQTT an ioBroker

    5
    0 Votes
    5 Posts
    1k Views
    haus-automatisierungH
    @66er sagte in Shelly Plus 1PM - BLE-Daten per MQTT an ioBroker: Solange neue Shelly-Geräte oder -Features noch nicht im Shelly-Adapter integriert sind, geht es eben damit nicht. Zeig mal bitte dein Script auf dem Shelly für den Beacon-Mode. Die normalen Funktionen der Shelly-BLU Geräte kann man ja über den Adapter (mit einem Script auf dem Shelly) integrieren: https://forum.iobroker.net/topic/69212/shelly-6-6-0-mit-blu-geräten-bluetooth-low-energy https://github.com/iobroker-community-adapters/ioBroker.shelly/blob/master/docs/en/ble-devices.md
  • Licht in unterschiedlichen Farben blinken

    3
    0 Votes
    3 Posts
    434 Views
    A
    Danke ich nutze den Zigbee Adapter. Da kann ich die Funktion nicht finden.
  • Steuer Wert bei Über ,zurück zum alten Wert, bei unter UNter

    3
    0 Votes
    3 Posts
    205 Views
    C
    @codierknecht Merci dir.
  • [gelöst] Schaltbare Steck. mit Leistungsmesser Ausschalten

    6
    1
    0 Votes
    6 Posts
    496 Views
    E
    @codierknecht @paul53 Vielen Dank für die einfache Lösung und die Erklärung dazu! Funktioniert.
  • Anfängerfrage; Script regelmäßig wiederholen

    17
    0 Votes
    17 Posts
    600 Views
    CodierknechtC
    @rasc Unterhalb von 0_userdata.0 legt man seine eigenen Datenpunkte an. Ich habe mir dort einen mit Namen "Icon" angelegt, um den Dateinamen zu speichern. SoC ist der Datenpunkt, der den Ladezustand (State of charge) der Batterie liefert. Wo das bei herkommt, solltest Du am besten wissen
  • ioBroker Datenpunkt über Synology Aufgabenplaner abfragen

    Unsolved
    3
    0 Votes
    3 Posts
    310 Views
    R
    @peterfido Danke hat funktioniert. Sorry, für die späte Antwort aber ich habe den Post erst jetzt gelesen.
  • Velux Homekit_Python Script einbinden

    4
    0 Votes
    4 Posts
    495 Views
    F
    @psimon Hast du es hinbekommen mit der Einbindung? Kannst du mir verraten wie du die Fernbedienungen am Gateway angelernt hast? Hab es nach Anleitung von Velux gemacht, die Fernbedienungen scheinen aber bei der Abfrage per Pythonscript nicht auf. Kann also nicht sagen ob es funktioniert hat. Home App selber habe ich wegen fehlender Hardware nicht.

270

Online

32.4k

Users

81.3k

Topics

1.3m

Posts