Reading ohne Einheit möglich?

Begonnen von oli82, 09 November 2017, 10:06:38

Vorheriges Thema - Nächstes Thema

oli82

Guten Morgen.

Ich habe einige Sensoren von Neo Coolcam, die ihren Batteriestand in % angebeben. Leider beinhaltet das Reading auch das %-Zeichen.
Das Zeichen macht mir bei der Überwachung des Batteriestandes Probleme.
Kann ich das Reading so beeinflussen, dass es ohne %-Zeichen aufgeführt wird?

Internals:
   CFGFN
   DEF       XXXXXXXX 11
   IODev      ZWDongle_0
   LASTInputDev ZWDongle_0
   MSGCNT     20
   NAME       EG.Alarm
   NR         17728
   STATE      off
   TYPE       ZWave
   ZWDongle_0_MSGCNT 20
   ZWDongle_0_RAWMSG 0004000b0380035b
   ZWDongle_0_TIME 2017-11-08 22:29:01
   ZWaveSubDevice no
   cmdsPending 0
   homeId     XXXXXXXXX
   isWakeUp
   lastMsgSent 1510176480.05014
   nodeIdHex  0b
   READINGS:
     2017-11-08 22:28:00   alarm           14_unknown: Event cleared: unknown event 1, arg 0101
     2017-11-08 22:26:55   assocGroup_1    Max 5 Nodes ZWDongle_0
     2017-11-08 22:26:55   assocGroup_2    Max 5 Nodes
     2017-11-08 22:26:55   assocGroup_3    Max 5 Nodes
     2017-11-08 22:26:55   assocGroups     3
     2017-11-08 22:29:01   battery         91 %
     2017-11-08 22:25:40   model           Neo CoolCam Siren Alarm
     2017-11-08 22:25:40   modelConfig     shenzen_neo/nas-ab01z.xml
     2017-11-08 22:25:40   modelId         0258-XXXX-XXXX
     2017-11-08 22:28:00   reportedState   off
     2017-11-08 22:28:00   state           off
     2017-11-08 22:28:00   timeToAck       0.030
     2017-11-08 22:28:00   transmit        OK
Attributes:
   IODev      ZWDongle_0
   classes    ZWAVEPLUS_INFO VERSION MANUFACTURER_SPECIFIC DEVICE_RESET_LOCALLY POWERLEVEL CONFIGURATION ASSOCIATION ASSOCIATION_GRP_INFO SWITCH_BINARY ALARM INDICATOR BATTERY
   room       11_Security
   vclasses   ALARM:8 ASSOCIATION:2 ASSOCIATION_GRP_INFO:1 BATTERY:1 CONFIGURATION:1 DEVICE_RESET_LOCALLY:1 INDICATOR:1 MANUFACTURER_SPECIFIC:2 POWERLEVEL:1 SWITCH_BINARY:1 VERSION:2 ZWAVEPLUS_INFO:2


Danke für die Hilfe
Oli

Frank_Huber

wie machst denn deine Überwachung?
evtl kannst es da direkt anpassen, alternativ machst Dir ein UserReading.

oli82

#2
Ich prüfe das Reading "battery" bzw. "batteryLevel" global auf alle Geräte, die dieses Reading besitzen.
Durch das % erhalte ich u.a. eine Perl Warnung:
PERL WARNING: Argument "91 %" isn't numeric in numeric lt (<) at (eval 399228) line 1.

Frank_Huber

Zitat von: oli82 am 09 November 2017, 10:32:06
Ich prüfe das Reading "battery" bzw. "batteryLevel" global auf alle Geräte, die dieses Reading besitzen.
Durch das % erhalte ich u.a. eine Perl Warnung:
PERL WARNING: Argument "91 %" isn't numeric in numeric lt (<) at (eval 399228) line 1.

und wie? gib doch mal ein List deines Prüfvorgangs.

Thorsten Pferdekaemper

FUIP

screetch82

haha wir haben fast zeitgleich das gleiche Thema eröffnen und haben wohl Geräte mit dem selben Readings. Dein problem bin ich gestern angegangen:

