Batteriestatus und Speicherung des letzten Wechsel

Begonnen von Amenophis86, 12 Januar 2018, 19:23:20

Vorheriges Thema - Nächstes Thema

Papaloewe

Ich glaube für den
TYPE       HUEDevice
gibt es noch keine Subroutine, richtig?

Papaloewe

Mit ein bischen Copy & Paste habe ich diese Subroutine einfach mal reinkopiert:
  ##############################################
   # HUEDevice Devices with batteryLevel
   ##############################################
   elsif($TYPE =~ "HUEDevice" and $BatteryType[0] eq "battery")
   {
    $ActBatLevel = ReadingsNum($Device, "battery", "0");

if(ReadingsNum($BatteryStatus, $Device, undef) eq "undef") # set battery level 100% and show in BatteryStatus-Device if new
{
  readingsSingleUpdate($defs{$BatteryStatus},$Device, 100,0);
  if($Loglevel >=1) {Log3(undef, 1, "$Device, added to $BatteryStatus");}
  return;
}

if($ActBatLevel > 75)
   {
# set date/time for changed battery if it was low before (so probably a change happended)
if(ReadingsNum($BatteryStatus, $Device, 100) <= 25)
  {
readingsSingleUpdate($defs{$BatteryChanged}, $Device, $text_changed, 0);
  }

  # set the battery value to 75% - 100%
  readingsSingleUpdate($defs{$BatteryStatus}, $Device, 100, 0);
 
  return undef;
}
elsif($ActBatLevel > 50)
{
  # between 50% and 75%
  readingsSingleUpdate($defs{$BatteryStatus}, $Device, 75, 0);
 
  return undef;
}
elsif($ActBatLevel > 25)
{
  # between 25% and 50%
  readingsSingleUpdate($defs{$BatteryStatus}, $Device, 50, 0);
 
  return undef;
}
elsif($ActBatLevel > 5)
{
  if(ReadingsNum($BatteryStatus, $Device, 0) != 25) # check befor action if already has the status
    {
  # between 5% and 25%
  readingsSingleUpdate($defs{$BatteryStatus}, $Device, 25, 0);
 
  fhem($msg." ".$text_soon);
  return undef;
}
 
  return undef;
}
else
{
  if(ReadingsNum($BatteryStatus, $Device, 0) != 0) # check befor action if already has the status
    {
  # totally empty (below 5%)
  readingsSingleUpdate($defs{$BatteryStatus}, $Device, 0, 0);
   
  fhem($msg." ".$text_now);
  return undef;
}
 
  return undef;
}
   }
   


Scheint z funktionieren. Sorry ich habe keine Ahnung vom Programmieren, oder wie ich jetzt ein Diff davon erstelle.

Green Hornet

@Papaloewe, Danke für deinen Denkanstoß. Hab deinen Code in der ersten Zeile noch etwas angepasst und es wird mir im Batteriestatus jetzt schon mal angezeigt, ob die Leermeldung funktioniert kann ich noch nicht sagen. Kann man das irgendwie testen???

   ##############################################
   # HUEDevice Devices with batteryLevel
   ##############################################
   elsif($BatteryType[0] eq "battery"  && InternalVal($Device, "TYPE", "undef") eq "HUEDevice")
   {
    $ActBatLevel = ReadingsNum($Device, "battery", "0");

if(ReadingsNum($BatteryStatus, $Device, undef) eq "undef") # set battery level 100% and show in BatteryStatus-Device if new
{
  readingsSingleUpdate($defs{$BatteryStatus},$Device, 100,0);
  if($Loglevel >=1) {Log3(undef, 1, "$Device, added to $BatteryStatus");}
  return;
}

if($ActBatLevel > 75)
   {
# set date/time for changed battery if it was low before (so probably a change happended)
if(ReadingsNum($BatteryStatus, $Device, 100) <= 25)
  {
readingsSingleUpdate($defs{$BatteryChanged}, $Device, $text_changed, 0);
  }

  # set the battery value to 75% - 100%
  readingsSingleUpdate($defs{$BatteryStatus}, $Device, 100, 0);
 
  return undef;
}
elsif($ActBatLevel > 50)
{
  # between 50% and 75%
  readingsSingleUpdate($defs{$BatteryStatus}, $Device, 75, 0);
 
  return undef;
}
elsif($ActBatLevel > 25)
{
  # between 25% and 50%
  readingsSingleUpdate($defs{$BatteryStatus}, $Device, 50, 0);
 
  return undef;
}
elsif($ActBatLevel > 5)
{
  if(ReadingsNum($BatteryStatus, $Device, 0) != 25) # check befor action if already has the status
    {
  # between 5% and 25%
  readingsSingleUpdate($defs{$BatteryStatus}, $Device, 25, 0);
 
  fhem($msg." ".$text_soon);
  return undef;
}
 
  return undef;
}
else
{
  if(ReadingsNum($BatteryStatus, $Device, 0) != 0) # check befor action if already has the status
    {
  # totally empty (below 5%)
  readingsSingleUpdate($defs{$BatteryStatus}, $Device, 0, 0);
   
  fhem($msg." ".$text_now);
  return undef;
}
 
  return undef;
}
   }
