Batteriestatus und Speicherung des letzten Wechsel

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

Vorheriges Thema - Nächstes Thema

Amenophis86

#105
Ja gibt es. Die Idee dahinter ist, dass neue Device beim ersten anlegen nicht bearbeitet werden sollen. Dazu dürfen diese natürlich nicht mit HM_ beginnen. Sollte ich als Erklärung mal im ersten Post aufnehmen.

Edit:
Habe den ersten Post entsprechend angepasst.
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...

DarkT


Amenophis86

@DarkT: Um mal auf deine Frage, welche per PM kam, zu antworten warum das so ist, sei folgendes erklärt. Geräte mit HM_ etc. werden nicht überwacht, weil es vermutlich bei vielen Leuten so abläuft:

- Neues Gerät gekauft und in FHEM angelegt (Beispiel HM_123456)
- Gerät wird nach erfolgreichem anlegen umbenannt in Bad.Fenster

Sollte nun beim anlegen das Geräts in FHEM das Skript direkt das Gerät HM_123456 angelegt haben, wird es für immer in den Dummys verbleiben und als ok angezeigt werden, obwohl es das ja gar nicht mehr gibt. Dazu wird das Gerät Bad.Fenster angezeigt, welches das neue Gerät ist. Aus diesem Grund werden neu angelegte Geräte ignoriert um sie erst nach dem Rename zu erfassen.
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...

DarkT

Zitat von: Amenophis86 am 07 Februar 2018, 12:52:01
@DarkT: Um mal auf deine Frage, welche per PM kam, zu antworten warum das so ist, sei folgendes erklärt. Geräte mit HM_ etc. werden nicht überwacht, weil es vermutlich bei vielen Leuten so abläuft:

- Neues Gerät gekauft und in FHEM angelegt (Beispiel HM_123456)
- Gerät wird nach erfolgreichem anlegen umbenannt in Bad.Fenster

Sollte nun beim anlegen das Geräts in FHEM das Skript direkt das Gerät HM_123456 angelegt haben, wird es für immer in den Dummys verbleiben und als ok angezeigt werden, obwohl es das ja gar nicht mehr gibt. Dazu wird das Gerät Bad.Fenster angezeigt, welches das neue Gerät ist. Aus diesem Grund werden neu angelegte Geräte ignoriert um sie erst nach dem Rename zu erfassen.

Danke für die Erklärung. Den Punkt mit den Dummys hatte ich nicht gesehen. Danke dafür.

Amenophis86

Ich habe einen neuen Branche (no-BatteryStatusBot) angelegt zum testen. Den test-branche habe ich nochmal gelassen um ihn mit dem neuen Vergleichen zu können. Der Neue enthält folgende Änderungen:

@Wzut: Du hattest geschrieben:
Zitat von: Wzut am 27 Januar 2018, 20:09:07
doch mit $level == 25 , denn den gibt es nur 1x , beim nächste low wäre er dann ja schon runter auf 20 :)
Ich konnte aber nirgends finden, dass bei 25% nochmal um 5% reduziert wird, das habe ich jetzt eingebaut. Der Status bleibt quasi bei 5% stehen bis dead als Event kommt:

elsif ($level < 25 && $level > 10)
  {
    $level -=5;
readingsSingleUpdate($defs{$BatteryStatus}, $Device, $level,0); # reduce battery level by 5 with every event
Log3(undef, 3,"$Device, Batt Level $level");

return undef;
  }
   elsif($level == 5)
  {
    return undef;
  }


Ich habe den BatteryStatusBot bei batteryLevel jetzt damit ersetzt, dass quasi in der Funktion selbst ein event-on-change-reading eingesetzt wurde. Meldet das Gerät sich mit dem gleichen Level wie vorher, dann wird nichts gemacht. Erst, wenn ein neues Level erreicht wurde, wird einmalig geprüft, die entsprechenden Werte gesetzt und wenn nötig die Nachricht versendet.

_________________________________________
Weiterhin habe ich jetzt mal folgende neue Variablen zu Beginn definiert:
###############################
# Here you can change the times for the temp-at and waittime for the reduction of 5% steps

  my $FivePercent_HM = 600;
  my $TempAt_HM = 43200;
  my $FivePercent_Max = 600;
  my $TempAt_Max = 43200;
  my $FivePercent_Xiaomi = 600;
  my $TempAt_Xiaomi = 43200;
  my $FivePercent_LaCrosse = 600;
  my $TempAt_LaCrosse = 43200;
  my $FivePercent_Other = 600;
  my $TempAt_Other = 43200;


