FHEM meldet battery low / Device keine Anzeige

Begonnen von walterschmitz, 18 August 2017, 20:21:27

Vorheriges Thema - Nächstes Thema

walterschmitz

Hallo,

da ich dazu nichts gefunden habe...
aktuell melden einige Geräte mir, dass bei MAX-Geräten (WT/HT) ggf. die Battery mit LOW eingestuft wurde.

Am Gerät selbst wird ja der Akku auch angezeigt. Mich wundert es gerade allerdings, dass an den Geräten, wo LOW im FHEM angezeigt wird, keine Anzeige Akku-tauschen am Gerät leuchtet.

Gibt es evtl. noch einen Status unterhalb von LOW, bei dem der WT / HT / FK evtl. erst das Batterie tauschen Symbol einblenden?

Oder gibt es eine andere Erklärung dazu?

Gruß

MadMax-FHEM

Bei MAX! weiß ich nicht aber bei den Homematic Heizkörperthermostaten gibt es battery (ok, low) und motorErr (ok, lowBat und weitere)...
...und auch noch batteryLevel wo die Batteriespannung kommt...

Was zuerst kommt ist battery low und erst deutlich später dann motorErr lowBat...

Wann da jetzt das Batteriesymbol angezeigt wird habe ich noch nicht genau geprüft ;)

Vielleicht gibt es ja bei MAX! auch mehr als eins...

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)

walterschmitz

Hab jetzt wieder ein aktuelles Beispiel für das Problem.

Hab dazu ein Notify erstellt:
(Bad|WoZi|KiZi|ScZi|ArZi|Buero).(WT|HT|Fensterkontakt):battery:.low {
DebianMail("BATTERIE-ÜBERWACHUNG - HOMEAUTOMATION","Die Batterie von $NAME ist als gering gemeldet! \n\r Bitte umgehend austauschen!")
}

jetzt erhalte ich Nachts immer eine Mail wo $NAME mit Bad.HT dargestellt wird.

Am Bad.HT ist aber kein Batteriesymbol und in der Device-Detailübersicht steht auch battery: ok drin, also so wie es auf dem Device selbst auch angezeigt wird.

Hab ich hier einen Fehler im Notify? Interessanterweise kam es auch nur heute nacht, obwohl das Device lt. Log mehrfach was gesendet hat. Gibt im Device auch kein event-on-change-Einstellungen o.ä.

walterschmitz

#3
so... die Meldung kommt jetzt immer öfter per Email. geändert hat sich aber nichts. Weder das Device (REAL) zeigt ein Batterie-Mangel an noch ein Eintrag in der DB-Log lässt darauf schließen, dass das ein Batterie-Problem vorliegt.

Log-Dateimässig von FHEM sieht alles gut aus.

Kann man irgendwie jetzt mal sowas wie einen DEBUG aktivieren, damit man nachträglich nachvervollgen könnte, warum das Notify ausgelöst hat. Wenn der Event-Manager nicht permanent läuft und damit mein PC anbleiben müsste, kann ich das doch rückwirkend nicht mehr rekonstruieren... nur über die LOG, DBLOG und den EventMonitor.

Kann mir jemand helfen?

Nachtrag: Könnte es sein, dass tatsächlich das Device nur zwischendurch mal battery:low meldet? Das würde zumindest erklären, warum ich auf den ersten 100 Einträgen im Log nichts zu battery:low finde. Und das würde dann auch erklären, warum das DEVICE nichts anzeigt. Versuche mir das gerade nur zur erklären, wie es dazu kommt. Evtl. ist die Batterie ja wirklich an der Grenze zum Low-State und dadurch kommen die zwischendurch-Meldungen, die (leider auch nicht regelmässig zwischendurch nur öfter) immer wieder eintrudeln.

Alle Devices habe ich an der Hardware kontrolliert und scheinen sauber zu funktionieren.

Wzut

Nach einigen Jahren MAX! Erfahrung zum Thema Batterie Low :
a. kommt die Meldung einmalig und dann Tage /Wochen lang nicht mehr : vermutlich Telegrammfehler - ignorieren.
b. kommt die Meldung 1x am Tag und das jeden Tag : Bestellschein für neue Batterien ausfüllen und absenden.
c. kommt die Meldung 3 -4 Mal pro Abend / Nacht : Batterien sollten nun da sein , Verpackung öffnen und griffbereit legen
d. Die Meldung ist jetzt dauerhaft da und wird auch am Gerät angezeigt : Batterien wechseln :) 
Tipp : ich schreibe mit dann ins attr comment immer das Datum des Wechsels, so habe ich jederzeit im Blick ob der Batterie Verbrauch OK ist ( ca 12-15 Monate i.d.R. bei WT & HT, FK scheinen ewig zu halten )   
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

MadMax-FHEM

Ich lasse mir den Batteriewechsel automatisch in einen Dummy schreiben...

In einem habe ich dann alle aktuellen Werte "normiert" und in einem weiteren dann die Wechselzeit...

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)

Amenophis86

Zitat von: MadMax-FHEM am 06 September 2017, 15:13:15
Ich lasse mir den Batteriewechsel automatisch in einen Dummy schreiben...

Würdest du mir dafür mal deine Routine zeigen, bevor ich mir jetzt selbst eine dazu überlegen und schreiben muss :)
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...

MadMax-FHEM

#7
Zitat von: Amenophis86 am 02 Januar 2018, 18:31:17
Würdest du mir dafür mal deine Routine zeigen, bevor ich mir jetzt selbst eine dazu überlegen und schreiben muss :)

Klaro:

1. notify:


Internals:
   DEF        .*:battery.* {my_StoreBatteryStatus($NAME, $EVENT)}
   NAME       nStoreBatteryStatus
   NR         184
   NTFY_ORDER 50-nStoreBatteryStatus
   REGEXP     .*:battery.*
   STATE      2018-01-02 19:23:50
   TYPE       notify
   READINGS:
     2018-01-02 14:53:42   state           active
Attributes:


2. myUtils:


#########################################################################
# Helper for readingsGroup BatteryStatus:
# reads the battery states of devices and
# calculates the battery state in percent (depending on device type) and
# stores it as reading in corresponding dummy device
sub my_StoreBatteryStatus($$)
{
  my ($Device, $Event)  = @_;
  my @BatteryType = split(/:/,$Event); # to distinguish between "battery" and "batteryLevel" devices
  my $Model = AttrVal($Device, "model", "undef"); # get the corresponding model type
  my $ActBatLevel = 0.0;
  my $MinBatLevel = 0.0;
  my $RemainingVoltageQuater = 0.0; # for "calculating" the colors
  my $MaxBattery = 3.1; # two 1.5V batteries have a measured voltage of 3.1V or even 3.2V
  my @DeviceNameParts = split(/_/,$Device); # to filter out HM_ Devices from neighbor or test system or newly included ones
  my $SignalDevice = $Device . "_BatState";

#  Log3(undef, 1, "my_StoreBatteryStatus      Device: $Device       Event: $Event      Model: $Model");
 
  # ignoring Devices that were just created by autocreate
  if($DeviceNameParts[0] eq "HM" || $DeviceNameParts[0] eq "ZWave")
  {
    Log3(undef, 1, "my_StoreBatteryStatus      ignoring Device: $Device");
    return;
  }

  # if it is the first time for that device set it to none (initialize)
  if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "undef") eq "undef")
  {
    fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice none");
  }
   
  # actually only devices HM-TC-IT-WM-W-EU and HM-CC-RT-DN have battery level and min-level
  # so calculating the percentage of actual level depending on min-level
  # all others just have battery ok or nok
  # IMPORTANT: first filter those which only send "battery" in EVENT
  #            then calculate for those which send "batteryLevel"!
  #            New devices: ZWave. They deliver battery already in percentage.
  #            New devices: XiaomiFlowerSens. They also deliver batteryLevel but already in percentage.

  ##############################################
  # HM Devices with battery
  ##############################################
  if($BatteryType[0] eq "battery"  && $Model ne "HM-TC-IT-WM-W-EU" && $Model ne "HM-CC-RT-DN" && $Model ne "undef")
  {
    if(ReadingsVal($Device, "battery", "low") eq "ok")
    {
      # check if battery was low before -> possibly changed
      if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") eq "low" || ReadingsVal($myDummyBatteryStates, $Device, 100) < 25)
      {
        # 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");
      }

      # status is "ok" so we set to 100% (we don't know better)
      fhem("setreading $myDummyBatteryStates $Device 100");
    }
    else
    {
      # check if message was already sent
      if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") ne "low")
      {
        # set signal state to low
        fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice low");
        #send message via TelegramBot
        fhem("set $myTelegramBot message Change battery for device $Device soon!");
      }

      # status is NOT "ok" ("low") so we set to 0% (we don't know better)
      fhem("setreading $myDummyBatteryStates $Device 0");
    }
  }
  ##############################################
  # HM Devices with batteryLevel
  ##############################################
  elsif($BatteryType[0] eq "batteryLevel"  && $Model ne "undef")
  {
    $ActBatLevel = ReadingsVal($Device, "batteryLevel", "0.0");
    $MinBatLevel = ReadingsNum($Device, "R-lowBatLimitRT", "0.0");
    $RemainingVoltageQuater = ($MaxBattery - $MinBatLevel) / 4; # to get 4 quaters for different colours and icons

    if(($ActBatLevel - $MinBatLevel) > (3 * $RemainingVoltageQuater))
    {
      # check if battery was low before -> possibly changed
      if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") eq "low" || ReadingsVal($myDummyBatteryStates, $Device, 100) < 25)
      {
        # 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 battery value to 100%
      fhem("setreading $myDummyBatteryStates $Device 100");
    }
    elsif(($ActBatLevel - $MinBatLevel) > (2 * $RemainingVoltageQuater))
    {
      # 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 - $MinBatLevel) > (1 * $RemainingVoltageQuater))
    {
      # 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 - $MinBatLevel) > (0 * $RemainingVoltageQuater))
    {
      # check for critical stuff
      if(ReadingsVal($Device, "motorErr", "ok") eq "lowBat" || ReadingsVal($Device, "motorErr", "ok") eq "ValveErrorPosition")
      {
        # empty!
        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
          if(ReadingsVal($Device, "motorErr", "ok") eq "ValveErrorPosition")
          {
            fhem("set $myTelegramBot message Change battery for device $Device now!");
          }
          else
          {
            fhem("set $myTelegramBot message Change battery for device $Device soon!");
          }
        }
      }
      else
      {
        # between 0% and 25%
        fhem("setreading $myDummyBatteryStates $Device 25");
      }
    }
    else
    {
      # totally empty
      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 for device $Device soon!");
      }
    }
  }
  ##############################################
  # ZWave Devices
  ##############################################
  elsif($BatteryType[0] eq "battery"  && InternalVal($Device, "TYPE", "undef") eq "ZWave")
  {
    if(ReadingsVal($Device, "battery", "na") eq "low")
{
      $ActBatLevel = 0;
}
else
{
      $ActBatLevel = ReadingsNum($Device, "battery", "0");
}

    if($ActBatLevel > 75)
    {
      # set date/time for changed battery if it was low before (so probably a change happended)
      if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") eq "low" || ReadingsVal($myDummyBatteryStates, $Device, 100) < 25)
      {
        fhem("setreading $myDummyLastBatteryChange $Device Battery changed:");
      }

      # set the battery value to 75% - 100%
      fhem("setreading $myDummyBatteryStates $Device 100");

      # set the signal state back to none
      fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice none");
    }
    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
    {
  # TODO: test for 0 and then send "change NOW"!
  # TODO: test for 0 and then send "change NOW"!
  # TODO: test for 0 and then send "change NOW"!
  # TODO: test for 0 and then send "change NOW"!
  # TODO: test for 0 and then send "change NOW"!
      # 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 for device $Device soon!");
      }
    }
  }
  ##############################################
  # XiaomiFlowerSens Devices
  ##############################################
  elsif($BatteryType[0] eq "batteryLevel"  && InternalVal($Device, "TYPE", "undef") eq "XiaomiFlowerSens")
  {
    $ActBatLevel = ReadingsNum($Device, "batteryLevel", "0");

    if($ActBatLevel > 75)
    {
      # set date/time for changed battery if it was low before (so probably a change happended)
      if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") eq "low" || ReadingsVal($myDummyBatteryStates, $Device, 100) < 25)
      {
        fhem("setreading $myDummyLastBatteryChange $Device Battery changed:");
      }

      # set the battery value to 75% - 100%
      fhem("setreading $myDummyBatteryStates $Device 100");

      # set the signal state back to none
      if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") ne "none")
      {
        fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice none");
      }
    }
    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 for device $Device soon!");
      }
    }
  }
}


2a:


##################################################
# Helper for readingsGroup BatteryStatus:
# sets the icon and icon color depending on "calculated" percentage value
sub my_SetBatteryIcon($$)
{
  my ($Device, $Value)  = @_;
  my $Icon = "measure_battery_" . "$Value"; # here the matching icon is "set"
  my $ActionDetectorDevice = "status_" . $Device;
  my $Name = ""; # name for signal state
  my $State = ReadingsVal("ActionDetector", $ActionDetectorDevice, "alive");

#  Log3(undef, 1, "my_SetBatteryIcon      Device: $Device       Value: $Value");

  if($State ne "alive")
  {
    $Icon = "message_attention\@red";
  }
  else
  {
    if($Value > 75)
    {
      $Icon = $Icon . "\@green"; # between 75% and 100%
    }
    elsif($Value > 25)
    {
      $Icon = $Icon . "\@orange"; # between 25% and 75%
    }
    else
    {
      $Icon = $Icon . "\@red"; # below 25%
    }
  }

  return $Icon;
}



3. der (die) dummy:


Internals:
   CHANGED   
   NAME       dmBatteryStates
   NR         186
   STATE      ???
   TYPE       dummy
   READINGS:
     2018-01-02 19:27:09   Aussenthermometer 100
     2018-01-02 01:57:04   Fenster_Buero   0
     2018-01-02 01:56:19   Fenster_EssZi   100
     2018-01-02 18:56:28   Fenster_Kueche  100
     2018-01-02 15:10:04   Fenster_SchlaZi 0
     2018-01-02 16:15:33   Fenster_WoZi    0
     2017-10-31 16:02:46   Feuchtigkeit_Balkon_1 75
     2017-10-27 21:23:04   Feuchtigkeit_Balkon_2 100
     2017-10-27 21:20:25   Feuchtigkeit_Balkon_3 100
     2017-10-27 21:20:25   Feuchtigkeit_Balkon_4 100
     2017-10-27 21:21:30   Feuchtigkeit_Balkon_5 100
     2017-10-27 21:19:06   Feuchtigkeit_Balkon_6 100
     2017-10-27 21:21:13   Feuchtigkeit_Balkon_7 100
     2017-11-11 03:01:06   Gewitterwarner  100
     2017-11-11 12:49:42   Hauptdisplay    100
     2018-01-02 08:49:59   Haustuer        100
     2018-01-02 19:28:13   Heizkoerperthermostat_Buero 100
     2018-01-02 19:27:29   Heizkoerperthermostat_EssZi 100
     2018-01-02 19:27:25   Heizkoerperthermostat_Kueche 100
     2018-01-02 19:28:11   Heizkoerperthermostat_SchlaZi 75
     2018-01-02 19:27:17   Heizkoerperthermostat_WoZi 75
     2018-01-02 19:23:55   Markise         25
     2018-01-02 17:18:15   Rauchmelder_Buero 100
     2018-01-02 18:03:27   Rauchmelder_Eingang 100
     2017-12-27 20:59:27   Rauchmelder_Kueche 100
     2018-01-02 18:23:06   Rauchmelder_SchlaZi 100
     2018-01-02 19:28:12   Thermometer_Gefrierschrank 100
     2018-01-02 19:26:59   Thermometer_Heizung 100
     2018-01-02 19:28:35   Thermometer_Kuehlschrank 100
     2018-01-02 19:13:22   Tuer_Kueche     100
     2018-01-02 19:22:31   Tuer_SchlaZi    100
     2018-01-02 18:56:53   Tuer_Wohnung    100
     2018-01-02 15:57:09   Wandthermostat_Bad 75
     2018-01-02 19:21:30   Wandthermostat_Buero 75
     2018-01-02 19:23:06   Wandthermostat_Buero2 100
     2018-01-02 18:56:09   Wandthermostat_EssZi 75
     2018-01-02 19:27:05   Wandthermostat_EssZi2 50
     2018-01-02 18:45:15   Wandthermostat_Kueche 50
     2018-01-02 18:47:40   Wandthermostat_SchlaZi 75
     2018-01-02 18:19:22   Wandthermostat_WC 50
     2018-01-02 18:50:31   Wandthermostat_WoZi 75
Attributes:
   event-on-change-reading .*


3a:


Internals:
   NAME       dmLastBatteryChange
   NR         191
   STATE      ???
   TYPE       dummy
   READINGS:
     2017-06-18 21:09:49   Heizkoerperthermostat_EssZi Battery changed:
     2017-07-08 12:36:35   Heizkoerperthermostat_FabiZi Battery changed:
     2017-08-31 22:59:44   Heizkoerperthermostat_Kueche Battery changed:
     2017-01-18 01:23:19   Heizkoerperthermostat_SchlaZi Battery changed:
     2016-11-14 00:55:22   Heizkoerperthermostat_WoZi Battery changed:
     2017-11-19 21:15:25   Rauchmelder_Eingang Battery changed:
     2017-12-06 17:09:28   Rauchmelder_SchlaZi Battery changed:
     2017-08-14 07:38:04   Wandthermostat_Bad Battery changed:
     2017-05-06 23:30:38   Wandthermostat_EssZi Battery changed:
     2017-05-03 07:28:45   Wandthermostat_FabiZi Battery changed:
     2017-03-19 11:55:00   Wandthermostat_Kueche Battery changed:
     2017-04-22 06:51:20   Wandthermostat_SchlaZi Battery changed:
     2017-03-19 11:56:34   Wandthermostat_WC Battery changed:
     2017-04-14 09:11:26   Wandthermostat_WoZi Battery changed:
Attributes:
   event-on-change-reading .*



4. readingsGroup(s):


Internals:
   DEF        NAME=dmBatteryStates.*:.*
   NAME       rgBatteryStatus
   NR         179
   NTFY_ORDER 50-rgBatteryStatus
   STATE      Initialized
   TYPE       readingsGroup
   mayBeVisible 1
   CONTENT:
     dmBatteryStates 1
   CONTENT2:
   DEVICES:
     ARRAY(0x514d6c8)
   fhem:
     lastDefChange 16
     last_update 1514917483.2913
   helper:
     DEF       
     mapping    $READING
     valueIcon  {my_SetBatteryIcon($READING, $VALUE)}
Attributes:
   alias      Übersicht Batterien
   mapping    $READING
   nolinks    1
   notime     1
   room       Overview Battery,Overview
   sortby     08
   valueIcon  {my_SetBatteryIcon($READING, $VALUE)}


4a:


Internals:
   DEF        <Gerät>,<>,<Datum> NAME=dmLastBatteryChange:.*
   NAME       rgLastBatteryChange
   NR         189
   NTFY_ORDER 50-rgLastBatteryChange
   STATE      Initialized
   TYPE       readingsGroup
   CONTENT:
     dmLastBatteryChange 1
   CONTENT2:
   DEVICES:
     ARRAY(0x4ffa710)
     ARRAY(0x46e4290)
   fhem:
     lastDefChange 16
     last_update 1514905488.10322
   helper:
     DEF       
     mapping    $READING
Attributes:
   alias      Übersicht Batteriewechsel
   mapping    $READING
   nolinks    1
   room       Overview,Overview Battery
   sortColumn 3
   sortby     09


Einige zusätzliche Erläuterungen (der Rest sollte den Kommentaren zu entnehmen sein):

Ich habe zu Beginn der myUtils einige "globale Variablen", dort hinterlege ich gewisse Dinge, die ich immer wieder brauche.
Somit muss ich nicht immer überlegen wie der dummy etc. grad wieder heißt und eine Anpassung an Namen geht einfach (gut find-rplace würde auch gehen) indem ich im "Kopfteil" einfach den "Variablenwert" ändere wo dann der dummyname etc. hinterlegt ist.


######################################################
# Global definitions like names of dummies used etc.

# dummy that holds the status of sent messages to prevent unwanted resending
my $myDummySignalMessageStatesFhemBot = "dmSignalMessageStatusFhemBot";

# dummy that holds the calculated battery values
my $myDummyBatteryStates = "dmBatteryStates";

# dummy that holds the date of last battery change
my $myDummyLastBatteryChange = "dmLastBatteryChange";



Es ist mein ältester Code, einiges ist sicher nicht "optimal" aber ich verstehe was wie geht und auch wenn was nicht geht/wo klemmt ;)
Wollte den Code auch schon immer mal überarbeiten aber: warum, wenn es tut ;)

Neue Gerätetypen kommen halt immer als neues "elsif" dazu...
...auch wenn nur wenig/nichts zu tun ist.
Aber auch hier wieder: eine Stelle wo ich suchen muss, wenn was klemmt...

Auch die Darstellung des Icons geht sicher anders aber ich verfahre gern nach dem Prinzip: notify zum Auslösen und ("komplizierte" Entscheidungen und) Ausführung(en) dann in eine myUtils.
Die erste Form der aufgerufenen Sub ist immer nur eine einfache Logausgabe der "Parameter", dann sehe ich ob das notiy getriggert wird wie erwartet und auch was tatsächlich übergeben wird... ;)
Und dann wird Stück für Stück der Code aufgebaut...

Zuletzt habe ich noch eingebaut, dass in einem weiteren Dummy (jaja: warum immer dummy ;)   / aber so habe ich alles an einer Stelle / Alternative: eingenes/zusätzliches Reading am Device) speichere wann die Batterie (vermutlich: von leer zu voll) getauscht wurde...

Wollte eigenltich auch noch eine Berechnung der "Haltbarkeit" usw. aber hatte noch keine Zeit...
...aber die zuletzt getauschten Batterien halten ja noch ein Weilchen...

Ich hoffe ich habe nichts (wichtiges) vergessen...
...ansonsten einfach nachfragen.

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)

Amenophis86

Ui, das haste ja wirklich sehr umfangreich und ausführlich gemacht. Gefällt mir, aber da muss ich mir ruhige 5 Minuten suchen um den Code genauer zu betrachten und für meine Bedürfnisse anzupassen. Vielen Dank schon mal dafür.
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...

MadMax-FHEM

Bitte gerne!

Und: danke! :)

Ja daher habe ich ihn auch nicht gleich gepostet (sorry ;)  ), ist halt nix für copy&paste...
Einiges ist schon sehr speziell...

Viel Vergnügen damit!

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)

Amenophis86

#10
Bin gerade dabei es für meine Bedürfnisse umzubauen und bin schwer begeistert. Kurze Frage, die nur indirekt mit dem Thema zu tun hat. Was bezweckst du in der ReadingsGroup mit dem attr sortby 08?

Edit:
Habe jetzt nochmals nachgelesen in der CommandRef, aber daraus werde ich nicht schlau. Kann es mir nur so erklären, dass du es damit in der Raumübersicht verschieben kannst an einen bestimmten Platz, da du das wohl auch bei anderen Device vergeben hast.
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...

MadMax-FHEM

Zitat von: Amenophis86 am 11 Januar 2018, 13:16:48
Bin gerade dabei es für meine Bedürfnisse umzubauen und bin schwer begeistert. Kurze Frage, die nur indirekt mit dem Thema zu tun hat. Was bezweckst du in der ReadingsGroup mit dem attr sortby 08?

Edit:
Habe jetzt nochmals nachgelesen in der CommandRef, aber daraus werde ich nicht schlau. Kann es mir nur so erklären, dass du es damit in der Raumübersicht verschieben kannst an einen bestimmten Platz, da du das wohl auch bei anderen Device vergeben hast.

Ah, sehr schön!
Viel Spaß damit!

Jep, exakt.
Ich hatte früher eine Übersichtsseite wo alles Wichtige angezeigt wurde und wollte die einfach "am Ende" stehen haben...

Aber jetzt wo du es erwähnst: die 08 macht mittlerweile keinen Sinn mehr, habe es jetzt auf 2 Seiten/Räume aufgeteilt... Schadet aber auch nicht... ;)

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)

Amenophis86

Ich habe deine Code meine Bedürfnissen ein bisschen angepasst und auch etwas allgemeiner tauglich gemacht, sowie eine weitere Routine geschrieben, welche in einem aktuell vorhandenen System alle nötigen Daten anlegt bzw. die Dummys einmal mit Daten füllt. Da das aber ziemlich offtopic ist, wollte ich dir fragen, ob du was dagegen hast, wenn wir den Code in einem neuen Thema veröffentlichen. Natürlich mit dir als Urheber genannt. Dachte im Bereich Codeschnipsel.
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...

MadMax-FHEM

Klar!

Dann komme ich auch in den Genuß deiner Anpassungen und kann sicher was "zurückübernehmen"... ;)

Urheber wäre/ist egal, der Code der dort landet ist ja dann sowieso eher von dir... ;)

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)

Amenophis86

Naja, ich habe jetzt net wirklich viel geändert. Habe das meiste übernommen und es nur so umgebaut, dass man es anlegen kann, wenn man es vorher noch nicht hatte. Denke nicht, dass meine Perl Kenntnis deine übersteigen. Hab jetzt auch noch nicht geschaut, wo man ihn noch verschlanken könnte oder ähnliches. Funktioniert ja auch soweit :) Was ich noch einbauen werde ist die Unterstützung von LaCrosse Sensoren. Aber mehr dazu im neuen Thread.

Neues Thema ist hier: https://forum.fhem.de/index.php/topic,82637.0.html
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...