reading manipulieren für Symbol

Begonnen von Eisix, 18 Oktober 2016, 17:32:20

Vorheriges Thema - Nächstes Thema

Eisix

Hallo,

ich möchte über multistate symbol den Batteriestatus ausgeben. Das device hat ein battery reading das mir den Ladestatus mit % zurückgibt. Z.B. 75 %
Somit passen meine state definitionen nicht.
Bei label kriege ich es mit

data-substitution="toString().replace(' %','')"


weg. Gibt es sowas bei symbol oder muß man das mit einem dummy umgehen?

        <div data-type="symbol" data-device="Sensor_WZ"
                data-get="battery"
                data-states='["0","26","51","76","90"]'
                data-icons='["oa-measure_battery_0 fa-blink","oa-measure_battery_25 fa-blink","oa-measure_battery_50","oa-measure_battery_75","oa-measure_battery_100"]'
                data-colors='["red","red","orange","green","green"]'>
        </div>

        <div data-type="label" data-device="Sensor_WZ" data-get="battery" data-substitution="toString().replace(' %','')" class="small top">Wohnzimmer</div>


Gruß
Eisix

Eisix

Hallo,

habe es jetzt wie wohl die meisten anderen über readingsgroup gemacht. Funktioniert zumindest, gefällt mir aber nicht wirklich.

FTUI

<div data-type="readingsgroup" data-device="Batterien" data-max-update="86400"></div>


Auszug fhem.cfg

define Batterien readingsGroup .*:battery
attr Batterien mapping $ALIAS
attr Batterien noheading 1
attr Batterien valueFormat {return "<i class='oa oa-measure_battery_0 red large blink'><span class='myhidden'>0</span></i>" if( $VALUE eq "low" );;;; return "<i class='oa oa-measure_battery_100 green large'><span class='myhidden'>100</span></i>" if( $VALUE eq "ok" );;;; return "<i class='oa oa-measure_battery_25 red large blink'><span class='myhidden'> 25</span></i>" if( $VALUE < 2.1 );;;; return "<i class='oa oa-measure_battery_50 orange large'><span class='myhidden'> 50</span></i>" if( $VALUE < 2.3 );;;; return "<i class='oa oa-measure_battery_75 green large'><span class='myhidden'> 75</span></i>" if( $VALUE < 2.5 );;;; return "<i class='oa oa-measure_battery_0 red large blink'><span class='myhidden'> 25</span></i>" if( $value < 25 );;;; return "<i class='oa oa-measure_battery_50 orange large'><span class='myhidden'> 50</span></i>" if ( $value < 50 );;;; return "<i class='oa oa-measure_battery_75 green large'><span class='myhidden'> 75</span></i>" if( $value < 75 );;;; return "<i class='oa oa-measure_battery_100 green large'><span class='myhidden'>100</span></i>";;}


Gruß
Eisix

setstate

Ein data-substitution für symbol oder Switch ist grundsätzlich keine schlechte Idee, um Werte etwas "vorzubehandeln", bevor ich Vergleiche damit anstelle. Was ist bei dir der genaue Beweggrund? Das % stört für den größer-gleich Vergleich und mit RegEx ist dir das zu kompliziert die richtigen Icons zu mappen?

Eisix

Der Vergleich zur Auswahl des Icons hat mit dem % dran nicht funktioniert und ich habe keine Möglichkeit gefunden es wegzuschneiden.
Ein dummy + notify mit $EVTPART1 wäre jetzt mein normaler Weg gewesen.
In wie weit kann ich mit RegEx direkt vom widget in den readings arbeiten?
Oder wird das in den data-states gemacht?

setstate

Das wurde schon mal hier besprochen.
https://forum.fhem.de/index.php/topic,59071.0.html

In die regex müssen nur noch die % rein, bzw. Wildcards damit es matched.

Eisix

Denn Thread kenne ich und auch die Beispiele von Github. Mit % hatte ich auch probiert. Werde morgen nochmal Testen vielleicht hab ich mit den klammern was falsch gemacht.

Eisix

Kaum macht man's richtig geht's!   :(  ;D


data-states='["[0-9] %","[1-3][0-9] %","[4-5][0-9] %","[6-7][0-9] %","[8-9][0-9] %","100 %"]'


Und ich hätte gewettet das ich das schon probiert hatte.

Danke für das beharrliche schubsen in die richtige Richtung.

Gruß
Eisix