Die besten Zeiten müssen wir über Testen finden.

_________________________________________
Auch gibt es folgende neue Variable:
my $text_motorErrValve = "Der Motor kann sich nicht mehr bewegen!"; #Text for motorErr ValveErrorPosition only HM
Diese wird im HM Bereich mit batteryLevel genutzt. Beim ersten Durchlaufen auf 25% wird gleich noch getestet, ob der Motor bereits "ValveErrorPosition" meldet. Wenn ja, wird dies an die Nachricht angehängt und direkt auf 0% gesetzt. Ansonsten wird lediglich auf 25% gesetzt.

_________________________________________
Weiterhin habe ich noch LaCrosse zur Ignoreliste am Anfang dazu gefügt. Nach der Frage von DarkT ist mir aufgefallen, dass ich dies vergessen hatte.

Könnt ja mal über den Code schauen, ob euch noch Fehler auffallen. Ich hoffe, dass ich ihn die Tage testen kann.
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...

mahowi

#110
Ich setze den Code jetzt auch zur Batterieüberwachung ein. Nach dem Ausführen von BatteryStart werden meine Geräte auch schön aufgeführt. Da bei 2 ZWave Thermostaten die Batterien bereits auf low waren, habe ich sie eben gewechselt. Der Dummy BatterieWechsel bleibt aber leer, und der Status der Geräte in der ReadingsGroup bleibt auf low.

Hab ich irgendwas übersehen, das ich noch definieren muß?

Reading der Thermostate:
2018-02-07 16:53:59 battery 88 %
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

mahowi

Ich habe heute mal alle Dummies, das Notify und die ReadingsGroup gelöscht. Die 99_Batterycheck.pm habe ich neu aus dem "no-BatteryStatusBot"-Branch geholt.

Nach Reload und {BatteryStart()} werden die ZWave-Geräte gar nicht mehr angezeigt.

Liegt es eventuell daran, daß für die Geräte ein "unknown Event" gemeldet wird?

2018.02.08 10:05:55.353 3: wz.ZW_HT2, unknown Event battery: 93 %
2018.02.08 10:06:07.003 3: bz.ZW_HT, unknown Event battery: 65 %
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

Amenophis86

#112
Bezieht sich auf den ersten Post im Master Branche:
Ich gehe davon aus, dass du die erste Version aus dem Master-Branch nutzt?

Hat das Device das Reading battery ok/low und/oder batteryLevel mit einem Wert? Wie waren die Werte vor dem Wechsel und wie nach dem Wechsel? Was stand vor, was nach dem Wechsel im BatteryStatus Dummy was im BatteryStatusBot Dummy? Hast du event-on-change / -on-update gesetzt?

Bezieht sich auf den zweiten Post im no-BatteryStatusBot-Branche:
Edit:
Ja scheinbar macht das % Zeichen hier Probleme. Glaube es wird noch auf ReadingsVal und nicht auf ReadingsNum geprüft. Habe kein Z-Wave, daher ist mir das vermutlich nicht aufgefallen. Schaue es mir mal an. Dank dir.

Edit2:
Wie ist das bei Z-Wave, haben die ein Reading Battery und ein Reading batteryLevel, oder steht das Level im Reading battery? Poste mal bitte ein list eines der Device, dass ich mir das anschauen kann. Habe wie gesagt keine Z-Wave Komponenten.
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...

mahowi

Der erste Post hatte sich auf den "test"-Branch bezogen. Da es beides ZWave-Geräte waren, dürfte das Problem dasselbe wie im zweiten Post sein.

