@tony63526 Durch Anklicken von "mit Verzögerung" und setzen der Verzögerungszeit (hier 15 Minuten) setzt Du einen Timer, der erst nach Ablauf der Zeit das Kommando ausführt (in Deinem Beispiel wird also erst nach 15 Minuten der "Switch" auf "false" gesetzt). Wenn während dieser Verzögerung das Kommando ein weiteres Mal gestartet wird (was ja durchaus passieren kann z.B. wenn das durch einen Taster oder Bewegungsmelder ausgelöst wird), dann würde ein 2. Timer gestartet und das kann sich dann schnell zu vielen fast parallelen Timeouts aufaddieren. Durch Anklicken von "löschen, falls läuft" wird das verhindert und nur genau ein neues Timeout gestartet, vorherige werden abgebrochen.
NEWS
Best posts made by Ahnungsbefreit
-
RE: Blockly, löschen falls läuft
-
RE: Einstiegsfrage: Skript auslösen mit Alexa Routine
@rtwl Es gibt 2 Möglichkeiten, beide gehen über den Alexa2 Adapter, also ohne cloud/iot:
-
Du triggerst auf Veränderung von
alexa2.0.History.summary
und prüfst dann den Text auf das Suchmuster (also zum Beispiel "Lammellen schräg stellen") oder -
Du triggerst auf "wahr" des Datenpunkts, den jede Routine in den Datenpunkten des Alexa2-Adapters hat also nach dem Schema
alexa2.0.Echo-Devices.<SerNo>.Routines.<RoutineSerNo>
-
-
RE: blockly eleganter machen
@mickym @dos1973 ich nutze keine Shellys deswegen kenne ich die Objektstruktur nicht aber ich stelle mir das etwa so vor:
Der Selektor muss bestimmt noch angepasst werden, habe mir das aus dem Screenshot zusammengesponnen...
-
RE: Vielzahl von Aliasen schnell erstellen
@markus84 Das ist doch mal wieder die tolle ioBroker Community: Es gibt keine Lösung "out of the box", wie ich oben schon geschrieben habe, und trotzdem hast Du ruck-zuck Hilfe mit einem genau auf Deinen Fall zugeschnittenen Script!
Ohne Leute wie @liv-in-sky und @paul53 wäre das nicht möglich, danke!
-
[Anleitung] Enphase Solar in ioBroker
Hallo,
seit Oktober 2022 ist meine Enphase Solaranlage in Betrieb mit 8,5 kWp und 3,5kWh Speicher. Von Anfang war klar, das Ding sowie die zeitgleich mit installierte Wallbox "Vestel EVC04" muss in ioBroker integriert werden. Für die Wallbox habe ich das jetzt über Modbus gelöst und bin damit noch nicht so 100% zufrieden, aber das ist ein anderes Thema.
Zur Integration von Enphase habe ich verschiedene Wege probiert:
- Die Nutzung der Enphase eigenen API: Keine Lösung, da a) sehr teuer und b) keine Echtzeitdaten
- Die (nicht offiziell dokumentierte) API zur lokalen Anlage per Script abfragen: Keine Lösung, erschien mir zu aufwändig und muss dauernd aktualisiert werden bei Änderungen der API
- Bereits existierende Integration dieser lokalen API in HomeAssistant via HASS Adapter einbinden: Hat zumindest Ende 2022 mit meiner Anlage (Wechselrichter mit Firmware 7.x) nicht funktioniert
- Bereits existierende Integration dieser lokalen API in Homebridge via HAM Adapter einbinden: Hat ebenfalls nicht funktioniert. Vermutlich weil das HM Plugin eine eigene Homebridge Instanz braucht und damit kommt der Adapter nicht zurecht. Wenn das mal gehen sollte, steige ich gerne um
- Bereits existierende Integration dieser lokalen API in eigenständig laufende Homebridge via MQTT in ioBroker einbinden: Das hat dann endlich funktioniert
Die MQTT Daten haben ich dann über ein Script in einzelne Datenpunkte aufgespalten, das habe ich hier schon einmal gepostet
Der Rest ist dann wie üblich: Datenpunkte in inFlux loggen, Grafana, Scripting etc...
Ich hoffe, das hilft auch anderen Enphase Nutzern...
-
RE: ID vom Selektor: Liste trotz "für jeden" Schleife?
@haus-automatisierung @paul53 Danke für die schnelle Antwort. Ich habe mir jetzt so geholfen:
Und arrayConcat macht einfach genau das:
return arr1.concat(arr2);
Danke!
-
RE: [gelöst] Script "Schrott" durch Absturz
@aiouh Schon mal im "Global" Ordner nachgeschaut (Expertenmodus an im Script Adapter, damit der sichtbar wird)?
-
RE: meine Skripte funktionieren nicht mehr :-(
@TheDuke Sorry wenn ich noch mal einen hinterher schiebe: Wenn Scripte nicht im "global" Ordner liegen, kommen sie sich auch nicht in die Quere bei gleichen Deklarationen. Und dort sollten auch nur die Scripte liegen, auf die Du wirklich von allen anderen Scripten aus zugreifen willst, sonst nix.
-
[Vorlage] Script: JSON-->Datenpunkte mit sync
Hallo zusammen,
ich beschäftige mich seit einiger Zeit damit, Daten aus meiner ENPHASE Photovoltaik Anlage zu extrahieren und damit dann die üblichen "smarten" Sachen zu machen wie Visualisierung, Statistik, Überschussladen etc.
Nach einigem Experimentieren bin ich als einzig wirklich zielführende Lösung bei einem Plugin für Homebridge gelandet, das aber leider nicht über den HAM Adapter funktioniert (es könnte etwas damit zu tun haben, dass das Plugin eine "Child Bridge" startet, aber das ist eine andere Diskussion) sondern nur über eine eigenständige Homebridge Instanz in einer eigenen VM und diese liefert dann über MQTT richtig viele Daten, verteilt auf 12 Datenpunkte mit JSON Struktur und jeder dieser JSON-Sätze hat zwischen 4 und etwa 50 Attribute. Das ist schön, aber etwas unhandlich für die Weiterverarbeitung. Zudem habe ich keine Doku für die Struktur gefunden und muss öfter mal andere Datenpunkte versuchsweise auswerten, um die Richtigen zu finden.
Lange Rede, kurzer Sinn: Aus dieser Aufgabe ist ein einfaches JavaScript enstanden, das das Extrahieren solcher Daten und Abbilden auf eigene Datenpunkte vereinfacht, in dem man die zu extrahierenden Daten in eine Array von Objekten einträgt, Quell- und Zielpfad definiert und das Script startet.
Danach werden die Zieldatenpunkte angelegt, wenn sie nicht schon existieren und über einen "$elektor" ein Trigger erzeugt, der dann dafür sorgt, dass die eigenen Datenpunkte immer aktualisiert werden, wenn neue JSON Daten geliefert worden sind. Da das schnell recht viel Ressourcen ziehen kann bei den Datenmengen habe ich das noch etwas optimiert, um nur dann die ganze Liste der Datenpunkte auf mögliche Aktualisierungen abzuklappern, wenn mindestens einer der relevanten JSON Datenpunkte aktualisiert wurde. Ich prüfe im Script nicht, welcher der Datenpunkte innerhalb des JSON geändert wurde, sondern aktualisiere/ändere immer alle Datenpunkte, die aus diesem JSON "gefüttert" werden.
Vielleicht kann das ja auch für Andere nützlich sein, ich wollte gerne der Community mal etwas zurück geben auf diesem Weg. Details zu ENPHASE demnächst in einem eigenen Thread.
'use strict'; const mqttPath = 'mqtt.0.envoy.Envoy-S.'; // Quellpfad mit den JSON Daten, muss nicht aus MQTT kommen const userPath = '0_userdata.0.envoy.'; // Zielpfad für die Datenpunkte, die einzelne Attribute der JSON Struktur repräsentieren /* Beispiel: Wenn "mqtt.0.envoy.Envoy-S.Production" enthält { "wattHoursToday": 2765, "wattHoursSevenDays": 25747, "wattsNow": 1601 } und wenn man diese Werte unter 0_userdata.0.envoy.Production.wattHoursSevenDays usw. in eigene Datenpunkte schreiben möchte, dann könnte das Array mit den Objekten wie folgt aussehen: const mapArr = [ { topic: 'Production', attr: 'wattHoursSevenDays', dpId: 'Production.wattHoursSevenDays', dpType: 'number', dpUnit: 'Wh', dpDef:0, dpFactor:0 }, { topic: 'Production', attr: 'wattHoursLifetime', dpId: 'Production.wattHoursLifetime', dpType: 'number', dpUnit: 'Wh', dpDef:0, dpFactor:0 }, { topic: 'Production', attr: 'wattsNow', dpId: 'Production.wattsNow', dpType: 'number', dpUnit: 'W', dpDef:0, dpFactor:0 }, ]; Dabei haben die Attribute die folgende Bedeutung: topic: Der letzte Teil des Namens des Datenpunktes, auf den getriggert werden soll, also der Teil nach dem, was in mqttPath steht. Bitte beachten, dass dies wirklich ein Datenpunkt sein muss, kein Folder/Channel etc. attr: Das JSON Attribut, das gelesen werden soll dpID: Der letzte Teil des Namens des Datenpunktes, in den geschrieben werden soll, also der Teil nach dem, was in userPath steht dpType: Typ des zu schreibenden Datenpunktes, also z.B. 'number', 'string', 'boolean' dpUnit: Einheit des zu schreibenden Datenpunktes, also z.B. 'Wh', 'V' dpDef: Der Default Wert des zu schreibenden Datenpunktes, mit dem der Datenpunkt initialisiert wird dpFactor: Für Datenpunkte vom Typ Number ein Faktor, mit dem Quellwert multipliziert wird. Damit kann man z.B. von Watt in Kilowatt umrechnen oder auch das Vorzeichen umdrehen. ACHTUNG: Für alle anderen Typen von Datenpunkten MUSS hier eine 0 stehen! */ // Hier die JSON Daten eintragen, die unter "<userPath>.<dpId>" gespeichert werden sollen und die Beispieldaten rauswerfen const mapArr = [ { topic: 'Production', attr: 'wattHoursSevenDays', dpId: 'Production.wattHoursSevenDays', dpType: 'number', dpUnit: 'Wh', dpDef:0, dpFactor:0 }, { topic: 'Production', attr: 'wattHoursLifetime', dpId: 'Production.wattHoursLifetime', dpType: 'number', dpUnit: 'Wh', dpDef:0, dpFactor:0 }, { topic: 'Production', attr: 'wattsNow', dpId: 'Production.wattsNow', dpType: 'number', dpUnit: 'W', dpDef:0, dpFactor:0 }, ]; // Ab hier nichts mehr ändern! let uniqueListOfTopics = new Set(); // Datenpunkte anlegen, wenn noch nicht vorhanden for (const [i,e] of mapArr.entries()){ createState(`${userPath+e.dpId}`, { name: `${e.dpId}`, type: `${e.dpType}`, unit: `${e.dpUnit}`, def: `${e.dpDef}`}); uniqueListOfTopics.add(e.topic); // log(`${userPath+userPrefix+e.dpId}`); } $(`state[id=${mqttPath}*]`).on(async function (obj) { const value = obj.state.val; const topic = obj.id.split('.').pop(); // log(topic); if (uniqueListOfTopics.has(topic)) { for (const [i,e] of mapArr.entries()){ if(e.topic === topic){ // log(topic); const valToRead= getAttr((function () { try {return JSON.parse(value);} catch(e) {return {};} })(), e.attr); // log(valToRead); setState(`${userPath+e.dpId}`, e.dpFactor? valToRead * e.dpFactor : valToRead , false); } } } });
-
RE: Alexa2 Routinen "unknown"/ Blink Doorbell Trigger
@markusk zufällig arbeite ich gerade genau an der gleichen Fragestellung.
Also: IFTTT scheidet zumindest zur Zeit aus, da zumindest Stand Montag die Doorbell überhaupt nicht unterstützt wird, noch nicht einmal als Kamera. Mit den anderen Blink Kameras arbeitet das aber problemlos und mit geringer Latenz bei mir schon seit Monaten. Evtl. stelle ich das später um, wenn ich das auch "direkt" über Alexa2/iot schaffen würde.
Ich schaffe es jetzt, im ioB ein Script zu triggern, wenn die Klingel gedrückt wird und mache das auf folgendem Weg:
-
In ioB einen Datenpunkt unter 0_userdata vom Typ Boolean, Role switch anlegen. Achtung, der "Native" Teil muss existieren, wenn auch leer:
"native": {},
-
Alexa nach neuen Geräten suchen lassen, damit der Datenpunkt als "Smart Home Gerät" in der Alexa App exisitiert
-
Eine Routine in der Alexa App anlegen, die auf die Blink Haustürklingel reagiert und dann einfach nur den Datenpunkt aus Punkt 1 auf "an" setzt
-
Ich sehe die Routinen und Geräte im Alexa2 Adapter (möglicherweise hängt Dein Problem mit dem im Forum diskutierten Problem zusammen?) aber selbst wenn das nicht ginge, wäre das kein Problem denn mein Script nimmt jetzt einfach den Datenpunkt aus Punkt 1 als Trigger (auf Aktualisierung triggern) und kann darauf reagieren
-
Man könnte jetzt in dem Script das Kamerabild/ton direkt anschalten, ich werde aber zunächst einfach einen aktuellen Snapshot von Kamera holen und will den auf Alexa via "My Page" Skill anzeigen mit der Option, das Livevideo per Button anzuschalten. An diesem Teil arbeite ich noch, den Snapshot will ich via "Blinkpy.py" holen und habe dafür ein kleines Python Programm geschrieben, das Blinkpy per Kommandozeile aufrufbar macht mit verschiedenen Parametern
-
Latest posts made by Ahnungsbefreit
-
RE: Enphase / Envoy / IQ-Gateway Solar Blockly Skript
@negalein Ich habe eben noch mal nachgeschaut, ich nutze tatsächlich 5-Sekunden Takt!
-
RE: [Anleitung] Enphase Solar in ioBroker
@negalein Am Ende bekommst Du wohl mehr oder weniger die gleichen Daten. Als ich das implementiert habe, gab es das Script noch gar nicht.
Und das Homebridge Plug-In wird wohl von Vielen genutzt und dauernd weiter entwickelt. Das ioB Script hat dagegen wohl weniger Nutzer, ist dafür aber nicht von einer weiteren Komponente (Homebridge) abhängig.Also Geschmackssache...
-
RE: Enphase / Envoy / IQ-Gateway Solar Blockly Skript
@negalein Das kann man einstellen, aber ich nutze auch 1-Minuten Takt, das reicht doch!
-
RE: Enphase / Envoy / IQ-Gateway Solar Blockly Skript
@rollod Ich kann mich ja irren, aber soweit mir bekannt, funktioniert SourceAnalytix nur mitsummierenden Zählern, also so etwas mit kWh. Genau für solche Werte (von Enphase, aber nicht über dieses Script, meinem Stromzähler, Tasmota-Messsteckdosen etc.) nutze ich das und das funktioniert einwandfrei. Um aus dem aktuellen Wert den Gesamtwert pro Zeiteinheit (Tag, Woche, ...) zu errechnen, müsste man ja sehr hochauflösend integrieren. Das macht meines WIssens SourceAnalytix nicht.
Edit: Ich meinte natürlich kWh, nicht kW/h.
-
RE: Blockly Unterfunktion/Aufruf extern oder mehrere Trigger?
@eubecker Natürlich geht das mit 2 und mehr Triggern. Beispiel:
Über "Objekt ID" kannst Du dann abfragen, welcher Trigger ausgelöst hat.
-
RE: Bei einem bestimmten wert eine andere zahl ausgeben für VIS
@higgens0815 In dem Du nicht den Original-Wert verwendest, sondern ein Alias erstellst und darin umrechnest. Such mal hier im Forum, dafür gibt es jede Menge Beispiele
-
RE: NSPanel - Irritiert? Schaltausgänge
@martinp said in NSPanel - Irritiert? Schaltausgänge:
knapp 12 € zum Zeitpunkt, als ich das schreibe.
Nein, das ist der Preis für den Aufsteller (rechts unten auswählbar). Das Panel selbst kostet dort gerade 68.86 und das ist eigentlich ein "normaler" Preis.
Aber die Beschreibung ist da etwas kryptisch ...
Tja, willkommen bei AliExpress...
-
RE: Native Lösung zum parsen von JSON?
@horst-1 Alternativ könnte Dir vielleicht mein Script hier helfen: https://forum.iobroker.net/topic/62779/vorlage-script-json-datenpunkte-mit-sync
-
RE: Basic iframe Link von unterwegs
@uhoffmann29 Du hast 2 Möglichkeiten:
-
Du nutzt ein VPN (z.Wireguard, das ist ja in der Fritzbox verfügbar), wenn Du iobroker.net unterwegs aufrufst
-
Wie Du schon angesprochen hast, über eine Datenbank (History, SQL, Influx) und eCharts zur Visualisierung.
-