readingsgroup und valueformat bei Batterylevel

Begonnen von Sailor, 09 Oktober 2014, 12:03:31

Vorheriges Thema - Nächstes Thema

Sailor

Hallo zusammen,

ich habe neuerdings das Phaenomen, das ich bei den Homematic Battery-Level nicht mehr nur OK und LOW bekomme sondern auch den Spannungswert.

Da habe ich mir gedacht, das kannste doch auch mit einem Batteriesymbol verbinden, welches den Fuellstand auch gleich anzeigt.

Und zwar so:


###START###### Define RedingsGroup for Battery-Status ##########################################################START###
######This block must be at the end of all blocks defining the devices since the device must be initialised first!######
define rg_AS_battery readingsGroup AS_.*:[Bb]attery,[Bb]atteryLevel
attr rg_AS_battery alias Art Studio
attr rg_AS_battery mapping %ALIAS
attr rg_AS_battery room Battery Status

attr rg_AS_battery valueFormat {($VALUE eq "low" || $VALUE <= 2.1)?"Battery-020":($VALUE > 2.1 && $VALUE <= 2.3)?"Battery-040":($VALUE > 2.3 && $VALUE <= 2.5)?"Battery-060":($VALUE > 2.5 && $VALUE <= 2.7)?"Battery-080":($VALUE eq "ok" || $VALUE > 2.7)?"Battery-100"}
attr rg_AS_battery valueIcon %VALUE
####END####### Define RedingsGroup for Battery-Status ###########################################################END####


Nur scheinbar habe ich da zu einfach gedacht und es kommen nur die Standard-Werte raus... Siehe Dateianhang.  :o

Koennt Ihr mir sagen, wo mein Denkfehler liegt?  :-[

Danke vom "hintern-Deich"

Gruss
    Sailor

@Puschel: Bitte verschieben, wenn dieses Thema in einem anderen Board besser aufgehoben ist.  ;)
******************************
Man wird immer besser...

Puschel74

Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

justme1968

du kannst den ?: nicht auf diese art schachteln. da fehlen diverse klammern. ausserdem wird es dann sehr schnell unübersichtlich.

einfacher und übersichtlicher ist es wie im oben verlinkten thread. aber selbst wenn du es direkt ins attribut einträgst ist es so besser:attr rg_AS_battery valueFormat {return "Battery-020" if( $VALUE eq "low" || $VALUE <= 2.1 ); return "Battery-100" if( $VALUE eq "ok" || $VALUE > 2.7 ); return "Battery-040" if( $VALUE < 2.3 ); return "Battery-060" if( $VALUE < 2.5 ); return "Battery-080";}

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Sailor

Hallo Andre,

das wars nicht ganz... Bekomme leider die Fehlermeldung

ERROR:
Unknown command return, try help. Unknown command return, try help. Unknown command return, try help. Unknown command return, try help. Unknown command }, try help.
zurueck und die Ausgabe sieht wie folgt aus:

Siehe Anhang.

Gruss
    Sailor
******************************
Man wird immer besser...

Sailor

******************************
Man wird immer besser...

justme1968

du musst alles zwischen den beiden {} im web frontend ins attr text feld eingeben. nicht direkt ins config file eintragen. dann müsstest du die ; verdoppeln.

wie gesagt: die im link beschriebene methode nur eine sub in 99_myUtils.pm aufzurufen ist sauberer und weniger fehler anfällig.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Sailor

Hallo justme

Das mit den ;; ist Mir nach neu em post auch aufgefallen. Funktioniert so weit bis auf die Tatsache, dass du battery=ok noch mit Battery020 angezeigt wird.

batteryLevel=2.8V wird aber schon mal richtig mit Battery100 angezeigt.

Gruß
   Sailor


Gesendet mit Tapatalk
******************************
Man wird immer besser...

justme1968

du musst schauen was wirklich in value steht. vielleicht is vor oder hinter dem ok noch ein leerzeichen.

mach den teil der prüfung mal so:... $VALUE =~ m/ok/ ...

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Sailor

Hallo andre

Die Zeile
attr rg_AS_battery valueFormat {return "Battery-020" if( $VALUE =~ m/low/ || $VALUE <= 2.1 );; return "Battery-100" if( $VALUE =~ m/ok/ || $VALUE > 2.7 );; return "Battery-040" if( $VALUE < 2.3 );; return "Battery-060" if( $VALUE < 2.5 );; return "Battery-080";;}

brachte leider keine Änderung.

Kann es vielleicht sein, dass wir hier Zahlen mit Strings vergleichen?

Gruß
   Sailor


Gesendet mit Tapatalk
******************************
Man wird immer besser...

Puschel74

Grüße

Schau doch mal ins Logfile  ;)
Was hält dich übrigens davon ab es so zu lösen wie im verlinkten Beitrag?

Grüße

Edith: Man muss nicht jedes Rad neu erfinden in der Hoffnung das es noch runder wird  ;D
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Sailor

Zitat von: Puschel74 am 09 Oktober 2014, 16:42:19
Was hält dich übrigens davon ab es so zu lösen wie im verlinkten Beitrag?

