Batteriestatus und Speicherung des letzten Wechsel

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

Vorheriges Thema - Nächstes Thema

FunkOdyssey

Wie wäre es denn, wenn wir den Code unter https://github.com/fhem zentralisieren und alle daran mitarbeiten?

MadMax-FHEM

Tja warten wir doch mal auf Rückmeldung von Amenophis86...

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)

frank_41

Hallo Leute,
ich bin auf dieses Modul gestossen und finde es schon gut.
Da sollen ja auch Xiaomi Devices integriert sein ?
Leider findet es meine Xiaomi Pflanzen Sensoren nicht.
Wie könnte ich die intergrieren :


Internals:
   BTMAC      C4:7C:8D:65:CA:23
   DEF        C4:7C:8D:65:CA:23
   FUUID      5c8af284-f33f-37cc-67c6-c28bda7eefdfbaa5
   FVERSION   74_XiaomiBTLESens.pm:v2.8.2-s20924/2020-01-10
   INTERVAL   590
   NAME       Sansevieria
   NOTIFYDEV  global,Sansevieria
   NR         432
   NTFY_ORDER 50-Sansevieria
   STATE      active
   TYPE       XiaomiBTLESens
   VERSION    v2.8.2
   loglevel   2
   Helper:
     DBLOG:
       batteryPercent:
         myDbLog:
           TIME       1585256457.10973
           VALUE      99
       batteryState:
         myDbLog:
           TIME       1585256457.10973
           VALUE      ok
       fertility:
         myDbLog:
           TIME       1585313958.51414
           VALUE      1327
       firmware:
         myDbLog:
           TIME       1585256457.10973
           VALUE      3.2.1
       lastGattError:
         myDbLog:
           TIME       1585262443.99034
           VALUE      Function not implemented (38)
       lux:
         myDbLog:
           TIME       1585313958.51414
           VALUE      436
       moisture:
         myDbLog:
           TIME       1585313958.51414
           VALUE      66
       state:
         myDbLog:
           TIME       1585313958.51414
           VALUE      active
       temperature:
         myDbLog:
           TIME       1585313958.51414
           VALUE      18.5
   READINGS:
     2020-03-26 22:00:57   batteryPercent  99
     2020-03-26 22:00:57   batteryState    ok
     2020-03-27 13:59:18   fertility       1327
     2020-03-26 22:00:57   firmware        3.2.1
     2020-03-26 23:40:43   lastGattError   Function not implemented (38)
     2020-03-27 13:59:18   lux             436
     2020-03-27 13:59:18   moisture        66
     2020-03-27 13:59:18   state           active
     2020-03-27 13:59:18   temperature     18.5
   helper:
     CallBattery 0
     CallSensDataCounter 0
     updateTimeCallBattery 1585256457.09493
     updateTimestampCallBattery 2020-03-26 22:00:57
Attributes:
   battery_change 2020-02-06
   blockingCallLoglevel 2
   devStateIcon {my $w=int(ReadingsVal("$name","moisture",0));if($w < 10){'.*:sani_irrigation@red'}else{'.*:sani_irrigation@green'}}
   interval   590
   model      flowerSens
   room       FlowerSens,plants
   verbose    1
Raspberry Pi 3
RFXCOM_RFXtrx433
V 1.62 nanoCUL433
Jeelink LaCrosse
Jeelink PCA301.CUL_HM,Conbee, deCONZ

MadMax-FHEM

#288
Hmmm, sollte eigentlich drin sein!?

Ich habe es wie folgt bei mir eingebunden:


  ##############################################
  # XiaomiFlowerSens Devices
  ##############################################
