AVM Steckdose 546e Benutzung und Verständniss des Readings POWER

Begonnen von jumperger, 19 November 2019, 10:51:09

Vorheriges Thema - Nächstes Thema

jumperger

Hallo,
Ich möchte den Wert des POWER Readings von meiner AVM Steckdose 546e farblich an den Wert anpassen.
Unter 10W --> BLAU
über 10W --> ROT
über 1600W --> GELB

dafür habe ich folgenden Code benutzt:

<div class="narrow"
data-type="label"
  data-device="FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9"
data-get="power"
data-limits='[10,1000,1600]'
data-colors='["blue","red","yellow"]'>
</div>

Leider wird die Leistung aber nur in weiss dargestellt.
Habe ich die Benutzung des Widgets Label falsch verstanden?
Oder liegt es an dem "W" welches im Reading übermittelt wird?

Die Ausgabe ist "0.71 W" wobei ich aber kein "data-unit" Attribut vergeben habe.   EDIT: Während des Schreibens hat die Heizung eingeschaltet und ist auf "591.58 W" hoch gefahren.

Die Raw Def lautet:
defmod FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 FBDECT FritzBox_AHA:24_65_11_CA_FD_E9 powerMeter,switch
attr FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 IODev FritzBox_AHA
attr FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 alias prise_cabanne_Fritz_546e
attr FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 event-min-interval power:120
attr FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 room FBDECT

setstate FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 on
setstate FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 2019-11-19 09:43:22 AIN 24:65:11:CA:FD:E9
setstate FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 2019-11-19 09:43:22 FBNAME Powerline-Cabanne
setstate FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 2019-11-19 09:43:22 FBPROP powerMeter,switch
setstate FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 2019-11-19 09:43:22 FBTYPE FRITZ!Powerline 546E
setstate FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 2019-11-19 09:43:22 ID 20001
setstate FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 2019-11-19 09:43:22 devicelock no
setstate FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 2019-11-19 09:43:22 energy 3361 Wh
setstate FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 2019-11-19 09:43:22 fwversion 06.50
setstate FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 2019-11-19 09:43:22 locked no
setstate FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 2019-11-19 09:43:22 mode manuell
setstate FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 2019-11-19 09:43:22 power 591.58 W
setstate FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 2019-11-19 09:43:22 present yes
setstate FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 2019-11-19 09:43:22 state on
setstate FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 2019-11-19 09:43:22 voltage 228.982 V


Danke für eure Erklärungen

OdfFhem

@jumperger

Vermutlich hilf das Attribut data-part ...


  data-part="1"

jumperger

Weder bei FBDECT, noch beim Widget SYMBOL, kann ich ein Attribut data-part in der Wiki oder Commandref finden.
Wo kann ich dazu Infos finden?

OdfFhem

Zitat von: jumperger am 19 November 2019, 10:51:09
Habe ich die Benutzung des Widgets Label falsch verstanden?

Wieso Widget SYMBOL?

Info zu data-type="label" gibt's unter https://wiki.fhem.de/wiki/FTUI_Widget_Label ...

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

jumperger

