@da_woody Danke für den Hinweis - erledigt.
NEWS
Best posts made by MaThoPa1973
-
RE: Gesamtes System "flattert"
-
RE: Flot-Diagramm mit logarithmischen y-Skala
So Leute,
wie ich ja auch bereits vor meinem Beitrag feststellen musste, gab es in der Vergangenheit schon mehrfach die Fragestellung nach einer logarithmischen Skala in einem Flot-Diagramm - jedoch allesamt ohne nennenswerten Lösungsansatz. Deshalb habe ich mir mal ein paar Gedanken gemacht und, wie ich denke, eine brauchbare Lösung gefunden. Und so freue ich mich auch der Community nun mal etwas zurückgeben zu können.Vorweg - ich bin ganz weit weg davon entfernt mich als versierten Anwender oder Profi zu bezeichnen - Lichtjahre - Galaxien. Wenn Ihr also dann bei Durchlesen meines Lösungsansatzes Möglichkeiten seht diesen zu verbessern - so dürft Ihr das herzlich gerne, doch bitte mit dem gebotenen Respekt einander gegenüber. Und für konstruktive Kritik bin ich immer und gerne empfänglich... auch ich möchte mich gerne versuchen weiter zu entwickeln.
Also:
Ausgangssituation wie oben beschrieben, Strombezug/Stromeinspeisung-Werte und PV-Ertragswert sollen grafisch dargestellt werden. Da der Wert der Stromeinspeisung aus dem Stromzähler als Negativ-Wert kommt hatte ich diesen in der Vergangenheit auch als Negativ-Wert im Diagramm dargestellt. Da ich jedoch nur eine kleine PV-Anlage (sogenanntes Balkonkraftwerk mit 600Wp) habe, der Strombezug hingegen bei Betrieb von Waschmaschine, Trockner, Kaffeevollauutomat etc. schnell über 2000W geht (in Kombination auch gerne über 5000W) ist die y-Skala der Diagramme recht weit gespreizt und der Hauptbereich wird quasi nur noch minimalistisch dargestellt... unbefriedigend.
Als erstes habe ich den Vorschlag von @badsnoopy667 aufgegriffen und lasse mir nun die Einspeisung als Positivwert anzeigen - hierzu gehe ich hin und mache über Blockly eine Prüfung, ob der "Strombezugswert" negativ ist - wenn ja, dann multipliziere diesen mit (-1) und schreibe den Wert in einen zuvor manuell erzeugten Datenpunkt.Und nun kommt das "Herzstück".
Aktueller Strombezug, PV-Ertrag und vorgenannter Datenpunkt mit dem Einspeisewert stehen nun zur Verfügung.
Zu jedem erzeuge ich einen weiteren Datenpunkt, welcher durch Blockly-Prüfung- und Berechnung gefüllt wird. Diese Datenpunkte greife ich dann im Flot-Editor für die Diagramm-Darstellung auf.
Die y-Skala setze ich für alle drei Werte nur von 0 bis 4 (!) - reicht für meine Werte und eine Skalierung bis 10.000W (10kW). Wer mehr benötigt müsste diese dann z.B. von 0 bis 5 setzen.
Unten angefügt habe ich den Blockly-Quelllcode für die Berechnung und die Werteintragung des Strombezugs, da dieser die "größte Range" hat und die logarithmische Skalierung bis 10kW.
Ich gehe als erstes hin und prüfe ob der momentane Wert <10 ist, ist dies der Fall, dann ist dieser Wert durch 10 zu teilen. Trifft dies nicht zu geht es in die nächste Prüfabfrage, nämlich ob der Wert <100 ist. Ist dies zutreffend, teile den Messwert durch 100 und addiere 1 hinzu. Sollte der Messwert jedoch nicht <100 sein geht es in die nächste Prüfstufe weiter, in welcher abgefragt wird, ob der Messwert <1.000. Wenn dies zutreffend ist, wird der Messwert durch 1.000 geteilt und der Wert 2 hinzuaddiert. Sollte der Wert jedoch größer 1.000 so geht es in die (bei mir) letzte Prüfstufe, in welcher geprüft wird, ob der Wert <10.000 ist. Ist dies zutreffend, so ist der Messwert durch 10.000 zu teilen und der Wert 3 hinzu zu addieren.
Diese Vorgehensweise hat zur Folge, dass in den Datenpunkt die Messwerte wie folgt eingetragen werden:
Messwerte < 10 werden mit 0,01 bis 0,99 in den Datenpunkt geschrieben
Messwerte < 100 werden mit 1,00 bis 1,99 in den Datenpunkt geschrieben
Messwerte < 1.000 werden mit 2,0 bis 2,99 in den Datenpunkt geschrieben und
Messwerte < 10.000 werden mit 3,0 bis 3,99 in den Datenpunkt geschrieben.
Der Messwert 10.000 würde im Ergebnis den Wert 4,0 in den Datenpunkt schreiben.Wenn man das Diagramm, wie oben beschrieben, skaliert bekommt man an der y-Skala die Werte 0, - 0,5 - 1,0 - 1,5 - 2, - 2,5 - 3,0 - 3,5 - 4,0 angezeigt. Hierüber lege ich in der Visualisierung einfach ein html-Text-Feld mit den eigentlichen y-Skala-Werten, die da lauten: 0 - 5 - 10 - 50 - 100 - 500 - 1.000 - 5.000 - 10.000.
Das Diagramm sieht dann wie folgt aus:
Wundert Euch bitte nicht über die Werte, es ist bei uns gerade 10:10 Uhr, grau verhangen und regnerisch. Daher kein sonderlicher PV-Ertrag. Aber Ihr könnt gut erkennen, dass die logarithmische Darstellung gut funktioniert. Das grüne Diagramm (PV-Ertrag) hat hier einen Wert von knapp 40 Wp und steht in der Skala entsprechend gut positioniert zwischen 10 W und 50 W, ebenso das rote Diagramm (Strombezug), was mit seinen rund 160 W näher bei der 100 W als der 500 W-Marke steht.
Der Hauptbereich - der in dem am meißten passiert - ist so entsprechend sehr gut dargestellt und die Werte sind vor allem zueinander auch in gleicher Relation. Würde jetzt die Sonne ordentlich scheinen, so würde das grüne Diagramm entsprechend größer, das rote kleiner und vielleicht auch noch das blaue Diagramm für die Einspeisung dargestellt werden.
Zum Schluss hier auch mal ein Bild des Blockly, auf Grund der Größe lässt es sich bei mir leider nicht mehr komplett in einem Bild darstellen, aber ich denke, der grundlegende Aufbau ist als solches erkennbar und für Euch reproduzierbar.
Ich hoffe mit diesem Beitrag dem ein oder anderen geholfen zu haben. Lob, konstruktive Kritik und Anmerkungen für Verbesserungen sind gerne willkommen.
Gruß
MarkusP.S.: Und hier nun mal einen Ausschnitt meiner Visualisierungmit den logarithmischen Strom-Werten, nachdem dann die oben beschriebene Methode heute erzeugt und implementiert wurde.
<xml xmlns="https://developers.google.com/blockly/xml"> <block type="create" id="6)r99,]0*4VmK(;qCpko" x="38" y="-337"> <field name="NAME">0_userdata.0.logBezug</field> <value name="VALUE"> <block type="math_number" id="#.avr!5.hfjGg]s8VT-N"> <field name="NUM">0</field> </block> </value> <value name="COMMON"> <block type="text" id="=xx:W5+KKgM:b$zB-esi"> <field name="TEXT">{"type":"number","read":"true","write":"true"}</field> </block> </value> <statement name="STATEMENT"> <block type="on_ext" id="ia^.md|!JM?fp#=8[7jF"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="J{bRc}-nMNuU9^tEf~/j"> <field name="oid">mqtt.1.iot.smartmeter.sensor.1.obis.1-0:16.7.0.255.value</field> </shadow> </value> <statement name="STATEMENT"> <block type="control_ex" id="4ejXAz*%GnZ2H`@HXnwS"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="aotc%),a4%nD#OGGPqnL"> <field name="oid">0_userdata.0.logBezug</field> </shadow> </value> <value name="VALUE"> <shadow type="logic_boolean" id="Mb?sq|f]L{c5*8M(fU[c"> <field name="BOOL">TRUE</field> </shadow> <block type="logic_ternary" id="%1KL*.ZD#}Sv{?K}/F*|"> <value name="IF"> <block type="logic_compare" id="gbaP3Z~p|Xj=:wP5jMF)"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="g/h3[MsP#lT}RjzV!Hg-"> <field name="ATTR">val</field> <field name="OID">mqtt.1.iot.smartmeter.sensor.1.obis.1-0:16.7.0.255.value</field> </block> </value> <value name="B"> <block type="math_number" id="PD@-S=wlzLt{KD5:c^Oe"> <field name="NUM">0</field> </block> </value> </block> </value> <value name="THEN"> <block type="logic_ternary" id="WWCYktVy*OK2{FVri1OP"> <value name="IF"> <block type="logic_compare" id="(ilIiLL7Kb[-|pekg,`M"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="a3)^dE9_}EET{bCxH~XN"> <field name="ATTR">val</field> <field name="OID">mqtt.1.iot.smartmeter.sensor.1.obis.1-0:16.7.0.255.value</field> </block> </value> <value name="B"> <block type="math_number" id="D,XSsV|HmxTP`#_bB+sC"> <field name="NUM">10</field> </block> </value> </block> </value> <value name="THEN"> <block type="math_arithmetic" id="K1Ta%RrGA7)~?^a9`!g~" inline="false"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="get_value" id="c$~`QMVrVK)0qi1XlC}T"> <field name="ATTR">val</field> <field name="OID">mqtt.1.iot.smartmeter.sensor.1.obis.1-0:16.7.0.255.value</field> </block> </value> <value name="B"> <shadow type="math_number" id="vAc;AT]7.T^9k(Lt!Lbw"> <field name="NUM">10</field> </shadow> </value> </block> </value> <value name="ELSE"> <block type="logic_ternary" id="cpf%mBwL[D@!gR1.^4LH"> <value name="IF"> <block type="logic_compare" id="Uu_I3d`?drw^Q.4Yq7-!"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="Y#!+e4NiD_`Z/Q)?)J4C"> <field name="ATTR">val</field> <field name="OID">mqtt.1.iot.smartmeter.sensor.1.obis.1-0:16.7.0.255.value</field> </block> </value> <value name="B"> <block type="math_number" id="9qoa3enG]4g2Z3PBsgF$"> <field name="NUM">100</field> </block> </value> </block> </value> <value name="THEN"> <block type="math_arithmetic" id="yGgaD/sP|Y``b%Oyum@-" inline="false"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="dw=sIT4O*l].7Z(@jAGO"> <field name="NUM">1</field> </shadow> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="9au~4adtE-P(pE$PkHs+" inline="false"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="get_value" id="I/fi9p0gOEtq[W_bbd)("> <field name="ATTR">val</field> <field name="OID">mqtt.1.iot.smartmeter.sensor.1.obis.1-0:16.7.0.255.value</field> </block> </value> <value name="B"> <shadow type="math_number" id="Vz7RA?Czia!uRAmvz=%N"> <field name="NUM">100</field> </shadow> </value> </block> </value> </block> </value> <value name="ELSE"> <block type="logic_ternary" id="KzLiEe(p]/[PT(?,v):4"> <value name="IF"> <block type="logic_compare" id="*`k92cnKB+A{g]BrIty="> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="3(G_R6~(`g0b4Fun^[G_"> <field name="ATTR">val</field> <field name="OID">mqtt.1.iot.smartmeter.sensor.1.obis.1-0:16.7.0.255.value</field> </block> </value> <value name="B"> <block type="math_number" id="sPa9w/m]16uvD,[C/OLP"> <field name="NUM">1000</field> </block> </value> </block> </value> <value name="THEN"> <block type="math_arithmetic" id="j|vCH*q^w(/mg7?!varg" inline="false"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="4F@}LcYU~U*pi4t~hH|;"> <field name="NUM">2</field> </shadow> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id=".^PwA`Bp(?:hPle#4@0!" inline="false"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="get_value" id=":Kry#`|`F[!BAuju%|Ec"> <field name="ATTR">val</field> <field name="OID">mqtt.1.iot.smartmeter.sensor.1.obis.1-0:16.7.0.255.value</field> </block> </value> <value name="B"> <shadow type="math_number" id="WMXH`{@UvUEn;LfuHK7`"> <field name="NUM">1000</field> </shadow> </value> </block> </value> </block> </value> <value name="ELSE"> <block type="logic_ternary" id="B0a@KzqtT8VVhaxZpE3X"> <value name="IF"> <block type="logic_compare" id="B[Ru;td^3a~0bs|?I]-="> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="YP;~h.fY0!emhR$h~+(1"> <field name="ATTR">val</field> <field name="OID">mqtt.1.iot.smartmeter.sensor.1.obis.1-0:16.7.0.255.value</field> </block> </value> <value name="B"> <block type="math_number" id="8V5F#_Rc::x82E.u)5DD"> <field name="NUM">10000</field> </block> </value> </block> </value> <value name="THEN"> <block type="math_arithmetic" id="cAa[q!5,{@lFHfNf%Yuf" inline="false"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="08wY{}l71^a|QRbiLiA!"> <field name="NUM">3</field> </shadow> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="#!T(_N)@7QFexmof#+Rh" inline="false"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="get_value" id="#y*c)susV]23?pHG;$*="> <field name="ATTR">val</field> <field name="OID">mqtt.1.iot.smartmeter.sensor.1.obis.1-0:16.7.0.255.value</field> </block> </value> <value name="B"> <shadow type="math_number" id="ZRiKX.)*?%CFO#?8=M0^"> <field name="NUM">10000</field> </shadow> </value> </block> </value> </block> </value> <value name="ELSE"> <block type="math_number" id="Xqh3`JNL#uW{qM*cvJ~K"> <field name="NUM">0</field> </block> </value> </block> </value> </block> </value> </block> </value> </block> </value> <value name="ELSE"> <block type="math_number" id=")a94AWUgjsP!d3AZ_osd"> <field name="NUM">0</field> </block> </value> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="(Ln}y3+**u`zp%6R@^yH"> <field name="NUM">0</field> </shadow> </value> </block> </statement> </block> </statement> </block> </xml>
-
RE: Xiaomi Trouver Vacuum Cleaner visualisieren
@joergh Danke für den Tip, ich werde Apollon77 mal anschreiben
Latest posts made by MaThoPa1973
-
RE: Skript löschen geht nicht - permissionError
@glasfaser Danke für den Hinweis... werde ich dann auch mal ein Update drüber ziehen
-
RE: Skript löschen geht nicht - permissionError
@glasfaser Danke, das hat geholfen.... dann muss ich jetzt nur den Hinweis auf das Update für den Admin-Adapter ignorieren - fällt mir ja eigentlich auch schwer, da ich mein System schon gerne aktuell halte.
-
RE: Skript löschen geht nicht - permissionError
@glasfaser das mit dem Admin-Adapter-Downgrade auf 6.2.12 habe ich sehr wohl gelesen, ich bekomme aber im Expertenmodus lediglich rückwärst bis 6.2.16 angezeigt - ich komme an die 6.2.12 nicht dran...
-
RE: Skript löschen geht nicht - permissionError
Hallo Leute,
auch bei mir tritt nun seit neuestem das Problem auf, dass ich weder selbst erzeugte Skripte noch unter Objekte einen Datenpunkt löschen kann. Nachfolgend meine Systemdaten:- PlatformBetriebssystem:linux
- Architektur:x64
- CPUs:4
- Geschwindigkeit:1695 MHz
- Modell:Intel(R) Core(TM) i3-4010U CPU @ 1.70GHz
- RAM:7.6 GB
- System-Betriebszeit:22:12:39
- Node.js:v14.20.0
- time:1664384122693
- timeOffset:-120
- Adapter-Anzahl:435
- NPM:v6.14.17
- Datenträgergröße:115.4 GB
- Freier Festplattenspeicher:101.0 GB
- Betriebszeit:00:00:52
- Aktive Instanzen:11
- Pfad:/opt/iobroker/
- aktiv:true
- _nodeCurrent:14.20.0
- _nodeNewest:14.20.1
- _nodeNewestNext:16.17.1
- _npmCurrent:6.14.17
- _npmNewest:6.14.17
- _npmNewestNext:8.15.0
Außerdem ist der aktuellste Admin-Adapter 6.2.22 installiert.
iob stop iob fix
habe ich auch schon durchgeführt, leider ohne Erfolg.
Ich bräuchte Eure Hilfe... zum Glück handelt es sich nur um ein paar Datenpunkte und Skripte, welche ich testweise erzeugt habe - aber auf meinem Live-System. Jetzt das System komplett neu aufsetzen möchte ich eigentlich nicht.
Gruß
Markus -
RE: ioBroker keine Verbindung zu Shelly's
@crunchip die Instanzen sind beide absolut mit identischen Werten aufgesetzt.
Ich habe nun beide Adapter-Instanzen gelöscht - alle Shellys nochmals überprüft, via web neu gestartet und abschließend einen Shelly-Adapter neu installiert. Jetzt sind wieder alle Shellys sichtbar und arbeiten auch über iobroker einwandfrei - auch hier habe ich keine anderen Eintragungen vorgenommen wie zuvor auch.
Jetzt muss ich nur noch alle Skripte anpassen und die neuen Objekte hinterlegen.
Trotzdem vielen Dank für Deine Hilfe.
-
RE: ioBroker keine Verbindung zu Shelly's
@crunchip noch bevor ich die Shellys neu gestartet habe kamen in der 2. Instanz noch zwei Shellys hinzu, welche auch reagieren, bzw. einer davon ist ein Shelly PlugS mit Messfunktion - der gibt auch die Werte aus. Ein Neustart der übrigen Shellys hat leider keinen Erfolg gezeigt.
Auch weiß ich nicht, weshalb die zweite Instanz jetzt mehr Shellys zeigt als vorhin... sonst würde ich das gerne wiederholen, um so auch die übrigen Shellys wieder in den ioBroker zu bekommen.
-
RE: ioBroker keine Verbindung zu Shelly's
@crunchip Hallo, ja, die IP's stimmen noch, hatte eine Sicherung der FB-Parametrierung auf die neue FB gespielt.
-
ioBroker keine Verbindung zu Shelly's
Systemdata Bitte Ausfüllen Hardwaresystem: Intel NUC-i3. Arbeitsspeicher: 8GB Festplattenart: SSD 115 GB Betriebssystem: Linux 11 Nodejs-Version: 14.20.0 NPM-Version: 6.14.17 Image genutzt: Ja Durch ein Unwetter kam es zu einer Überspannung in unserer Fritzbox 7390, weshalb ich gestern kurzer Hand auf eine Fristbox 7530 AX mit zwei Repeatern 1200 AX umgestellt habe.
Seit der Umstellung lassen sich die Shellys aus ioBroker heraus nicht mehr schalten, bzw. meine beiden Shelly-PlugS übertragen auch keine Messwerte mehr. Die Adapterinstanz (Version 6.0) steht auf grün.
In den Objekten scheinen alle Werte eingefroren. Ein Schalten aus der Objektebene verändert den physischen Schaltzustand nicht. Die Shellys sind alle über die Fritzbox erreichbar, lassen sich per App oder auch per Web schalten - nur eben nicht über ioBroker.
Denn Versuch in den Einstellungen der Shellys den ColoT peer umzustellen brachte keine Änderung:
Testweise hatte ich eine zusätzliche Shelly-Instanz versucht zu installieren. Ohne vorher die Shellys aus der ersten Instanz zu entfernen wurde mir in der zweiten Instanz nur ein Shelly angezeigt - dieses steht nun in beiden Instanzen, lässt sich jedoch nur aus der zweiten Instanz schalten.
Was kann ich machen damit entweder wieder alle Shellys über die erste Instanz laufen oder alternativ die anderen Shellys in die zweite Instanz zu bekommen?
Gruß
Markus -
RE: Wie lange keine Wertveränderung
@paul53 Danke vielmals, das werde ich als bald wie möglich mal testen. In welcher Rubrik finde ich diesen Timeout-Baustein? Bei System?
Irritierend finde ich nur das in einen Funktionsblock zusetzen, der auf eine Wertveränderung hin aktiv wird... aber der Wert sich ja in dem Moment eben nicht verändert und der Logik nach der Block nicht auszuführen wäre? Oder habe ich hier ein falsches Denken von der Wirkweise des Triggers?
Gruß
Markus -
Wie lange keine Wertveränderung
Hallo Leute,
Ich hätte da mal ein Problemchen.
Aus bisher noch nicht nachvollziehbaren Gründen verliert mein IR-Lesekopf seine WLAN-Verbindung, was zur Folge hat, dass die letzten übertragenen Werte in der Visualisierung "eingefroren" sind. Damit eine neue Verbindung hergestellt wird muss ich den IR-Lesekopf vom Strom trennen und wieder verbinden. Ursachenforschung geht natürlich weiter. Übergangsweise habe ich die Stromversorgung des IR-Lesekopfes nun in den Lastkreis eines Shelly 1 Pro gesetzt. So spare ich mir im Störfall (siehe oben) den Gang in den Keller und kann die Ab- und Zuschaltung mittels Shelly 1 Pro machen.
Nun ist aber noch das Problem, dass ich ja nicht ständig online bin, um die Datenübertragung vom IR-Lesekopf zu überwachen.
Eine Abfrage des Datenpunktes, welcher im Ergebnis den Text "Online" oder "Offline" ausgibt, hatte sich als sehr unzuverlässig erwiesen. Zu Testzwecken hatte ich mir eine Pushnachricht auf's Handy schicken lassen. 95% der Meldungen waren fehlerhaft.
Meine Idee wäre nun den Datenpunkt, wird mittels mqtt übertragen, welcher den Momentanverbrauch ausgibt, zu überwachen und, würde dieser z.B. länger als 30 Sekunden keine Veränderung aufzeigen, dann das Shelly 1 Pro ausschaltet und nach 5 Sekunden wieder einschaltet.
Den letzten Part, das Schalten des Shelly 1 Pro werde ich gewiss hingekommen. Aber wie kann ich die Routine erstellen, welche prüft, wie lange die letzte Wertveränderung her ist? Ich kann ja schlecht jede Wertveränderung als Trigger nehmen und ein Skript starten, was nach 30 Sekunden ausgeführt wird wenn keine weitere Änderung erfolgt ohne dass diese Änderung neuerlich als Trigger ein Skript ausführt. Das würde ja mit angrenzender Sicherheit zu einem Überlauf und Absturz des Systems führen, oder?
Aber wie könnte man das Problem lösen?
Danke vielmals für Eure Unterstützung
Gruß
Markus