# new fhem Module -> new Type
  elsif($Type eq "XiaomiBTLESens")
  {
# Changed from batteryLevel to batteryPercentage 
#    $ActBatLevel = ReadingsNum($Device, "batteryLevel", "0");
    $ActBatLevel = ReadingsNum($Device, "batteryPercent", "0");

    if($ActBatLevel > 75)
    {
      # set date/time for changed battery if it was low before (so probably a change happended)
      # not necessary to have "special treatment" here because they normally just don't stopp they go down by percentage...
      if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") eq "low" || ReadingsVal($myDummyBatteryStates, $Device, 100) < 50)
      {
        # calculate lifetime since last change
        my_CalculateBatteryLife($Device);
        # set date/time for changed battery if it was low before (so probably a change happended)
        fhem("setreading $myDummyLastBatteryChange $Device Battery changed:");
        # set the signal state back to none
        fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice none");
      }

      # set the battery value to 75% - 100%
      fhem("setreading $myDummyBatteryStates $Device 100");
    }
    elsif($ActBatLevel > 50)
    {
      # between 50% and 75%
      fhem("setreading $myDummyBatteryStates $Device 75");

      # set the signal state (back) to none
      if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") ne "none")
      {
        fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice none");
      }
    }
    elsif($ActBatLevel > 25)
    {
      # between 25% and 50%
      fhem("setreading $myDummyBatteryStates $Device 50");

      # set the signal state (back) to none
      if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") ne "none")
      {
        fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice none");
      }
    }
    elsif($ActBatLevel > 5)
    {
      # between 5% and 25%
      fhem("setreading $myDummyBatteryStates $Device 25");

      # maybe already send a message! Easy possible with new signal states
    }
    else
    {
      # totally empty (below 5%)
      fhem("setreading $myDummyBatteryStates $Device 0");

      # check if message was already sent
      if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "low") ne "low")
      {
        # set signal state to low
        fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice low");
        #send message via TelegramBot
        fhem("set $myTelegramBot message Change battery $BatteryType for device $Device soon!");
      }
    }
  }



ABER ACHTUNG!! Der Code-Schnipsel ist aus MEINEM ursprünglichen Code!!! Muss für hier sicher angepasst werden!!

EDIT:
Ich habe beispielsweise ja das Senden per Telegram direkt im Code...
...ebenso das Merken, ob/wann bereits gesendet wurde (myDummySignalMessageStatesFhemBot )...

Auch habe ich eine Routine die "berechnet" wann zuletzt gewechselt wurde, also die "Laufzeit" der Batterie protokolliert.
So sehe ich wie lange die Batterien so bei den diversen Geräten (in der Regel) halten/gehalten haben (my_CalculateBatteryLife)...

Und ich habe ja die Erweiterung um ein userattr wo der jeweilige Batterie-Typ drin steht, der geht bei der Wechselmeldung (bzw. Wechsel-Bald-Meldung) mit raus, dann weiß ich gleich welche Batterie ich besser kaufe oder schon zuhause habe(n sollte)... ;)  ($BatteryType)



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)

frank_41

Danke für die Antwort.
Ich hatte BatteryCheckUtils.pm eingebunden und da erscheinen sie nicht.
Nun habe ich Batterycheck.pm eingebunden und da sehe ich was unter BatterieStatusBot
aber nichts bei rgBatteryStatus ??
Raspberry Pi 3
RFXCOM_RFXtrx433
V 1.62 nanoCUL433
Jeelink LaCrosse
Jeelink PCA301.CUL_HM,Conbee, deCONZ

FunkOdyssey

Hast du das Notify auch so passend, dass batteryPercent matcht?
Ich habe in meinem Code auch eine Schleife für das neue Reading ergänzt.
Suche mal nach:
#Set Readings for device with reading batteryLevel

Keine Ahnung, ob das wichtig war.

Amenophis86

Hallo an alle,

Fangen wir vorne an. Ich bin dafür, dass der Code freigegeben wird und alle daran arbeiten können. Ich hatte ihn damals ja auch nur angepasst. Leider war ich erst beruflich sehr eingespannt, dass ich kaum Zeit hatte. Nun haben wir ein Haus gekauft, welches wir Kernsanieren, KNX selbst einbauen, viel planen und wegen Corona Handwerker absagen und Kinder betreut werden müssen :D Somit noch weniger Zeit als vorher.

Lange Rede kurzer Sinn. Sagt mir was ich machen muss, dass alle daran arbeiten können. Das Modul ist generell super und daher sollte es weiter entwickelt werden. Ich alleine werde es nicht leisten können.
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...

frank_41