Schande über mein Haupt  :-[

Zur Erklärung des Fehlers, über dem Label liegt ein Symbol ( heating aus der oa ) welches ich ebenfals rot und blau einfärben wollte, hat aber auch nicht geklappt, deswegen der Versuch mit Label da dies in den Wiki-Beispielen zu Label fast 1:1 aufgeführt ist.
Ich hatte jetzt auf die Schnelle versäumt dass ich mein Code-Beispiel auf Label begrenzt habe.

amenomade

Mit Widget Symbol musst Du mit Regex in data-states arbeiten.
data-states='"[0-9]","[1-9][0-9]|1[0-6][0-9]{2}","1[1-6][0-9]{2}"'
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

jumperger

Danke für die RegEx, ich werde mich also auch dahingehen einlesen.

Jetzt aber zum Label und dem data-part welches ich eingefügt habe, hier der jetzige Code:


<div class="narrow"
data-type="label"
data-device="FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9"
data-get="power"
data-part="1"
data-limits='[10,1000,3600]'
data-colors='["blue","red","yellow"]'>
</div>


wenn das Reading jetzt 609,32 W übermittelt, wird dann durch data-part="1" nur das erste "Wort" des Readings übernommen, also 609,32 ?
Dann müsste doch das data-limits greifen mit dem Wert 1000 und entsprechen die Farbe ROT aus data-colors genommen werden ?

Leider ist dem nicht so, 609,32 wird in Blau dargestellt , aber ohne das "W" , also hat data-part funktioniert.

Könnt ihr mir helfen meinen Denkfehler zu finden?

amenomade

#8
data-part="([\d,]+).*"
Aber... ich weiss nicht wann data-part greift: vor data-limits, ohne nur zur Formattierung nach data-limits
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Ansonsten bleibt immer die Lösung, den Wert in einem userReading zu formattieren (W weg nehmen), und dieses userReading statt power in TabletUI zu benutzen
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

jumperger

#10
kurze Zusatzinfo, die Heizung hat jetzt ausgeschaltet und es werden nur noch 0.78W verbraucht.
Jetzt wird das Label (0.78) weiss dargestellt, also keine meiner Farben im data-colors

Vielleicht liegt mein Problem ja im Verständniss und der Syntax des data-limits

EDIT 1: wenn ich bei data-part die "1" durch "([\d,]+).*" ersetze wird "0" angezeigt anstatt 0.78

EDIT 2: wenn ich in data-limits='[0,1000,3600]' einsetze anstatt '[10,1000,3600]' wird der Wert (0 oder 0,78) blau eingefärbt.

Wie ist das zu erklären ? Wie funktioniert data-limits ?

EDIT 3: ein aktueller Verbrauch von 619,27 W wird auch blau dargestellt 🙁 bei data-limits='[0,1000,3600]'
kann es sein dass das Reading ein Textformat hat und kein numerisches und somit der Limit-vergleich nicht greift?

amenomade

#11
Naja.... wird der Wert im Reading mit Koma oder mit Punkt dezimal getrennt? Einmal schreibst Du Koma, einmal Punkt.... Werden Wert und "W" mit Leerzeichen getrennt oder nicht? Usw.
Natürlich muss man die Regex entsprechend schreiben. Und gegebenfalls greift data-limits nicht (mit Punkt ist es numerisch, mit Koma ist es nicht)

Hättest Du ein "list" vom Device geliefert, hätten wir schon alles gesehen

Wenn Koma, musst Du tatsächlich ein userReading kreieren

EDIT: eigentlich hat meine vorgeschlagene Regex wenig Sinn, da sie davon ausgeht, dass der Wert mit Koma getrennt ist. Aber wenn es tatsächlich Koma ist, kann es nicht gehen
EDIT2: statt ein userReading kann man es vielleicht mit data-substitution lösen

Wenn 619,27 W (also... Koma und Leerzeichen)
data-substitution="s/([\d]+),([\d]*).W/$1\.$2/g"
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

OdfFhem

@jumperger

data-limits unterstützt die "ab"-Theorie; es wird also der größte Eintrag gesucht, bei dem der darzustellende Wert größer oder gleich ist als der Vergleichswert.

  • Sollte ein solcher Eintrag existieren, wird die dazu passende Einfärbung vorgenommen.
  • Existiert kein solcher Eintrag, dann bleibt es bei der Standard-Einfärbung.


Um mit einem Reading (fast) alle Fälle durchspielen zu können, habe ich bei mir testweise folgende 4 Widget-Definitionen verwendet. In Deinem Fall würde ich das Reading energy nutzen. Bei Verwendung aller 4 Definitionen könnte eine Ausgabe ähnlich aussehen wie im angehängten Screenshot.

Es wird nur die erste Stelle verwendet:

    <div data-type="label" data-device="FBDECT_FritzBox_AHA_24_65_11_CA_FD_E9"
                           data-get="energy"
                           data-part="(.).*"
                           data-limits='[0,10,100,1000,10000]'
                           data-colors='["gray","green","yellow","red","orange"]'
                           class="bigger">
    </div>

Es werden nur die ersten beiden Stellen verwendet:

    <div data-type="label" data-device="FBDECT_FritzBox_AHA_24_65_11_CA_FD_E9"
                           data-get="energy"
                           data-part="(..).*"
                           data-limits='[0,10,100,1000,10000]'
                           data-colors='["gray","green","yellow","red","orange"]'
                           class="bigger">
    </div>

Es werden nur die ersten drei Stellen verwendet:

    <div data-type="label" data-device="FBDECT_FritzBox_AHA_24_65_11_CA_FD_E9"
                           data-get="energy"
                           data-part="(...).*"
                           data-limits='[0,10,100,1000,10000]'
                           data-colors='["gray","green","yellow","red","orange"]'
                           class="bigger">
    </div>

Es werden nur die ersten vier Stellen verwendet:

    <div data-type="label" data-device="FBDECT_FritzBox_AHA_24_65_11_CA_FD_E9"
                           data-get="energy"
                           data-part="(....).*"
                           data-limits='[0,10,100,1000,10000]'
                           data-colors='["gray","green","yellow","red","orange"]'
                           class="bigger">
    </div>



Für Deinen power-Fall sollte bei passend definierten limit-Werten eigentlich data-part="1" reichen; alternativ könnte man auch data-part="(.*) W" oder eine der vielfältigen RegExp-Varianten verwenden.

jumperger

@amenomade
wie oben in der RawDef gezeigt wird der power-Wert mit "." und Leerzeichen vor dem "W" ausgegeben.

setstate FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9 2019-11-19 09:43:22 power 591.58 W

mit den RegEx hab ich noch einen ziemlichen Berg vor mir.  :o

@OdfFhem
"ab"-Theorie, das habe ich noch nie gehört und da wäre ich nie drauf gekommen. SUPER Dank für die Info.

Für

Unter 10W --> BLAU
über 10W --> ROT
über 1600W --> GELB

wäre also das data-limit='[0,10,1600]' mit data-colors='["blue","red","yellow"]'

ich werde das heute abed sofort testen danke


jumperger

Danke OdfFhem.

Mit deiner Erklärung zur "ab"- Theorie klappt es ganz genau.


<div data-type="label"    class="top-space"
data-device="FBDECT_FritzBox_AHA_XX_XX_XX_XX_XX_E9"
data-get="power"
data-part="1"
data-limits='[0,10,1600]'
        data-colors='["blue","red","yellow"]'
>
</div>


Jetzt bleibt noch das Problem des Widget-Symbol in dem es kein data-part und data-limit gibt