Edith: Man muss nicht jedes Rad neu erfinden in der Hoffnung das es noch runder wird  ;D

Ja ja, ist ja gut. Habe ich ja nun auch so gemacht. Wenn auch etwas auf Umwegen.  ;D

Mein fhem-Config Auszug fuer das Schlafzimmer


###START###### Define ReadingsGroup for Battery Status #########################################################START###
######This block must be at the end of all blocks defining the devices since the device must be initialised first!######
define rg_BR_battery readingsGroup BR_.*:,<{batDeviceIndicator($DEVICE)}>,<{batLevelIndicator($DEVICE)}>
attr rg_BR_battery room Battery Status
attr rg_BR_battery noheading 1
attr rg_BR_battery group Bedroom
attr rg_BR_battery style style="border:0px;background:none;box-shadow:none"
####END####### Define ReadingsGroup for Battery Status ##########################################################END####


Mein 99_myUtils-Auszug

###START########## Define Sub for binding battery symbol to battery status/level ###############################START###
sub batDeviceIndicator($) {
my $device = shift;
my $myBatLevel = ReadingsVal($device,"batteryLevel", "" );
my $myBatStatus = ReadingsVal($device,"battery", "" );

# In case of device with emtpy battery status and battery level or being a child (by having a second "_" in the name), ignore device
if (($myBatLevel eq "" && $myBatStatus eq "") || (index($device, "_", 3) > 0)) {
return;
}
else {
return ("%".$device);
}
}


sub batLevelIndicator($) {
my $device = shift;
my $myBatLevel = ReadingsVal($device,"batteryLevel", "" );
my $myBatStatus = ReadingsVal($device,"battery", "" );

# In case of device with emtpy battery status and battery level or being a child (by having a second "_" in the name), ignore device
if (($myBatLevel eq "" && $myBatStatus eq "") || (index($device, "_", 3) > 0)) {
return;
}
else {
if ($myBatLevel eq ""){
if    ( $myBatStatus =~ m/ok/                       ) {return ("%Battery-100");}
elsif ( $myBatStatus =~ m/low/                      ) {return ("%Battery-020");}
}
else {
if    ( $myBatLevel                           <= 2.1) {return ("%Battery-020");}
elsif ( $myBatLevel  > 2.1    && $myBatLevel  <= 2.3) {return ("%Battery-040");}
elsif ( $myBatLevel  > 2.3    && $myBatLevel  <= 2.5) {return ("%Battery-060");}
elsif ( $myBatLevel  > 2.5    && $myBatLevel  <= 2.7) {return ("%Battery-080");}
elsif ( $myBatLevel                           >  2.7) {return ("%Battery-100");}
   }
}
}
####END########### Define Sub for binding battery symbol to battery status/level ################################END####


Die Anzeige erfolgt wie Bildschirmauszug im Anhang.

Zwei Fragen habe ich dazu dennoch:

a) Wieso spuckt fhem mir beim abspeichern die Fehlermeldung Unknown command background:none, try help. Unknown command box-shadow:none", try help. aus.
Er macht doch genau was ich will. Lasse ich hingegen die Befehle fuer "background" und "shadow" weg, dann sind zwar die Fehlermeldungen weg aber dafuer siehts haesslich aus.
Ist das wieder so ein Fall gemaess dem Motto: "Man kann nicht alles haben" oder mache ich wieder einen Syntax-Fehler?

b) Nur zum Lernen: wie kann ich den Aufruf von 2 Funktionen unterdruecken und alles nur mit einem Funktionsaufruf "vereinfachen"?

Danke
   Gruss
       Sailor
******************************
Man wird immer besser...

Puschel74

Hallo,

zu a kann ich dir nichts sagen - sorry.

Zu b:
Schreib doch nur eine Funktion und ruf auch nur diese eine auf.
Du übergibst ja beidemale sowieso das selbe - $DEVICE
Aber ich vermute du hast das schon versucht und es hat nicht geklappt  8)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

justme1968

zu a: wenn das so in dienen config file steht must du die ; verdoppeln.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Sailor

#13
Zitat von: justme1968 am 13 Oktober 2014, 09:27:40
zu a: wenn das so in dienen config file steht must du die ; verdoppeln.

gruss
  andre

AAAARGH!!!

Danke justme

Ja neee is klar! Versuche ich heute Abend mal und melde mich zurück!

An dieser Stelle vermisse ich den "Kopf-gegen-Wand" - Smiley!  ::)

Gruß
    Sailor

Nachtrag 22:19: Jau das wars. Danke justme!
******************************
Man wird immer besser...

Sailor

Zitat von: Puschel74 am 13 Oktober 2014, 06:11:32
Zu b:
Schreib doch nur eine Funktion und ruf auch nur diese eine auf.
Du übergibst ja beidemale sowieso das selbe - $DEVICE
Aber ich vermute du hast das schon versucht und es hat nicht geklappt  8)

Hallo Puschel

ja, habe ich versucht und mir die Zähne ausgebissen. Entweder gibt er mir den Device-Namen zurück oder das Battery - Symbol.
Aber nie beides...  :'(

Was solls, irgendwas ist immer!

Gruss
    Sailor
   
******************************
Man wird immer besser...