Hallo Allerseits,
ja fände es auch gut, wenn das Projekt weiter gehen würde.
Leider habe ich zu wenig Ahnung von Perl, dass ich da groß helfen könnte.
Aber die Xiaomi Flower Dinger sehe ich nun.
Gruß
Frank
Raspberry Pi 3
RFXCOM_RFXtrx433
V 1.62 nanoCUL433
Jeelink LaCrosse
Jeelink PCA301.CUL_HM,Conbee, deCONZ

FunkOdyssey

#293
Ich habe mich mal umgehört. Mir wurde gesagt, dass unser Projekt auf GitHub eher für Module genutzt werden soll.
Also brauchen wir doch wieder jemanden, der seinen GitHub-Namen zur Verfügung stellt.
Oder wir bleiben bei Amenophis86-Repository und reichen Pull Requests ein.

Amenophis86

Gerne darf auch jemand ein Fork machen und sein Github zur Verfügung stellen. Kann aktuell nicht sagen, wie oft ich dazu komme den Request zu prüfen und oder zu übernehmen. Sorry
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...

aruttkamp

ZitatGerne darf auch jemand ein Fork machen und sein Github zur Verfügung stellen.
Ich habe mir erlaubt einen Fork anzulegen.
Ihr findet diesen hier https://github.com/aruttkamp/Batteryfunktion
Alles weitere später ;-)

Andreas

FunkOdyssey

Ich habe wirklich keine Ahnung von Perl, aber ich habe irgendwie ein Brett vor dem Kopf.

Wieso ist diese elsif gültig, bei einem $event="battery" und $TYPE="HUEDevice"?

elsif ((ReadingsVal($Device, "batteryLevel", "undef") eq "undef" || ReadingsVal($Device, "batteryPercent", "undef") eq "undef") and ($TYPE ne "ZWave" || $TYPE ne "HUEDevice"))

Kann mir jemand helfen?

MadMax-FHEM

#297
Mal angenommen es gibt keine Readings:

batteryLevel -> undef -> true
oder
batteryPercent -> undef -> true

also sobald $Device EINES dieser Readings NICHT hat ist der erste Teil -> true

Ob das so ist: das weißt nur du...

Wenn $TYPE NICHT ZWave (sondern HUEDevice) ist (oder andersrum), dann ist auch der zweite Teil -> true
(und es ist ja entweder NUR eins davon oder sogar weder noch -> true)

Ergo ist dann auch "true and true" -> true ;)

EDIT: ich würde auch eher ReadingsNum denn ReadingsVal nehmen... (hat aber hiermit nix zu tun ;)  )

Gruß, Joachim

P.S.: hat aber mit $event nix zu tun, maximal mit dem $Device daraus...
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)

FunkOdyssey

Er soll in die Weiterverarbeitung nur dann gehen, wenn es
- kein Reading batteryLevel
- kein Reading batteryPercent
- kein Device ZWave
- kein Device HUEDevice
ist.

Ich dachte erst, dass ich im zweiten Teil einen Gedankenfehler habe und habe es auch so getestet:
($TYPE ne "ZWave" and $TYPE ne "HUEDevice")

Hat auch nicht funktioniert.

MadMax-FHEM

Wenn du willst, dass KEIN Reading batteryPercent UND KEIN Reading batteryLevel beim $Device da ist, dann musst du das auch so schreiben ;)

Also

elsif ((ReadingsVal($Device, "batteryLevel", "undef") eq "undef" && ReadingsVal($Device, "batteryPercent", "undef") eq "undef")

und der zweite Teil, also NUR $TYPE=HUEDevice, dann:

$TYPE eq "HUEDevice"

und wenn du auch (warum auch immer) irgendwas mit nicht-ZWave haben willst, dann:

$TYPE eq "HUEDevice" && $TYPE ne "ZWave"


Zusammen dann in etwa so:

elsif ((ReadingsVal($Device, "batteryLevel", "undef") eq "undef" && ReadingsVal($Device, "batteryPercent", "undef") eq "undef") && $TYPE eq "HUEDevice")

bzw.:

elsif ((ReadingsVal($Device, "batteryLevel", "undef") eq "undef" && ReadingsVal($Device, "batteryPercent", "undef") eq "undef") && ($TYPE eq "HUEDevice"  && $TYPE ne "ZWave"))

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)