define rg_battery readingsGroup .*:batteryLevel|[Bb]attery
attr rg_battery alias Batteriestatus
attr rg_battery mapping %ALIAS
attr rg_battery notime 1
attr rg_battery room Devices
attr rg_battery style style="text-align:left"
attr rg_battery valueFormat {return "0" if( $VALUE eq "low" );; return "100" if( $VALUE eq "ok" );; return "25" if( $VALUE < 25 );; return "50" if( $VALUE < 50 );; return "75" if( $VALUE < 75 );; return "100"}
attr rg_battery valueIcon {'battery.0' => 'measure_battery_0@red','battery.100' => 'measure_battery_100@green','Battery.0' => 'measure_battery_0@red','Battery.100' => 'measure_battery_100@green','batteryLevel.0' => 'measure_battery_0@red','batteryLevel.25' => 'measure_battery_25@red','batteryLevel.50' => 'measure_battery_50@orange','batteryLevel.75' => 'measure_battery_75@green','batteryLevel.100' => 'measure_battery_100@green'}

define BatteryLowTelegram at *19:00:00 { if ( $mday <= 6 && $wday == 0 )\
{if (ReadingsVal("Fibaro_Nebentuer", "battery", "-1") eq "20 %")\
  {fhem ("set telebot message 'Fibaro Nebeneingang' 'Bitte Batterie tauschen' ")}\
};;\
{if (ReadingsVal("Fibaro_haupteingang", "battery", "-1") eq "20 %")\
  {fhem ("set telebot message 'Fibaro Haupteingang' 'Bitte Batterie tauschen' ")}\
};;\
{if (ReadingsVal("Kuche_Motion_Light", "battery", "-1") eq "20")\
  {fhem ("set telebot message 'Hue Bewegungsmelder Küche' 'Bitte Batterie tauschen' '")}\
};;\
{if (ReadingsVal("keller_Motion_Temp", "battery", "-1") eq "20")\
  {fhem ("set telebot message 'Hue Bewegungsmelder Gästezimmer' 'Bitte Batterie tauschen' ")}\
};;\
{if (ReadingsVal("Office_Motion_Move", "battery", "-1") eq "20")\
  {fhem ("set telebot message 'Hue Bewegungsmelder Office' 'Bitte Batterie tauschen' ")}\
};;\
{if (ReadingsVal("pflanze1", "batteryLevel", "-1") eq "20")\
  {fhem ("set telebot message 'Pflanzensensor 1' 'Bitte Batterie tauschen' ")}\
};;\
}

Frank_Huber

für die ReadingsGroup habe ich keine Lösung,

dein Notify kannst Du auf REadingsNum umstellen, da ist die Einheit raus.

marvin78


Frank_Huber

Zitat von: Thorsten Pferdekaemper am 09 November 2017, 10:42:04
ReadingsNum statt ReadingsVal ?

wenn er ReadingsVal verwendet wäre das die Idee.
Aber es weis ja niemand wie er es macht.

oli82

Danke schon mal für die Ansätze.

Abfrage erfolgt zuerst über eine ReadingsGroup:

DEF:
.*:[Bb]atteryLevel
.*:[Bb]attery
Attributes:
   notime     1
   room       CUL_HM
   valueFormat {return "0" if( $VALUE eq "low" );; return "100" if( $VALUE eq "ok" );; return "25" if( $VALUE < 2.1 );; return "50" if( $VALUE < 2.3 );; return "75" if( $VALUE < 2.5 );; return "100"}
   valueIcon  {'battery.0' => 'measure_battery_0@red','battery.100' => 'measure_battery_100@green','Battery.0' => 'measure_battery_0@red','Battery.100' => 'measure_battery_100@green','batteryLevel.0' => 'measure_battery_0@red','batteryLevel.25' => 'measure_battery_25@red','batteryLevel.50' => 'measure_battery_50@orange','batteryLevel.75' => 'measure_battery_75@green','batteryLevel.100' => 'measure_battery_100@green'}


Die Benachrichtigung überwacht aktuell nur Geräte, die ein "low" als Batteriestatus aufweisen können:

Internals:
   DEF        ([":^battery:.*low"] or [":^Battery:.*low"] ) (set Smarthome message @#Smarthome 🔋 Batteriewarnung. \nDie Batterie von $DEVICE neigt sich dem Ende zu. Bitte die Batterie wechseln!) Attributes:
   do         always
   icon       batterie
   repeatcmd  7200

DeeSPe

Du könntest die Anzeige von % auch über das Modul readingsChange unterdrücken.

Oder valueFormat entsprechend anpassen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

oli82

Zitat von: DeeSPe am 09 November 2017, 11:14:30
Du könntest die Anzeige von % auch über das Modul readingsChange unterdrücken.
Oder valueFormat entsprechend anpassen.
Das Modul schaue ich mir mal an. Kannte ich noch gar nicht.



justme1968

 in ReadingsGroup kann man $NUM statt $VALUE verwenden.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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