2x Raspberry 3 | 1x Raspberry 2 | HMlan | HM-MOD-UART | Raspbee | HM-Komponeneten | Xiaomi Aqara Komponenten | Alexa-Fhem | Homebridge-Fhem | Harmony Hub | Philips HUE

MadMax-FHEM

Einfach mal per
setreading GA.Bm_Motion battery 4

Oder welcher Wert auch immer zu einer Meldung führen soll...

Bei der nächsten "echten" Meldung des battery Wertes vom Gerät wird dann wieder richtig gesetzt und dann verm. ein Batteriewechsel "gemeldet"... ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Green Hornet

2x Raspberry 3 | 1x Raspberry 2 | HMlan | HM-MOD-UART | Raspbee | HM-Komponeneten | Xiaomi Aqara Komponenten | Alexa-Fhem | Homebridge-Fhem | Harmony Hub | Philips HUE

Amenophis86

Geht doch, freut mich, wenn andere mit machen :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Peter aus Calw

Hallo zusammen,
hier wurde mal das Reading vom HM-CC-RT-DN "powerOn" angesprochen. Bei mir habe ich 6 von den Geräten mit den SW-Versionen 1.1 und 1.4 eingesetzt und dabei festgestellt, daß 2 RT - einer mit 1.1 und einer mit 1.4 kein "powerOn" senden. Alle anderen Parameter sind identisch, gibt es dafür einen Tipp ?
Mit meinen restlichen Geräten (4 Fenstersenoren, Aussentemp-Sensor, 2 Wandthermostaten)
ermittle ich durch :

{((ReadingsAge("FS_Gwc","powerOn",1))- (TimeNow(),13,5))/24/3600}

die Anzahl der Tage seit dem Batteriewechsel und habe so auch einen recht guten Überblick.
Hoffe auf einen guten Rat.
LG Peter



SimonHipp

Kann es sein das aktuell der "no-BatteryStatusBot-Zweig" nicht verfügbar ist, wollte mit soeben den Code laden und einbauen.
Leider erscheint immer 404 als Fehler.

Grüße
Simon
FHEM 6.0 auf AMD Ryzen 5 MICRO PC (NUC) mit VDSL 100/40Mbit/s

Amenophis86

Gerade nochmal geschaut, bei mir ist alles online und der Link aus dem 1.Post geht.

Aber nochmal zur Info, ich arbeite aktuell nicht weiter an dem Projekt.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Benny33

Hi zusammen,

könnte man in dem Code einstellen, dass bei den CUL_HM die Meldung "Die Batterien von $Device müssen JETZT gewechselt werden!" schon ab 2,4V kommt?
Demzufolge auch vorher schon "Die Batterien von $Device sollten bald gewechselt werden!"?
Ausserdem finde ich bei keinen meiner 8 Heizkörperthermostaten das reading R-lowBatLimitRT.

Internals:
   DEF        4CF1A0
   FUUID      5c481a9e-f33f-ad31-dc48-2c9bc357e407f7e1
   HMLAN1_MSGCNT 546
   HMLAN1_RAWMSG E4CF1A0,0000,130CD2F1,FF,FFC0,8A86104CF1A00000000AA0D60B1D00
   HMLAN1_RSSI -64
   HMLAN1_TIME 2019-05-09 08:09:47
   IODev      HMLAN1
   LASTInputDev HMLAN1
   MSGCNT     546
   NAME       HKT_WC
   NOTIFYDEV  global
   NR         424
   NTFY_ORDER 50-HKT_WC
   STATE      CMDs_done
   TYPE       CUL_HM
   channel_01 HKT_WC_Weather
   channel_02 HKT_WC_Climate
   channel_03 HKT_WC_WindowRec
   channel_04 HKT_WC_Clima
   channel_05 HKT_WC_ClimaTeam
   channel_06 HKT_WC_remote
   lastMsg    No:8A - t:10 s:4CF1A0 d:000000 0AA0D60B1D00
   protLastRcv 2019-05-09 08:09:47
   protRcv    545 last_at:2019-05-09 08:09:47
   protSnd    1 last_at:2019-05-08 12:24:27
   protState  CMDs_done
   rssi_at_HMLAN1 cnt:546 min:-71 max:-63 avg:-65.84 lst:-64
   READINGS:
     2019-05-08 08:09:48   Activity        alive
     2019-05-07 10:55:44   CommandAccepted yes
     2018-08-01 06:45:46   D-firmware      1.4
     2018-08-01 06:45:46   D-serialNr      NEQ0876150
     2018-12-30 12:39:47   PairedTo        0x1E4ED6
     2018-08-01 08:13:25   R-backOnTime    10 s
     2018-08-01 08:13:25   R-burstRx       on
     2018-08-01 08:13:25   R-cyclicInfoMsg on
     2018-08-01 08:13:25   R-cyclicInfoMsgDis 0
     2018-08-01 08:13:25   R-pairCentral   0x1E4ED6
     2018-12-30 12:39:47   RegL_00.        00:00 01:01 02:01 09:01 0A:1E 0B:4E 0C:D6 0E:0A 0F:00 11:00 12:15 16:01 18:00 19:00 1A:00
     2018-12-30 23:59:55   RegL_07.       
     2019-05-09 08:09:47   actuator        29
     2019-05-09 08:09:47   battery         ok
     2019-05-09 08:09:47   batteryLevel    2.6
     2019-05-09 08:09:47   desired-temp    20.0
     2019-05-09 08:09:47   measured-temp   21.4
     2019-05-09 08:09:47   motorErr        ok
     2018-12-30 12:37:17   powerOn         2018-12-30 12:37:17
     2018-12-30 12:37:17   recentStateType info
     2019-05-08 12:24:27   state           CMDs_done
     2019-05-08 12:24:27   time-request    -
   helper:
     HM_CMDNR   138
     mId        0095
     peerFriend
     peerOpt    -:thermostat
     regLst     0
     rxType     140
     supp_Pair_Rep 0
     expert:
       def        1
       det        0
       raw        1
       tpl        0
     io:
       newChn     +4CF1A0,00,01,00
       nextSend   1557382187.86575
       prefIO     
       rxt        2
       vccu       vccu
       p:
         4CF1A0
         00
         01
         00
     mRssi:
       mNo        8A
       io:
         HMLAN1:
           -60
           -60
         nanoCUL868:
     prt:
       bErr       0
       sProc      0
       sleeping   1
       rspWait:
     q:
       qReqConf   
       qReqStat   
     role:
       dev        1
       prs        1
     rssi:
       at_HMLAN1:
         avg        -65.8461538461539
         cnt        546
         lst        -64
         max        -63
         min        -71
     shRegW:
       07         04
     tmpl:
Attributes:
   DbLogExclude .*
   IODev      HMLAN1
   IOgrp      vccu
   actCycle   000:10
   actStatus  alive
   autoReadReg 4_reqStatus
   expert     2_raw
   firmware   1.4
   model      HM-CC-RT-DN
   room       WC,Hardware
   serialNr   NEQ0876150
   subType    thermostat
   webCmd     getConfig:clear msgEvents:burstXmit


Könnte mir da mal bitte einer auf die Sprünge helfen.

Besten Dank
Benny

Amenophis86

Also der Code holt sich den Wert aus dem Reading R-lowBatLimitRT, welches ich bei dir auch nicht sehe. Verändere mal das Attr Expert um zu schaue, ob es dann erscheint.

Wenn du den Wert selbst setzen willst, dann musst folgende Zeile ändern:

Zeile 218 von
$MinBatLevel = ReadingsNum($Device, "R-lowBatLimitRT", "0.0"); 
In
$MinBatLevel = 2.4

Habe es nicht getestet und eben nur schnell auf dem Handy getippt, müsste aber gehen.

Wieso willst du die Meldung schon so früh haben? "Jetzt" kommt doch erst vorm Tod und der ist bei der 2.1 Meldung bei mir erst nach mehreren Tagen. Somit genug Zeit eigentlich.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Benny33

Jau das war es habe jetzt expert auf 1_allReg gestellt, nun habe ich auch R-lowBatLimitRT.
Ich habe die Anzeige immer bekommen wenn das HKT nicht mehr funktionierte und das war zu spät.
Aber da auch das R-lowBatLimitRT nun habe werde ich den Code so nehmen wie Du ihn zur Verfügung gestellt hast ohne irgendeine Veränderung bis auf telegrambot.
Werde ich ja dann sehen ob es nun klappt.
Kann ich expert jetzt so stehen lassen? Denke schon.

Vielen Dank für die Info.

MadMax-FHEM

#207
Zitat von: Benny33 am 09 Mai 2019, 12:29:57
Kann ich expert jetzt so stehen lassen? Denke schon.

Ja.
Ist nur eine Einstellung wieviele/welche "Registerwerte" (als R-Readings) zu sehen sind.

Man muss ja nicht immer alle sehen...
...allerdings sehe ich gerne immer alles ;)

Meine erste "Tätigkeit" bei neuen HM-Geräten ist daher die Umstellung auf 1_allReg... ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

kennymc.c

Das Skript soll ja auch mit Xiaomi Geräten funktionieren, allerdings werden bei mir nur meine HomeMatic Geräte angezeigt. Die Xiaomis haben alle ein battery, battery_level und voltage Reading. Sie laufen über zigbee2mqtt und dem XiaomiMQTTDevice Modul Damit sollten sie doch eigentlich automatisch auftauchen oder?
Außerdem sind bei zwei meiner HM Devices Ausrufungszeichen in der Readingsgroup, obwohl im Batteriestatus Dummydevice die Werte aller Devices auf 100 stehen.

Amenophis86

Ein List der Geräte posten, welche nicht gehen oder Fehlerhaft sind. Sonst kann man nicht helfen :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...