Hier mal ein list von einem Thermostat:
Internals:
   CFGFN     
   DEF        ee0b4efd 8
   IODev      ZME_UZB1
   LASTInputDev ZME_UZB1
   MSGCNT     100
   NAME       wz.ZW_HT2
   NR         242
   STATE      19.64 C
   TYPE       ZWave
   ZME_UZB1_MSGCNT 100
   ZME_UZB1_RAWMSG 00040008044608007f
   ZME_UZB1_TIME 2018-02-08 11:20:14
   ZWaveSubDevice no
   homeId     ee0b4efd
   isWakeUp   1
   lastMsgSent 1518084919.18064
   nodeIdHex  08
   useMultiCmd 1
   READINGS:
     2017-10-04 16:23:13   CMD             ZW_APPLICATION_UPDATE
     2018-02-08 09:00:15   LastSetTemperature 18.21
     2018-02-08 11:20:14   battery         93 %
     2018-02-08 11:20:14   ccsOverride     no, unused
     2018-02-08 11:20:14   setpointTemp    18.20 C heating
     2018-02-08 11:15:16   temperature     19.64 C
     2018-02-08 11:15:19   timeToAck       0.103
     2018-02-08 11:15:19   transmit        OK
     2018-02-08 11:15:16   wakeup          notification
Attributes:
   IODev      ZME_UZB1
   alias      Thermostat WZ Hof
   classes    BATTERY CLIMATE_CONTROL_SCHEDULE CLOCK MANUFACTURER_SPECIFIC MULTI_CMD PROTECTION SENSOR_MULTILEVEL THERMOSTAT_SETPOINT VERSION WAKE_UP MARK CLIMATE_CONTROL_SCHEDULE CLOCK MULTI_CMD
   genericDeviceType thermostat
   group      Heizung
   icon       max_heizungsthermostat_basic
   room       Homekit,Wohnzimmer
   stateFormat temperature
   useMultiCmd 1
   vclasses   BATTERY:1 CLIMATE_CONTROL_SCHEDULE:1 CLOCK:1 MANUFACTURER_SPECIFIC:1 MULTI_CMD:1 PROTECTION:2 SENSOR_MULTILEVEL:6 THERMOSTAT_SETPOINT:2 VERSION:1 WAKE_UP:2
   webCmd     thermostatSetpointSet
   widgetOverride thermostatSetpointSet:slider,4.0,0.5,28.0,1


Wie Du siehst, gibt es hier nur das Reading battery, aber mit Prozentangabe. batteryLevel gibt es nicht, zumindest bei keinem meiner batteriebetriebenen ZWave-Geräte.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

_fhemuser_

Bei mir ist jetzt wirklich eine Batterie leer und ich erhalte alle 3 Minuten eine Nachricht per Telegram, die Batterie in Kürze zu tauschen.
Aktiviert ist noch der Testzweig von Ende Januar.

Ich werde den letzten Codezweig nachher einbauen.
fhem in der aktuellsten Version auf:
Raspberry 4 mit SSD | fhem2fhem | NanoCul433 Selbstbau | NanoCul868 Selbstbau | DbLog | MAX! | zigbee2MQTT | homebridge | alexa
inkl zigbee2MQTT Server, Unifi-Server

Raspberry 4 mit SD Karte | fhem2fhem | motioneye

Amenophis86

@mahowi: Ok das war mir nicht bewusst. Wenn ich mir allerdings den Ursprungscode ansehe dann hatte MadMax-Fhem das schon entsprechende bedacht, ich nur übersehen. Werde es im no-BatteryStatusBot an passen.

Warum es allerdings beim test Zweig nicht klappt erschließt sich mir noch nicht. Da wären die Antworten auf die Frage interessant gewesen. Wichtig ist, dass vor einem Batteriewechsel bei Geräten mit einer Wertangabe der Wert unter 25 gewesen sein muss. Bei ok/low Geräten muss das nicht sein, ausnahme ist hier MAX!.


@_fehmuser_:
Warum du im Testzweig ständig die Meldung bekommst brauche ich mehr Informationen. Was für eine Device ist es, was steht im BatteryStatus und BatteryStatusBot für Werte für das Gerät?
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...

Amenophis86

@mahowi: Ich habe gerade mal die "batteryLevel" prüfung im no-BatteryStatusBot Zweig eingefügt. Würdest du mir noch eine raw Defintion deines Z-Wave Device zur Verfügung stellen, dann muss ich mir keins selbst bauen und kann damit ein bisschen testen. Finde es immer besser die Werte eines richtiges Device zu haben, als mit einem dummy zu üben.
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...

mahowi

Ich habe die neue Version heruntergeladen, bekomme beim reload aber Syntaxfehler:
syntax error at ./FHEM/99_Batterycheck.pm line 675, near "))
   "
syntax error at ./FHEM/99_Batterycheck.pm line 693, near ")
{"
syntax error at ./FHEM/99_Batterycheck.pm line 698, near "}"
syntax error at ./FHEM/99_Batterycheck.pm line 705, near "}"
syntax error at ./FHEM/99_Batterycheck.pm line 718, near "}"
syntax error at ./FHEM/99_Batterycheck.pm line 729, near "}"
syntax error at ./FHEM/99_Batterycheck.pm line 794, near "}"
syntax error at ./FHEM/99_Batterycheck.pm line 856, near "}"
Unmatched right curly bracket at ./FHEM/99_Batterycheck.pm line 858, at end of line
Can't use global @_ in "my" at ./FHEM/99_Batterycheck.pm line 865, near "= @_"
./FHEM/99_Batterycheck.pm has too many errors.


Da wird wohl eine Klammer falsch sitzen. Ich komme nur leider gerade nicht dazu, drüber zu gucken.

Hier mal die raw definition vom Thermostat:
defmod wz.ZW_HT2 ZWave ee0b4efd 8
attr wz.ZW_HT2 IODev ZME_UZB1
attr wz.ZW_HT2 alias Thermostat WZ Hof
attr wz.ZW_HT2 classes BATTERY CLIMATE_CONTROL_SCHEDULE CLOCK MANUFACTURER_SPECIFIC MULTI_CMD PROTECTION SENSOR_MULTILEVEL THERMOSTAT_SETPOINT VERSION WAKE_UP MARK CLIMATE_CONTROL_SCHEDULE CLOCK MULTI_CMD
attr wz.ZW_HT2 genericDeviceType thermostat
attr wz.ZW_HT2 group Heizung
attr wz.ZW_HT2 icon max_heizungsthermostat_basic
attr wz.ZW_HT2 room Homekit,Wohnzimmer
attr wz.ZW_HT2 stateFormat temperature
attr wz.ZW_HT2 useMultiCmd 1
attr wz.ZW_HT2 vclasses BATTERY:1 CLIMATE_CONTROL_SCHEDULE:1 CLOCK:1 MANUFACTURER_SPECIFIC:1 MULTI_CMD:1 PROTECTION:2 SENSOR_MULTILEVEL:6 THERMOSTAT_SETPOINT:2 VERSION:1 WAKE_UP:2
attr wz.ZW_HT2 webCmd thermostatSetpointSet
attr wz.ZW_HT2 widgetOverride thermostatSetpointSet:slider,4.0,0.5,28.0,1

setstate wz.ZW_HT2 19.50 C
setstate wz.ZW_HT2 2017-10-04 16:23:13 CMD ZW_APPLICATION_UPDATE
setstate wz.ZW_HT2 2018-02-09 07:38:28 LastSetTemperature 16.21
setstate wz.ZW_HT2 2017-05-24 07:50:26 SEND_DATA failed:00
setstate wz.ZW_HT2 2018-02-01 07:41:08 UNPARSED SENSOR_MULTILEVEL 0631010142080d
setstate wz.ZW_HT2 2018-02-09 07:49:05 battery 91 %
setstate wz.ZW_HT2 2017-12-20 02:48:40 ccs UNKNOWN 88007f
setstate wz.ZW_HT2 2018-02-09 07:49:05 ccsOverride no, unused
setstate wz.ZW_HT2 2017-04-11 09:54:41 humidity 0
setstate wz.ZW_HT2 2017-08-25 02:26:11 power 0 W
setstate wz.ZW_HT2 2018-02-09 07:49:05 setpointTemp 16.20 C heating
setstate wz.ZW_HT2 2017-12-31 19:54:06 state desired-temp 18.82 ;; get ZWave_THERMOSTAT_8 setpoint
setstate wz.ZW_HT2 2018-02-09 07:49:05 temperature 19.50 C
setstate wz.ZW_HT2 2018-02-09 07:49:07 timeToAck 0.031
setstate wz.ZW_HT2 2018-02-09 07:49:07 transmit OK
setstate wz.ZW_HT2 2018-02-09 07:49:05 wakeup notification
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

Amenophis86

Sorry war zu früh, habe den Syntaxcheck vergessen. Jetzt müsste es passen.
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...

mahowi

Läuft, aber ich bekomme für die ZWave-Geräte immer noch "unknown Event":
2018.02.09 08:43:35.380 3: wz.ZW_HT2, unknown Event battery: 91 %
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee