reload 99_BatteryCheckUtils.pm
ausgeführt werden, oder der Code kopiert und in die eigene 99_BatteryCheckUtils.pm eingefügt werden.{BatteryStart()}
ausführen.
###############################
# Here you can change the variables to fit your installation.
#
my $text_now = "Die Batterien von $Device müssen JETZT gewechselt werden!"; #Text for changing battery now
my $text_soon = "Die Batterien von $Device sollten bald gewechselt werden!"; #Text for changing battery soon
my $text_motorErrValve = "Der Motor kann sich nicht mehr bewegen!"; #Text for motorErr ValveErrorPosition only HM
my $text_changed = "Batterie zuletzt gewechselt: "; #Text for last change
my $BatteryStatus = "BatterieStatus"; #Name of the Dummy for status
my $BatteryChanged = "BatterieWechsel"; #Name of the Dummy for battery changed information
###############################
# 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_ZWave = 600;
my $TempAt_ZWave = 600;
my $FivePercent_LaCrosse = 600;
my $TempAt_LaCrosse = 43200;
my $FivePercent_Other = 600;
my $TempAt_Other = 43200;
################################
# Here you choos your message device and how to send
# comment the device you do not want to use
#
# TelegramBot
my $msg = "set TelegramBot message \@\@User ";
#
# msg-command
# my $msg = "msg \@User title='Battery Check' ";
#
# Pushover
# my $msg = "set Pushover msg device=User title='Battery Check' ";
#Define Dummys for script
my $BatteryStatus = "BatterieStatus"; #Name of the Dummy for status
my $BatteryChanged = "BatterieWechsel"; #Name of the Dummy for battery changed information
my $ReadingsGroup = "rgBatterieStatus"; #Name of the ReadingsGroup
my $Room = "Z_System->BatteryCheck"; #room for the dummys
my $Notify = "NO.BatterieNotify"; #Name of the Notify for sending battery information
# ignoring Devices that were just created by autocreate
if($DeviceNameParts[0] eq "HM" || $DeviceNameParts[0] eq "ZWave" || $DeviceNameParts[0] eq "MAX")
{
Log3(undef, 1, "my_StoreBatteryStatus ignoring Device: $Device");
return;
}
syntax error at ./FHEM/99_myUtils.pm line 371, near "XiaomiFlowerSens Devices ############################################# elsif" syntax error at ./FHEM/99_myUtils.pm line 436, near "}" Can't use global @_ in "my" at ./FHEM/99_myUtils.pm line 443, near "= @_" Global symbol "$Value" requires explicit package name (did you forget to declare "my $Value"?) at ./FHEM/99_myUtils.pm line 444. syntax error at ./FHEM/99_myUtils.pm line 472, near "}" Can't redeclare "my" in "my" at ./FHEM/99_myUtils.pm line 481, near "" syntax error at ./FHEM/99_myUtils.pm line 515, near ") }"
my $TYPE = InternalVal($Device, "TYPE", "undef"); # MAX!
##############################################
# MAX! Devices
##############################################
elsif(($BatteryType[0] eq "battery") && ($TYPE eq "MAX"))
{
if(ReadingsVal($Device, "battery", "low") eq "ok")
{
# check if battery was low before -> possibly changed
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") eq "low")
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $BatteryChanged $text_changed");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
# status is "ok" so we set to 100% (we don't know better)
fhem("setreading $BatteryStatus $Device 100");
}
else
{
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem("set $myTelegramBot message $text_soon");
}
# status is NOT "ok" ("low") so we set to 0% (we don't know better)
fhem("setreading $BatteryStatus $Device 0");
}
}
# ignoring Devices that were just created by autocreate
if($DeviceNameParts[0] eq "HM" || $DeviceNameParts[0] eq "ZWave") || $DeviceNameParts[0] eq "MAX")
Zitat von: Wzut am 12 Januar 2018, 20:05:20Danke geändert. Ich habe sie bei mir auskommentiert und beim einkommentieren wohl ein Zeichen zu viel weggenommen.
schön :)
aaaber schau nochmal nach den Blumen ( ich habe sie rausgeworfen da ich keine habe )
ZitatDie taucht bei mir nicht auf. Dürfte sie auch nicht, weil sie eigentlich auch kein battery/Level Reading haben dürfte. Daher frage ich mich, wieso sie bei dir erscheint?
und bei HM muss die VCCU noch raus ... meine hat keine Batterie :)
Zitat von: Amenophis86 am 13 Januar 2018, 10:52:36a. das hatte ich mich auch gefragt , werde mal auf die Suche gehen, ist ja jetzt nicht so ein tragischer Fehler
Daher frage ich mich, wieso sie bei dir erscheint?
--- snipp ---
Deinen Max Block habe ich eingefügt.
Zitat von: Amenophis86 am 13 Januar 2018, 10:52:36
https://github.com/Amenophis86/Batteryfunktion
Zitat von: Amenophis86 am 14 Januar 2018, 19:56:37
@helmut:
Fehler habe ich korriegiert, vielen Dank. Bezüglich der verschiedenen Nachrichten sehe ich wie gesagt drei Möglichkeiten:
1. Einfach den Befehle für das Senden der Nachricht vorab definieren und die verschiedenen Geräte zu unterstützten
2. Eine eigene Routine für das Senden schreiben, finde ich sehr aufwendig und unnötig
3. Den msg befehl einbauen
fhem("setreading $BatteryChanged $text_changed");
fhem("setreading $BatteryChanged $Device $text_changed");
fhem("setreading $BatteryChanged $text_changed");
;)Zitat von: Wzut am 15 Januar 2018, 11:26:29
Noch eien andere Sache ist mir aufgefallen : Der Dummy BatterieWechsel sollte sich ja so nach und nach mit den Daten getauschter Batterien füllen, das tut er aber z.Z. nur bedingt ( bei MAX u.a. so nicht )
Ursache ist IMHO ein kleiner Tippfehler, du hast den Eintrag in die Readings unterschiedlich behandelt, mal mit Device Namen und mal ohne :Code Auswählenfhem("setreading $BatteryChanged $text_changed");
fhem("setreading $BatteryChanged $Device $text_changed");
Zitat von: Amenophis86 am 15 Januar 2018, 18:31:15
Hab gerade mal auf github geschaut und finde den von dir angesprochenen Fehler nicht.
# HM Devices with battery
fhem("setreading $BatteryChanged $text_changed");
# HM Devices with batteryLevel
fhem("setreading $BatteryChanged $text_changed");
# ZWave Devices
fhem("setreading $BatteryChanged $Device $text_changed");
# XiaomiFlowerSens Devices
fhem("setreading $BatteryChanged $Device $text_changed");
# MAX! Devices
fhem("setreading $BatteryChanged $text_changed");
Zitat von: Wzut am 16 Januar 2018, 10:00:54
Bitte schön , gerade eben von github geholt. Zwave & Xiaomi sind OK da $Device vorhanden,
die anderen drei sind IMHO fehlerhaft da später immer das gleiche Reading überschrieben wird ohne DevicenameCode Auswählen
# HM Devices with battery
fhem("setreading $BatteryChanged $text_changed");
# HM Devices with batteryLevel
fhem("setreading $BatteryChanged $text_changed");
# ZWave Devices
fhem("setreading $BatteryChanged $Device $text_changed");
# XiaomiFlowerSens Devices
fhem("setreading $BatteryChanged $Device $text_changed");
# MAX! Devices
fhem("setreading $BatteryChanged $text_changed");
Zitat von: Firetic am 16 Januar 2018, 12:40:57
Ich glaube durch die "BatteryStart()" Funktion wird das notifiy falsch definiert?!
Es müsste doch {BatteryStatusFunction(\$NAME, \$EVENT)} anstatt {BatterieStatusFunction(\$NAME, \$EVENT)} heißen...
Gruß Firetic
Internals:
DEF HeatingThermostat 0f8955
IODev cm
LASTInputDev cm
MSGCNT 9954
NAME MAX_CV_Keuken
NR 278
RSSI -60
STATE 15.0 °C
TYPE MAX
addr 0f8955
backend cm
cm_MSGCNT 9954
cm_TIME 2018-01-20 21:09:26
dstsetting 1
mode 0
rferror 0
type HeatingThermostat
READINGS:
2018-01-20 21:09:26 RSSI -60
2015-11-06 21:11:18 TimeInformationHour 2
2018-01-20 21:09:26 battery ok
2015-11-06 21:54:01 boostDuration 5
2015-11-06 21:54:01 boostValveposition 80
2015-11-06 21:54:01 decalcification Sat 12:00
2018-01-20 21:09:26 desiredTemperature 15.0
2017-02-17 15:13:45 firmware 1.0
2017-02-17 15:31:59 groupid 2
2015-11-06 22:57:47 maxValveSetting 100
2018-01-20 21:09:26 mode auto
2018-01-20 15:12:13 msgcnt 124
2016-05-20 21:21:30 onlyAutoMode 0
2018-01-20 21:09:26 state 15.0 °C
2018-01-20 19:00:35 temperature 19.6
2017-02-17 15:13:45 testresult 161
2015-11-06 21:54:01 valveOffset 0
2018-01-20 21:09:26 valveposition 0
2016-05-27 19:36:51 weekprofile-0-Sat-temp 15.0 °C / 19.0 °C / 15.0 °C / 15.0 °C
2016-05-27 19:36:51 weekprofile-0-Sat-time 00:00-07:30 / 07:30-22:00 / 22:00-23:55 / 23:55-00:00
2016-05-27 19:36:51 weekprofile-1-Sun-temp 15.0 °C / 19.0 °C / 15.0 °C / 15.0 °C
2016-05-27 19:36:51 weekprofile-1-Sun-time 00:00-07:30 / 07:30-22:00 / 22:00-23:55 / 23:55-00:00
2016-05-27 19:36:51 weekprofile-2-Mon-temp 15.0 °C / 19.0 °C / 17.0 °C / 19.0 °C / 17.0 °C / 15.0 °C
2016-05-27 19:36:51 weekprofile-2-Mon-time 00:00-05:15 / 05:15-07:30 / 07:30-16:00 / 16:00-19:00 / 19:00-23:55 / 23:55-00:00
2016-05-27 19:36:51 weekprofile-3-Tue-temp 15.0 °C / 19.0 °C / 17.0 °C / 19.0 °C / 17.0 °C / 15.0 °C
2016-05-27 19:36:51 weekprofile-3-Tue-time 00:00-05:15 / 05:15-07:30 / 07:30-14:00 / 14:00-19:00 / 19:00-23:55 / 23:55-00:00
2016-05-27 19:36:51 weekprofile-4-Wed-temp 15.0 °C / 19.0 °C / 15.0 °C / 19.0 °C / 17.0 °C / 15.0 °C
2016-05-27 19:36:51 weekprofile-4-Wed-time 00:00-05:15 / 05:15-07:30 / 07:30-14:00 / 14:00-19:00 / 19:00-23:55 / 23:55-00:00
2016-05-27 19:36:51 weekprofile-5-Thu-temp 15.0 °C / 19.0 °C / 17.0 °C / 19.0 °C / 19.0 °C / 15.0 °C
2016-05-27 19:36:51 weekprofile-5-Thu-time 00:00-05:15 / 05:15-09:00 / 09:00-15:00 / 15:00-19:00 / 19:00-23:55 / 23:55-00:00
2016-05-27 19:36:51 weekprofile-6-Fri-temp 15.0 °C / 17.0 °C / 19.0 °C / 15.0 °C
2016-05-27 19:36:51 weekprofile-6-Fri-time 00:00-07:30 / 07:30-19:00 / 19:00-23:55 / 23:55-00:00
internals:
interfaces thermostat;battery;temperature
Attributes:
IODev cm
room Keuken
Zitat von: SibbeH am 21 Januar 2018, 14:28:28Das sollte kein großes Problem sein. Lässt sich IMHO recht elegant mit einem userattr groupid an jedem MAX Device lösen, das bleibt einmal gesetzt schön dauerhaft in der config. U.a. kann man dann auch die ganze MAX Batterie Überwachung daran festmachen, D.h. gesetzt wird das Device berücksichtigt, nicht gesetzt wird es links liegen gelassen. Mal schauen, vermutlich werde ich im Laufe der nächsten Woche etwas Zeit zum basteln haben.
5. Wenn das Level wieder auf 100 zurückgesetzt wurde und die Wechselung in der Liste verarbeitet wurde, sollte Groupid wieder auf den alten Wert zurückgesetzt werden.
Zitat von: SibbeH am 21 Januar 2018, 14:28:28
Bei mir kommt die Meldung Bat low, wenn der Entkalkungsfarhrt ausgeführt wird. Das Motorchen von das HT zieht dann so viel Strom, dass die Batteriespannung unter 2,4 V kommt. Ich habe gelesen das darum auch kein wiederaufladbare Batterien gebraucht werden können, weil sie ein Spanning von nur 1,2 V haben.
Später wird die Meldung Bat low auch dann ausgegeben, wenn das Motorchen von das HT eine "längere Fahrt" für das Heizventil machen sollte.
MAXLAN_error 0
MAXLAN_errorInCommand
MAXLAN_initialized 1
MAXLAN_isAnswer 0
MAXLAN_valid 100
RSSI -75
battery ok
firmware 1.4
groupid 2
onoff 0
state closed
testresult 15
Zitat von: _fhemuser_ am 22 Januar 2018, 12:37:58
Wäre es möglich über eine Taste den Batteriewechsel manuell einzutragen?
Zitat von: MadMax-FHEM am 22 Januar 2018, 20:17:41
Einfach nach /opt/fhem/FHEM kopieren.
Ist quasi eine weitere myUtils.pm
Kurz da nur Handy...
Gruß, Joachim
{ BatteryStart()}
eingibst und Enter drückst. Vorher die entsprechenden Variablen anpassen.Zitat von: Mitch am 22 Januar 2018, 13:01:21Aktuell werden nur HM Device, MAX! (nicht richtig), XiaomiFlower und Z-Wave unterstützt. Da es sich aktuell noch um einen Code und kein Modul handelt, wirst du die entsprechenden Device selbst "deaktvieren" müssen im Code. Nur mal Interessehalber, welche wären das und wieso?
1. ich habe einige Devices, die zwar ein Reading battery haben, aber nicht mit einbezogen werden sollen
ZitatWelche hast du denn? Aktuell kann es nur folgende geben:
2. habe ich viel zu viele Logeinträge
# ignoring Devices that were just created by autocreate
if($DeviceNameParts[0] eq "HM" || $DeviceNameParts[0] eq "ZWave" || $DeviceNameParts[0] eq "MAX")
{
Log3(undef, 1, "my_StoreBatteryStatus ignoring Device: $Device");
return;
}
Zitat von: _fhemuser_ am 22 Januar 2018, 12:37:58Ja eigentlich schon, wäre aber auch wieder ein eigener Code und spricht auch für ein Modul.
Wäre es möglich über eine Taste den Batteriewechsel manuell einzutragen?
Zitat von: _fhemuser_ am 22 Januar 2018, 21:20:54
Meine Intention zum manuellen speichern liegt darin, dass man nicht lange an einem Code rumbasteln muss und nach dem Battriewechsel ein paar Mausklicks betätigen ist nicht zuviel Arbeit.
Zitat von: Amenophis86 am 22 Januar 2018, 20:53:45Nur kein Stress :) Ich bin mit meinen Tests seit gestern Abend recht weit, bevor ich nun hier die Beta poste noch ein paar grundsätzliche Gedanken.
Wenn ich mir die Diskussion von heute ansehe, dann ist es bei MAX! wohl wirklich so, dass wir uns nur auf die Zeit einstellen müssen. Das ist ziemlich doof, gerade solange es sich um einen Code und kein Modul handelt. Mal sehen, ob ich das hinbekomme.
Zitatmy $msg = "set TelegramBot message \@\@User ";eintragen?
ZitatDie Batterien von Buro sollten bald gewechselt werden! : Unknown command Die, try help.
my $msg = "set TelegramBot message \@\@hans ";
Zitat von: Wzut am 23 Januar 2018, 07:23:26Danke für die Info, wenn ich mich dran setze werde ich das beobachten, habe die natürlich auch auf event-on-change stehen
Gerade gestern Abend hatte ich wieder so ein Aha Erlebniss bei einem LaCrosse Sensor. Obwohl das Bat Reading noch auf ok stand, schickte der Sensor nur noch ca alle Stunde ein Telegramm. Ein Blick in meine vorhandene Wechselliste sagte letzter Batt Tausch war am 8.10.16. Also Batterien nachgemessen, gesammt Spannung noch ca 2,5V. Batterien getauscht und er sendet wieder alle paar Minuten. Das mal so als kleine Erinnerung für den noch austehenden LaCrosse Teil. Die Batterien hebe ich noch etwas auf, fast leere kann ich im Moment gut gebrauchen. :)
ZitatIch denke das Temp at ist die beste Lösung. Lässt du ein richtiges Device anlegen, welches man sehen kann, oder nimmst du ein quite sleep? Bei einem AT würde ich diese auch mit -temporary belegen, dass nicht jedes Mal das Fragezeichen hinter dem Save auftaucht. Doof halt nur, wenn der User in der Zeit sein FHEM neustartet.
b. MAX :
Ich habe einen z.Z. unbenutzen Fensterkontakt der steht nun schon seit Tagen auf dauerhaft low. Normalerweise stehen bei mir alle battery Readings auf event-on-change-reading, für die jetzige Testerei habe ich einige umgestellt auf event-on-update-reading und siehe da : FKs senden normalerweise 1 x am Tag ein Status Telegramm auch wenn sie nicht betätigt werden, aber dieser Bruder mit seinen fast leeren Batterien haut sein Bat low nun laut Log im Stundentakt raus. Funktion bei open/close ist immer noch gegeben, allerdings leuchtet die grüne LED gefühlt nicht mehr so hell wie ich es in Erinnerung habe.
Nun zu meiner bisher Beta Version (nachdem ich das Thema groupid wieder komplett entfernt habe) :
Ich setze jetzt beim ersten Auftreten von low den Bat Status von 100 runter auf 75, danach beim jedem neuen low (wenn es in einem Mindestabstand von X Minuten kommt) ziehe ich 5 ab. Ist der Level auf 50 runter (d.h. 5 x low ) geht die soon Mail raus. Sinkt der Level auf 25 runter sende ich die now Mail und erzeuge ein Temp at mit einer Laufzeit von 12 Stunden. Dies wird bei jedem weiteren Bat OK wieder gelöscht und bei low neu angelegt. Allerdings bleibt der Level weiter auf 25. Steht nun ein low dauerhaft 12 Stunden an und das at läuft ab, ruft es BatteryStatusFunction mit dem Pseudo Event dead auf und ich setze den Level auf 0. Sollte nach Level 0 wieder irgendendwann ein Bat ok kommen gehe ich von einem Wechsel aus und trage das Datum in die Liste - fertig
Nach eine Bemerkung zur oben genannten Zeit X : Ich denke man muss hier unterscheiden/aufpassen welche Art von MAX Gerät man hat. Der beschriebene FK sendete ja brav alle Stunde, aber mein Test Wandthermostat haut jedesmal drei Bat Low innerhalb von 3 Minuten raus.
Die Lösung mit dem Temp at mag vllt. etwas umständlich wirken, man könnte ja einfach auch mit ReadingsAge auf den letzten Zeitstempel schauen, dann wären aber die User gekniffen die event-on-change-reading verwenden, mit dem Temp at ist man unabhänig von den User Settings.
##############################################
# LaCrosse Devices
##############################################
elsif(($BatteryType[0] eq "battery") && ($TYPE eq "LaCrosse"))
{
if(ReadingsVal($Device, "battery", "low") eq "ok")
{
# check if battery was low before -> possibly changed
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") eq "low")
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $BatteryChanged $Device $text_changed");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
# status is "ok" so we set to 100% (we don't know better)
fhem("setreading $BatteryStatus $Device 100");
}
else
{
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
# status is NOT "ok" ("low") so we set to 0% (we don't know better)
fhem("setreading $BatteryStatus $Device 0");
}
}
Zitat von: Amenophis86 am 23 Januar 2018, 17:00:48Puhh jetzt hast mich auf dem linken Fuß erwischt , ich habe noch nie ats mit -temporary angelgt da ich bis jetzt immer der Meinung war wenn die Zeit realativ und nicht wiederholend ist wird es nicht in der config gespeichert sondern in fhem.save Daher kann es auch wieder gelöscht werden ohne rotes Fragezeichen. Der dazu passende Code wird so auch in meinem SIP Modul verwendet :
Ich denke das Temp at ist die beste Lösung. Lässt du ein richtiges Device anlegen, welches man sehen kann, oder nimmst du ein quite sleep? Bei einem AT würde ich diese auch mit -temporary belegen, dass nicht jedes Mal das Fragezeichen hinter dem Save auftaucht. Doof halt nur, wenn der User in der Zeit sein FHEM neustartet.
anlegen :
my $time_s = strftime("\%H:\%M:\%S", gmtime(43200)); # z.Z. 12 Stunden
my $error = CommandDefine(undef, "at_BatLow_".$Device." at +".$time_s." {BatteryStatusFunction('".$Device."','battery: dead')}");
if (!$error) { $attr{"at_BatLow_".$Device}{room} = AttrVal($BatteryStatus,"room","Unsorted"); }
else { Log3(undef, 3,"$Device, temp at error -> $error"); }
löschen:
delete $defs{"at_BatLow_".$Device} if (defined($defs{"at_BatLow_".$Device}));
Zitat von: Amenophis86 am 23 Januar 2018, 17:08:19LaCrosse (und andere) überwache ich schon recht lange mit ReadingsSupervision -> https://forum.fhem.de/index.php/topic,49408.0.html
Das heißt die Überwachung, ob die Daten nicht mehr regelmäßig kommen müsste über ein Watchdog / DOIF laufen, welcher im vorliegenden Fall unser Skript mit der Info triggert
Zitat von: Wzut am 23 Januar 2018, 21:06:15
da ich bis jetzt immer der Meinung war wenn die Zeit realativ und nicht wiederholend ist wird es nicht in der config gespeichert sondern in fhem.save
Zitat von: Wzut am 23 Januar 2018, 21:17:59Schöne Sache, werde ich mir genauer anschauen. Ist quasi ein ActionDetector für nicht Homematic Device.
LaCrosse (und andere) überwache ich schon recht lange mit ReadingsSupervision -> https://forum.fhem.de/index.php/topic,49408.0.html
Stammt in seiner Urform von HCS (dem Autor der LaCosse Module) der wollte es aber damals nicht weiterentwickeln.
Zitat von: Wzut am 23 Januar 2018, 07:23:26Denke das dürfte damit auch bedacht sein. Ansonsten muss der User sich halt überlegen, wie er event-on setzt, dass er nicht mit Nachrichte bombadiert wird.
Die Lösung mit dem Temp at mag vllt. etwas umständlich wirken, man könnte ja einfach auch mit ReadingsAge auf den letzten Zeitstempel schauen, dann wären aber die User gekniffen die event-on-change-reading verwenden, mit dem Temp at ist man unabhänig von den User Settings.
Zitat von: _fhemuser_ am 24 Januar 2018, 08:47:09Nicht nur die Warnungen auch die OKs schlagen dann ständig in der Funktion auf. Daher ja mein Vorschlag intern mit ReadingsAge zu arbeiten um alles was in nicht ins gewollte Zeitraster passt einfach zu verwerfen. Das Temp at wird nur gebraucht damit später auch ohne Event der Ablauf weiter geht (entweder weil der User on-change benutzt oder aber die Batt so platt ist das es gar keinen echten Event mehr geben kann)
Die Batteriewarnungen werden dann vermehrt gemeldet.
defmod at$Devname at +00:10:00 {my_CheckSomething(\"$Devicename\")}
sub my_CheckSomething($)
{
my ($Devcename) = @_;
fhem("delete at$Devicename"); # wenn von hier erneut aufgerufen werden soll
# Perform Checks
fhem("defmod at$Devicename at +00:15:00 {my_CheckSomething{\"$Devicename\")}"); # wenn erneut nach einiger Zeit geprüft werden soll
}
Zitat von: MadMax-FHEM am 24 Januar 2018, 10:54:23
ich bin ja nicht sicher, ob das jetzt mit dem "temp-at" und dem "Fragezeichen" geklärt ist aber ich nutze das beispielsweise für die Waschmaschinenbenachrichtigung und die "Tür wurde geöffnet Prüfung".
ZitatHinweise:
wenn kein * angegeben wird, wird der Befehl nur einmal ausgeführt und der entsprechende at Eintrag danach gelöscht. In diesem Fall wird der Befehl im Statefile gespeichert (da er nicht statisch ist) und steht nicht im Config-File (siehe auch save).
Zitat von: Amenophis86 am 23 Januar 2018, 11:37:21Damit funktioniert die Benachrichtigung leider auch nicht.
Du musst den Namen des Telegram empfängers eingeben. Also wenn dein Telegramdevice TelegramBot heißt und dein Account auf welchem du die Nachrichten empfängst hans dannCode Auswählenmy $msg = "set TelegramBot message \@\@hans ";
defmod fhembot TelegramBot
attr fhembot allowUnknownContacts 0
attr fhembot cmdKeyword FHEM
attr fhembot cmdRestrictedPeer XXXXXX <= Peernummer anonymisiert
attr fhembot defaultPeer XXXXXXX
attr fhembot pollingTimeout 120
# TelegramBot
my $msg = "set fhembot message \@\@xXXXXx_bot "; <= botname anonymisiert
#
# msg-command
# my $msg = "msg \@User title='Battery Check' ";
#
# Pushover
# my $msg = "set Pushover msg device=User title='Battery Check' ";
Die Batterien von Buro sollten bald gewechselt werden! : Unknown command Die, try help.
Das deutet darauf hin, dass "Die" kein Befehl ist. #send message via TelegramBot
fhem($msg." ".$text_soon);
my $msg = "set TelegramBot message \@\@hans ";
ist der erste Teil der Nachricht. Der zweite Teil ergibt sich aus den Variablen $text_xxx. Wenn bei deinem TelegramBot ein Standarduser für Nachrichten hinterlegt ist, dann musst du nur den Teil mit \@\@User weglassen. Soll heißen in deiner Sub muss stehen: my $msg = "set TelegramBot message ";
. set TelegramBot message Hallo
Wenn diese Nachricht bei dir nicht ankommt, dann musst du den user noch mit angeben, wie in der Sub vordefiniert. Den richtigen Usernamen findest du im Reading "Contacts" im TelegrambotDevice. Der Name beginnt immer mit @ und muss zum senden in einer sub mit einem zweiten @ geschrieben werden, die wiederum escaped werden muss durch \. Es handelt sich somit nicht um einen Fehler im Code, sondern um einen Verständnisfehler.
Zitat von: Amenophis86 am 24 Januar 2018, 17:46:29Das funktioniert problemlos.
Ob das klappt kannst du testen, wenn du in deiner Commandzeile folgendes eingibst:Code Auswählenset TelegramBot message Hallo
Zitat von: _fhemuser_ am 24 Januar 2018, 18:01:15Dann musst du den Code nur wie folgt anpassen:
Das funktioniert problemlos.
my $msg = "set TelegramBot message ";
ZitatSoll heißen das Reading Battery bleibt auf low stehen, obwohl du neue volle Batterien einfügst?
Bei einem HT, ich glaube der hat die zweite Hardwarerevision, ändert sich innerhalb von bis jetzt 2 Stunden der Batteriezustand nicht auf Voll obwohl die Batterispannung 3 Volt hat. Wenn die Batterien komplett entfernt werden und die Adaptierfahrt durchgeführt wird ist die Batteriewarnung gelöscht.
battery
low
2018-01-20 15:15:30
mode
normal
2018-01-20 15:16:03
other
10.2
2018-01-24 18:55:16
state
T: 10.2
2018-01-24 18:55:16
trend
rising
2018-01-24 11:10:31
Zitat von: _fhemuser_ am 24 Januar 2018, 18:01:15Wenn du so testest wird das ganze zu einer Strafarbeit für einen der Vater und Mutter erschlagen hat .....
Da die Benachrichtigung nur einmal versandt wird, muss ich erst wieder volle Batterien einsetzen und dann wieder leere.
# if it is the first time for that device set it to none (initialize)
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "undef") eq "undef")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
fhem("setreading $BatteryStatusBot $SignalDevice none");
readingsSingeleUpdate($defs{$BatteryStatusBot}, $SignalDevice, "none",1);
Zitat von: Amenophis86 am 24 Januar 2018, 18:37:35Also ich beschreibe mal wie ich vorgehe.
Dann musst du den Code nur wie folgt anpassen:Code Auswählenmy $msg = "set TelegramBot message ";
Soll heißen das Reading Battery bleibt auf low stehen, obwohl du neue volle Batterien einfügst?
Zitat von: Wzut am 25 Januar 2018, 07:06:24OK, Danke
Wenn du so testest wird das ganze zu einer Strafarbeit für einen der Vater und Mutter erschlagen hat .....
Tipp : setze das readings xxx_Bot im BatteryStatiusBot direkt wieder auf none :)
Zitat von: Amenophis86 am 26 Januar 2018, 18:59:31Bitteschön , hier meine Beta Version mit (noch) viel Logging :
Als nächstes würde ich dann gerne den temp-At Teil von Wzut einbauen.
##############################################
# MAX! Devices
##############################################
elsif($TYPE eq "MAX")
{
my $level = ReadingsNum($BatteryStatus, $Device, 0);
if($Event eq "battery: ok")
{
# Log3(undef, 3,"$Device, Batt ok");
if (defined($defs{"at_BatLow_".$Device}))
{
CommandDelete(undef,"at_BatLow_".$Device) if (defined($defs{"at_BatLow_".$Device}));
Log3(undef, 3,"$Device, lösche at_BatLow_".$Device);
}
return undef;
}
elsif ($Event eq "battery: low")
{
Log3(undef, 3,"$Device, Batt low");
# nicht zu schnell in zu kurzer Zeit !
return undef if (ReadingsAge($BatteryStatus, $Device,0) < 600);
Log3(undef, 3,"$Device, Batt low2");
if($level == 100)
{
readingsSingleUpdate($defs{$BatteryStatus},$Device, 75,0); # 1.Stufe
return undef;
}
elsif ($level > 25)
{
$level -=5;
readingsSingleUpdate($defs{$BatteryStatus}, $Device, $level,0);
Log3(undef, 3,"$Device, Batt Level $level");
return undef;
}
elsif ($level == 25)
{
readingsSingleUpdate($defs{$BatteryStatusBot}, $SignalDevice ,"low",0);
fhem($msg.$text_soon);
my $time_s = strftime("\%H:\%M:\%S", gmtime(43200)); # z.Z. 12 Stunden
my $error = CommandDefine(undef, "at_BatLow_".$Device." at +".$time_s." {BatteryStatusFunction('".$Device."','battery: dead')}");
if (!$error) { $attr{"at_BatLow_".$Device}{room} = AttrVal($BatteryStatus,"room","Unsorted"); }
else { Log3(undef, 3,"$Device, temp at error -> $error"); }
return undef;
}
else { Log3(undef, 3,"$Device, unknown Level $level") if ($level);}
}
elsif ($Event eq "battery: dead")
{
Log3(undef, 3,"$Device, dead Event !");
readingsSingleUpdate($defs{$BatteryStatus},$Device,0,1); # hier mal mit zusätzlichem Event , vllt will den jemand zum Mail/SMS Versand benutzen ?
readingsSingleUpdate($defs{$BatteryStatusBot},$SignalDevice,"dead",0);
fhem($msg.$text_now);
return undef;
}
else
{
Log3(undef, 3,"$Device, unknown Event $Event");
}
}
Zitat von: Amenophis86 am 26 Januar 2018, 18:59:31Genau, ich erwartete dass nach steigen der Batteriespannung das Symbol erlischt und der Status an den Cube übermittelt wird. Da ich erst einen HT testen konnte, kann ich das noch nicht für alle MAX!Geräte bestätigen.
@_fhemuser_:
Und wenn du so testest, dann bleibt das Device auf low und es wird kein Batteriewechsel angezeigt, obwohl es auf ok wechseln sollte und ein Batterie Wechsel angezeigt werden sollte, verstehe ich das richtig?
ZitatNein,leider immer noch nicht. Im Log steht:
Klappte denn jetzt bei dir die Meldung per Telegram?
2018.01.27 10:32:45 3: Die Batterien von Burofenster sollten bald gewechselt werden! : Unknown command Die, try help.
defmod TelegramBot TelegramBot
attr TelegramBot allowUnknownContacts 0
attr TelegramBot cmdKeyword FHEM
attr TelegramBot cmdRestrictedPeer xxxxxxxxxx
attr TelegramBot defaultPeer xxxxxxxxxx
attr TelegramBot pollingTimeout 120
und in dem Code nur den Benutzernamen heraus gelöscht.################################
# Here you choos your message device and how to send
# comment the device you do not want to use
#
# TelegramBot
my $msg = "set TelegramBot message ";
#
# msg-command
# my $msg = "msg \@User title='Battery Check' ";
#
# Pushover
# my $msg = "set Pushover msg device=User title='Battery Check' ";
Den Rest habe ich unverändert von github übernommen, Stand 26.01.17 testbranch checksum: 9af26fb
Edit: Code ist nun auf github verfügbar: https://github.com/Amenophis86/Batteryfunktion
Es kann entweder direkt die PM runtergeladen, im Order /FHEM/ eingefügt und ein
Code: [Auswählen]
reload 99_Batterycheck.pm
ausgeführt werden, oder der Code kopiert und in die eigene 99_myUtils.pm eingefügt werden.
2. Werte entsprechend anpassen (Siehe weiter unten)
3. Einmalig die Funktion BatteryStart mittels
Code: [Auswählen]
{BatteryStart()}
ausführen. Sobald diese durchgelaufen ist, könnt ihr sie wieder löschen.
beschrieben den Code in die 99_myUtils.pm eingefügt, wie oben eine Zeile bei TelegramBot angepasst und fhem erneut gestartet anschließend mit {BatteryStart()} alle benötigten Definitionen erstellen lassen.TelegramBot message hallo
und erhalte wie erwartet den Fehler018.01.27 11:28:27 3: FHEMWEB WEB CSRF error: csrf_194100744996488 ne csrf_643818872398676 for client WEB_192.168.0.17_49908 / command set TelegramBot message Hallo. For details see the csrfToken FHEMWEB attribute.
Dann habe ich in der n der Kommandozeile eingegebenTelegramBot message @1234567 hallo
und erhalte die Nachricht. Die Übermittlung funktioniert.# TelegramBot
my $msg = "set TelegramBot message \@\@1234576 ";
und erhalte den Fehler:FHEMWEB WEB CSRF error: csrf_194100744996488 ne csrf_643818872398676 for client WEB_192.168.0.17_49914 / command style edit 99_myUtils.pm . For details see the csrfToken FHEMWEB attribute.
sowie erneut den Hinweis, dass Die kein Befehl ist ##############################################
# MAX! Devices with battery
##############################################
elsif($TYPE eq "MAX" and ReadingsVal($Device, "batteryLevel", "undef") eq "undef")
{
my $level = ReadingsNum($BatteryStatus, $Device, 0);
if($Event eq "battery: ok")
{
# Log3(undef, 3,"$Device, Batt ok");
if (defined($defs{"at_BatLow_".$Device})) # temporary at allready defined?
{
CommandDelete(undef,"at_BatLow_".$Device) if (defined($defs{"at_BatLow_".$Device})); #if defined delete it, battery not dead yet or allready changed?
Log3(undef, 3,"$Device, deleted at_BatLow_".$Device);
}
return undef;
}
elsif ($Event eq "battery: low")
{
Log3(undef, 3,"$Device, Batt low");
return undef if (ReadingsAge($BatteryStatus, $Device,0) < 600); #take some time since the last event
Log3(undef, 3,"$Device, Batt low2");
if($level == 100)
{
readingsSingleUpdate($defs{$BatteryStatus},$Device, 75,0); # set battery level 75%
return undef;
}
elsif ($level > 25)
{
$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 == 25)
{
readingsSingleUpdate($defs{$BatteryStatusBot}, $SignalDevice ,"low",0);# set battery level to low and send message
fhem($msg." ".$text_soon);
my $time_s = strftime("\%H:\%M:\%S", gmtime(43200)); # 12 hours waittime for the temp at
my $error = CommandDefine(undef, "at_BatLow_".$Device." at +".$time_s." {BatteryStatusFunction('".$Device."','battery: dead')}");
if (!$error) { $attr{"at_BatLow_".$Device}{room} = AttrVal($BatteryStatus,"room","Unsorted"); }
else { Log3(undef, 3,"$Device, temp at error -> $error"); }
return undef;
}
else { Log3(undef, 3,"$Device, unknown Level $level") if ($level);}
}
elsif ($Event eq "battery: dead")
{
Log3(undef, 3,"$Device, dead Event !");
readingsSingleUpdate($defs{$BatteryStatus},$Device,0,1); # set device 0 with an event
readingsSingleUpdate($defs{$BatteryStatusBot},$SignalDevice,"dead",0); # set device dead without event
fhem($msg." ".$text_now);
return undef;
}
else
{
Log3(undef, 3,"$Device, unknown Event $Event");
}
}
# Pushover
# my $msg = "set Pushover msg device=User title='Battery Check' ";
Log 3, "tele: ".$msg."\nNach.: ".$text_soon;
fhem($msg." ".$text_soon);
Zitat von: Amenophis86 am 27 Januar 2018, 12:57:36Alles so eingestellt, wie du empfohlen hast und es ergibt NICHTS. Dh es ist kein Eintrag im Log. Wobei ich auch "Log 3" in "Log3" geändert habe.
@_fhemuser_
Wundert mich auch, dass es nicht von low auf ok wechselt.
Telegram:
lösche den defaultUser, gib den User im Skript ein und füge mal folgenden Code nachCode Auswählen# Pushover
# my $msg = "set Pushover msg device=User title='Battery Check' ";
ein:Code Auswählen
Log 3, "tele: ".$msg."\nNach.: ".$text_soon;
fhem($msg." ".$text_soon);
Und führe das Skript mit {BatteryStatusFunction(1,"1:1")} in der CommandoZeile aus. Was steht im Log?
Zitat von: _fhemuser_ am 27 Januar 2018, 15:42:06
Wobei ich auch "Log 3" in "Log3" geändert habe.
Log 3, "tele: ".$msg."\nNach.: ".$text_soon;
als auch
Log3, "tele: ".$msg."\nNach.: ".$text_soon;
gibt es keine Einträge im Log.
2018.01.27 16:20:49 3: tele: set TelegramBot message @@12345678
Nach.: Die Batterien von 1 sollten bald gewechselt werden!
2018.01.27 16:20:49 3: TelegramBot_SendIt TelegramBot: Failed with :FAILED peer not found :@12345678::
2018.01.27 16:20:49 3: TelegramBot_Callback TelegramBot: resulted in NonBlockingGet: returned FAILED peer not found :@12345678: from SendIt
2018.01.27 16:20:49 3: set TelegramBot message @@12345678 Die Batterien von 1 sollten bald gewechselt werden! : FAILED peer not found :@12345678:
also ein Problem mit dem Namen
# TelegramBot
my $msg = "set TelegramBot message ";
Zitat von: Amenophis86 am 27 Januar 2018, 12:57:36ähh ja schaut noch fast so aus wie mein Vorschlag :) Aber doch noch ne kleine Anmerkung
Habe deinen Code gerade mal ein bisschen angepasst und kommentiert. Schau mal bitte drüber, ob ich es richtig verstanden habe:
elsif($TYPE eq "MAX" and ReadingsVal($Device, "batteryLevel", "undef") eq "undef")
Zitat von: Amenophis86 am 27 Januar 2018, 18:14:19doch mit $level == 25 , denn den gibt es nur 1x , beim nächste low wäre er dann ja schon runter auf 20 :)
Dies wird bei dir ja auch nicht verhindert, oder?
Zitat von: Amenophis86 am 06 Februar 2018, 18:01:10
soll heißen was steht im Reading TYPE und model?
STATE closed
TYPE CUL_HM
GK_2_Buero type:threeStateSensor -
list:peer register :value
0: cyclicInfoMsg :on
0: pairCentral :0x---------
0: transmDevTryMax :6
1: eventDlyTime :0 s
1: ledOnTime :0.5 s
1: msgRhsPosA :closed
1: msgRhsPosB :open
1: msgRhsPosC :tilted
1: sign :off
1: transmitTryMax :0
model HM-SEC-RHS
subType threeStateSensor
public:
void init () {
BaseHal::init();
// init real time clock - 1 tick per second
rtc.init();
// measure battery every 1h
battery.init(60UL*60,rtc);
battery.low(22);
battery.critical(19);
Zitat von: Wzut am 07 Februar 2018, 07:27:22Ok, habe mich mit der Lib noch gar nicht beschäftigt. Dachte nur, wir müssen dann für diese Geräte auch wieder eine Sonderlocke einführen weshalb ich wissen wollte, wie die sich melden.Code AuswählenSTATE closed
TYPE CUL_HM
model HM-SEC-RHS
subType threeStateSensor
Wobei ich denke das ist völlig egal, sobald man papas Eigenbau FW für Geräte nutzt und bei diesen Bat definert ist werden sie sich alle gleich verhalten:
...
hier sollten wir mal abwarten was papa dazu meint , vllt ändert er ja auch noch seine lib so das ein einmal gesetztes low bis zum reset des Kontrollers erhalten bleibt.
Zitat
zu dead : ich arbeite halt mit 12 Stunden , u.U. kann man die Zeit ja auch als Variable im Kopf definieren so das dies jeder nach seinem persönlichen Geschmack leicht selbst festlegen kann.
# ignoring Devices that were just created by autocreate
#if($DeviceNameParts[0] eq "HM" || $DeviceNameParts[0] eq "ZWave" || $DeviceNameParts[0] eq "MAX")
#{
# Log3(undef, 1, "my_StoreBatteryStatus ignoring Device: $Device");
# return;
#}
Zitat von: Amenophis86 am 07 Februar 2018, 10:49:58
Edit:
Habe den ersten Post entsprechend angepasst.
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.
Zitat von: Wzut am 27 Januar 2018, 20:09:07Ich 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:
doch mit $level == 25 , denn den gibt es nur 1x , beim nächste low wäre er dann ja schon runter auf 20 :)
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;
}
###############################
# 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;
my $text_motorErrValve = "Der Motor kann sich nicht mehr bewegen!"; #Text for motorErr ValveErrorPosition only HM
2018-02-07 16:53:59 battery 88 %
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 %
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
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.
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
2018.02.09 08:43:35.380 3: wz.ZW_HT2, unknown Event battery: 91 %
if($TYPE eq "Z-Wave" and ReadingsVal($Device, "battery", undef) =~ "%")
if($TYPE eq "ZWave" and ReadingsVal($Device, "battery", undef) =~ "%")
2018.02.09 12:28:39.940 3: bz.ZW_HT, unknown Event battery: 69 %
2018.02.09 12:28:39.941 3: bz.ZW_WM, unknown Event battery: 100 %
2018.02.09 12:28:39.943 3: k.ZW_WM, unknown Event battery: 100 %
2018.02.09 12:28:39.947 3: wz.ZW_HT2, unknown Event battery: 91 %
reload: Error:Modul 99_Batterycheck deactivated:
Zitat von: Amenophis86 am 10 März 2018, 14:02:23
Nun kann die Datei aus dem no-BatteryStatusBot Zweig als eigene Datei heruntergeladen und integriert werden.
"rp2 fhem45"> rel 99_BatteryCheckUtil
Undefined subroutine &main::BatteryCheckUtil_Initialize called at fhem.pl line 2486.
Zitat von: Amenophis86 am 12 März 2018, 06:43:31
Kann ich erst am Wochenende ändern.
Zitat von: Amenophis86 am 12 März 2018, 06:43:31
Ein eigenes Modul wäre wesentlich komplexer, da traue ich mich a noch nicht ran und b keine Zeit für aktuell.
Zitat von: Amenophis86 am 10 März 2018, 14:02:23
Ich gehe mal davon aus, dass du die Datei heruntergeladen hast und als eigene Datei integrieren wolltest. Es war mal als reine eigene Funktion gedacht, habe es aber jetzt mal zur eigenen PM-Datei umgebaut. Das heißt ich habe davor und danach noch einen Teil eingebaut. Nun kann die Datei aus dem no-BatteryStatusBot Zweig als eigene Datei heruntergeladen und integriert werden. Hat den Vorteile, dass es auch unter FHEM als editierbare Datei angezeigt wird.
{BatteryStart()}
2018.03.12 12:15:38 1: PERL WARNING: Subroutine BatteryCheckUtils_Initialize redefined at ./FHEM/99_BatteryCheckUtil.pm line 12, <$fh> line 9.
2018.03.12 12:15:38 1: PERL WARNING: Subroutine BatteryStatusFunction redefined at ./FHEM/99_BatteryCheckUtil.pm line 23, <$fh> line 9.
2018.03.12 12:15:38 1: PERL WARNING: Subroutine SetBatterieIcon redefined at ./FHEM/99_BatteryCheckUtil.pm line 888, <$fh> line 9.
2018.03.12 12:15:38 1: PERL WARNING: Subroutine BatteryStart redefined at ./FHEM/99_BatteryCheckUtil.pm line 932, <$fh> line 9.
2018.03.12 12:15:51 3: eval: my $EVTPART0='battery:';my $SELF='NO.BatterieNotify';my $TYPE='CUL_HM';my $NAME='Fl.Motion.Innen';my $EVTPART1='ok';my $EVENT='battery: ok';{BatteryStatusFunction($NAME, $EVENT)}
battery: ok
gemeldet. War das Device vorher auf low und wenn ja auf wie viel Prozent in BatteryStatus Dummy bzw. rg.BatteryStatus?Zitat von: Amenophis86 am 12 März 2018, 19:09:09Nix da , hier wird nichts versucht , hier wird entweder etwas gemacht oder sein gelassen ..... und das Wort "vielleicht" ist auf neudeutsch eh ein "no go" :)
versuche ich vielleicht auch ein Modul draus zu machen.
Zitat von: Wzut am 12 März 2018, 19:45:32;)
Nix da , hier wird nichts versucht , hier wird entweder etwas gemacht oder sein gelassen ..... und das Wort "vielleicht" ist auf neudeutsch eh ein "no go" :)
Zitat von: Mave am 26 März 2018, 11:02:05
Funktioniert das Modul auch mit HMIP Komponenten?
Meine HMIP Kontakte haben ein 0.LOWBAT Reading und keine Batterielevel Readings.
Vielen Dank.
reload 99_BatteryCheckUtils.pm
und {BatteryStart()}
2018.03.29 17:38:45 1 : BaZi_Heizkreis, Error! Unkown Device Type with event battery: ok
Internals:
CFGFN ./FHEM/badezimmer.cfg
DEF 26E564
HMLAN1_MSGCNT 51
HMLAN1_RAWMSG E26E564,0000,03D39A51,FF,FFB8,20861026E5640000000AB0E60B0040
HMLAN1_RSSI -72
HMLAN1_TIME 2018-03-29 17:45:57
HMUSB1_MSGCNT 51
HMUSB1_RAWMSG E26E564,0000,682757D6,FF,FFBC,20861026E5640000000AB0E60B0040
HMUSB1_RSSI -68
HMUSB1_TIME 2018-03-29 17:45:57
HmModUartWLAN1_MSGCNT 50
HmModUartWLAN1_RAWMSG 0500003020861026E5640000000AB0E60B0040
HmModUartWLAN1_RSSI -48
HmModUartWLAN1_TIME 2018-03-29 17:45:57
IODev HmModUartWLAN1
LASTInputDev HMUSB1
MSGCNT 152
NAME BaZi_Heizkreis
NOTIFYDEV global
NR 311
NTFY_ORDER 50-BaZi_Heizkreis
STATE CMDs_done
TYPE CUL_HM
channel_01 BaZi_Heizkreis_Weather
channel_02 BaZi_Heizkreis_Climate
channel_03 BaZi_Heizkreis_WindowRec
channel_04 BaZi_Heizkreis_Clima
channel_05 BaZi_Heizkreis_ClimaTeam
channel_06 BaZi_Heizkreis_remote
lastMsg No:20 - t:10 s:26E564 d:000000 0AB0E60B0040
protLastRcv 2018-03-29 17:45:57
protSnd 1 last_at:2018-03-29 16:07:36
protState CMDs_done
rssi_at_HMLAN1 avg:-71.6 min:-72 max:-71 lst:-72 cnt:51
rssi_at_HMUSB1 avg:-68.07 min:-69 max:-67 lst:-68 cnt:51
rssi_at_HmModUartWLAN1 avg:-47.62 min:-48 max:-47 lst:-48 cnt:50
Helper:
DBLOG:
actuator:
myDbLog:
TIME 1522338357.75079
VALUE 0
battery:
myDbLog:
TIME 1522338357.75079
VALUE ok
batteryLevel:
myDbLog:
TIME 1522338357.75079
VALUE 2.6
desired-temp:
myDbLog:
TIME 1522338357.75079
VALUE 22.0
measured-temp:
myDbLog:
TIME 1522338357.75079
VALUE 23.0
motorErr:
myDbLog:
TIME 1522338357.75079
VALUE ok
state:
myDbLog:
TIME 1522332456.43292
VALUE CMDs_done
time-request:
myDbLog:
TIME 1522332456.43292
VALUE -
READINGS:
2018-03-29 15:43:54 Activity alive
2018-03-29 05:57:35 CommandAccepted yes
2015-10-13 23:14:14 D-firmware 1.4
2015-10-13 23:14:14 D-serialNr LEQ0111245
2017-12-30 17:48:03 PairedTo 0x26EA36
2015-10-13 23:16:12 R-backOnTime 10 s
2015-10-14 00:19:48 R-btnLock on
2015-10-13 23:16:12 R-burstRx on
2015-10-13 23:16:12 R-cyclicInfoMsg on
2015-10-13 23:16:12 R-cyclicInfoMsgDis 0
2015-10-14 00:22:31 R-globalBtnLock off
2015-10-13 23:16:12 R-localResDis off
2015-10-13 23:16:12 R-lowBatLimitRT 2.1 V
2015-10-13 23:16:12 R-modusBtnLock off
2015-10-13 23:16:12 R-pairCentral 0x26EA36
2017-12-30 17:48:03 RegL_00. 01:01 02:01 09:01 0A:26 0B:EA 0C:36 0E:0A 0F:01 11:00 12:15 16:00 18:00 19:00 1A:00 00:00
2017-12-30 17:50:37 RegL_07.
2018-03-29 17:45:57 actuator 0
2018-03-29 17:45:57 battery ok
2018-03-29 17:45:57 batteryLevel 2.6
2018-03-29 17:45:57 desired-temp 22.0
2018-03-29 17:45:57 measured-temp 23.0
2018-03-29 17:45:57 motorErr ok
2016-07-22 07:39:17 powerOn 2016-07-22 07:39:17
2016-07-22 07:39:17 recentStateType info
2018-03-29 16:07:36 state CMDs_done
2018-03-29 16:07:36 time-request -
helper:
HM_CMDNR 32
mId 0095
regLst ,0
rxType 140
supp_Pair_Rep 0
expert:
def 1
det 1
raw 1
tpl 0
io:
newChn +26E564,00,00,00
nextSend 1522338357.9192
prefIO
rxt 2
vccu vccu
p:
26E564
00
00
00
mRssi:
mNo 20
io:
HMLAN1:
-72
-72
HMUSB1:
-68
-68
HmModUartWLAN1:
-40
-40
prt:
bErr 0
sProc 0
sleeping 1
rspWait:
q:
qReqConf
qReqStat
role:
dev 1
prs 1
rssi:
at_HMLAN1:
avg -71.6078431372549
cnt 51
lst -72
max -71
min -72
at_HMUSB1:
avg -68.078431372549
cnt 51
lst -68
max -67
min -69
at_HmModUartWLAN1:
avg -47.62
cnt 50
lst -48
max -47
min -48
shRegW:
07 04
shadowReg:
tmpl:
Attributes:
IODev HmModUartWLAN1
IOgrp vccu
actCycle 000:10
actStatus alive
autoReadReg 4_reqStatus
expert 3
firmware 1.4
icon hm-cc-rt-dn
model HM-CC-RT-DN
room CUL_HM
serialNr LEQ0111245
subType thermostat
verbose 3
webCmd getConfig:clear msgEvents:burstXmit
Internals:
CFGFN ./FHEM/Kerze.cfg
DEF 4D4685
HMLAN1_MSGCNT 5
HMLAN1_RAWMSG E4D4685,0000,03BCC399,FF,FFB2,FC80024D468526EA360101C88038
HMLAN1_RSSI -78
HMLAN1_TIME 2018-03-29 17:21:02
HMUSB1_MSGCNT 6
HMUSB1_RAWMSG E4D4685,0000,6810820A,FF,FFB8,FC80024D468526EA360101C88038
HMUSB1_RSSI -72
HMUSB1_TIME 2018-03-29 17:21:02
HmModUartWLAN1_MSGCNT 5
HmModUartWLAN1_RAWMSG 04030036FC80024D468526EA360101C88038
HmModUartWLAN1_RSSI -54
HmModUartWLAN1_TIME 2018-03-29 17:21:01
IODev HmModUartWLAN1
LASTInputDev HMUSB1
MSGCNT 16
NAME Kerze
NOTIFYDEV global
NR 1031
NTFY_ORDER 50-Kerze
STATE on
TYPE CUL_HM
lastMsg No:FC - t:02 s:4D4685 d:26EA36 0101C88038
peerList FB_1_392AF8_Btn_05,
protLastRcv 2018-03-29 17:21:02
protSnd 6 last_at:2018-03-29 17:21:00
protState CMDs_done
rssi_HMUSB1 avg:-73 min:-73 max:-73 lst:-73 cnt:1
rssi_HmModUartWLAN1 avg:-56 min:-56 max:-56 lst:-56 cnt:4
rssi_at_HMLAN1 avg:-78.2 min:-80 max:-77 lst:-78 cnt:5
rssi_at_HMUSB1 avg:-72 min:-72 max:-72 lst:-72 cnt:6
rssi_at_HmModUartWLAN1 avg:-54 min:-54 max:-54 lst:-54 cnt:5
Helper:
DBLOG:
battery:
myDbLog:
TIME 1522336861.21706
VALUE low
deviceMsg:
myDbLog:
TIME 1522336861.21706
VALUE on (to vccu)
level:
myDbLog:
TIME 1522336861.21706
VALUE 100
pct:
myDbLog:
TIME 1522336861.21706
VALUE 100
state:
myDbLog:
TIME 1522336861.21706
VALUE on
timedOn:
myDbLog:
TIME 1522336861.21706
VALUE off
READINGS:
2018-03-29 17:21:01 CommandAccepted yes
2017-01-06 14:43:06 D-firmware 1.7
2017-01-06 14:43:06 D-serialNr NEQ0696523
2017-10-04 17:39:27 PairedTo 0x26EA36
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgActionType jmpToTarget
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgCtDlyOff geLo
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgCtDlyOn geLo
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgCtOff geLo
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgCtOn geLo
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgCtValHi 100
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgCtValLo 50
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgMultiExec on
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgOffDly 0 s
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgOffTime unused
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgOffTimeMode absolut
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgOnDly 0 s
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgOnTime unused
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgOnTimeMode absolut
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgSwJtDlyOff off
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgSwJtDlyOn on
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgSwJtOff dlyOn
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgSwJtOn dlyOff
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shActionType jmpToTarget
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shCtDlyOff geLo
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shCtDlyOn geLo
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shCtOff geLo
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shCtOn geLo
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shCtValHi 100
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shCtValLo 50
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shMultiExec off
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shOffDly 0 s
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shOffTime unused
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shOffTimeMode absolut
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shOnDly 0 s
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shOnTime unused
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shOnTimeMode absolut
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shSwJtDlyOff off
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shSwJtDlyOn on
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shSwJtOff dlyOn
2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shSwJtOn dlyOff
2017-01-05 15:42:24 R-intKeyVisib invisib
2017-01-05 15:42:24 R-ledMode off
2017-01-06 14:43:41 R-lowBatLimitBA 5 V
2017-01-05 15:42:24 R-pairCentral 0x26EA36
2017-01-05 15:42:25 R-sign off
2017-10-04 17:39:27 RegL_00. 02:01 05:00 0A:26 0B:EA 0C:36 12:32 00:00
2017-10-04 17:39:28 RegL_01. 08:00 00:00
2017-10-04 17:39:30 RegL_03.FB_1_392AF8_Btn_05 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:14 0C:63 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:21 8B:14 8C:63 00:00
2018-03-29 17:21:01 battery low
2018-03-29 17:21:01 deviceMsg on (to vccu)
2018-03-29 17:21:01 level 100
2018-03-29 17:21:01 pct 100
2018-03-29 15:43:55 peerList FB_1_392AF8_Btn_05,
2017-10-04 17:39:24 powerOn 2017-10-04 17:39:24
2018-03-29 17:21:01 recentStateType ack
2018-03-29 17:21:01 state on
2018-03-29 17:21:01 timedOn off
2018-03-26 23:45:37 trigLast FB_1_392AF8_Btn_05:short
2018-03-26 23:45:37 trig_FB_1_392AF8_Btn_05 Short_38
helper:
HM_CMDNR 252
cSnd 1126EA364D46850201000000,1126EA364D46850201C80000
dlvlCmd ++A01126EA364D46850201C80000
mId 006C
regLst ,0,1,3p
rxType 2
supp_Pair_Rep 0
ack:
expert:
def 1
det 1
raw 1
tpl 0
io:
newChn +4D4685,00,00,00
nextSend 1522336862.49729
prefIO
rxt 0
vccu vccu
p:
4D4685
00
00
00
mRssi:
mNo FC
io:
HMLAN1:
-78
-78
HMUSB1:
-72
-72
HmModUartWLAN1:
-48
-48
prt:
bErr 0
sProc 0
rspWait:
q:
qReqConf
qReqStat
role:
chn 1
dev 1
prs 1
rssi:
HMUSB1:
avg -73
cnt 1
lst -73
max -73
min -73
HmModUartWLAN1:
avg -56
cnt 4
lst -56
max -56
min -56
at_HMLAN1:
avg -78.2
cnt 5
lst -78
max -77
min -80
at_HMUSB1:
avg -72
cnt 6
lst -72
max -72
min -72
at_HmModUartWLAN1:
avg -54
cnt 5
lst -54
max -54
min -54
shadowReg:
tmpl:
Attributes:
IODev HmModUartWLAN1
IOgrp vccu
autoReadReg 4_reqStatus
expert 3_allReg+raw
firmware 1.7
icon icoHEIZUNG
model HM-LC-SW1-BA-PCB
msgRepeat 1
peerIDs 00000000,392AF805,
room 1.30_Wohnzimmer,CUL_HM
serialNr NEQ0696523
subType switch
webCmd statusRequest:toggle:on:off
defmod BaZi_Heizkreis CUL_HM 26E564
attr BaZi_Heizkreis IODev HmModUartWLAN1
attr BaZi_Heizkreis IOgrp vccu
attr BaZi_Heizkreis actCycle 000:10
attr BaZi_Heizkreis actStatus alive
attr BaZi_Heizkreis autoReadReg 4_reqStatus
attr BaZi_Heizkreis expert 3
attr BaZi_Heizkreis firmware 1.4
attr BaZi_Heizkreis icon hm-cc-rt-dn
attr BaZi_Heizkreis model HM-CC-RT-DN
attr BaZi_Heizkreis room CUL_HM
attr BaZi_Heizkreis serialNr LEQ0111245
attr BaZi_Heizkreis subType thermostat
attr BaZi_Heizkreis verbose 3
attr BaZi_Heizkreis webCmd getConfig:clear msgEvents:burstXmit
setstate BaZi_Heizkreis CMDs_done
setstate BaZi_Heizkreis 2018-03-29 20:13:05 .protLastRcv 2018-03-29 20:13:05
setstate BaZi_Heizkreis 2018-03-29 15:43:54 Activity alive
setstate BaZi_Heizkreis 2018-03-29 05:57:35 CommandAccepted yes
setstate BaZi_Heizkreis 2015-10-13 23:14:14 D-firmware 1.4
setstate BaZi_Heizkreis 2015-10-13 23:14:14 D-serialNr LEQ0111245
setstate BaZi_Heizkreis 2017-12-30 17:48:03 PairedTo 0x26EA36
setstate BaZi_Heizkreis 2015-10-13 23:16:12 R-backOnTime 10 s
setstate BaZi_Heizkreis 2015-10-14 00:19:48 R-btnLock on
setstate BaZi_Heizkreis 2015-10-13 23:16:12 R-burstRx on
setstate BaZi_Heizkreis 2015-10-13 23:16:12 R-cyclicInfoMsg on
setstate BaZi_Heizkreis 2015-10-13 23:16:12 R-cyclicInfoMsgDis 0
setstate BaZi_Heizkreis 2015-10-14 00:22:31 R-globalBtnLock off
setstate BaZi_Heizkreis 2015-10-13 23:16:12 R-localResDis off
setstate BaZi_Heizkreis 2015-10-13 23:16:12 R-lowBatLimitRT 2.1 V
setstate BaZi_Heizkreis 2015-10-13 23:16:12 R-modusBtnLock off
setstate BaZi_Heizkreis 2015-10-13 23:16:12 R-pairCentral 0x26EA36
setstate BaZi_Heizkreis 2017-12-30 17:48:03 RegL_00. 01:01 02:01 09:01 0A:26 0B:EA 0C:36 0E:0A 0F:01 11:00 12:15 16:00 18:00 19:00 1A:00 00:00
setstate BaZi_Heizkreis 2017-12-30 17:50:37 RegL_07.
setstate BaZi_Heizkreis 2018-03-29 20:13:05 actuator 0
setstate BaZi_Heizkreis 2018-03-29 20:13:05 battery ok
setstate BaZi_Heizkreis 2018-03-29 20:13:05 batteryLevel 2.6
setstate BaZi_Heizkreis 2018-03-29 20:13:05 desired-temp 22.0
setstate BaZi_Heizkreis 2018-03-29 20:13:05 measured-temp 23.0
setstate BaZi_Heizkreis 2018-03-29 20:13:05 motorErr ok
setstate BaZi_Heizkreis 2016-07-22 07:39:17 powerOn 2016-07-22 07:39:17
setstate BaZi_Heizkreis 2016-07-22 07:39:17 recentStateType info
setstate BaZi_Heizkreis 2018-03-29 16:07:36 state CMDs_done
setstate BaZi_Heizkreis 2018-03-29 16:07:36 time-request -
defmod Kerze CUL_HM 4D4685
attr Kerze IODev HmModUartWLAN1
attr Kerze IOgrp vccu
attr Kerze autoReadReg 4_reqStatus
attr Kerze expert 3_allReg+raw
attr Kerze firmware 1.7
attr Kerze icon icoHEIZUNG
attr Kerze model HM-LC-SW1-BA-PCB
attr Kerze msgRepeat 1
attr Kerze peerIDs 00000000,392AF805,
attr Kerze room 1.30_Wohnzimmer,CUL_HM
attr Kerze serialNr NEQ0696523
attr Kerze subType switch
attr Kerze webCmd statusRequest:toggle:on:off
setstate Kerze on
setstate Kerze 2017-01-06 14:43:06 .D-devInfo 410100
setstate Kerze 2017-01-06 14:43:06 .D-stc 10
setstate Kerze 2017-10-04 17:39:28 .peerListRDate 2017-10-04 17:39:28
setstate Kerze 2018-03-29 18:49:49 .protLastRcv 2018-03-29 18:49:49
setstate Kerze 2018-03-29 18:49:48 CommandAccepted yes
setstate Kerze 2017-01-06 14:43:06 D-firmware 1.7
setstate Kerze 2017-01-06 14:43:06 D-serialNr NEQ0696523
setstate Kerze 2017-10-04 17:39:27 PairedTo 0x26EA36
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgActionType jmpToTarget
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgCtDlyOff geLo
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgCtDlyOn geLo
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgCtOff geLo
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgCtOn geLo
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgCtValHi 100
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgCtValLo 50
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgMultiExec on
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgOffDly 0 s
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgOffTime unused
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgOffTimeMode absolut
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgOnDly 0 s
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgOnTime unused
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgOnTimeMode absolut
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgSwJtDlyOff off
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgSwJtDlyOn on
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgSwJtOff dlyOn
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-lgSwJtOn dlyOff
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shActionType jmpToTarget
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shCtDlyOff geLo
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shCtDlyOn geLo
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shCtOff geLo
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shCtOn geLo
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shCtValHi 100
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shCtValLo 50
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shMultiExec off
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shOffDly 0 s
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shOffTime unused
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shOffTimeMode absolut
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shOnDly 0 s
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shOnTime unused
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shOnTimeMode absolut
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shSwJtDlyOff off
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shSwJtDlyOn on
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shSwJtOff dlyOn
setstate Kerze 2017-01-07 12:44:58 R-FB_1_392AF8_Btn_05-shSwJtOn dlyOff
setstate Kerze 2017-01-05 15:42:24 R-intKeyVisib invisib
setstate Kerze 2017-01-05 15:42:24 R-ledMode off
setstate Kerze 2017-01-06 14:43:41 R-lowBatLimitBA 5 V
setstate Kerze 2017-01-05 15:42:24 R-pairCentral 0x26EA36
setstate Kerze 2017-01-05 15:42:25 R-sign off
setstate Kerze 2017-10-04 17:39:27 RegL_00. 02:01 05:00 0A:26 0B:EA 0C:36 12:32 00:00
setstate Kerze 2017-10-04 17:39:28 RegL_01. 08:00 00:00
setstate Kerze 2017-10-04 17:39:30 RegL_03.FB_1_392AF8_Btn_05 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:14 0C:63 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:21 8B:14 8C:63 00:00
setstate Kerze 2018-03-29 18:49:48 battery low
setstate Kerze 2018-03-29 18:49:48 deviceMsg on (to vccu)
setstate Kerze 2018-03-29 18:49:48 level 100
setstate Kerze 2018-03-29 18:49:48 pct 100
setstate Kerze 2018-03-29 15:43:55 peerList FB_1_392AF8_Btn_05,
setstate Kerze 2017-10-04 17:39:24 powerOn 2017-10-04 17:39:24
setstate Kerze 2018-03-29 18:49:48 recentStateType ack
setstate Kerze 2018-03-29 18:49:48 state on
setstate Kerze 2018-03-29 18:49:48 timedOn off
setstate Kerze 2018-03-26 23:45:37 trigLast FB_1_392AF8_Btn_05:short
setstate Kerze 2018-03-26 23:45:37 trig_FB_1_392AF8_Btn_05 Short_38
2018.03.30 19:54:42 3 : BaZi_Heizkreis, 'battery: ok' ignored, has batteryLevel reading
2018.03.30 19:54:42 3 : batteryLevel Strang
2018-03-30 19:57:36 CUL_HM Kerze battery: low
2018-03-30 19:57:36 CUL_HM Kerze deviceMsg: off (to vccu)
2018-03-30 19:57:36 CUL_HM Kerze level: 0
2018-03-30 19:57:36 CUL_HM Kerze pct: 0
2018-03-30 19:57:36 CUL_HM Kerze off
2018-03-30 19:57:36 CUL_HM Kerze timedOn: off
Internals:
CFGFN ./FHEM/flur.cfg
DEF 2D3362
HMLAN1_MSGCNT 14
HMLAN1_RAWMSG E2D3362,0000,09790776,FF,FFA3,D884702D336200000000E636
HMLAN1_RSSI -93
HMLAN1_TIME 2018-03-30 20:04:30
HMUSB1_MSGCNT 14
HMUSB1_RAWMSG E2D3362,0000,6DCC8B2D,FF,FFA8,D884702D336200000000E636
HMUSB1_RSSI -88
HMUSB1_TIME 2018-03-30 20:04:30
HmModUartWLAN1_MSGCNT 13
HmModUartWLAN1_RAWMSG 05000026D884702D336200000000E636
HmModUartWLAN1_RSSI -38
HmModUartWLAN1_TIME 2018-03-30 20:04:30
IODev HmModUartWLAN1
LASTInputDev HMUSB1
MSGCNT 41
NAME Flur_Thermostat
NOTIFYDEV global
NR 615
STATE CMDs_done
TYPE CUL_HM
channel_01 Flur_Thermostat_Weather
channel_02 Flur_Thermostat_Climate
channel_03 Flur_Thermostat_WindowRec
channel_06 Flur_Thermostat_remote
channel_07 Flur_Thermostat_SwitchTr
lastMsg No:D8 - t:70 s:2D3362 d:000000 00E636
protLastRcv 2018-03-30 20:04:30
rssi_at_HMLAN1 avg:-92.78 min:-93 max:-92 lst:-93 cnt:14
rssi_at_HMUSB1 avg:-88.5 min:-90 max:-87 lst:-88 cnt:14
rssi_at_HmModUartWLAN1 avg:-38 min:-38 max:-38 lst:-38 cnt:13
READINGS:
2018-03-30 19:51:44 Activity alive
2018-03-29 12:28:15 CommandAccepted yes
2016-12-30 19:05:01 D-firmware 1.3
2016-12-30 19:05:01 D-serialNr LEQ0598568
2018-02-11 11:01:55 PairedTo 0x26EA36
2016-12-30 19:06:56 R-btnLock on
2016-12-30 18:25:45 R-burstRx on
2016-12-30 18:25:45 R-cyclicInfoMsg on
2016-12-30 18:25:45 R-cyclicInfoMsgDis 0
2016-12-30 18:25:45 R-globalBtnLock off
2016-12-30 18:25:45 R-localResDis off
2016-12-30 18:25:45 R-lowBatLimitRT 2.2 V
2016-12-30 18:25:45 R-modusBtnLock off
2016-12-30 18:25:45 R-pairCentral 0x26EA36
2018-02-11 11:01:55 RegL_00. 01:01 02:01 09:01 0A:26 0B:EA 0C:36 0F:01 11:00 12:16 16:00 18:00 19:00 1A:00 00:00
2018-02-11 11:19:05 RegL_07.
2018-03-30 18:20:36 battery ok
2018-03-30 18:20:36 batteryLevel 2.7
2018-03-30 18:20:36 desired-temp 21.0
2018-03-30 18:20:36 measured-temp 23.0
2017-09-30 09:58:32 powerOn 2017-09-30 09:58:32
2017-09-30 09:58:32 recentStateType info
2018-03-29 12:28:16 state CMDs_done
2017-09-30 09:58:34 time-request -
helper:
HM_CMDNR 216
PONtest 1
mId 00AD
regLst ,0
rxType 6
supp_Pair_Rep 0
expert:
def 1
det 1
raw 1
tpl 0
io:
newChn +2D3362,00,00,00
nextSend 1522433070.404
prefIO
rxt 0
vccu vccu
p:
2D3362
00
00
00
mRssi:
mNo D8
io:
HMLAN1:
-93
-93
HMUSB1:
-88
-88
HmModUartWLAN1:
-30
-30
prt:
bErr 0
sProc 0
q:
qReqConf
qReqStat
role:
dev 1
prs 1
rssi:
at_HMLAN1:
avg -92.7857142857143
cnt 14
lst -93
max -92
min -93
at_HMUSB1:
avg -88.5
cnt 14
lst -88
max -87
min -90
at_HmModUartWLAN1:
avg -38
cnt 13
lst -38
max -38
min -38
shRegW:
07 02
shadowReg:
tmpl:
Attributes:
IODev HmModUartWLAN1
IOgrp vccu
actCycle 000:10
actStatus alive
autoReadReg 4_reqStatus
event-on-change-reading .*
expert 3_allReg+raw
firmware 1.3
icon hm-tc-it-wm-w-eu
model HM-TC-IT-WM-W-EU
msgRepeat 1
room CUL_HM
serialNr LEQ0598568
subType thermostat
verbose 3
webCmd getConfig:clear msgEvents
Internals:
CFGFN ./FHEM/flur.cfg
DEF 2D336202
NAME Flur_Thermostat_Climate
NOTIFYDEV global
NR 621
STATE T: 23.0 desired: 21.0
TYPE CUL_HM
chanNo 02
device Flur_Thermostat
Helper:
DBLOG:
desired-temp:
myDbLog:
TIME 1522433050.29181
VALUE 21.0
humidity:
myDbLog:
TIME 1522433050.29181
VALUE 53
measured-temp:
myDbLog:
TIME 1522433050.29181
VALUE 23.0
state:
myDbLog:
TIME 1522433050.29181
VALUE T: 23.0 desired: 21.0
READINGS:
2018-03-29 12:28:16 CommandAccepted yes
2016-12-30 18:25:50 R-boostPeriod 5 min
2016-12-30 18:25:50 R-dayTemp 21 C
2016-12-30 18:25:50 R-daylightSaveTime on
2016-12-30 18:25:50 R-heatCool heating
2016-12-30 18:25:50 R-modePrioManu all
2016-12-30 18:25:50 R-modePrioParty all
2016-12-30 18:25:50 R-nightTemp 17 C
2016-12-30 18:25:50 R-noMinMax4Manu off
2016-12-30 18:25:50 R-sendWeatherData on
2016-12-30 18:25:50 R-showHumidity temp
2016-12-30 18:25:50 R-showInfo time
2016-12-30 18:25:50 R-showSetTemp actTemp
2016-12-30 18:25:50 R-showWeekday off
2016-12-30 18:25:46 R-sign off
2016-12-30 18:25:50 R-tempMax 30.5 C
2016-12-30 18:25:50 R-tempMin 4.5 C
2016-12-30 18:25:50 R-tempOffset 0.0K
2016-12-30 18:25:50 R-weekPrgSel prog1
2016-12-30 18:25:50 R-winOpnBoost off
2018-02-11 11:02:01 R_P1_0_tempListSat 06:00 17.0 22:00 21.0 24:00 17.0
2018-02-11 11:02:01 R_P1_1_tempListSun 06:00 17.0 22:00 21.0 24:00 17.0
2018-02-11 11:02:01 R_P1_2_tempListMon 06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
2018-02-11 11:02:01 R_P1_3_tempListTue 06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
2018-02-11 11:02:01 R_P1_4_tempListWed 06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
2018-02-11 11:02:01 R_P1_5_tempListThu 06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
2018-02-11 11:02:01 R_P1_6_tempListFri 06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
2018-02-11 11:02:01 R_P1_tempList_State verified
2018-02-11 11:02:05 R_P2_0_tempListSat 24:00 17.0
2018-02-11 11:02:05 R_P2_1_tempListSun 24:00 17.0
2018-02-11 11:02:05 R_P2_2_tempListMon 24:00 17.0
2018-02-11 11:02:05 R_P2_3_tempListTue 24:00 17.0
2018-02-11 11:02:05 R_P2_4_tempListWed 24:00 17.0
2018-02-11 11:02:05 R_P2_5_tempListThu 24:00 17.0
2018-02-11 11:02:05 R_P2_6_tempListFri 24:00 17.0
2018-02-11 11:02:05 R_P2_tempList_State verified
2018-02-11 11:02:09 R_P3_0_tempListSat 24:00 17.0
2018-02-11 11:02:09 R_P3_1_tempListSun 24:00 17.0
2018-02-11 11:02:09 R_P3_2_tempListMon 24:00 17.0
2018-02-11 11:02:09 R_P3_3_tempListTue 24:00 17.0
2018-02-11 11:02:09 R_P3_4_tempListWed 24:00 17.0
2018-02-11 11:02:09 R_P3_5_tempListThu 24:00 17.0
2018-02-11 11:02:09 R_P3_6_tempListFri 24:00 17.0
2018-02-11 11:02:09 R_P3_tempList_State verified
2018-02-11 11:01:57 RegL_01. 08:00 00:00
2018-02-11 11:02:01 RegL_07. 01:2A 02:22 03:09 04:3D 05:00 06:00 07:00 08:00 09:87 0A:30 0B:00 0C:00 0D:00 0E:01 0F:04 10:00 11:00 12:09 13:00 14:44 15:48 16:55 17:08 18:45 19:20 1A:45 1B:20 1C:45 1D:20 1E:45 1F:20 20:45 21:20 22:45 23:20 24:45 25:20 26:45 27:20 28:45 29:20 2A:45 2B:20 2C:45 2D:20 2E:44 2F:48 30:55 31:08 32:45 33:20 34:45 35:20 36:45 37:20 38:45 39:20 3A:45 3B:20 3C:45 3D:20 3E:45 3F:20 40:45 41:20 42:45 43:20 44:45 45:20 46:45 47:20 48:44 49:48 4A:54 4B:6C 4C:44 4D:CC 4E:55 4F:08 50:45 51:20 52:45 53:20 54:45 55:20 56:45 57:20 58:45 59:20 5A:45 5B:20 5C:45 5D:20 5E:45 5F:20 60:45 61:20 62:44 63:48 64:54 65:6C 66:44 67:CC 68:55 69:08 6A:45 6B:20 6C:45 6D:20 6E:45 6F:20 70:45 71:20 72:45 73:20 74:45 75:20 76:45 77:20 78:45 79:20 7A:45 7B:20 7C:44 7D:48 7E:54 7F:6C 80:44 81:CC 82:55 83:08 84:45 85:20 86:45 87:20 88:45 89:20 8A:45 8B:20 8C:45 8D:20 8E:45 8F:20 90:45 91:20 92:45 93:20 94:45 95:20 96:44 97:48 98:54 99:6C 9A:44 9B:CC 9C:55 9D:08 9E:45 9F:20 A0:45 A1:20 A2:45 A3:20 A4:45 A5:20 A6:45 A7:20 A8:45 A9:20 AA:45 AB:20 AC:45 AD:20 AE:45 AF:20 B0:44 B1:48 B2:54 B3:6C B4:44 B5:CC B6:55 B7:08 B8:45 B9:20 BA:45 BB:20 BC:45 BD:20 BE:45 BF:20 C0:45 C1:20 C2:45 C3:20 C4:45 C5:20 C6:45 C7:20 C8:45 C9:20 CA:00 CB:00 CC:00 CD:00 CE:00 CF:00 00:00
2018-02-11 11:02:05 RegL_08. 01:00 02:00 03:00 04:00 05:00 06:00 07:00 08:00 09:00 0A:00 0B:00 0C:00 0D:00 0E:00 0F:00 10:00 11:00 12:00 13:00 14:45 15:20 16:45 17:20 18:45 19:20 1A:45 1B:20 1C:45 1D:20 1E:45 1F:20 20:45 21:20 22:45 23:20 24:45 25:20 26:45 27:20 28:45 29:20 2A:45 2B:20 2C:45 2D:20 2E:45 2F:20 30:45 31:20 32:45 33:20 34:45 35:20 36:45 37:20 38:45 39:20 3A:45 3B:20 3C:45 3D:20 3E:45 3F:20 40:45 41:20 42:45 43:20 44:45 45:20 46:45 47:20 48:45 49:20 4A:45 4B:20 4C:45 4D:20 4E:45 4F:20 50:45 51:20 52:45 53:20 54:45 55:20 56:45 57:20 58:45 59:20 5A:45 5B:20 5C:45 5D:20 5E:45 5F:20 60:45 61:20 62:45 63:20 64:45 65:20 66:45 67:20 68:45 69:20 6A:45 6B:20 6C:45 6D:20 6E:45 6F:20 70:45 71:20 72:45 73:20 74:45 75:20 76:45 77:20 78:45 79:20 7A:45 7B:20 7C:45 7D:20 7E:45 7F:20 80:45 81:20 82:45 83:20 84:45 85:20 86:45 87:20 88:45 89:20 8A:45 8B:20 8C:45 8D:20 8E:45 8F:20 90:45 91:20 92:45 93:20 94:45 95:20 96:45 97:20 98:45 99:20 9A:45 9B:20 9C:45 9D:20 9E:45 9F:20 A0:45 A1:20 A2:45 A3:20 A4:45 A5:20 A6:45 A7:20 A8:45 A9:20 AA:45 AB:20 AC:45 AD:20 AE:45 AF:20 B0:45 B1:20 B2:45 B3:20 B4:45 B5:20 B6:45 B7:20 B8:45 B9:20 BA:45 BB:20 BC:45 BD:20 BE:45 BF:20 C0:45 C1:20 C2:45 C3:20 C4:45 C5:20 C6:45 C7:20 C8:45 C9:20 CA:00 CB:00 CC:00 CD:00 CE:00 CF:00 00:00
2018-02-11 11:02:09 RegL_09. 01:00 02:00 03:00 04:00 05:00 06:00 07:00 08:00 09:00 0A:00 0B:00 0C:00 0D:00 0E:00 0F:00 10:00 11:00 12:00 13:00 14:45 15:20 16:45 17:20 18:45 19:20 1A:45 1B:20 1C:45 1D:20 1E:45 1F:20 20:45 21:20 22:45 23:20 24:45 25:20 26:45 27:20 28:45 29:20 2A:45 2B:20 2C:45 2D:20 2E:45 2F:20 30:45 31:20 32:45 33:20 34:45 35:20 36:45 37:20 38:45 39:20 3A:45 3B:20 3C:45 3D:20 3E:45 3F:20 40:45 41:20 42:45 43:20 44:45 45:20 46:45 47:20 48:45 49:20 4A:45 4B:20 4C:45 4D:20 4E:45 4F:20 50:45 51:20 52:45 53:20 54:45 55:20 56:45 57:20 58:45 59:20 5A:45 5B:20 5C:45 5D:20 5E:45 5F:20 60:45 61:20 62:45 63:20 64:45 65:20 66:45 67:20 68:45 69:20 6A:45 6B:20 6C:45 6D:20 6E:45 6F:20 70:45 71:20 72:45 73:20 74:45 75:20 76:45 77:20 78:45 79:20 7A:45 7B:20 7C:45 7D:20 7E:45 7F:20 80:45 81:20 82:45 83:20 84:45 85:20 86:45 87:20 88:45 89:20 8A:45 8B:20 8C:45 8D:20 8E:45 8F:20 90:45 91:20 92:45 93:20 94:45 95:20 96:45 97:20 98:45 99:20 9A:45 9B:20 9C:45 9D:20 9E:45 9F:20 A0:45 A1:20 A2:45 A3:20 A4:45 A5:20 A6:45 A7:20 A8:45 A9:20 AA:45 AB:20 AC:45 AD:20 AE:45 AF:20 B0:45 B1:20 B2:45 B3:20 B4:45 B5:20 B6:45 B7:20 B8:45 B9:20 BA:45 BB:20 BC:45 BD:20 BE:45 BF:20 C0:45 C1:20 C2:45 C3:20 C4:45 C5:20 C6:45 C7:20 C8:45 C9:20 CA:00 CB:00 CC:00 CD:00 CE:00 CF:00 00:00
2018-03-30 18:20:36 boostTime -
2018-03-30 18:20:36 commReporting off
2018-03-30 18:20:36 controlMode manual
2018-03-30 20:04:10 desired-temp 21.0
2018-03-30 20:04:10 humidity 53
2018-03-30 20:04:10 measured-temp 23.0
2018-03-29 12:28:16 recentStateType ack
2018-03-30 20:04:10 state T: 23.0 desired: 21.0
2018-03-30 18:20:36 winOpenReporting off
helper:
regLst ,1,7,8,9
expert:
def 1
det 1
raw 1
tpl 0
role:
chn 1
shRegR:
07 00
shadowReg:
tmpl:
Attributes:
event-min-interval .*:600
event-on-change-reading .*
model HM-TC-IT-WM-W-EU
peerIDs 00000000,
Internals:
CFGFN ./FHEM/kinderzimmer.cfg
DEF 2D4D41
HMLAN1_MSGCNT 19
HMLAN1_RAWMSG E2D4D41,0000,097BDD60,FF,FFA2,0280412D4D412A16DB07EA0080
HMLAN1_RSSI -94
HMLAN1_TIME 2018-03-30 20:07:36
HMUSB1_MSGCNT 19
HMUSB1_RAWMSG E2D4D41,0000,6DCF60F8,FF,FFB7,0280412D4D412A16DB07EA0080
HMUSB1_RSSI -73
HMUSB1_TIME 2018-03-30 20:07:36
HmModUartWLAN1_MSGCNT 18
HmModUartWLAN1_RAWMSG 0500003D0280412D4D412A16DB07EA0080
HmModUartWLAN1_RSSI -61
HmModUartWLAN1_TIME 2018-03-30 20:07:36
IODev HmModUartWLAN1
LASTInputDev HMUSB1
MSGCNT 56
NAME KiZi_Thermostat
NOTIFYDEV global
NR 417
STATE CMDs_done
TYPE CUL_HM
channel_01 KiZi_Thermostat_Weather
channel_02 KiZi_Thermostat_Climate
channel_03 KiZi_Thermostat_WindowRec
channel_06 KiZi_Thermostat_remote
channel_07 KiZi_Thermostat_SwitchTr
lastMsg No:02 - t:41 s:2D4D41 d:2A16DB 07EA0080
protLastRcv 2018-03-30 20:07:36
rssi_at_HMLAN1 avg:-94.1 min:-95 max:-93 lst:-94 cnt:19
rssi_at_HMUSB1 avg:-72.84 min:-73 max:-72 lst:-73 cnt:19
rssi_at_HmModUartWLAN1 avg:-60.38 min:-61 max:-60 lst:-61 cnt:18
Helper:
DBLOG:
batteryLevel:
myDbLog:
TIME 1522433183.75021
VALUE 2.8
measured-temp:
myDbLog:
TIME 1522433183.75021
VALUE 22.9
READINGS:
2018-03-30 19:51:44 Activity alive
2018-03-30 10:38:19 CommandAccepted yes
2016-12-30 21:25:45 D-firmware 1.3
2016-12-31 14:22:53 D-serialNr LEQ0594422
2017-11-08 18:25:18 PairedTo 0x26EA36
2016-12-30 21:38:39 R-btnLock on
2015-10-13 23:08:43 R-burstRx on
2015-10-13 23:08:43 R-cyclicInfoMsg on
2015-10-13 23:08:43 R-cyclicInfoMsgDis 0
2015-10-13 23:08:43 R-globalBtnLock off
2015-10-13 23:08:43 R-localResDis off
2015-10-13 23:08:43 R-lowBatLimitRT 2.2 V
2015-10-13 23:08:43 R-modusBtnLock off
2015-10-13 23:08:43 R-pairCentral 0x26EA36
2017-11-08 18:25:18 RegL_00. 01:01 02:01 09:01 0A:26 0B:EA 0C:36 0F:01 11:00 12:16 16:00 18:00 19:00 1A:00 00:00
2017-11-08 18:31:27 RegL_07.
2018-03-30 20:06:23 battery ok
2018-03-30 20:06:23 batteryLevel 2.8
2018-03-30 20:06:23 desired-temp 21.0
2016-12-30 20:53:44 fwUpdate fail:Block5
2018-03-30 20:06:23 measured-temp 22.9
2017-11-08 18:25:13 powerOn 2017-11-08 18:25:13
2017-11-08 18:25:13 recentStateType info
2018-03-30 10:38:20 state CMDs_done
2017-11-08 18:25:15 time-request -
helper:
HM_CMDNR 2
PONtest 1
mId 00AD
regLst ,0
rxType 6
supp_Pair_Rep 0
expert:
def 1
det 1
raw 1
tpl 0
io:
newChn +2D4D41,00,00,00
nextSend 1522433256.22652
prefIO
rxt 0
vccu vccu
p:
2D4D41
00
00
00
mRssi:
mNo 02
io:
HMLAN1:
-94
-94
HMUSB1:
-73
-73
HmModUartWLAN1:
-57
-57
prt:
bErr 0
sProc 0
q:
qReqConf
qReqStat
role:
dev 1
prs 1
rssi:
at_HMLAN1:
avg -94.1052631578947
cnt 19
lst -94
max -93
min -95
at_HMUSB1:
avg -72.8421052631579
cnt 19
lst -73
max -72
min -73
at_HmModUartWLAN1:
avg -60.3888888888889
cnt 18
lst -61
max -60
min -61
shRegW:
07 02
shadowReg:
tmpl:
Attributes:
IODev HmModUartWLAN1
IOgrp vccu
actCycle 000:10
actStatus alive
autoReadReg 4_reqStatus
event-on-change-reading .*
expert 3
firmware 1.3
icon hm-tc-it-wm-w-eu
model HM-TC-IT-WM-W-EU
msgRepeat 1
room CUL_HM
serialNr LEQ0594422
subType thermostat
verbose 3
webCmd getConfig:clear msgEvents
Internals:
CFGFN ./FHEM/kinderzimmer.cfg
CHANGED
DEF 2D4D4102
NAME KiZi_Thermostat_Climate
NOTIFYDEV global
NR 423
STATE T: 22.9 desired: 21.0
TYPE CUL_HM
chanNo 02
device KiZi_Thermostat
Helper:
DBLOG:
boostTime:
myDbLog:
TIME 1522433024.79706
VALUE -
commReporting:
myDbLog:
TIME 1522433024.79706
VALUE off
controlMode:
myDbLog:
TIME 1522433024.79706
VALUE manual
desired-temp:
myDbLog:
TIME 1522433173.74382
VALUE 21.0
humidity:
myDbLog:
TIME 1522433014.73513
VALUE 55
measured-temp:
myDbLog:
TIME 1522433173.74382
VALUE 22.9
state:
myDbLog:
TIME 1522433173.74382
VALUE T: 22.9 desired: 21.0
winOpenReporting:
myDbLog:
TIME 1522433024.79706
VALUE off
READINGS:
2018-03-30 10:38:20 CommandAccepted yes
2015-10-13 23:08:48 R-boostPeriod 5 min
2015-10-13 23:08:48 R-dayTemp 21 C
2015-10-13 23:08:48 R-daylightSaveTime on
2015-10-13 23:08:48 R-heatCool heating
2015-10-13 23:08:48 R-hyst2point 0.4 C
2015-10-13 23:08:48 R-modePrioManu all
2015-10-13 23:08:48 R-modePrioParty all
2015-10-13 23:08:48 R-nightTemp 17 C
2015-10-13 23:08:48 R-noMinMax4Manu off
2015-10-13 23:08:48 R-sendWeatherData on
2015-10-13 23:08:48 R-showHumidity temp
2015-10-13 23:08:48 R-showInfo time
2015-10-13 23:08:48 R-showSetTemp actTemp
2015-10-13 23:08:48 R-showWeekday off
2015-10-13 23:08:44 R-sign off
2015-10-13 23:08:48 R-tempMax 30.5 C
2015-10-13 23:08:48 R-tempMin 4.5 C
2015-10-13 23:08:48 R-tempOffset 0.0K
2015-10-13 23:08:48 R-weekPrgSel prog1
2015-10-13 23:08:48 R-winOpnBoost off
2017-11-08 18:25:23 R_P1_0_tempListSat 06:00 17.0 22:00 21.0 24:00 17.0
2017-11-08 18:25:23 R_P1_1_tempListSun 06:00 17.0 22:00 21.0 24:00 17.0
2017-11-08 18:25:23 R_P1_2_tempListMon 06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
2017-11-08 18:25:23 R_P1_3_tempListTue 06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
2017-11-08 18:25:23 R_P1_4_tempListWed 06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
2017-11-08 18:25:23 R_P1_5_tempListThu 06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
2017-11-08 18:25:23 R_P1_6_tempListFri 06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
2017-11-08 18:25:23 R_P1_tempList_State verified
2017-11-08 18:25:27 R_P2_0_tempListSat 24:00 17.0
2017-11-08 18:25:27 R_P2_1_tempListSun 24:00 17.0
2017-11-08 18:25:27 R_P2_2_tempListMon 24:00 17.0
2017-11-08 18:25:27 R_P2_3_tempListTue 24:00 17.0
2017-11-08 18:25:27 R_P2_4_tempListWed 24:00 17.0
2017-11-08 18:25:27 R_P2_5_tempListThu 24:00 17.0
2017-11-08 18:25:27 R_P2_6_tempListFri 24:00 17.0
2017-11-08 18:25:27 R_P2_tempList_State verified
2017-11-08 18:25:31 R_P3_0_tempListSat 24:00 17.0
2017-11-08 18:25:31 R_P3_1_tempListSun 24:00 17.0
2017-11-08 18:25:31 R_P3_2_tempListMon 24:00 17.0
2017-11-08 18:25:31 R_P3_3_tempListTue 24:00 17.0
2017-11-08 18:25:31 R_P3_4_tempListWed 24:00 17.0
2017-11-08 18:25:31 R_P3_5_tempListThu 24:00 17.0
2017-11-08 18:25:31 R_P3_6_tempListFri 24:00 17.0
2017-11-08 18:25:31 R_P3_tempList_State verified
2017-11-08 18:25:19 RegL_01. 08:00 00:00
2017-11-08 18:25:23 RegL_07. 01:2A 02:22 03:09 04:3D 05:00 06:00 07:00 08:00 09:87 0A:30 0B:00 0C:00 0D:00 0E:01 0F:04 10:00 11:00 12:09 13:00 14:44 15:48 16:55 17:08 18:45 19:20 1A:45 1B:20 1C:45 1D:20 1E:45 1F:20 20:45 21:20 22:45 23:20 24:45 25:20 26:45 27:20 28:45 29:20 2A:45 2B:20 2C:45 2D:20 2E:44 2F:48 30:55 31:08 32:45 33:20 34:45 35:20 36:45 37:20 38:45 39:20 3A:45 3B:20 3C:45 3D:20 3E:45 3F:20 40:45 41:20 42:45 43:20 44:45 45:20 46:45 47:20 48:44 49:48 4A:54 4B:6C 4C:44 4D:CC 4E:55 4F:08 50:45 51:20 52:45 53:20 54:45 55:20 56:45 57:20 58:45 59:20 5A:45 5B:20 5C:45 5D:20 5E:45 5F:20 60:45 61:20 62:44 63:48 64:54 65:6C 66:44 67:CC 68:55 69:08 6A:45 6B:20 6C:45 6D:20 6E:45 6F:20 70:45 71:20 72:45 73:20 74:45 75:20 76:45 77:20 78:45 79:20 7A:45 7B:20 7C:44 7D:48 7E:54 7F:6C 80:44 81:CC 82:55 83:08 84:45 85:20 86:45 87:20 88:45 89:20 8A:45 8B:20 8C:45 8D:20 8E:45 8F:20 90:45 91:20 92:45 93:20 94:45 95:20 96:44 97:48 98:54 99:6C 9A:44 9B:CC 9C:55 9D:08 9E:45 9F:20 A0:45 A1:20 A2:45 A3:20 A4:45 A5:20 A6:45 A7:20 A8:45 A9:20 AA:45 AB:20 AC:45 AD:20 AE:45 AF:20 B0:44 B1:48 B2:54 B3:6C B4:44 B5:CC B6:55 B7:08 B8:45 B9:20 BA:45 BB:20 BC:45 BD:20 BE:45 BF:20 C0:45 C1:20 C2:45 C3:20 C4:45 C5:20 C6:45 C7:20 C8:45 C9:20 CA:00 CB:00 CC:00 CD:00 CE:00 CF:00 00:00
2017-11-08 18:25:27 RegL_08. 01:00 02:00 03:00 04:00 05:00 06:00 07:00 08:00 09:00 0A:00 0B:00 0C:00 0D:00 0E:00 0F:00 10:00 11:00 12:00 13:00 14:45 15:20 16:45 17:20 18:45 19:20 1A:45 1B:20 1C:45 1D:20 1E:45 1F:20 20:45 21:20 22:45 23:20 24:45 25:20 26:45 27:20 28:45 29:20 2A:45 2B:20 2C:45 2D:20 2E:45 2F:20 30:45 31:20 32:45 33:20 34:45 35:20 36:45 37:20 38:45 39:20 3A:45 3B:20 3C:45 3D:20 3E:45 3F:20 40:45 41:20 42:45 43:20 44:45 45:20 46:45 47:20 48:45 49:20 4A:45 4B:20 4C:45 4D:20 4E:45 4F:20 50:45 51:20 52:45 53:20 54:45 55:20 56:45 57:20 58:45 59:20 5A:45 5B:20 5C:45 5D:20 5E:45 5F:20 60:45 61:20 62:45 63:20 64:45 65:20 66:45 67:20 68:45 69:20 6A:45 6B:20 6C:45 6D:20 6E:45 6F:20 70:45 71:20 72:45 73:20 74:45 75:20 76:45 77:20 78:45 79:20 7A:45 7B:20 7C:45 7D:20 7E:45 7F:20 80:45 81:20 82:45 83:20 84:45 85:20 86:45 87:20 88:45 89:20 8A:45 8B:20 8C:45 8D:20 8E:45 8F:20 90:45 91:20 92:45 93:20 94:45 95:20 96:45 97:20 98:45 99:20 9A:45 9B:20 9C:45 9D:20 9E:45 9F:20 A0:45 A1:20 A2:45 A3:20 A4:45 A5:20 A6:45 A7:20 A8:45 A9:20 AA:45 AB:20 AC:45 AD:20 AE:45 AF:20 B0:45 B1:20 B2:45 B3:20 B4:45 B5:20 B6:45 B7:20 B8:45 B9:20 BA:45 BB:20 BC:45 BD:20 BE:45 BF:20 C0:45 C1:20 C2:45 C3:20 C4:45 C5:20 C6:45 C7:20 C8:45 C9:20 CA:00 CB:00 CC:00 CD:00 CE:00 CF:00 00:00
2017-11-08 18:25:31 RegL_09. 01:00 02:00 03:00 04:00 05:00 06:00 07:00 08:00 09:00 0A:00 0B:00 0C:00 0D:00 0E:00 0F:00 10:00 11:00 12:00 13:00 14:45 15:20 16:45 17:20 18:45 19:20 1A:45 1B:20 1C:45 1D:20 1E:45 1F:20 20:45 21:20 22:45 23:20 24:45 25:20 26:45 27:20 28:45 29:20 2A:45 2B:20 2C:45 2D:20 2E:45 2F:20 30:45 31:20 32:45 33:20 34:45 35:20 36:45 37:20 38:45 39:20 3A:45 3B:20 3C:45 3D:20 3E:45 3F:20 40:45 41:20 42:45 43:20 44:45 45:20 46:45 47:20 48:45 49:20 4A:45 4B:20 4C:45 4D:20 4E:45 4F:20 50:45 51:20 52:45 53:20 54:45 55:20 56:45 57:20 58:45 59:20 5A:45 5B:20 5C:45 5D:20 5E:45 5F:20 60:45 61:20 62:45 63:20 64:45 65:20 66:45 67:20 68:45 69:20 6A:45 6B:20 6C:45 6D:20 6E:45 6F:20 70:45 71:20 72:45 73:20 74:45 75:20 76:45 77:20 78:45 79:20 7A:45 7B:20 7C:45 7D:20 7E:45 7F:20 80:45 81:20 82:45 83:20 84:45 85:20 86:45 87:20 88:45 89:20 8A:45 8B:20 8C:45 8D:20 8E:45 8F:20 90:45 91:20 92:45 93:20 94:45 95:20 96:45 97:20 98:45 99:20 9A:45 9B:20 9C:45 9D:20 9E:45 9F:20 A0:45 A1:20 A2:45 A3:20 A4:45 A5:20 A6:45 A7:20 A8:45 A9:20 AA:45 AB:20 AC:45 AD:20 AE:45 AF:20 B0:45 B1:20 B2:45 B3:20 B4:45 B5:20 B6:45 B7:20 B8:45 B9:20 BA:45 BB:20 BC:45 BD:20 BE:45 BF:20 C0:45 C1:20 C2:45 C3:20 C4:45 C5:20 C6:45 C7:20 C8:45 C9:20 CA:00 CB:00 CC:00 CD:00 CE:00 CF:00 00:00
2015-11-04 19:15:06 battery ok
2018-03-30 20:06:23 boostTime -
2018-03-30 20:06:23 commReporting off
2018-03-30 20:06:23 controlMode manual
2018-03-30 20:08:38 desired-temp 21.0
2018-03-30 20:08:38 humidity 55
2018-03-30 20:08:38 measured-temp 22.9
2018-03-30 10:38:20 recentStateType ack
2018-03-30 20:08:38 state T: 22.9 desired: 21.0
2018-03-30 20:06:23 winOpenReporting off
helper:
regLst ,1,7,8,9
expert:
def 1
det 1
raw 1
tpl 0
role:
chn 1
shRegR:
07 00
shadowReg:
tmpl:
Attributes:
event-min-interval .*:600
event-on-change-reading .*
model HM-TC-IT-WM-W-EU
peerIDs 00000000,
BaZi_Heizkreis, 'battery: ok' ignored, has batteryLevel reading
batteryLevel Strang
Log 3, "batteryLevel Strang";
Zitatbeim HM-LC-SW1-BA-PCB leider noch keine Änderung.Fehler gefunden. Bisher bin ich davon ausgegangen, dass man damit anfängt, das alle Device mit battery ok starten und nicht auch mit battery low beim ersten Anlegen. Jetzt dürfte er aber beim neuen Event angelegt werden. Neue Version gerade eingespielt.
#########################################################################
# Helper for readingsGroup BatteryStatus:
# reads the last battery change from dummy and
# calculates the battery life time since last change and
# stores it as reading in corresponding dummy device
sub my_CalculateBatteryLife($)
{
my ($Device) = @_;
my $ActualLifeTimes = ReadingsVal($myDummyBatteryLifeTimes, $Device, "");
my $LastChange = ReadingsAge($myDummyLastBatteryChange, $Device, 0);
my $WeeksSinceLastChange = $LastChange % 604800;
$WeeksSinceLastChange = ($LastChange - $WeeksSinceLastChange) / 604800;
if($WeeksSinceLastChange > 0)
{
# appending actual calculated life time to last life times of device in dummy
$ActualLifeTimes .= " $WeeksSinceLastChange";
fhem("setreading $myDummyBatteryLifeTimes $Device $ActualLifeTimes");
}
Log3(undef, 3, "my_CalculateBatteryLife Device: $Device LastChange: $LastChange WeeksSinceLastChange: $WeeksSinceLastChange");
}
Internals:
CFGFN
NAME dmBatteryLifeTimes
NR 113933
STATE ???
TYPE dummy
READINGS:
2018-04-02 10:47:12 Wandthermostat_WoZi 50 50
Attributes:
Internals:
CFGFN
DEF <Gerät>,<>,<Haltbarkeit> NAME=dmBatteryLifeTimes:.*
NAME rgBatteryLifeTimes
NR 114074
NTFY_ORDER 50-rgBatteryLifeTimes
STATE Initialized
TYPE readingsGroup
mayBeVisible 1
CONTENT:
dmBatteryLifeTimes 1
CONTENT2:
DEVICES:
ARRAY(0x3a462e0)
ARRAY(0x5d4bbb8)
fhem:
lastDefChange 16
last_update 1522661070.87141
helper:
DEF
mapping $READING
positions:
dmBatteryLifeTimes.Wandthermostat_WoZi 2:1
values:
formated:
undef
ARRAY(0x3a3a9a8)
orig:
undef
ARRAY(0x54dafd0)
prefixsuffix:
undef
ARRAY(0x3acfd38)
Attributes:
alias Batteriehaltbarkeiten
mapping $READING
nolinks 1
notime 1
room Overview,Overview Battery
sortby 10
Zitat von: Amenophis86 am 29 April 2018, 07:37:16
Hallo fini,
1. Es ist "noch" kein Modul, sondern nur verschieden Codeteile
2. Welche hast Version du genommen hast, also welchen Zweig vom Github?
3. Hast du die Start Funktion ausgeführt? (Gehe ich jetzt mal von aus, weil die Dummys vorhanden sind)
4. Steht etwas im Log?
Zitat von: Amenophis86 am 29 April 2018, 09:56:37
Die ??? bei den Dummys ist normal und bleibt so.
Mit Hue habe ich noch nicht gearbeitet. Da bitte ein List und eine RAW Defintion hier in Codetags posten. Muss ich mir ansehen. Gleiches für das Homematic Gerät, welches nicht funktioniert.
Internals:
DEF sensor 8 IODev=hueBridge1
ID S8
INTERVAL
IODev hueBridge1
NAME hue_bewegungsmelder1
NR 65
STATE Initialized
TYPE HUEDevice
lastupdated 2018-04-29 09:41:40
manufacturername Philips
modelid SML001
name K�che Sensor
on 1
reachable 1
sensitivity 1
swversion 6.1.0.18912
type ZLLPresence
uniqueid 00:17:88:01:02:01:9b:a8-02-0406
READINGS:
2018-04-29 09:41:40 battery 100
2018-04-29 09:41:40 reachable 1
2018-04-29 09:41:40 state nomotion
helper:
devtype S
update_timeout 1
setList:
Attributes:
IODev hueBridge1
room HUEDevice
defmod hue_bewegungsmelder1 HUEDevice sensor 8 IODev=hueBridge1
attr hue_bewegungsmelder1 IODev hueBridge1
attr hue_bewegungsmelder1 room HUEDevice
setstate hue_bewegungsmelder1 2018-04-29 09:41:40 .lastupdated 2018-04-29 09:41:40
setstate hue_bewegungsmelder1 2018-04-29 09:41:40 battery 100
setstate hue_bewegungsmelder1 2018-04-29 09:41:40 reachable 1
setstate hue_bewegungsmelder1 2018-04-29 09:41:40 state nomotion
Internals:
DEF NEQ0416601
IODev d_ccu
NAME k_Thermostat
NR 33
STATE 20.0
TYPE HMCCUDEV
ccuaddr NEQ0416601
ccudevstate active
ccuif BidCos-RF
ccuname Heizung Kueche
ccutype HM-CC-RT-DN
channels 7
firmware 1.4
statevals devstate
READINGS:
2018-04-29 10:07:39 4.ACTUAL_TEMPERATURE 20.5
2018-04-29 10:07:39 4.BATTERY_STATE 2.7
2018-04-29 10:07:39 4.CONTROL_MODE AUTO
2018-04-29 10:07:39 4.PARTY_TEMPERATURE 5.0
2018-04-29 10:07:39 4.SET_TEMPERATURE 20.0
2018-04-29 10:07:39 4.VALVE_STATE 23
2018-04-29 10:07:39 control 20.0
2018-04-29 10:07:39 hmstate 20.0
2018-04-29 10:07:39 state 20.0
hmccu:
dp:
0.AES_KEY:
OVAL 0
VAL 0
0.CONFIG_PENDING:
OVAL false
VAL false
0.DEVICE_IN_BOOTLOADER:
OVAL false
VAL false
0.INHIBIT:
OVAL false
VAL false
0.LOWBAT:
OVAL false
VAL false
0.RSSI_DEVICE:
OVAL 1
VAL 1
0.RSSI_PEER:
OVAL 211
VAL 211
0.STICKY_UNREACH:
OVAL false
VAL false
0.UNREACH:
OVAL false
VAL false
0.UPDATE_PENDING:
OVAL false
VAL false
4.ACTUAL_TEMPERATURE:
OSVAL 20.6
OVAL 20.600000
SVAL 20.5
VAL 20.500000
4.BATTERY_STATE:
OSVAL 2.7
OVAL 2.700000
SVAL 2.7
VAL 2.700000
4.BOOST_STATE:
OVAL 0
VAL 0
4.CONTROL_MODE:
OSVAL AUTO
OVAL 0
SVAL AUTO
VAL 0
4.FAULT_REPORTING:
OVAL 0
VAL 0
4.PARTY_START_DAY:
OVAL 1
VAL 1
4.PARTY_START_MONTH:
OVAL 1
VAL 1
4.PARTY_START_TIME:
OVAL 0
VAL 0
4.PARTY_START_YEAR:
OVAL 0
VAL 0
4.PARTY_STOP_DAY:
OVAL 1
VAL 1
4.PARTY_STOP_MONTH:
OVAL 1
VAL 1
4.PARTY_STOP_TIME:
OVAL 0
VAL 0
4.PARTY_STOP_YEAR:
OVAL 0
VAL 0
4.PARTY_TEMPERATURE:
OSVAL 5.0
OVAL 5.000000
SVAL 5.0
VAL 5.000000
4.SET_TEMPERATURE:
OSVAL 20.0
OVAL 20.000000
SVAL 20.0
VAL 20.000000
4.VALVE_STATE:
OSVAL 23
OVAL 23
SVAL 23
VAL 23
Attributes:
IODev d_ccu
ccureadingfilter (TEMPERATURE|VALVE_STATE|CONTROL|BATTERY_STATE)
cmdIcon Auto:sani_heating_automatic Manu:sani_heating_manual Boost:sani_heating_boost on:general_an off:general_aus
controldatapoint 4.SET_TEMPERATURE
eventMap /datapoint 4.MANU_MODE 20.0:Manu/datapoint 4.AUTO_MODE 1:Auto/datapoint 4.BOOST_MODE 1:Boost/datapoint 4.MANU_MODE 4.5:off/datapoint 4.MANU_MODE 30.5:on/
hmstatevals FAULT_REPORTING!1:valve_tight,2:range_too_large,3:range_too_small,4:communication_error,5:other_error,6:battery_low,7:valve_error_pos
room Homematic
statedatapoint 4.SET_TEMPERATURE
stripnumber 1
substexcl control
substitute CONTROL_MODE!0:AUTO,1:MANU,2:PARTY,3:BOOST;SET_TEMPERATURE!#0-4.5:off,#30.5-40:on;FAULT_REPORTING!0:no,1:valve_tight,2:range_too_large,3:range_too_small,4:communication_error,5:other_error,6:battery_low,7:valve:error_pos
verbose 1
webCmd control:Auto:Manu:Boost:on:off
widgetOverride control:slider,4.5,0.5,30.5,1
defmod k_Thermostat HMCCUDEV NEQ0416601
attr k_Thermostat IODev d_ccu
attr k_Thermostat ccureadingfilter (TEMPERATURE|VALVE_STATE|CONTROL|BATTERY_STATE)
attr k_Thermostat cmdIcon Auto:sani_heating_automatic Manu:sani_heating_manual Boost:sani_heating_boost on:general_an off:general_aus
attr k_Thermostat controldatapoint 4.SET_TEMPERATURE
attr k_Thermostat eventMap /datapoint 4.MANU_MODE 20.0:Manu/datapoint 4.AUTO_MODE 1:Auto/datapoint 4.BOOST_MODE 1:Boost/datapoint 4.MANU_MODE 4.5:off/datapoint 4.MANU_MODE 30.5:on/
attr k_Thermostat hmstatevals FAULT_REPORTING!1:valve_tight,2:range_too_large,3:range_too_small,4:communication_error,5:other_error,6:battery_low,7:valve_error_pos
attr k_Thermostat room Homematic
attr k_Thermostat statedatapoint 4.SET_TEMPERATURE
attr k_Thermostat stripnumber 1
attr k_Thermostat substexcl control
attr k_Thermostat substitute CONTROL_MODE!0:AUTO,1:MANU,2:PARTY,3:BOOST;;SET_TEMPERATURE!#0-4.5:off,#30.5-40:on;;FAULT_REPORTING!0:no,1:valve_tight,2:range_too_large,3:range_too_small,4:communication_error,5:other_error,6:battery_low,7:valve:error_pos
attr k_Thermostat verbose 1
attr k_Thermostat webCmd control:Auto:Manu:Boost:on:off
attr k_Thermostat widgetOverride control:slider,4.5,0.5,30.5,1
setstate k_Thermostat 20.0
setstate k_Thermostat 2018-04-29 10:10:40 4.ACTUAL_TEMPERATURE 20.5
setstate k_Thermostat 2018-04-29 10:10:40 4.BATTERY_STATE 2.7
setstate k_Thermostat 2018-04-29 10:10:40 4.CONTROL_MODE AUTO
setstate k_Thermostat 2018-04-29 10:10:40 4.PARTY_TEMPERATURE 5.0
setstate k_Thermostat 2018-04-29 10:10:40 4.SET_TEMPERATURE 20.0
setstate k_Thermostat 2018-04-29 10:10:40 4.VALVE_STATE 23
setstate k_Thermostat 2018-04-29 10:10:40 control 20.0
setstate k_Thermostat 2018-04-29 10:10:40 hmstate 20.0
setstate k_Thermostat 2018-04-29 10:10:40 state 20.0
4.BATTERY_STATE 2.7
??
Zitat von: Amenophis86 am 29 April 2018, 11:50:10
Was mich wundert ist das Homematic Thermostat. Ist das ein normale HM-CC-RT-DN?? Das Reading sieht ganz anders aus als sonst. Weiterhin die Frage mit der 4 im Reading, ist das immer so?Code Auswählen4.BATTERY_STATE 2.7
??
Internals:
DEF MEQ1842790
IODev d_ccu
NAME w_Wandthermostat
NR 32
STATE 20.0
TYPE HMCCUDEV
ccuaddr MEQ1842790
ccudevstate active
ccuif BidCos-RF
ccuname Wandthermostat
ccutype HM-TC-IT-WM-W-EU
channels 6
firmware 1.3
statevals devstate
READINGS:
2018-04-29 12:41:11 1.HUMIDITY 52
2018-04-29 12:41:11 1.TEMPERATURE 20.0
2018-04-29 12:14:20 2.BATTERY_STATE 2.7
2018-04-29 12:43:41 2.SET_TEMPERATURE 20.0
2018-04-29 12:14:20 2.WINDOW_OPEN_REPORTING closed
2018-04-29 12:43:41 control 20.0
2018-04-29 12:43:41 hmstate 20.0
2018-04-29 12:43:41 state 20.0
hmccu:
dp:
0.AES_KEY:
OVAL 0
VAL 0
0.CONFIG_PENDING:
OVAL false
VAL false
0.DEVICE_IN_BOOTLOADER:
OVAL false
VAL false
0.INHIBIT:
OVAL false
VAL false
0.LOWBAT:
OVAL false
VAL false
0.RSSI_DEVICE:
OVAL 1
VAL 1
0.RSSI_PEER:
OVAL 202
VAL 202
0.STICKY_UNREACH:
OVAL false
VAL false
0.UNREACH:
OVAL false
VAL false
0.UPDATE_PENDING:
OVAL false
VAL false
1.HUMIDITY:
OSVAL 52
OVAL 52
SVAL 52
VAL 52
1.TEMPERATURE:
OSVAL 20.0
OVAL 20.000000
SVAL 20.0
VAL 20.000000
2.ACTUAL_HUMIDITY:
OVAL 52.000000
VAL 51.000000
2.ACTUAL_TEMPERATURE:
OVAL 20.000000
VAL 20.000000
2.BATTERY_STATE:
OSVAL 2.7
OVAL 2.700000
SVAL 2.7
VAL 2.700000
2.BOOST_STATE:
OVAL 0
VAL 0
2.COMMUNICATION_REPORTING:
OVAL 0
VAL 0
2.CONTROL_MODE:
OVAL 0
VAL 0
2.LOWBAT_REPORTING:
OVAL 0
VAL 0
2.PARTY_START_DAY:
OVAL 1
VAL 1
2.PARTY_START_MONTH:
OVAL 1
VAL 1
2.PARTY_START_TIME:
OVAL 0
VAL 0
2.PARTY_START_YEAR:
OVAL 0
VAL 0
2.PARTY_STOP_DAY:
OVAL 1
VAL 1
2.PARTY_STOP_MONTH:
OVAL 1
VAL 1
2.PARTY_STOP_TIME:
OVAL 0
VAL 0
2.PARTY_STOP_YEAR:
OVAL 0
VAL 0
2.PARTY_TEMPERATURE:
OVAL 5.000000
VAL 5.000000
2.SET_TEMPERATURE:
OSVAL 20.0
OVAL 20.000000
SVAL 20.0
VAL 20.000000
2.WINDOW_OPEN_REPORTING:
OSVAL closed
OVAL 0
SVAL closed
VAL 0
7.DECISION_VALUE:
OVAL 0
VAL 0
Attributes:
IODev d_ccu
ccureadingfilter (^HUMIDITY|^TEMPERATURE|^SET_TEMPERATURE|^WINDOW_OPEN|BATTERY_STATE)
cmdIcon Auto:sani_heating_automatic Manu:sani_heating_manual Boost:sani_heating_boost on:general_an off:general_aus
controldatapoint 2.SET_TEMPERATURE
eventMap /datapoint 2.MANU_MODE 20.0:Manu/datapoint 2.AUTO_MODE 1:Auto/datapoint 2.BOOST_MODE 1:Boost/datapoint 2.MANU_MODE 4.5:off/datapoint 2.MANU_MODE 30.5:on/
room Homematic
statedatapoint 2.SET_TEMPERATURE
stripnumber 1
substexcl control
substitute CONTROL_MODE!0:AUTO,1:MANU,2:PARTY,3:BOOST;WINDOW_OPEN_REPORTING!(true|1):open,(false|0):closed;SET_TEMPERATURE!#0-3.5:off,#30.5-40:on
verbose 1
webCmd control:Auto:Manu:Boost:on:off
widgetOverride control:slider,4.5,0.5,30.5,1
Zitat von: Amenophis86 am 29 April 2018, 13:17:44
Da steht aber jetzt zum Beispiel eine 2 im Reading vorne an. Vielleicht weiß jemand anders warum die Readings so anders aussehen, als sonst?
Zitat von: thunder1902 am 30 April 2018, 13:40:06
Was muss man am Code ändern, damit man nicht den Gerätenamen, sondern den Alias-Namen angezeigt bekommt? :-)
my $Alias = AttrVal($Device, "alias", "Kein Alias");
Zitat von: Amenophis86 am 04 Mai 2018, 22:14:50
Hat jemand Xiaomi Geräte mit battery oder batterLevel Readings und kann mal eine Raw Definition davon posten zum Testen? Danke.
defmod XiaomiHumTemp_Buero XiaomiSmartHome_Device 158d0001c2c887 sensor_ht XiaomiGateway
attr XiaomiHumTemp_Buero IODev XiaomiGateway
attr XiaomiHumTemp_Buero room MiSmartHome
attr XiaomiHumTemp_Buero stateFormat temperature °C, humidity %
setstate XiaomiHumTemp_Buero 23.3 °C, 51.87 %
setstate XiaomiHumTemp_Buero 2018-05-04 23:12:37 battery ok
setstate XiaomiHumTemp_Buero 2018-05-04 23:12:37 battery_level 3
setstate XiaomiHumTemp_Buero 2018-05-04 23:12:37 dewpoint 12.8
setstate XiaomiHumTemp_Buero 2018-05-04 23:12:37 heartbeat 158d0001c2c887
setstate XiaomiHumTemp_Buero 2018-05-04 23:12:37 humidity 51.87
setstate XiaomiHumTemp_Buero 2018-05-04 23:12:37 temperature 23.3
{ DebianMail('xx.yyy@t-online.de', 'Batteriewarnung', $NAME.': '.$EVENT)}
BaZi_Heizkreis, 'battery: ok' ignored, has batteryLevel reading
################################
# Here you choos your message device and how to send
# comment the device you do not want to use
#
# TelegramBot
# my $msg = "set TelegramBot message \@\@User ";
#
# msg-command
# my $msg = "msg \@User title='Battery Check' ";
#
# Pushover
my $msg = "msg device=\@rr_Tom title='Battery Check' ";
# msg-command
# my $msg = "msg \@User title='Battery Check' ";
2018.10.21 07:59:21 3: HKT_Buegelzimmer, 'battery: ok' ignored, has batteryLevel reading
2018.10.21 07:59:49 3: HKT_WC, 'battery: ok' ignored, has batteryLevel reading
2018.10.21 07:59:53 3: HKT_Schlafzimmer, 'battery: ok' ignored, has batteryLevel reading
2018.10.21 07:59:57 3: HKT_Pia, 'battery: ok' ignored, has batteryLevel reading
2018.10.21 08:00:01 3: HKT_am_Ofen, 'battery: ok' ignored, has batteryLevel reading
2018.10.21 08:00:10 3: HKT_Tuer, 'battery: ok' ignored, has batteryLevel reading
2018.10.21 08:00:27 3: HKT_Bad, 'battery: ok' ignored, has batteryLevel reading
2018.10.21 08:01:25 3: HKT_am_Computer, 'battery: ok' ignored, has batteryLevel reading
2018.10.21 08:01:40 3: HKT_Buegelzimmer, 'battery: ok' ignored, has batteryLevel reading
2018.10.21 08:02:03 3: HKT_Schlafzimmer, 'battery: ok' ignored, has batteryLevel reading
2018.10.21 08:02:04 3: HKT_WC, 'battery: ok' ignored, has batteryLevel reading
2018.10.21 08:02:18 3: HKT_am_Ofen, 'battery: ok' ignored, has batteryLevel reading
2018.10.21 08:02:18 3: HKT_Tuer, 'battery: ok' ignored, has batteryLevel reading
2018.10.21 08:02:35 3: FK_Terassentuer, Batt ok
2018.10.21 08:02:50 3: HKT_Bad, 'battery: ok' ignored, has batteryLevel reading
2018.10.21 08:02:58 3: HKT_Pia, 'battery: ok' ignored, has batteryLevel reading
2018.10.21 08:03:28 3: Rauchm_Flur, Batt ok
2018.10.21 08:03:45 3: HKT_Buegelzimmer, 'battery: ok' ignored, has batteryLevel reading
defmod XiaomiSensor2_1 HUEDevice sensor 5 IODev=deCONZ
attr XiaomiSensor2_1 IODev deCONZ
attr XiaomiSensor2_1 room Zigbee
attr XiaomiSensor2_1 stateFormat {sprintf("Temperatur: %.1f Grad / Feuchte: %.1f Prozent / Luftdruck: %.1f hPa / Batterie: %d %%",ReadingsVal($name,"temperature",0),ReadingsVal($name,"humidity",0),ReadingsVal($name,"pressure",0),ReadingsVal($name,"battery",0))}
attr XiaomiSensor2_1 userReadings humidity {ReadingsVal("XiaomiSensor2_2","humidity","");;},\
pressure {ReadingsVal("XiaomiSensor2_3","pressure","");;}
setstate XiaomiSensor2_1 2018-11-12 10:53:41 .lastupdated 2018-11-12 10:53:41
setstate XiaomiSensor2_1 2018-11-12 10:53:41 battery 95
setstate XiaomiSensor2_1 2018-11-12 10:53:41 humidity 53.24
setstate XiaomiSensor2_1 2018-11-12 10:53:41 pressure 1002
setstate XiaomiSensor2_1 2018-11-12 10:53:41 reachable 1
setstate XiaomiSensor2_1 2018-11-12 10:53:41 temperature 22.75
##############################################
# All other Devices with batteryLevel
##############################################
.
.
.
if($Loglevel >=1) {Log3(undef, 1,"$Device, unknown Event $Event");}
Zitat von: gloob am 12 November 2018, 11:35:04
Hallo,
Ich habe meine Xiaomi Sensoren über eine Hue Bridge eingebunden:Code Auswählendefmod XiaomiSensor2_1 HUEDevice sensor 5 IODev=deCONZ
attr XiaomiSensor2_1 IODev deCONZ
attr XiaomiSensor2_1 room Zigbee
attr XiaomiSensor2_1 stateFormat {sprintf("Temperatur: %.1f Grad / Feuchte: %.1f Prozent / Luftdruck: %.1f hPa / Batterie: %d %%",ReadingsVal($name,"temperature",0),ReadingsVal($name,"humidity",0),ReadingsVal($name,"pressure",0),ReadingsVal($name,"battery",0))}
attr XiaomiSensor2_1 userReadings humidity {ReadingsVal("XiaomiSensor2_2","humidity","");;},\
pressure {ReadingsVal("XiaomiSensor2_3","pressure","");;}
setstate XiaomiSensor2_1 2018-11-12 10:53:41 .lastupdated 2018-11-12 10:53:41
setstate XiaomiSensor2_1 2018-11-12 10:53:41 battery 95
setstate XiaomiSensor2_1 2018-11-12 10:53:41 humidity 53.24
setstate XiaomiSensor2_1 2018-11-12 10:53:41 pressure 1002
setstate XiaomiSensor2_1 2018-11-12 10:53:41 reachable 1
setstate XiaomiSensor2_1 2018-11-12 10:53:41 temperature 22.75
Gibt es eine Möglichkeit die Senoren auch mit in die Batterieüberwachung aufzunehmen? Leider gibt es ein battery reading welches direkt als Prozent Werte gesetzt wird.
Man läuft somit immer in den Zweig:Code Auswählen
##############################################
# All other Devices with batteryLevel
##############################################
.
.
.
if($Loglevel >=1) {Log3(undef, 1,"$Device, unknown Event $Event");}
Internals:
CFGFN
DEF sensor 9 IODev=Raspbee_1
FUUID 5c6800b9-f33f-9f3a-e63d-b58a53a621998bcf
ID S9
INTERVAL
IODev Raspbee_1
NAME GA.Bm_Motion
NR 735
STATE nomotion
TYPE HUEDevice
lastupdated 2019-02-20 18:56:44
lastupdated_local 2019-02-20 19:56:44
manufacturername LUMI
modelid lumi.sensor_motion.aq2
name Bewegungsmelder Garage
on 1
reachable 1
swversion 20170627
type ZHAPresence
uniqueid 00:15:8d:00:02:cb:47:43-01-0406
Helper:
DBLOG:
state:
DBLogging:
TIME 1550689004.86648
VALUE nomotion
READINGS:
2019-02-20 19:56:44 battery 95
2019-02-20 19:56:44 reachable true
2019-02-20 19:56:44 state nomotion
helper:
devtype S
reachable 0
update_timeout 1
setList:
Attributes:
IODev Raspbee_1
alias Bewegungsmelder Garage
group Bewegungsmelder
icon motion_detector@blue
room Garage
##############################################
# 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;
}
}
##############################################
# 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;
}
}
setreading GA.Bm_Motion battery 4
{((ReadingsAge("FS_Gwc","powerOn",1))- (TimeNow(),13,5))/24/3600}
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
$MinBatLevel = ReadingsNum($Device, "R-lowBatLimitRT", "0.0");
$MinBatLevel = 2.4
Zitat von: Benny33 am 09 Mai 2019, 12:29:57
Kann ich expert jetzt so stehen lassen? Denke schon.
Internals:
DEF WSDCGQ01LM 0x00158d000215933c BK_Sensor
FRIENDLYNAME BK_Sensor
FUUID 5c5de5e9-f33f-ed56-1602-add78fd2ca5d81e4
IODev mqtt
MODEL WSDCGQ01LM
NAME BK_Sensor
NOTIFYDEV WSDCGQ01LM 0x00158d000215933c BK_Sensor
NR 140
SID 0x00158d000215933c
STATE Temperatur: 30.5 °C | Luftfeuchtigkeit: 38 %
TYPE XiaomiMQTTDevice
Helper:
DBLOG:
humidity:
DBLogging:
TIME 1559476864.28189
VALUE 38
last_seen:
DBLogging:
TIME 1559476864.28189
VALUE 1559476864181
linkquality:
DBLogging:
TIME 1559476864.28189
VALUE 81
temperature:
DBLogging:
TIME 1559476864.21724
VALUE 30.5
READINGS:
2019-06-02 14:01:04 battery ok
2019-06-02 14:01:04 battery_level 100
2019-06-02 14:01:04 humidity 38
2019-06-02 14:01:04 last_seen 1559476864181
2019-06-02 14:01:04 linkquality 81
2019-06-02 14:01:04 temperature 30.5
2019-06-02 14:01:04 transmission-state incoming publish received
2019-06-02 14:01:04 voltage 3025
message_ids:
subscribe:
zigbee2mqtt/BK_Sensor
xiaomi/0x00158d000215933c/#
subscribeExpr:
^zigbee2mqtt\/BK_Sensor$
^xiaomi\/0x00158d000215933c.*$
subscribeQos:
xiaomi/0x00158d000215933c/# 0
zigbee2mqtt/BK_Sensor 0
Attributes:
DbLogExclude .*
DbLogInclude humidity,temperature,linkquality,battery_level,last_seen
IODev mqtt
alias Klima Balkon
event-on-change-reading humidity,temperature:0.2,linkquality,battery_level,last_seen
group KlimaXiaomi
homebridgeMapping history:size=1024 StatusLowBattery=BK_Sensor:battery,values=ok:BATTERY_LEVEL_NORMAL;/^.*/:BATTERY_LEVEL_LOW batteryVoltage=BK_Sensor:voltage,factor=1000,name=Voltage,format=FLOAT history:size=1024
mqttPublish temperature:topic={"EPSD/Temp/BK"} humidity:topic={"EPSD/Hum/BK"} temperature:retain=1 humidity:retain=1
room Balkon,Favoriten,Homebridge,ZigBee
stateFormat Temperatur: temperature °C | Luftfeuchtigkeit: humidity %
userattr EPSDAlias:textField-long EPSDDefaults:textField-long EPSDDisable:both,incoming,outgoing EPSDPublish:textField-long EPSDSubscribe:textField-long mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttPublish:textField-long mqttSubscribe:textField-long
Internals:
DEF 2BD7F1
FUUID 5c5de5ee-f33f-ed56-b73c-91731d343b5b22a6
IODev hmusb
NAME SZ_Fenster
NOTIFYDEV global
NR 574
NTFY_ORDER 50-SZ_Fenster
STATE closed
TYPE CUL_HM
chanNo 01
peerList SZ_Thermostat_WindowRec,
READINGS:
2019-06-02 05:09:10 Activity unknown
2018-09-02 15:42:41 D-firmware 2.4
2018-09-02 15:42:41 D-serialNr LEQ0566785
2019-05-30 12:55:37 battery ok
2019-05-30 12:55:37 contact closed (to vccu)
2019-06-02 05:09:12 peerList SZ_Thermostat_WindowRec,
2019-05-30 12:55:37 state closed
2019-05-30 12:55:37 trigger_cnt 24
helper:
HM_CMDNR 35
mId 0030
peerFriend peerAct,peerVirt
peerOpt 4:threeStateSensor
regLst 0,1,4p
rxType 20
expert:
def 1
det 0
raw 1
tpl 0
io:
newChn +2BD7F1,00,00,00
rxt 2
vccu vccu
p:
2BD7F1
00
00
00
prefIO:
hmusb
mRssi:
mNo
prt:
bErr 0
sProc 0
q:
qReqConf 00
qReqStat
role:
chn 1
dev 1
tmpl:
Attributes:
DbLogExclude .*
DbLogInclude state,battery,trigger_cnt
IODev hmusb
IOgrp vccu:hmusb
actCycle 028:00
actStatus unknown
alias Fenster Schlafzimmer
autoReadReg 5_readMissing
devStateIcon closed:fts_window_1w@green open:fts_window_1w_open@red tilted:fts_window_1w_tilt@yellow
expert 2_full
firmware 2.4
genericDeviceType ContactSensor
group HomematicFenstersensor
homebridgeMapping StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;/^.*/:BATTERY_LEVEL_LOW history:size=1024 ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED
model HM-SEC-RHS
mqttPublish state:topic={"EPSD/Con/SZ"} state:retain=1
peerIDs 00000000,2D30D803,
room Favoriten,HomeMatic,Homebridge,Schlafzimmer
serialNr LEQ0566785
subType threeStateSensor
##############################################
# XiaomiMQTT Devices
#############################################
elsif($BatteryType[0] eq "battery_level" && InternalVal($Device, "TYPE", "undef") eq "XiaomiMQTTDevice")
{
$ActBatLevel = ReadingsNum($Device, "battery_level", "0");
if($ActBatLevel > 75)
{
# set date/time for changed battery if it was low before (so probably a change happended)
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $BatteryStatus $Device 25");
# maybe already send a message! Easy possible with new signal states
}
else
{
# totally empty (below 5%)
fhem("setreading $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
}
}
##############################################
# XiaomiMQTT Devices
#############################################
elsif($BatteryType[0] eq "battery_level" && InternalVal($Device, "TYPE", "undef") eq "XiaomiMQTTDevice")
{
Log3(undef, 3, "Battery for XiaomiMQTTDevice");
$ActBatLevel = ReadingsNum($Device, "battery_level", "0");
if($ActBatLevel > 75)
Zitat von: MadMax-FHEM am 03 Juni 2019, 18:25:36Edit2: und es kommen nat. nur Werte bzw. werden "berechnet" und in den Dummy geschrieben, wenn auch Events mit battery_level kommen! Wie oft wird denn aktualisiert!? Wenn nicht, dann einfach mal zu Test: setreading BK_Sensor battery_level 99
Gruß, Joachim
##############################################
# MQTT2_DEVICE Devices
##############################################
elsif($BatteryType[0] eq "battery" && InternalVal($Device, "TYPE", "undef") eq "MQTT2_DEVICE")
{
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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $BatteryStatus $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 $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
}
}
Zitat von: Madstar2409 am 21 August 2019, 11:22:26
Leider ohne Erfolg. Hat jemand eine Idee?
Zitat von: Madstar2409 am 21 August 2019, 15:09:11
Danke für den Hinweis aber um ehrlich zu sein hilft mir das bei meinen Problem nicht weiter. Ich habe aber immerhin meinen Post formatieren können ;).
Log3(undef,3,"BatteryFunction Device: $Device BatteryType: $BatteryType[0]");
elsif($BatteryType[0] eq "battery" && InternalVal($Device, "TYPE", "undef") eq "MQTT2_DEVICE")
{
if(ReadingsVal($Device, "battery", "na") eq "low")
{
$ActBatLevel = 0;
}
else
{
$ActBatLevel = ReadingsNum($Device, "battery", "0");
}
Log3(undef,3,"BatteryFunction ActBatLevel: $ActBatLevel");
if($ActBatLevel > 75)
{
# set date/time for changed battery if it was low before (so probably a change happended)
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
Internals
CID zigbee_0x00158d000xxxxxx
DEF zigbee_0x00158d000xxxxxx
DEVICETOPIC eg_hwr_tuer
FUUID 5d5a5811-f33f-60b1-9d1d-0bb590bxxxxxxx
IODev MQTT2_Broker
LASTInputDev MQTT2_Broker
MQTT2_Broker_MSGCNT 70
MQTT2_Broker_TIME 2019-08-22 08:01:43
MSGCNT 70
NAME eg_hwr_tuer
NR 616
STATE close
TYPE MQTT2_DEVICE
Readings
associatedWith MQTT2_MQTT2Broker 2019-08-19 10:04:33
battery 100 2019-08-22 08:01:43
contact true 2019-08-22 08:01:43
linkquality 102 2019-08-22 08:01:43
voltage 3035 2019-08-22 08:01:43
#########################################################################
# 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 BatteryStatusFunction($$)
{
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 $TYPE = InternalVal($Device, "TYPE", "undef"); # MAX!
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";
###############################
# Here you can change the variables to fit your installation.
#
my $text_now = "Die Batterien von $Device müssen JETZT gewechselt werden!"; #Text for changing battery now
my $text_soon = "Die Batterien von $Device sollten bald gewechselt werden!"; #Text for changing battery soon
my $text_changed = "Batterie zuletzt gewechselt: "; #Text for last change
my $BatteryStatus = "BatterieStatus"; #Name of the Dummy for status
my $BatteryStatusBot = "BatterieStatusBot"; #Name of the Dummy for status of send messages
my $BatteryChanged = "BatterieWechsel"; #Name of the Dummy for battery changed information
################################
# Here you choos your message device and how to send
# comment the device you do not want to use
#
# TelegramBot
my $msg = "set MessageBOT message ";
#
# msg-command
# my $msg = "msg \@User title='Battery Check' ";
#
# Pushover
# my $msg = "set Pushover msg device=User title='Battery Check' ";
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" || $DeviceNameParts[0] eq "MAX")
{
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($BatteryStatusBot, $SignalDevice, "undef") eq "undef")
{
fhem("setreading $BatteryStatusBot $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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $BatteryChanged $Device $text_changed");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
# status is "ok" so we set to 100% (we don't know better)
fhem("setreading $BatteryStatus $Device 100");
}
else
{
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
# status is NOT "ok" ("low") so we set to 0% (we don't know better)
fhem("setreading $BatteryStatus $Device 0");
}
}
##############################################
# 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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $BatteryStatus $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 $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
}
}
##############################################
# HUE Devices
##############################################
elsif($BatteryType[0] eq "battery" && InternalVal($Device, "TYPE", "undef") eq "HUEDevice")
{
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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $BatteryStatus $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 $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $BatteryStatus $Device 25");
# maybe already send a message! Easy possible with new signal states
}
else
{
# totally empty (below 5%)
fhem("setreading $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
}
}
##############################################
# XiaomiMQTTDevice Devices
##############################################
elsif($BatteryType[0] eq "battery" && InternalVal($Device, "TYPE", "undef") eq "XiaomiMQTTDevice")
{
$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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $BatteryStatus $Device 25");
# maybe already send a message! Easy possible with new signal states
}
else
{
# totally empty (below 5%)
fhem("setreading $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
}
}
##############################################
# MQTT2_DEVICE Devices
##############################################
elsif($BatteryType[0] eq "battery" && InternalVal($Device, "TYPE", "undef") eq "MQTT2_DEVICE")
{
$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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $BatteryStatus $Device 25");
# maybe already send a message! Easy possible with new signal states
}
else
{
# totally empty (below 5%)
fhem("setreading $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
}
}
##############################################
# MAX! Devices
##############################################
elsif(($BatteryType[0] eq "battery") && ($TYPE eq "MAX"))
{
if(ReadingsVal($Device, "battery", "low") eq "ok")
{
# check if battery was low before -> possibly changed
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") eq "low")
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $BatteryChanged $Device $text_changed");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
# status is "ok" so we set to 100% (we don't know better)
fhem("setreading $BatteryStatus $Device 100");
}
else
{
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
# status is NOT "ok" ("low") so we set to 0% (we don't know better)
fhem("setreading $BatteryStatus $Device 0");
}
}
}
##################################################
# Helper for readingsGroup BatteryStatus:
# sets the icon and icon color depending on "calculated" percentage value
sub SetBatterieIcon($$)
{
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;
}
#####################################################
# Start script once and delet after
sub BatteryStart()
{
#Define Dummys for script
my $BatteryStatus = "BatterieStatus"; #Name of the Dummy for status
my $BatteryStatusBot = "BatterieStatusBot"; #Name of the Dummy for status of send messages
my $BatteryChanged = "BatterieWechsel"; #Name of the Dummy for battery changed information
my $ReadingsGroup = "rgBatteryStatus"; #Name of the ReadingsGroup
my $Room = "Batterystatus"; #room for the dummys
my $Notify = "NO.BatterieNotify"; #Name of the Notify for sending battery information
fhem("setdefaultattr room $Room; define $BatteryStatus dummy; define $BatteryStatusBot dummy; define $BatteryChanged dummy;
define $ReadingsGroup readingsGroup NAME=BatterieStatus:.*; attr $ReadingsGroup valueIcon {SetBatterieIcon(\$READING, \$VALUE)};
attr $ReadingsGroup mapping \$READING; setdefaultattr;");
#Set Readings for device with reading battery
my @bat_b = devspec2array("battery=.*");
for(my $x=0;$x<@bat_b;$x++)
{
my $stat_b = ReadingsVal($bat_b[$x],"battery","undef");
if($stat_b ne "undef")
{
BatteryStatusFunction($bat_b[$x],"battery: $stat_b");
}
}
#Set Readings for device with reading batteryLevel
my @bat_l = devspec2array("batteryLevel=.*");
for(my $x=0;$x<@bat_l;$x++)
{
my $stat_l = ReadingsVal($bat_l[$x],"batteryLevel","undef");
if($stat_l ne "undef")
{
BatteryStatusFunction($bat_l[$x],"batteryLevel: $stat_l");
}
}
fhem("define $Notify notify .*:battery.* {BatteryStatusFunction(\$NAME, \$EVENT)}; attr $Notify room $Room;")
}
# my $msg = "set Pushover msg device=User title='Battery Check' ";
Log3(undef, 1, "my_StoreBatteryStatus Device: $Device Event: $Event Model: $Model");
# ignoring Devices that were just created by autocreate
2019.08.22 11:18:17 3: my_StoreBatteryStatus Device: Temp_Sensor_Kueche Event: battery: 91 Model: L_07_TempHumHpa_TempSensor Type: MQTT2_DEVICE
2019.08.22 11:18:17 3: my_StoreBatteryStatus Device: Temp_Sensor_SZ Event: battery: 86 Model: L_07_TempHumHpa_TempSensor Type: MQTT2_DEVICE
2019.08.22 11:18:18 3: my_StoreBatteryStatus Device: eg_flur_haustuer Event: battery: 100 Model: L_06_zigbee2mqtt_ContactSensor Type: MQTT2_DEVICE
2019.08.22 11:18:18 3: my_StoreBatteryStatus Device: eg_hwr_fenster Event: battery: 100 Model: L_06_zigbee2mqtt_ContactSensor Type: MQTT2_DEVICE
2019.08.22 11:18:18 3: my_StoreBatteryStatus Device: eg_hwr_tuer Event: battery: 100 Model: L_06_zigbee2mqtt_ContactSensor Type: MQTT2_DEVICE
2019.08.22 11:18:18 3: my_StoreBatteryStatus Device: eg_kueche_fenster Event: battery: 86 Model: L_06_zigbee2mqtt_ContactSensor Type: MQTT2_DEVICE
2019.08.22 11:18:18 3: my_StoreBatteryStatus Device: eg_wz_doppelfenst_li Event: battery: 100 Model: undef Type: MQTT2_DEVICE
2019.08.22 11:18:18 3: my_StoreBatteryStatus Device: eg_wz_doppelfenst_re Event: battery: 100 Model: L_06_zigbee2mqtt_ContactSensor Type: MQTT2_DEVICE
2019.08.22 11:18:18 3: my_StoreBatteryStatus Device: eg_wz_einzelfenster Event: battery: 100 Model: L_06_zigbee2mqtt_ContactSensor Type: MQTT2_DEVICE
2019.08.22 11:18:18 3: my_StoreBatteryStatus Device: eg_wz_terrasse_li Event: battery: 100 Model: L_06_zigbee2mqtt_ContactSensor Type: MQTT2_DEVICE
2019.08.22 11:18:18 3: my_StoreBatteryStatus Device: og.dachboden.lucke Event: battery: ok Model: undef Type: MAX
2019.08.22 11:18:18 3: my_StoreBatteryStatus Device: Pflanzensensor1 Event: batteryLevel: 95 Model: undef Type: XiaomiFlowerSens
2019.08.22 11:18:18 3: my_StoreBatteryStatus Device: Pflanzensensor2 Event: batteryLevel: 100 Model: undef Type: XiaomiFlowerSens
2019.08.22 11:18:18 3: my_StoreBatteryStatus Device: eg_wz_doppelfenst_li Event: battery: 100 Model: undef Type: MQTT2_DEVICE
#########################################################################
# 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 BatteryStatusFunction($$)
{
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 $TYPE = InternalVal($Device, "TYPE", "undef"); # MAX!
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";
###############################
# Here you can change the variables to fit your installation.
#
my $text_now = "Die Batterien von $Device müssen JETZT gewechselt werden!"; #Text for changing battery now
my $text_soon = "Die Batterien von $Device sollten bald gewechselt werden!"; #Text for changing battery soon
my $text_changed = "Batterie zuletzt gewechselt: "; #Text for last change
my $BatteryStatus = "BatterieStatus"; #Name of the Dummy for status
my $BatteryStatusBot = "BatterieStatusBot"; #Name of the Dummy for status of send messages
my $BatteryChanged = "BatterieWechsel"; #Name of the Dummy for battery changed information
################################
# Here you choos your message device and how to send
# comment the device you do not want to use
#
# TelegramBot
my $msg = "set MessageBOT message ";
#
# msg-command
# my $msg = "msg \@User title='Battery Check' ";
#
# Pushover
# my $msg = "set Pushover msg device=User title='Battery Check' ";
#Log3(undef,3,"my_StoreBatteryStatus Device: $Device BatteryType: $BatteryType[0]");
Log3(undef, 3, "my_StoreBatteryStatus Device: $Device Event: $Event Model: $Model Type: $TYPE");
# ignoring Devices that were just created by autocreate
if($DeviceNameParts[0] eq "HM" || $DeviceNameParts[0] eq "ZWave" || $DeviceNameParts[0] eq "MAX")
{
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($BatteryStatusBot, $SignalDevice, "undef") eq "undef")
{
fhem("setreading $BatteryStatusBot $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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $BatteryChanged $Device $text_changed");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
# status is "ok" so we set to 100% (we don't know better)
fhem("setreading $BatteryStatus $Device 100");
}
else
{
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
# status is NOT "ok" ("low") so we set to 0% (we don't know better)
fhem("setreading $BatteryStatus $Device 0");
}
}
##############################################
# 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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $BatteryStatus $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 $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
}
}
##############################################
# HUE Devices
##############################################
elsif($BatteryType[0] eq "battery" && InternalVal($Device, "TYPE", "undef") eq "HUEDevice")
{
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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $BatteryStatus $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 $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $BatteryStatus $Device 25");
# maybe already send a message! Easy possible with new signal states
}
else
{
# totally empty (below 5%)
fhem("setreading $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
}
}
##############################################
# XiaomiMQTTDevice Devices
##############################################
elsif($BatteryType[0] eq "battery" && InternalVal($Device, "TYPE", "undef") eq "XiaomiMQTTDevice")
{
$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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $BatteryStatus $Device 25");
# maybe already send a message! Easy possible with new signal states
}
else
{
# totally empty (below 5%)
fhem("setreading $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
}
}
##############################################
# MQTT2_DEVICE Devices
##############################################
elsif($BatteryType[0] eq "battery" && InternalVal($Device, "TYPE", "undef") eq "MQTT2_DEVICE")
{
$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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $BatteryStatus $Device 25");
# maybe already send a message! Easy possible with new signal states
}
else
{
# totally empty (below 5%)
fhem("setreading $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
}
}
##############################################
# MAX! Devices
##############################################
elsif(($BatteryType[0] eq "battery") && ($TYPE eq "MAX"))
{
if(ReadingsVal($Device, "battery", "low") eq "ok")
{
# check if battery was low before -> possibly changed
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") eq "low")
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $BatteryChanged $Device $text_changed");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
# status is "ok" so we set to 100% (we don't know better)
fhem("setreading $BatteryStatus $Device 100");
}
else
{
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
# status is NOT "ok" ("low") so we set to 0% (we don't know better)
fhem("setreading $BatteryStatus $Device 0");
}
}
}
##################################################
# Helper for readingsGroup BatteryStatus:
# sets the icon and icon color depending on "calculated" percentage value
sub SetBatterieIcon($$)
{
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;
}
#####################################################
# Start script once and delet after
sub BatteryStart()
{
#Define Dummys for script
my $BatteryStatus = "BatterieStatus"; #Name of the Dummy for status
my $BatteryStatusBot = "BatterieStatusBot"; #Name of the Dummy for status of send messages
my $BatteryChanged = "BatterieWechsel"; #Name of the Dummy for battery changed information
my $ReadingsGroup = "rgBatteryStatus"; #Name of the ReadingsGroup
my $Room = "Batterystatus"; #room for the dummys
my $Notify = "NO.BatterieNotify"; #Name of the Notify for sending battery information
fhem("setdefaultattr room $Room; define $BatteryStatus dummy; define $BatteryStatusBot dummy; define $BatteryChanged dummy;
define $ReadingsGroup readingsGroup NAME=BatterieStatus:.*; attr $ReadingsGroup valueIcon {SetBatterieIcon(\$READING, \$VALUE)};
attr $ReadingsGroup mapping \$READING; setdefaultattr;");
#Set Readings for device with reading battery
my @bat_b = devspec2array("battery=.*");
for(my $x=0;$x<@bat_b;$x++)
{
my $stat_b = ReadingsVal($bat_b[$x],"battery","undef");
if($stat_b ne "undef")
{
BatteryStatusFunction($bat_b[$x],"battery: $stat_b");
}
}
#Set Readings for device with reading batteryLevel
my @bat_l = devspec2array("batteryLevel=.*");
for(my $x=0;$x<@bat_l;$x++)
{
my $stat_l = ReadingsVal($bat_l[$x],"batteryLevel","undef");
if($stat_l ne "undef")
{
BatteryStatusFunction($bat_l[$x],"batteryLevel: $stat_l");
}
}
fhem("define $Notify notify .*:battery.* {BatteryStatusFunction(\$NAME, \$EVENT)}; attr $Notify room $Room;")
}
if($BatteryType[0] eq "battery" && $Model ne "HM-TC-IT-WM-W-EU" && $Model ne "HM-CC-RT-DN" && $Model ne "undef")
2019-10-31_06:52:12 zw_pir battery: 20 %
2019-10-31_06:52:12 zw_pir batteryPercent: 20
2019.10.31 06:52:12.065 1: PERL WARNING: Use of uninitialized value $v in substitution (s///) at fhem.pl line 1131.
2019.10.31 06:52:12.065 3: eval: my $EVTPART1='20';my $NAME='zw_pir';my $EVENT='battery: 20 %';my $TYPE='ZWave';my $SELF='NO.BatterieNotify';my $EVTPART0='battery:';my $EVTPART2='%';{BatteryStatusFunction($NAME, $EVENT)}
2019.10.31 06:52:12.065 1: PERL WARNING: Use of uninitialized value $v in concatenation (.) or string at fhem.pl line 1132.
2019.10.31 06:52:12.065 3: eval: my $EVTPART1='20';my $NAME='zw_pir';my $EVENT='battery: 20 %';my $TYPE='ZWave';my $SELF='NO.BatterieNotify';my $EVTPART0='battery:';my $EVTPART2='%';{BatteryStatusFunction($NAME, $EVENT)}
2019-10-31 06:52:12 battery 20 %
2019-10-31 06:52:12 batteryPercent 20
2019-10-31 06:52:12 batteryState ok
Zitat von: FunkOdyssey am 31 Oktober 2019, 09:29:12
Hat jemand eine Idee woran der Doppelversand liegt?
define NO.BatterieNotify notify .*:(battery|batteryLevel)\s.* {BatteryStatusFunction($NAME, $EVENT)}
BadTaster 2019-12-10 03:49:26
Bad_UG 2019-12-10 03:49:26
Zitat von: Aladin222 am 13 Dezember 2019, 11:08:19
hi @all,
hab das mal ausprobiert .... verstehe aber wohl noch nicht ganz die volle Funktion :-(
Es wurden rgBatterieStatus angelegt :Code Auswählen
BadTaster 2019-12-10 03:49:26
Bad_UG 2019-12-10 03:49:26
alle mit voller Batterie ....also soweit alles gut :-)
die Dummies BatterieStatus & BatterieWechsel zeigen nur ??? ....ist das normal ?
Wie kann ich eine leere Batterie simulieren, um zu schauen das die Benachrichtigung funktioniert ?
setreading Device battery Low
(oder welches Reading und welcher Wert halt für das jeweilige Gerät zutrifft)Zitat von: sepultura30 am 12 Januar 2020, 01:13:25
Hallo,
im Modul ist ein Fehler drinnen für HM-Devices, Zeile 210 muss das so heisen:
$MinBatLevel = ReadingsNum($Device, ".R-lowBatLimitRT", "0.0"); der Punkt fehlt. So funktioniert die Berechnung nicht mit .R-lowBatLimitRT
Grüße Sandro
{ReadingsNum("DeviceName","R-lowBatLimitRT",0.0)}
in FhemWeb. DeviceName halt mit einem passenden Namen ersetzen... Eben bei mir getestet: funktioniert und liefert 2.2 zurück...
{ReadingsNum("DeviceName","R-lowBatLimitRT",0.0)}
{ReadingsNum("DeviceName",".R-lowBatLimitRT",0.0)}
{ReadingsNum("Arbeitszimmer.DG.Fenster",".R-lowBatLimitRT",0.0)}
0
{ReadingsNum("Arbeitszimmer.DG.Fenster","R-lowBatLimitRT",0.0)}
2.1
setreading Arbeitszimmer.DG.Fenster batteryLevel 2.0
ZitatHast du (kürzlich) ein event-on-change-reading gesetzt!?
Internals:
DEF 356A8F
FUUID 5c43081c-f33f-0edb-ea17-f26635cec50d8b40
FVERSION 10_CUL_HM.pm:0.206330/2019-12-01
HMUARTLGW_MSGCNT 626
HMUARTLGW_RAWMSG 0500004E918610356A8F0000000A8CB7C70000
HMUARTLGW_RSSI -78
HMUARTLGW_TIME 2020-01-12 13:11:45
IODev MapleCUN_2.1
LASTInputDev HMUARTLGW
MSGCNT 1867
MapleCUN_1.1_MSGCNT 606
MapleCUN_1.1_RAWMSG A0F918610356A8F0000000A8CB7C70000::-95.5:MapleCUN_1.1
MapleCUN_1.1_RSSI -95.5
MapleCUN_1.1_TIME 2020-01-12 13:11:45
MapleCUN_2.1_MSGCNT 635
MapleCUN_2.1_RAWMSG A0F918610356A8F0000000A8CB7C70000::-59.5:MapleCUN_2.1
MapleCUN_2.1_RSSI -59.5
MapleCUN_2.1_TIME 2020-01-12 13:11:45
NAME Wohnzimmer.OG.FensterRechts
NOTIFYDEV global
NR 57
NTFY_ORDER 50-Wohnzimmer.OG.FensterRechts
STATE CMDs_done
TYPE CUL_HM
channel_01 Wohnzimmer.OG.FensterRechts_Weather
channel_02 Wohnzimmer.OG.FensterRechts_Climate
channel_03 Wohnzimmer.OG.FensterRechts_WindowRec
channel_04 Wohnzimmer.OG.FensterRechts_Clima
channel_05 Wohnzimmer.OG.FensterRechts_ClimaTeam
channel_06 Wohnzimmer.OG.FensterRechts_remote
lastMsg No:91 - t:10 s:356A8F d:000000 0A8CB7C70000
protLastRcv 2020-01-12 13:11:45
protRcv 635 last_at:2020-01-12 13:11:45
protRcvB 4 last_at:2020-01-12 09:02:44
protSnd 3 last_at:2020-01-12 01:30:25
protState CMDs_done
rssi_MapleCUN_2.1 cnt:1 min:-51 max:-51 avg:-51 lst:-51
rssi_at_HMUARTLGW cnt:626 min:-85 max:-74 avg:-76.84 lst:-78
rssi_at_MapleCUN_1.1 cnt:606 min:-100.5 max:-82 avg:-91.41 lst:-95.5
rssi_at_MapleCUN_2.1 cnt:635 min:-69.5 max:-58.5 avg:-60.5 lst:-59.5
READINGS:
2020-01-11 11:04:10 Activity alive
2020-01-11 22:06:48 CommandAccepted yes
2018-08-10 17:10:01 D-firmware 1.4
2018-08-10 17:10:01 D-serialNr LTK0135431
2018-08-10 21:50:32 PairedTo 0x123456
2018-08-10 21:50:32 R-backOnTime 10 s
2018-08-10 21:50:32 R-btnLock off
2018-08-10 21:50:32 R-burstRx on
2018-08-10 21:50:32 R-cyclicInfoMsg on
2018-08-10 21:50:32 R-cyclicInfoMsgDis 0
2018-08-10 21:50:32 R-globalBtnLock off
2018-08-10 21:50:32 R-localResDis off
2018-08-10 21:50:32 R-lowBatLimitRT 2.1 V
2018-08-10 21:50:32 R-modusBtnLock off
2018-08-10 21:50:32 R-pairCentral 0x123456
2020-01-12 13:11:45 actuator 0
2020-01-12 13:11:45 battery low
2020-01-12 13:11:45 batteryLevel 2.2
2020-01-12 09:02:44 controlMode auto
2020-01-12 13:11:45 desired-temp 17.5
2020-01-12 13:11:45 measured-temp 18.3
2020-01-12 13:11:45 motorErr lowBat
2018-08-10 21:25:15 sabotageAttack_ErrIoAttack cnt 2
2020-01-12 01:30:25 state CMDs_done
2020-01-12 01:30:25 time-request -
helper:
HM_CMDNR 145
cSnd ,11123456356A8F8004
mId 0095
peerFriend
peerOpt -:thermostat
regLst 0
rxType 140
supp_Pair_Rep 0
ack:
expert:
def 1
det 1
raw 0
tpl 0
io:
newChn +356A8F,00,00,00
nextSend 1578831105.98144
prefIO
rxt 2
vccu virtualCCU
p:
356A8F
00
00
00
mRssi:
mNo 91
io:
HMUARTLGW:
-78
-78
MapleCUL_1.1:
MapleCUN_1.1:
-95.5
-95.5
MapleCUN_2.1:
-53.5
-53.5
MapleCUN_3.1:
prt:
bErr 0
sProc 0
sleeping 1
rspWait:
q:
qReqConf
qReqStat
role:
dev 1
prs 1
rssi:
MapleCUN_2.1:
avg -51
cnt 1
lst -51
max -51
min -51
at_HMUARTLGW:
avg -76.8498402555909
cnt 626
lst -78
max -74
min -85
at_MapleCUN_1.1:
avg -91.4183168316832
cnt 606
lst -95.5
max -82
min -100.5
at_MapleCUN_2.1:
avg -60.5031496062992
cnt 635
lst -59.5
max -58.5
min -69.5
shRegW:
07 04
tmpl:
Attributes:
IODev MapleCUN_2.1
IOgrp virtualCCU
actCycle 000:10
actStatus alive
autoReadReg 4_reqStatus
expert 1_allReg
firmware 1.4
icon sani_heating
model HM-CC-RT-DN
room Obergeschoss->Wohnzimmer
serialNr LTK0135431
subType thermostat
webCmd getConfig:clear msgEvents:burstXmit
setreading Wohnzimmer.OG.FensterRechts batteryLevel 2.0
Zitat von: MadMax-FHEM am 12 Januar 2020, 12:08:50
Hmmm, kann ich nicht nachvollziehen...
Habt ihr kürzlich (also unter 3 Wochen) ein fhem Update gemacht?
Gruß, Joachim
setstate Thermostat_Ess CMDs_done
setstate Thermostat_Ess 2019-01-20 21:40:35 .D-devInfo 00FFFF
setstate Thermostat_Ess 2019-01-20 21:40:35 .D-stc 59
setstate Thermostat_Ess 2017-11-22 17:35:35 .R-btnLock off
setstate Thermostat_Ess 2017-11-22 17:35:35 .R-globalBtnLock off
setstate Thermostat_Ess 2017-11-22 17:35:35 .R-localResDis off
setstate Thermostat_Ess 2020-01-10 22:40:10 .R-lowBatLimitRT 2.4 V
setstate Thermostat_Ess 2017-11-22 17:35:35 .R-modusBtnLock off
setstate Thermostat_Ess 2020-01-12 22:04:35 .protLastRcv 2020-01-12 22:04:35
setstate Thermostat_Ess 2020-01-12 11:20:44 Activity alive
setstate Thermostat_Ess 2020-01-10 22:40:08 CommandAccepted yes
setstate Thermostat_Ess 2019-01-20 21:40:35 D-firmware 1.4
setstate Thermostat_Ess 2019-01-20 21:40:35 D-serialNr OEQ0855361
setstate Thermostat_Ess 2020-01-10 22:40:10 PairedTo 0x945612
setstate Thermostat_Ess 2017-11-22 17:35:35 R-backOnTime 10 s
setstate Thermostat_Ess 2017-11-22 17:35:35 R-burstRx on
Zitat von: DeeSPe am 31 Oktober 2019, 10:18:05
Ja, es liegt daran dass das notify auf battery, batteryLevel und batteryPercent reagiert.
Ändere doch einfach den Trigger des notify:Code Auswählendefine NO.BatterieNotify notify .*:(battery|batteryLevel)\s.* {BatteryStatusFunction($NAME, $EVENT)}
Gruß
Dan
Zitat von: MadMax-FHEM am 12 Januar 2020, 22:32:39
Würdest du bitte (wie geschrieben) ein list posten!?
So sehe ich zwar, dass die Readings (bei dir) so heißen aber so kann man keine Idee entwickeln: warum
Weil ich auch nichts gelesen hätte, dass da etwas geändert wurde...
Gruß, Joachim
Internals:
DEF 5B0461
FUUID 5c44ee7a-f33f-784a-1fe6-292cd529b2de6cb8
IODev myHmUART
LASTInputDev myHMLANGW
MSGCNT 51
NAME WandThermWohn
NOTIFYDEV global
NR 122
NTFY_ORDER 50-WandThermWohn
STATE CMDs_done
TYPE CUL_HM
channel_01 WandThermWohn_Weather
channel_02 WandThermWohn_Climate
channel_03 WandThermWohn_WindowRec
channel_06 WandThermWohn_remote
channel_07 WandThermWohn_SwitchTr
lastMsg No:06 - t:70 s:5B0461 d:000000 00DC23
myHMLANGW_MSGCNT 17
myHMLANGW_RAWMSG 050000300684705B046100000000DC23
myHMLANGW_RSSI -48
myHMLANGW_TIME 2020-01-13 12:18:57
myHmUART_MSGCNT 17
myHmUART_RAWMSG 050000320684705B046100000000DC23
myHmUART_RSSI -50
myHmUART_TIME 2020-01-13 12:18:57
myRemoteHmUART_MSGCNT 17
myRemoteHmUART_RAWMSG 0500003C0684705B046100000000DC23
myRemoteHmUART_RSSI -60
myRemoteHmUART_TIME 2020-01-13 12:18:57
protLastRcv 2020-01-13 12:18:57
protRcv 17 last_at:2020-01-13 12:18:57
rssi_at_myHMLANGW cnt:17 min:-49 max:-47 avg:-48.05 lst:-48
rssi_at_myHmUART cnt:17 min:-50 max:-48 avg:-49.47 lst:-50
rssi_at_myRemoteHmUART cnt:17 min:-62 max:-60 avg:-61.05 lst:-60
.attraggr:
.attrminint:
state:900
Helper:
DBLOG:
desired-temp:
myDbLog:
TIME 1578914036.72651
VALUE 22.0
measured-temp:
myDbLog:
TIME 1578914036.72651
VALUE 22.0
READINGS:
2020-01-11 02:39:04 .R-btnLock off
2020-01-11 02:39:04 .R-globalBtnLock off
2020-01-11 02:39:04 .R-localResDis off
2020-01-12 01:31:15 .R-lowBatLimitRT 2.4 V
2020-01-11 02:39:04 .R-modusBtnLock off
2020-01-13 12:18:57 .protLastRcv 2020-01-13 12:18:57
2020-01-13 12:00:52 Activity alive
2020-01-13 10:00:03 CommandAccepted yes
2020-01-11 02:38:07 D-firmware 1.3
2020-01-11 02:38:07 D-serialNr OEQ0760983
2020-01-13 01:14:29 LastLowBattMailSent 1
2020-01-13 01:19:24 PairedTo 0x945612
2020-01-11 02:39:04 R-burstRx on
2020-01-11 02:39:04 R-cyclicInfoMsg on
2020-01-11 02:39:04 R-cyclicInfoMsgDis 0
2020-01-11 02:39:04 R-pairCentral 0x945612
2020-01-13 01:19:24 RegL_00. 00:00 01:01 02:01 09:01 0A:94 0B:56 0C:12 0F:00 11:00 12:18 16:00 18:00 19:00 1A:00
2020-01-13 12:00:38 RegL_07.
2020-01-13 12:13:56 battery ok
2020-01-13 12:13:56 batteryLevel 3.2
2020-01-13 12:13:56 desired-temp 22.0
2020-01-13 12:13:56 measured-temp 22.0
2020-01-13 01:19:18 powerOn 2020-01-13 01:19:18
2020-01-13 01:19:18 recentStateType info
2020-01-13 10:00:04 state CMDs_done
2020-01-13 01:19:20 time-request -
helper:
HM_CMDNR 6
PONtest 1
mId 00AD
peerFriend
peerOpt -:thermostat
regLst 0
rxType 6
supp_Pair_Rep 0
expert:
def 1
det 0
raw 1
tpl 0
io:
newChn +5B0461,00,01,00
nextSend 1578914338.03532
prefIO
rxt 0
vccu VCCU
p:
5B0461
00
01
00
mRssi:
mNo 06
io:
myHMLANGW:
-48
-48
myHmUART:
-44
-44
myRemoteHmUART:
-60
-60
prt:
bErr 0
sProc 0
q:
qReqConf
qReqStat
role:
dev 1
prs 1
rssi:
at_myHMLANGW:
avg -48.0588235294118
cnt 17
lst -48
max -47
min -49
at_myHmUART:
avg -49.4705882352941
cnt 17
lst -50
max -48
min -50
at_myRemoteHmUART:
avg -61.0588235294118
cnt 17
lst -60
max -60
min -62
shRegW:
07 02
tmpl:
Attributes:
.mId 00AD
IODev myHmUART
IOgrp VCCU
actCycle 000:10
actStatus alive
autoReadReg 4_reqStatus
event-min-interval state:900
expert 2_raw
firmware 1.3
icon hm-tc-it-wm-w-eu
model HM-TC-IT-WM-W-EU
msgRepeat 1
room Esszimmer,Heizung,Wohnzimmer
serialNr OEQ0760983
subType thermostat
webCmd getConfig:clear msgEvents
Zitat von: MadMax-FHEM am 13 Januar 2020, 13:11:48Nix komisch, war bei mir schon immer so :)
Dann: komisch ist, dass einige "Register-Readings" (gekennzeichnet durch R-...) OHNE Punkt und andere wiederum MIT Punkt da sind.
Zitat von: Wzut am 13 Januar 2020, 15:44:36
Nix komisch, war bei mir schon immer so :)
2018-08-07 07:47:23 .R-btnLock off
2018-08-07 07:47:23 .R-globalBtnLock off
2018-08-07 07:47:23 .R-localResDis off
2018-08-07 07:47:23 .R-lowBatLimitRT 2 V
2018-08-07 07:47:23 .R-modusBtnLock off
2020-01-13 16:17:48 .protLastRcv 2020-01-13 16:17:48
2018-08-07 07:47:23 R-backOnTime 10 s
2018-08-07 07:47:23 R-burstRx on
2018-08-07 07:47:23 R-cyclicInfoMsg on
2018-08-07 07:47:23 R-cyclicInfoMsgDis 0
2018-08-07 07:47:23 R-pairCentral 0x230960
Zitat von: MadMax-FHEM am 13 Januar 2020, 00:17:39
Also ich habe ein Notify auf "nur" battery.*
Weil doch meist also zumindest bei mir die Geräte:
battery
batteryPercent
batteryValue
...
haben.
Und (zumindest bei mir) auch immer zusammen kommen, slso sollte ein Device mehrere "Batterie-Readings" haben (eigentl. haben bei mir alle Devices mind. 2 davon)...
Zu viel auslösen/berechnen schränke ich dann bei den Devices mittels event-on-change-reading so ein, dass aber immer noch aktuelle Werte in der ReadingsGroup angezeigt werden...
Mehr Tipp fällt mir nicht ein...
Gruß, Joachim
.*:(battery|batteryLevel):\s.* {BatteryStatusFunction($NAME, $EVENT)}
Zitat von: MadMax-FHEM am 13 Januar 2020, 13:11:48
Also zunächst mal: danke! ;)
Dann: komisch ist, dass einige "Register-Readings" (gekennzeichnet durch R-...) OHNE Punkt und andere wiederum MIT Punkt da sind.
Normal war (ist denke ich immer noch): OHNE Punkt!
Daher mal ergründen (neuer Thread in Homematic) WARUM das bei dir so ist...
(evtl. mache ich mal ein Update und schaue, ob das bei mir dann auch so kommt / denke aber, dass man davon schon mehr gelesen hätte, wenn?)
Und dann werde ich selbst aus der Beschreibung bzgl. event-min-interval nicht so ganz schlau...
Nutze nur event-on-change-reading...
Aber könnte es sein, dass event-min-interval NUR auf state OHNE event-on-change-reading etc. dazu führt, dass eben nur noch Events für state kommen!?
https://wiki.fhem.de/wiki/Event-min-interval
Schon mal den Eventmonitor geöffnet!?
Oder ging es bei dir "nur" um die Berechnung? ;)
(Bei so viel "Durcheinander" kann man schon mal was aus dem Auge verlieren ;) )
Gruß, Joachim
Zitat von: list
Internals:
DEF 697334
FUUID 5c573a6f-f33f-753d-961e-90a6d3d04ef7910a
IODev hmusb
NAME Briefkasten
NOTIFYDEV global
NR 522
NTFY_ORDER 50-Briefkasten
STATE open
TYPE CUL_HM
chanNo 01
READINGS:
2020-01-05 21:17:54 Activity dead
2019-01-18 16:14:19 CommandAccepted yes
2019-01-18 17:03:36 D-firmware 1.0
2019-01-18 17:03:36 D-serialNr PEQ0580746
2019-01-18 16:14:20 PairedTo 0xAFFE11
2019-01-18 16:13:40 R-cyclicInfoMsg on
2019-01-18 16:13:40 R-eventDlyTime 0 s
2019-01-18 16:13:40 R-msgScPosA open
2019-01-18 16:13:40 R-msgScPosB closed
2019-01-18 16:13:40 R-pairCentral 0xAFFE11
2019-01-18 16:13:40 R-sabotageMsg on
2019-01-18 16:14:20 R-sign off
2019-01-18 16:13:40 R-transmDevTryMax 6
2019-01-18 16:13:40 R-transmitTryMax 6
2019-01-18 16:14:19 aesCommToDev ok
2019-01-18 16:14:19 aesKeyNbr 00
2019-01-18 17:23:10 alive yes
2019-01-18 17:23:10 battery ok
2019-01-18 17:23:10 contact open (to vccu)
2019-01-18 17:23:10 recentStateType info
2019-01-18 17:23:10 sabotageError on
2019-01-18 17:23:10 state open
2019-01-18 17:23:07 trigger_cnt 242
helper:
HM_CMDNR 179
mId 00C7
peerFriend peerAct,peerVirt
peerOpt 4:threeStateSensor
regLst 0,1,4p
rxType 28
expert:
def 1
det 1
raw 0
tpl 0
io:
newChn +697334,00,00,00
rxt 2
vccu vccu
p:
697334
00
00
00
prefIO:
hmusb
mRssi:
mNo
prt:
bErr 0
sProc 0
q:
qReqConf
qReqStat
role:
chn 1
dev 1
tmpl:
Attributes:
IODev hmusb
IOgrp vccu:hmusb
actCycle 002:50
actStatus dead
autoReadReg 4_reqStatus
expert 1_allReg
firmware 1.0
icon message_mail
model HM-SEC-SCO
my_batteryType 1xAAA
peerIDs 00000000,
serialNr PEQ0580746
subType threeStateSensor
userattr my_batteryType
$BatteryType = AttrVal($Device, "my_batteryType", "unknown");
HMIP | Homematic | |
HKT | 0.OPERATING_VOLTAGE 0.LOW_BAT | 4.BATTERY_STATE 0.LOWBAT |
WT | 0.OPERATING_VOLTAGE 0.LOW_BAT | 2.BATTERY_STATE 0.LOWBAT |
Tür/Fenster | 0.OPERATING_VOLTAGE 0.LOW_BAT | 0.LOWBAT |
Wassersensor | 0.LOWBAT |
Zitat von: kotaro am 25 Februar 2020, 15:29:41
Vielleicht wisst ihr mehr?? in der Github-Datei von 2018 finde ich diese nicht hinterlegt.
Internals:
CFGFN
FUUID 5e64c2d8-f33f-9117-d425-0cc980ad08f16507
NAME BatterieStatus
NR 2432
STATE ???
TYPE dummy
READINGS:
2020-03-08 11:03:04 BadTaster 100
2020-03-08 11:03:04 Bad_UG 100
2020-03-08 11:03:04 EZ_Taster 100
2020-03-08 11:03:04 FensterKontaktBadOG 100
2020-03-08 11:03:04 FensterKontaktBadUG 100
2020-03-08 11:03:04 FensterKontaktEsszimmer 100
2020-03-08 11:03:04 FensterKontaktGaeste 100
2020-03-08 11:03:04 FensterKontaktKuecheL 100
2020-03-08 11:03:04 FensterKontaktKuecheR 100
2020-03-08 11:03:04 FensterKontaktSchlafz1 100
2020-03-08 11:03:04 FensterKontaktSchlafz2 100
2020-03-08 11:03:04 FensterKontaktTGriff 100
2020-03-08 11:03:04 FensterKontaktTerrasse 100
2020-03-08 11:03:04 FensterKontaktTimo 100
2020-03-08 11:03:04 FensterKontaktWz 100
2020-03-08 11:03:04 GaesteZimmer 100
2020-03-08 11:03:04 HeizungBadOG 100
2020-03-08 11:03:04 HeizungBadUG 100
2020-03-08 11:03:04 HeizungSZ 100
2020-03-08 11:03:04 HeizungWzL 100
2020-03-08 11:03:04 HeizungWzR 30
2020-03-08 11:03:04 Kueche 100
2020-03-08 11:03:04 NUKIDevice355445389 100
2020-03-08 11:03:04 SchlafZimmer 100
2020-03-08 11:03:04 Schuppen 100
2020-03-08 11:03:04 SturzTemp 100
2020-03-08 11:03:04 Sturz_Taster 100
2020-03-08 11:03:04 TerrasseTemp 100
2020-03-08 11:03:04 Timo 100
2020-03-08 11:03:04 WasserMelder 100
2020-03-08 11:03:04 WohnZimmer 100
2020-03-08 11:03:04 WzWandthermostat 100
Attributes:
DbLogExclude .*
room Z_System->BatteryCheck
Internals:
CFGFN
FUUID 5e64c2d8-f33f-9117-a952-1c4923ac9edc06cc
NAME BatterieWechsel
NR 2433
STATE ???
TYPE dummy
Attributes:
DbLogExclude .*
room Z_System->BatteryCheck
################################
# Here you choos your message device and how to send
# comment the device you do not want to use
#
# TelegramBot
# my $msg = "set WEB_TelegramBot message \@\@User ";
#
# msg-command
# my $msg = "msg \@User title='Battery Check' ";
#
# Pushover
my $msg = "set WEB_Pushover msg device= Aladin212Iphone title='Battery Check' ";
Internals:
APP_TOKEN ajhgjhghghgjhkj5kud
CFGFN /opt/fhem/FHEM/02_Messager.cfg
DEF agajhjhjgjhjhhkjktL1toHM
FUUID 5cc3eb02-f33f-9117-0015-b7b9261af6482a0c
FVERSION 70_Pushover.pm:v2.2.0-s20897/2020-01-06
NAME WEB_Pushover
NR 452
STATE connected
TYPE Pushover
USER_KEY urMbkhkjsdhkjsddsgoHM
VALIDATION_TIMER 1583684445.80531
READINGS:
2020-03-08 08:58:40 apiLimit 7500
2020-03-08 08:58:40 apiRemaining 7494
2020-03-08 08:58:40 apiReset 1585717200
2020-03-08 11:20:45 available 1
2019-06-03 07:32:03 devices Aladin212iPad,Aladin212Iphone,ipad_pro,TimoIphone
2019-04-27 07:39:20 group 0
2020-03-08 08:58:40 lastAction -
2020-03-08 08:58:40 lastDevice Aladin212iPad,Aladin212Iphone,ipad_pro,TimoIphone
2020-03-08 08:58:40 lastMessage Morgen wird Abfuhrtermin Biotonne (BRAUN) abgeholt
2020-03-08 08:58:40 lastRequest fd57d46e-622b-4a31-9b86-8a31d4079775
2020-03-08 11:20:45 lastResult ok
2020-03-08 08:58:40 lastTitle Müll
2020-03-08 11:20:45 state connected
2019-04-27 07:39:20 tokenState valid
2019-04-27 07:39:20 userState valid
Attributes:
DbLogExclude .*
alias Pushover
icon pushover
Zitat von: Erläuterung erster Post
4. Das Script verschickt eine Nachricht, sobald der Status einer Batterie 25% erreicht, oder leer meldet
EG_Schlafzimmer_Heizung_HM2E7xxx, 'battery: ok' ignored, has batteryLevel reading
EG_BadRobert_Heizung_HM535xxx, 'battery: ok' ignored, has batteryLevel reading
EG_Wohnzimmer_Heizung_HM535xxx, 'battery: ok' ignored, has batteryLevel reading
Zitat von: Betonklotz am 27 März 2020, 09:37:47
Hallo,
habe das Modul im Grunde sauber installiert (kleine Anmerkung für Seite 1: evtl. noch ein prüfen der Rechte ergänzen, das hatte ich in der Eile vergessen...), bekomme aber im Log immer alle paar Sekunden Meldungen in der ArtCode Auswählen
EG_Schlafzimmer_Heizung_HM2E7xxx, 'battery: ok' ignored, has batteryLevel reading
EG_BadRobert_Heizung_HM535xxx, 'battery: ok' ignored, has batteryLevel reading
EG_Wohnzimmer_Heizung_HM535xxx, 'battery: ok' ignored, has batteryLevel reading
Was habe ich falsch gemacht, bzw. wie kann ich es unterdrücken? Was braucht ihr ggf. zur Eingrenzung des Fehlers? Und finde ich (z.B. in einer readingsgroup) das Datum wann die Batterien zuletzt gewechselt wurden (=müsste bei mir ja das aktuelle Datum oder ??? sein)?
Gruß, Robert
setreading Gerätename battery low
USV, unknown Event battery.runtime: 3418
Zitat von: FunkOdyssey am 27 März 2020, 11:32:49
Ich habe in letzter Zeit viele kleine Änderungen im Code vorgenommen.
Im Code wird viel das batteryLevel abgefragt. Und gelegentlich nur das battery-Reading mit den Strings ok, low, etc.
Viele meiner Geräte wie bspw. ZWave und Zigbee nutzen neuerdings das Reading batteryPercent.
Homematic wird wohl weiterhin eine Sonderlösung bleiben. Und LaCrosse und MAX! haben auch kein batteryPercent-Reading.
Theoretisch könnte man den Code weiter generalisieren und die Unterscheidungen nach Gerätetyp entfernen, wenn das Reading batteryPercent existiert.
Wenn sich das in FHEM nun durchsetzt, so dürfte die Batterieüberwachung irgendwann viel einfacher werden.
Zitat von: FunkOdyssey am 27 März 2020, 11:32:49
Ich bin aber froh, dass es diesen Code gibt.
Soll das hier https://github.com/Amenophis86/Batteryfunktion/tree/no-BatteryStatusBot eigentlich noch weiterentwickelt werden?
Im Thread sehe ich viele neue Beispiele, die noch nicht implementiert wurden.
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
##############################################
# 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!");
}
}
}
ZitatGerne darf auch jemand ein Fork machen und sein Github zur Verfügung stellen.Ich habe mir erlaubt einen Fork anzulegen.
elsif ((ReadingsVal($Device, "batteryLevel", "undef") eq "undef" || ReadingsVal($Device, "batteryPercent", "undef") eq "undef") and ($TYPE ne "ZWave" || $TYPE ne "HUEDevice"))
($TYPE ne "ZWave" and $TYPE ne "HUEDevice")
elsif ((ReadingsVal($Device, "batteryLevel", "undef") eq "undef" && ReadingsVal($Device, "batteryPercent", "undef") eq "undef")
$TYPE eq "HUEDevice"
$TYPE eq "HUEDevice" && $TYPE ne "ZWave"
elsif ((ReadingsVal($Device, "batteryLevel", "undef") eq "undef" && ReadingsVal($Device, "batteryPercent", "undef") eq "undef") && $TYPE eq "HUEDevice")
elsif ((ReadingsVal($Device, "batteryLevel", "undef") eq "undef" && ReadingsVal($Device, "batteryPercent", "undef") eq "undef") && ($TYPE eq "HUEDevice" && $TYPE ne "ZWave"))
Zitat von: FunkOdyssey am 07 April 2020, 12:34:34
Ich danke dir. Ich habe leider sowieso festgestellt, dass ich meine gesamte Logik überarbeiten muss.
Aber du hast mir schon sehr geholfen.
my_CalculateBatteryLife($Device)
Funktion posten? Baue mir gerade auch etwas (wobei das super simpel ist, da nur HM Geräte mit Angabe der Batterie Spannung), scheitere aber an der Laufzeitberechnung. Dachte ich lese einfach den letzten Wechsel aus (wird ja gespeichert) und subtrahiere das aktuelel Datum. Aber irgendwie stehe ich da mit Perl auf Kriesgsfuss... Ein kleiner Tipp reicht mir sonst auch schon.Zitat von: MadMax-FHEM am 27 März 2020, 14:40:06
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)...
sub my_CalculateBatteryLife($)
{
my ($Device) = @_;
my $ActualLifeTimes = ReadingsVal($myDummyBatteryLifeTimes, $Device, "");
my $LastChange = ReadingsAge($myDummyLastBatteryChange, $Device, 0);
my $WeeksSinceLastChange = $LastChange % 604800;
$WeeksSinceLastChange = ($LastChange - $WeeksSinceLastChange) / 604800;
if($WeeksSinceLastChange > 0)
{
# appending actual calculated life time to last life times of device in dummy
$ActualLifeTimes .= " $WeeksSinceLastChange";
fhem("setreading $myDummyBatteryLifeTimes $Device $ActualLifeTimes");
}
Log3(undef, 3, "my_CalculateBatteryLife Device: $Device LastChange: $LastChange WeeksSinceLastChange: $WeeksSinceLastChange");
}
my $ActualLifeTimes = ReadingsVal($myDummyBatteryLifeTimes, $Device, "");
# we are "in the loop" of "ok" (again)
# check if battery is actually low -> possibly changed
if((ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") eq "low" || ReadingsVal($myDummyBatteryStates, $Device, 100) < 50) && ReadingsAge($Device, "powerOn", 0) < 2 * $my_DayInSeconds)
{
# 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");
}
Internals:
FUUID 5c573a6a-f33f-753d-ac1f-3012ffe7f5aff1ee
NAME dmBatteryLifeTimes
NR 202
STATE ???
TYPE dummy
READINGS:
2019-12-27 06:57:16 Heizkoerperthermostat_SchlaZi 153
2019-08-29 22:32:20 Heizkoerperthermostat_WoZi 145
2020-02-18 22:28:09 Wandthermostat_Bad 65 66
2019-10-15 18:42:48 Wandthermostat_Buero 63
2019-10-12 09:37:24 Wandthermostat_EssZi 59 67
2019-02-23 10:05:11 Wandthermostat_Kueche 54 46
2019-11-12 00:03:48 Wandthermostat_SchlaZi 66 67
2019-09-09 10:41:39 Wandthermostat_WC 64 64
2019-09-19 17:10:57 Wandthermostat_WoZi 61 65
Attributes:
#####################################################
# calculate the lifetime of the batteries in weeks and stores it in dummy
sub my_CalculateBatteryLife($)
{
my ($Device) = @_;
my $myDummyBatteryLifeTimes = "BatterieLebensdauer";
my $BatteryChanged = "LetzterBatterieWechsel";
my $ActualLifeTimes = ReadingsVal($myDummyBatteryLifeTimes, $Device, "");
my $LastChange = ReadingsAge($BatteryChanged, $Device, 0);
my $WeeksSinceLastChange = $LastChange % 604800;
$WeeksSinceLastChange = ($LastChange - $WeeksSinceLastChange) / 604800;
my $Loglevel = 3;
if($WeeksSinceLastChange > 0)
{
# appending actual calculated life time to last life times of device in dummy
$ActualLifeTimes .= " $WeeksSinceLastChange";
readingsSingleUpdate($defs{$myDummyBatteryLifeTimes}, $Device, $ActualLifeTimes, 0);
}
if($Loglevel >=3) {Log3(undef, 3, "my_CalculateBatteryLife Device: $Device LastChange: $LastChange WeeksSinceLastChange: $WeeksSinceLastChange");}
}
Zitat von: Betonklotz am 15 April 2020, 13:55:02
Hallo Joachim,
danke dir.
Zitat von: Betonklotz am 15 April 2020, 13:55:02
- letzte Batteriewechsel jeweils mit Datum speichern (ja, man könnte aktuell vom letzten bekannten Wechsel immer zurückrechnen)
- Vorhersage wann die Batterien fällig werden (==> muss ich einen 10er Pack bestellen weil weitere Geräte anstehen, oder reichen zwei aus)
- jeweils den Typ/Marke/MHD/Bezugsquelle mit abspeichern
2020.05.16 12:19:17 3: Motor of EG_ArbeitRobert_Heizung_Durchgang is in eror state, BatteryChange needed NOW
2020.05.16 12:22:42 3: CUL_HM set EG_ArbeitRobert_Heizung_Durchgang getConfig
2020.05.16 12:22:42 3: my_CalculateBatteryLife Device: EG_ArbeitRobert_Heizung_Durchgang LastChange: 0 WeeksSinceLastChange: 0
2020.05.16 12:22:42 1: ERROR: empty name in readingsBeginUpdate
2020.05.16 12:22:42 1: stacktrace:
2020.05.16 12:22:42 1: main::readingsBeginUpdate called by fhem.pl (4939)
2020.05.16 12:22:42 1: main::readingsSingleUpdate called by ./FHEM/99_BatteryCheckUtils.pm (215)
2020.05.16 12:22:42 1: main::BatteryStatusFunction called by (eval 524316) (1)
2020.05.16 12:22:42 1: (eval) called by fhem.pl (1146)
2020.05.16 12:22:42 1: main::AnalyzePerlCommand called by fhem.pl (1171)
2020.05.16 12:22:42 1: main::AnalyzeCommand called by fhem.pl (1100)
2020.05.16 12:22:42 1: main::AnalyzeCommandChain called by ./FHEM/91_notify.pm (121)
2020.05.16 12:22:42 1: main::notify_Exec called by fhem.pl (3775)
2020.05.16 12:22:42 1: main::CallFn called by fhem.pl (3695)
2020.05.16 12:22:42 1: main::DoTrigger called by fhem.pl (4062)
2020.05.16 12:22:42 1: main::Dispatch called by ./FHEM/00_HMUARTLGW.pm (1463)
2020.05.16 12:22:42 1: main::HMUARTLGW_Parse called by ./FHEM/00_HMUARTLGW.pm (1566)
2020.05.16 12:22:42 1: main::HMUARTLGW_Read called by fhem.pl (3775)
2020.05.16 12:22:42 1: main::CallFn called by fhem.pl (757)
2020.05.16 12:22:42 1: PERL WARNING: Use of uninitialized value $name in concatenation (.) or string at fhem.pl line 4794.
2020.05.16 12:22:42 3: eval: my $TYPE='CUL_HM';my $EVTPART0='batteryLevel:';my $NAME='EG_ArbeitRobert_Heizung_Durchgang';my $EVTPART1='3';my $SELF='NO.BatterieNotify';my $EVENT='batteryLevel: 3';{BatteryStatusFunction($NAME, $EVENT)}
2020.05.16 12:22:42 1: readingsUpdate(,EG_ArbeitRobert_Heizung_Durchgang,Batterie zuletzt gewechselt am/um: ) missed to call readingsBeginUpdate first.
2020.05.16 12:22:42 1: stacktrace:
2020.05.16 12:22:42 1: main::readingsBulkUpdate called by fhem.pl (4940)
2020.05.16 12:22:42 1: main::readingsSingleUpdate called by ./FHEM/99_BatteryCheckUtils.pm (215)
2020.05.16 12:22:42 1: main::BatteryStatusFunction called by (eval 524316) (1)
2020.05.16 12:22:42 1: (eval) called by fhem.pl (1146)
2020.05.16 12:22:42 1: main::AnalyzePerlCommand called by fhem.pl (1171)
2020.05.16 12:22:42 1: main::AnalyzeCommand called by fhem.pl (1100)
2020.05.16 12:22:42 1: main::AnalyzeCommandChain called by ./FHEM/91_notify.pm (121)
2020.05.16 12:22:42 1: main::notify_Exec called by fhem.pl (3775)
2020.05.16 12:22:42 1: main::CallFn called by fhem.pl (3695)
2020.05.16 12:22:42 1: main::DoTrigger called by fhem.pl (4062)
2020.05.16 12:22:42 1: main::Dispatch called by ./FHEM/00_HMUARTLGW.pm (1463)
2020.05.16 12:22:42 1: main::HMUARTLGW_Parse called by ./FHEM/00_HMUARTLGW.pm (1566)
2020.05.16 12:22:42 1: main::HMUARTLGW_Read called by fhem.pl (3775)
2020.05.16 12:22:42 1: main::CallFn called by fhem.pl (757)
2020.05.16 12:22:42 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4547.
2020.05.16 12:22:42 3: eval: my $TYPE='CUL_HM';my $EVTPART0='batteryLevel:';my $NAME='EG_ArbeitRobert_Heizung_Durchgang';my $EVTPART1='3';my $SELF='NO.BatterieNotify';my $EVENT='batteryLevel: 3';{BatteryStatusFunction($NAME, $EVENT)}
2020.05.16 12:22:42 3: Battery change detected on HM device EG_ArbeitRobert_Heizung_Durchgang
readingsBeginUpdate
##############################################
# HM Devices with batteryLevel
##############################################
elsif($TYPE eq "CUL_HM" and $BatteryType[0] eq "batteryLevel")
{
$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(ReadingsVal($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 undef;
}
if(($ActBatLevel - $MinBatLevel) > (3 * $RemainingVoltageQuater))
{
# check if battery was low before -> possibly changed
if(ReadingsNum($BatteryStatus, $Device, 100) <= 25)
{
# calculate lifetime since last change
my_CalculateBatteryLife($Device);
# set date/time for changed battery if it was low before (so probably a change happended)
readingsSingleUpdate($defs{$BatteryChanged}, $Device, $text_changed, 0);
if($Loglevel >=3) {Log3(undef, 3, "Battery change detected on HM device $Device");}
}
Zitat
2020.05.16 12:22:42 3: my_CalculateBatteryLife Device: EG_ArbeitRobert_Heizung_Durchgang LastChange: 0 WeeksSinceLastChange: 0
2020.05.16 12:22:42 1: ERROR: empty name in readingsBeginUpdate
if(ReadingsNum($BatteryStatus, $Device, 100) <= 25)
#####################################################
# calculate the lifetime of the batteries in weeks
# and stores/appends the value to dummy
sub my_CalculateBatteryLife($)
{
my ($Device) = @_;
my $myDummyBatteryLifeTimes = "BatterieLebensdauer";
my $BatteryChanged = "LetzterBatterieWechsel";
my $ActualLifeTimes = ReadingsVal($myDummyBatteryLifeTimes, $Device, "");
my $LastChange = ReadingsAge($BatteryChanged, $Device, 0);
my $WeeksSinceLastChange = $LastChange % 604800;
$WeeksSinceLastChange = ($LastChange - $WeeksSinceLastChange) / 604800;
my $Loglevel = 3;
if($WeeksSinceLastChange > 0)
{
# appending actual calculated life time to last life times of device in dummy
$ActualLifeTimes .= " $WeeksSinceLastChange";
readingsSingleUpdate($defs{$myDummyBatteryLifeTimes}, $Device, $ActualLifeTimes, 0);
}
if($Loglevel >=3) {Log3(undef, 3, "my_CalculateBatteryLife Device: $Device LastChange: $LastChange WeeksSinceLastChange: $WeeksSinceLastChange");}
}
readingsSingleUpdate($hash,$reading,$value,$dotrigger);
2020-05-16_10:59:16 EG_Bad_Heizung actuator: 0
2020-05-16_10:59:16 EG_Bad_Heizung battery: low
2020-05-16_10:59:16 EG_Bad_Heizung batteryLevel: 2.3
2020-05-16_10:59:16 EG_Bad_Heizung desired-temp: 19.0
2020-05-16_10:59:16 EG_Bad_Heizung measured-temp: 20.5
2020-05-16_10:59:16 EG_Bad_Heizung motorErr: lowBat
2020-05-16_11:01:30 EG_Bad_Heizung actuator: 0
2020-05-16_11:01:30 EG_Bad_Heizung battery: low
2020-05-16_11:01:30 EG_Bad_Heizung batteryLevel: 2.1
2020-05-16_11:01:30 EG_Bad_Heizung desired-temp: 19.0
2020-05-16_11:01:30 EG_Bad_Heizung measured-temp: 20.6
2020-05-16_11:01:30 EG_Bad_Heizung motorErr: lowBat
2020-05-16_11:04:33 EG_Bad_Heizung actuator: 0
2020-05-16_11:04:33 EG_Bad_Heizung battery: low
2020-05-16_11:04:33 EG_Bad_Heizung batteryLevel: 2.3
2020-05-16_11:04:33 EG_Bad_Heizung desired-temp: 19.0
2020-05-16_11:04:33 EG_Bad_Heizung measured-temp: 20.6
2020-05-16_11:04:33 EG_Bad_Heizung motorErr: lowBat
[...]
2020-06-06_10:59:51 EG_Bad_Heizung actuator: 0
2020-06-06_10:59:51 EG_Bad_Heizung battery: low
2020-06-06_10:59:51 EG_Bad_Heizung batteryLevel: 2.3
2020-06-06_10:59:51 EG_Bad_Heizung desired-temp: 19.0
2020-06-06_10:59:51 EG_Bad_Heizung measured-temp: 21.4
2020-06-06_10:59:51 EG_Bad_Heizung motorErr: lowBat
2020-06-06_11:02:36 EG_Bad_Heizung actuator: 15
2020-06-06_11:02:36 EG_Bad_Heizung batteryLevel: 2.3
2020-06-06_11:02:36 EG_Bad_Heizung desired-temp: 19.0
2020-06-06_11:02:36 EG_Bad_Heizung measured-temp: 21.4
2020-06-06_11:02:36 EG_Bad_Heizung motorErr: ValveErrorPosition
2020-06-06_11:05:07 EG_Bad_Heizung actuator: 15
2020-06-06_11:05:07 EG_Bad_Heizung batteryLevel: 2.3
2020-06-06_11:05:07 EG_Bad_Heizung desired-temp: 19.0
2020-06-06_11:05:07 EG_Bad_Heizung measured-temp: 21.5
2020-06-06_11:05:07 EG_Bad_Heizung motorErr: ValveErrorPosition
if($TYPE eq "CUL_HM" and $BatteryType[0] eq "batteryLevel")
{
# use ReadingsVal as batteryLevel is a pure value without units
$ActBatLevel = ReadingsVal($Device, "batteryLevel", "0.0");
# use ReadingsNum as R-lowBatLimitRT contains a value and unit [V]olt ==> ReadingsNum takes just the value without unit
$MinBatLevel = ReadingsNum($Device, "R-lowBatLimitRT", "0.0");
# divide the max passible voltage range in 4 equal quarters to show different colours and icons for each quarter
$RemainingVoltageQuater = ($MaxBattery - $MinBatLevel) / 4;
# set battery level to 100% and show in BatteryStatus-Device if new
if(ReadingsVal($BatteryStatus, $Device, "undef") eq "undef")
{
# set the (our internal) battery reading of the device to 100 and add it to our BatteryStatus Device
fhem("setreading $BatteryStatus $Device 100");
Log3(undef, 1, "$Device, added to $BatteryStatus");
return undef;
}
# check if the voltage level is in the range of 75...100% (= 4 of 4 quarters)
if(($ActBatLevel - $MinBatLevel) > (3 * $RemainingVoltageQuater))
{
# check if the voltage level was low before and is now full again ==> battery is (most likely) replaced
if(ReadingsVal($BatteryStatus, $Device, 100) <= 25)
{
# battery was replaced, lets calculate the lifetime of the battery since last change
my_CalculateBatteryLife($Device);
# set date/time for changed battery by setting the text ==> FHEM sets the actual time/date automatically on its own
fhem("setreading $BatteryChanged $Device $text_changed");
fhem($msg." ".$text_batchanged);
Log3(undef, 3, "Battery change detected on HM device $Device");
}
# set the internal battery value to 100%
fhem("setreading $BatteryStatus $Device 100");
return undef;
}
# check if the voltage level is in the range of 50...75% (= 3 of 4 quarters)
elsif(($ActBatLevel - $MinBatLevel) > (2 * $RemainingVoltageQuater))
{
# set the internal battery value to 75%
fhem("setreading $BatteryStatus $Device 75");
return undef;
}
# check if the voltage level is in the range of 25...50% (= 2 of 4 quarters)
elsif(($ActBatLevel - $MinBatLevel) > ($RemainingVoltageQuater))
{
# set the internal battery value to 50%
fhem("setreading $BatteryStatus $Device 50");
return undef;
}
# check if the voltage level is in the range of 0...25% (= 1 of 4 quarters)
elsif(($ActBatLevel - $MinBatLevel) > 0)
{
# check if the device wasn't already before in the state of having just 0...25% voltage level left
if(ReadingsNum($BatteryStatus, $Device, 0) != 25)
{
# check if the valve is indicationg already an motor error (= battery drained)
if (ReadingsVal($Device, "motorErr", "ok") eq "ValveErrorPosition")
{
# battery drained and valve couldn't move any longer ==> set the battery value to 0%
fhem("setreading $BatteryStatus $Device 0");
fhem($msg." ".$text_motorErrValve);
Log3(undef, 3, "Motor of $Device is in eror state, BatteryChange needed NOW");
}
# check if the valve is indicationg already an error low bat (= battery soon drained)
elsif (ReadingsVal($Device, "motorErr", "ok") eq "lowBat")
{
# check if the device had a rapid voltage drop before
if(ReadingsNum($BatteryStatus, $Device, 0) != 0)
{
my $test2 = ReadingsVal($BatteryStatus, $Device, "99");
Log3(undef, 3, "Device=$Device , BatteryStatus=$BatteryStatus , ActBatLevel=$ActBatLevel , MinBatLevel=$MinBatLevel , RemainingVoltageQuater=$RemainingVoltageQuater , readval=$test2");
# set the internal battery value to 25%
fhem("setreading $BatteryStatus $Device 25");
fhem($msg." ".$text_soon);
Log3(undef, 3, "$Device, BatteryChange needed soon");
}
}
# no error state, valve is still running normally and in 0...25% state (= 1 of 4 quarters)
else
{
# set the internal battery value to 25%
fhem("setreading $BatteryStatus $Device 25");
}
}
return undef;
}
# some unknown state or no actual state received or device has a rapid voltage drop (=> $ActBatLevel - $MinBatLevel becomes negative)
else
{
my $test = ReadingsVal($BatteryStatus, $Device, "99");
Log3(undef, 3, "Device=$Device , BatteryStatus=$BatteryStatus , ActBatLevel=$ActBatLevel , MinBatLevel=$MinBatLevel , RemainingVoltageQuater=$RemainingVoltageQuater , readval=$test");
# check if the device wasn't already before in the state of having just 0% voltage level left
if (ReadingsVal($BatteryStatus, $Device, 0) != 0)
{
# set the internal battery value to 0% (= totally empty or no state received)
fhem("setreading $BatteryStatus $Device 0");
fhem($msg." ".$text_now);
Log3(undef, 3, "$Device, BatteryChange needed NOW");
}
return undef;
}
}
# check if the voltage level is in the range of 0...25% (= 1 of 4 quarters)
elsif(($ActBatLevel - $MinBatLevel) > 0)
{
# check if the device wasn't already before in the state of having just 0...25% voltage level left
if(ReadingsNum($BatteryStatus, $Device, 0) != 25)
{
# check if the valve is indicationg already an motor error (= battery drained)
if (ReadingsVal($Device, "motorErr", "ok") eq "ValveErrorPosition")
{
# battery drained and valve couldn't move any longer ==> set the battery value to 0%
fhem("setreading $BatteryStatus $Device 0");
fhem($msg." ".$text_motorErrValve);
Log3(undef, 3, "Motor of $Device is in eror state, BatteryChange needed NOW");
Zitat von: MadMax-FHEM am 08 Juni 2020, 12:06:46Hallo Joachim,
Wenn es "nur" um die Meldung(en) bzgl. motorErr geht: event-on-change-reading (mit entspr. event-min-intervall) passend setzen...
...bzw. geht das ja generell...
Wenn kein Event kommt, dann "passiert" auch nichts... ;)
event-on-change-reading .*
event-min-interval .*:3600
defmod batterie_notify notify .*:[Bb]attery:.* {\
if ($EVTPART1 =~ "0|1|2|3|4|5|6|7|8|9" and $EVTPART1 >= 0 and $EVTPART1 <= 20) {fhem("set Telegram msg Die Battery von <b>" .$NAME ."</b> liegt bei <b>" .$EVTPART1 ."</b>%")} \
elsif ($EVTPART1 =~ "a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z" and $EVTPART1 ne "ok") {fhem("set Telegram msg Die Batterie von <b>" .$NAME ."</b> ist <b>" .$EVTPART1 ."</b>")} \
}\
Zitat von: Kai-Alfonso am 13 August 2021, 13:31:29
Moin - ich hab mal eine Frage. Ich wollte das Modul auch mal testen, aber ich bekomme nix gemeldet, wenn ich eine Batterie mal testweise rausnehme. Wie kann ich denn das Modul mal gescheit testen?
Zitat von: MadMax-FHEM am 13 August 2021, 15:40:39
setreading Device battery low
my $msg = "msg \@rr_Kai title='Battery Check' ";
Zitat von: gent am 25 August 2021, 18:41:38
Ich habe mal eine wahrscheinlich dumme Frage:
Muss ich in den Devices, bei denen ich den Batteriestand überwachen will das attribut "event-on-change-reading" passend setzen?
Liebe Grüße vom Gent
2021-08-25 19:46:30 CUL_HM LA2.Heizung battery: ok
2021-08-25 19:46:30 CUL_HM LA2.Heizung batteryLevel: 2.7
Zitat von: gent am 25 August 2021, 19:48:04
Hallo Joachim,
also wenn ich im Event-Monitor für das Device z.B. so etwas seheCode Auswählen
2021-08-25 19:46:30 CUL_HM LA2.Heizung battery: ok
2021-08-25 19:46:30 CUL_HM LA2.Heizung batteryLevel: 2.7
Dann ist hier ein Event ausgelöst worden und ich brauche kein weiteres Attribut zu setzen. Sehe ich das richtig?
Internals:
DEF 000A1A49A0C978
FUUID 5e061613-f33f-42e4-0365-fa764823c7157fd1
IODev d_ccu
NAME HmIP_HZ_Buero
NR 22
STATE 20
TYPE HMCCUDEV
ccuaddr 000A1A49A0C978
ccudevstate active
ccuif HmIP-RF
ccuname HmIP-HZ-Buero
ccurolectrl HEATING_CLIMATECONTROL_TRANSCEIVER
ccurolestate HEATING_CLIMATECONTROL_TRANSCEIVER
ccusubtype TRV
ccutype HmIP-eTRV-2
firmware 2.2.8
readonly no
sender HmIP_FT_Buero
READINGS:
2021-12-03 09:36:28 1.ACTUAL_TEMPERATURE 21.3
2021-12-03 09:36:28 1.ACTUAL_TEMPERATURE_STATUS NORMAL
2021-12-03 09:36:28 1.BOOST_MODE false
2021-12-03 09:36:28 1.SET_POINT_MODE auto
2021-12-03 09:36:28 1.SET_POINT_TEMPERATURE 20
2021-12-03 09:36:28 1.WINDOW_STATE closed
2021-12-01 23:46:23 IODev d_ccu
2021-12-03 09:36:28 activity alive
2021-12-03 09:36:28 battery ok
2021-12-03 09:36:28 control 20
2021-12-03 09:36:28 desired-temp 20
2021-12-03 09:36:28 devstate ok
2021-12-03 09:36:28 hmstate 20
2021-12-03 09:36:28 measured-temp 21.3
2021-12-03 09:36:28 rssidevice -72
2021-12-03 09:36:28 rssipeer 186
2021-12-03 09:36:28 state 20
2021-12-03 09:36:28 valve_position 2
2021-12-03 09:36:28 valve_position_STATUS NORMAL
hmccu:
channels 8
detect 1
devspec 000A1A49A0C978
forcedev 0
nodefaults 1
role 0:MAINTENANCE,1:HEATING_CLIMATECONTROL_TRANSCEIVER,2:HEATING_CLIMATECONTROL_RECEIVER,3:HEATING_CLIMATECONTROL_CL_RECEIVER,4:HEATING_SHUTTER_CONTACT_RECEIVER,5:HEATING_ROOM_TH_TRANSCEIVER,6:HEATING_ROOM_TH_RECEIVER,7:HEATING_KEY_RECEIVER
semDefaults 0
cmdlist:
get
set boost:noArg desired-temp on:noArg auto:noArg off:noArg manu:noArg holiday:noArg toggle:noArg
control:
chn 1
dpt SET_POINT_TEMPERATURE
dp:
0.CONFIG_PENDING:
VALUES:
NVAL 0
ONVAL 0
OSVAL false
OVAL 0
SVAL false
VAL 0
0.DUTY_CYCLE:
VALUES:
NVAL 0
ONVAL 0
OSVAL false
OVAL 0
SVAL false
VAL 0
0.INSTALL_TEST:
VALUES:
NVAL true
ONVAL true
OSVAL true
OVAL true
SVAL true
VAL true
0.LOW_BAT:
VALUES:
NVAL 0
ONVAL 0
OSVAL ok
OVAL 0
SVAL ok
VAL 0
0.OPERATING_VOLTAGE:
VALUES:
NVAL 2.4
ONVAL 2.4
OSVAL 2.4
OVAL 2.4
SVAL 2.4
VAL 2.4
0.OPERATING_VOLTAGE_STATUS:
VALUES:
NVAL 0
ONVAL 0
OSVAL NORMAL
OVAL 0
SVAL NORMAL
VAL 0
0.RSSI_DEVICE:
VALUES:
NVAL -72
ONVAL -72
OSVAL -72
OVAL -72
SVAL -72
VAL -72
0.RSSI_PEER:
VALUES:
NVAL 186
ONVAL 186
OSVAL 186
OVAL 186
SVAL 186
VAL 186
0.UNREACH:
VALUES:
NVAL 0
ONVAL 0
OSVAL alive
OVAL 0
SVAL alive
VAL 0
0.UPDATE_PENDING:
VALUES:
NVAL false
ONVAL false
OSVAL false
OVAL false
SVAL false
VAL false
1.ACTIVE_PROFILE:
VALUES:
NVAL 1
ONVAL 1
OSVAL 1
OVAL 1
SVAL 1
VAL 1
1.ACTUAL_TEMPERATURE:
VALUES:
NVAL 21.3
ONVAL 21.3
OSVAL 21.3
OVAL 21.3
SVAL 21.3
VAL 21.3
1.ACTUAL_TEMPERATURE_STATUS:
VALUES:
NVAL 0
ONVAL 0
OSVAL NORMAL
OVAL 0
SVAL NORMAL
VAL 0
1.BOOST_MODE:
VALUES:
NVAL 0
ONVAL 0
OSVAL false
OVAL 0
SVAL false
VAL 0
1.BOOST_TIME:
VALUES:
NVAL 0
ONVAL 0
OSVAL 0
OVAL 0
SVAL 0
VAL 0
1.FROST_PROTECTION:
VALUES:
NVAL 0
ONVAL 0
OSVAL false
OVAL 0
SVAL false
VAL 0
1.LEVEL:
VALUES:
NVAL 2
ONVAL 1
OSVAL 1
OVAL 0.01
SVAL 2
VAL 0.02
1.LEVEL_STATUS:
VALUES:
NVAL 0
ONVAL 0
OSVAL NORMAL
OVAL 0
SVAL NORMAL
VAL 0
1.PARTY_MODE:
VALUES:
NVAL 0
ONVAL 0
OSVAL false
OVAL 0
SVAL false
VAL 0
1.PARTY_SET_POINT_TEMPERATURE:
VALUES:
NVAL 0
ONVAL 0
OSVAL 0
OVAL 0.000000
SVAL 0
VAL 0.000000
1.PARTY_TIME_END:
VALUES:
NVAL
ONVAL
OSVAL
OVAL
SVAL
VAL
1.PARTY_TIME_START:
VALUES:
NVAL
ONVAL
OSVAL
OVAL
SVAL
VAL
1.QUICK_VETO_TIME:
VALUES:
NVAL 0
ONVAL 0
OSVAL 0
OVAL 0
SVAL 0
VAL 0
1.SET_POINT_MODE:
VALUES:
NVAL 0
ONVAL 0
OSVAL auto
OVAL 0
SVAL auto
VAL 0
1.SET_POINT_TEMPERATURE:
VALUES:
NVAL 20
ONVAL 20
OSVAL 20
OVAL 20.0
SVAL 20
VAL 20.0
1.SWITCH_POINT_OCCURED:
VALUES:
NVAL 0
ONVAL 0
OSVAL false
OVAL 0
SVAL false
VAL 0
1.VALVE_ADAPTION:
VALUES:
NVAL false
ONVAL false
OSVAL false
OVAL false
SVAL false
VAL false
1.VALVE_STATE:
VALUES:
NVAL 4
ONVAL 4
OSVAL ADAPTION_DONE
OVAL 4
SVAL ADAPTION_DONE
VAL 4
1.WINDOW_STATE:
VALUES:
NVAL 0
ONVAL 0
OSVAL closed
OVAL 0
SVAL closed
VAL 0
roleCmds:
get:
set:
auto:
channel 1
role HEATING_CLIMATECONTROL_TRANSCEIVER
subcount 1
syntax V:CONTROL_MODE:0
usage auto
subcmd:
000:
args 0
dpt CONTROL_MODE
fnc
max 3
min 0
parname CONTROL_MODE
partype 3
ps VALUES
scn 000
unit
boost:
channel 1
role HEATING_CLIMATECONTROL_TRANSCEIVER
subcount 1
syntax V:BOOST_MODE:1
usage boost
subcmd:
000:
args 1
dpt BOOST_MODE
fnc
max 1
min 0
parname BOOST_MODE
partype 3
ps VALUES
scn 000
unit
desired-temp:
channel 1
role HEATING_CLIMATECONTROL_TRANSCEIVER
subcount 1
syntax V:SET_POINT_TEMPERATURE:?temperature
usage desired-temp temperature
subcmd:
000:
args
dpt SET_POINT_TEMPERATURE
fnc
max 30.5
min 4.5
parname temperature
partype 2
ps VALUES
scn 000
unit �C
holiday:
channel 1
role HEATING_CLIMATECONTROL_TRANSCEIVER
subcount 1
syntax V:CONTROL_MODE:2
usage holiday
subcmd:
000:
args 2
dpt CONTROL_MODE
fnc
max 3
min 0
parname CONTROL_MODE
partype 3
ps VALUES
scn 000
unit
manu:
channel 1
role HEATING_CLIMATECONTROL_TRANSCEIVER
subcount 1
syntax V:CONTROL_MODE:1
usage manu
subcmd:
000:
args 1
dpt CONTROL_MODE
fnc
max 3
min 0
parname CONTROL_MODE
partype 3
ps VALUES
scn 000
unit
off:
channel 1
role HEATING_CLIMATECONTROL_TRANSCEIVER
subcount 2
syntax V:CONTROL_MODE:1 V:SET_POINT_TEMPERATURE:4.5
usage off
subcmd:
000:
args 1
dpt CONTROL_MODE
fnc
max 3
min 0
parname CONTROL_MODE
partype 3
ps VALUES
scn 000
unit
001:
args 4.5
dpt SET_POINT_TEMPERATURE
fnc
max 30.5
min 4.5
parname SET_POINT_TEMPERATURE
partype 3
ps VALUES
scn 001
unit �C
on:
channel 1
role HEATING_CLIMATECONTROL_TRANSCEIVER
subcount 2
syntax V:CONTROL_MODE:1 V:SET_POINT_TEMPERATURE:30.5
usage on
subcmd:
000:
args 1
dpt CONTROL_MODE
fnc
max 3
min 0
parname CONTROL_MODE
partype 3
ps VALUES
scn 000
unit
001:
args 30.5
dpt SET_POINT_TEMPERATURE
fnc
max 30.5
min 4.5
parname SET_POINT_TEMPERATURE
partype 3
ps VALUES
scn 001
unit �C
state:
chn 1
dpt SET_POINT_TEMPERATURE
Attributes:
IODev d_ccu
ccureadingfilter ^ACTUAL_TEMPERATURE|^BOOST_MODE|^SET_POINT_MODE|^SET_POINT_TEMPERATURE|^LEVEL|^WINDOW_STATE
ccureadingname 1.LEVEL:valve_position
ccuscaleval LEVEL:0:1:0:100
cmdIcon auto:sani_heating_automatic manu:sani_heating_manual boost:sani_heating_boost on:general_an off:general_aus
controldatapoint 1.SET_POINT_TEMPERATURE
event-on-change-reading .*
eventMap /datapoint 1.BOOST_MODE true:Boost/datapoint 1.CONTROL_MODE 0:Auto/datapoint 1.CONTROL_MODE 1:Manual/datapoint 1.CONTROL_MODE 2:Holiday/datapoint 1.CONTROL_MODE 1 1.SET_POINT_TEMPERATURE 4.5:off/datapoint 1.CONTROL_MODE 0 1.SET_POINT_TEMPERATURE 30.5:on/
group Buero
room Homematic,Wohnung
statedatapoint 1.SET_POINT_TEMPERATURE
stripnumber 1
substexcl desired-temp
substitute SET_POINT_TEMPERATURE!#0-4.5:off,#30.5-40:on;WINDOW_STATE!(0|false):closed,(1|true):open
verbose 5
webCmd desired-temp:auto:manu:boost:on:off
widgetOverride desired-temp:slider,4.5,0.5,30.5,1
Internals:
CFGFN
DEF .*:battery.* {BatteryStatusFunction($NAME, $EVENT)}
FUUID 61a94728-f33f-42e4-fed5-f0af2a86869cfa9b
NAME NO.BatterieNotify
NR 558
NTFY_ORDER 50-NO.BatterieNotify
REGEXP .*:battery.*
STATE 2021-12-03 10:12:16
TRIGGERTIME 1638522736.84415
TYPE notify
READINGS:
2021-12-02 23:22:32 state active
Attributes:
room BatteryCheck
Zitat von: BatteryStatusFunction
################################
# Here you choos your message device and how to send
# comment the device you do not want to use
#
# TelegramBot
my $msg = "set TelegramBot message \@\@User ";
#
# msg-command
# my $msg = "msg \@User title='Battery Check' ";
#
# Pushover
# my $msg = "set Pushover msg device=User title='Battery Check' ";
# 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" || $DeviceNameParts[0] eq "MAX")
{
Log3(undef, 1, "my_StoreBatteryStatus ignoring Device: $Device");
return;
}
##############################################
# HMCCU Devices
##############################################
elsif($BatteryType[0] eq "battery" && (InternalVal($Device, "TYPE", "undef") eq "HMCCUDEV" || InternalVal($Device, "TYPE", "undef") eq "LaCrosse"))
{
if(ReadingsVal($Device, "battery", "low") eq "ok")
{
# check if battery was low before -> possibly changed
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $BatteryChanged $Device $text_changed");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
# status is "ok" so we set to 100% (we don't know better)
fhem("setreading $BatteryStatus $Device 100");
}
else
{
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
# status is NOT "ok" ("low") so we set to 0% (we don't know better)
fhem("setreading $BatteryStatus $Device 0");
}
}
Internals:
DEF 05
FUUID 6182a1ac-f33f-42e4-0408-8526c2d1ecb7c920
IODev myJeeLink
LASTInputDev myJeeLink
LaCrosse_lastRcv 2021-12-03 15:39:16
MSGCNT 8377
NAME T.Buero
NR 123
STATE T: 19.5 H: 45
TYPE LaCrosse
addr 05
battery_new 0
bufferedH
bufferedT
corr1 0
corr2 0
myJeeLink_MSGCNT 8377
myJeeLink_RAWMSG OK 9 5 1 4 171 45
myJeeLink_TIME 2021-12-03 15:39:16
previousH 45
previousT 19.5
sensorType 0=T(H)
READINGS:
2021-12-01 23:46:24 IODev myJeeLink
2021-12-03 15:39:16 battery ok
2021-12-03 15:39:16 humidity 45
2021-12-03 15:32:01 state T: 19.5 H: 45
2021-12-03 15:39:16 temperature 19.5
Attributes:
IODev myJeeLink
group Buero
room LaCrosse,Wohnung
021.12.03 16:11:43 1: my_StoreBatteryStatus Device: T.Wohn Event: battery: ok Model: undef
2021.12.03 16:11:47 1: my_StoreBatteryStatus Device: T.Gast Event: battery: ok Model: undef
2021.12.03 16:11:48 1: my_StoreBatteryStatus Device: T.Wohn Event: battery: ok Model: undef
2021.12.03 16:11:50 1: my_StoreBatteryStatus Device: T.Bad Event: battery: ok Model: undef
2021.12.03 16:11:51 1: my_StoreBatteryStatus Device: T.Buero Event: battery: ok Model: undef
2021.12.03 16:11:53 1: my_StoreBatteryStatus Device: T.Schlaf Event: battery: ok Model: undef
2021.12.03 16:12:01 1: my_StoreBatteryStatus Device: T.Buero Event: battery: ok Model: undef
2021.12.03 16:12:03 1: my_StoreBatteryStatus Device: T.Schlaf Event: battery: ok Model: undef
2021.12.03 16:12:11 1: my_StoreBatteryStatus Device: T.Buero Event: battery: ok Model: undef
2021.12.03 16:12:13 1: my_StoreBatteryStatus Device: T.Schlaf Event: battery: ok Model: undef
2021.12.03 16:12:23 1: my_StoreBatteryStatus Device: T.Wohn Event: battery: ok Model: undef
2021.12.03 16:12:27 1: my_StoreBatteryStatus Device: T.Gast Event: battery: ok Model: undef
2021.12.03 16:12:28 1: my_StoreBatteryStatus Device: T.Wohn Event: battery: ok Model: undef
2021.12.03 16:12:30 1: my_StoreBatteryStatus Device: T.Bad Event: battery: ok Model: undef
2021.12.03 16:12:33 1: my_StoreBatteryStatus Device: T.Wohn Event: battery: ok Model: undef
2021.12.03 16:12:34 1: my_StoreBatteryStatus Device: HmIP_HZ_Wohnzimmer Event: battery: low Model: undef
2021.12.03 16:12:35 1: my_StoreBatteryStatus Device: T.Bad Event: battery: ok Model: undef
2021.12.03 16:12:36 1: my_StoreBatteryStatus Device: HmIP_FT_Gaestezimmer Event: battery: ok Model: undef
2021.12.03 16:12:36 1: my_StoreBatteryStatus Device: HmIP_FT_Gaestezimmer Event: battery: ok Model: undef
2021.12.03 16:12:37 1: my_StoreBatteryStatus Device: T.Gast Event: battery: ok Model: undef
2021.12.03 16:12:38 1: my_StoreBatteryStatus Device: T.Wohn Event: battery: ok Model: undef
2021.12.03 16:12:40 1: my_StoreBatteryStatus Device: T.Bad Event: battery: ok Model: undef
2021.12.03 16:12:43 1: my_StoreBatteryStatus Device: T.Wohn Event: battery: ok Model: undef
2021.12.03 16:12:45 1: my_StoreBatteryStatus Device: T.Bad Event: battery: ok Model: undef
2021.12.03 16:12:47 1: my_StoreBatteryStatus Device: T.Gast Event: battery: ok Model: undef
2021.12.03 16:12:48 1: my_StoreBatteryStatus Device: T.Wohn Event: battery: ok Model: undef
2021.12.03 16:12:51 1: my_StoreBatteryStatus Device: T.Buero Event: battery: ok Model: undef
2021.12.03 16:12:53 1: my_StoreBatteryStatus Device: T.Schlaf Event: battery: ok Model: undef
2021.12.03 16:13:01 1: my_StoreBatteryStatus Device: T.Buero Event: battery: ok Model: undef
2021.12.03 16:13:03 1: my_StoreBatteryStatus Device: T.Schlaf Event: battery: ok Model: undef
2021.12.03 16:13:11 1: my_StoreBatteryStatus Device: T.Buero Event: battery: ok Model: undef
2021.12.03 16:13:13 1: my_StoreBatteryStatus Device: T.Schlaf Event: battery: ok Model: undef
2021.12.03 16:13:21 1: my_StoreBatteryStatus Device: HmIP_STHD_Wohnzimmer Event: battery: ok Model: undef
2021.12.03 16:13:22 1: my_StoreBatteryStatus Device: HmIP_STHD_Schlafzimmer Event: battery: ok Model: undef
2021.12.03 16:13:23 1: my_StoreBatteryStatus Device: T.Wohn Event: battery: ok Model: undef
2021.12.03 16:13:25 1: my_StoreBatteryStatus Device: T.Bad Event: battery: ok Model: undef
2021.12.03 16:13:27 1: my_StoreBatteryStatus Device: T.Gast Event: battery: ok Model: undef
2021.12.03 16:13:30 1: my_StoreBatteryStatus Device: T.Bad Event: battery: ok Model: undef
2021.12.03 16:13:33 1: my_StoreBatteryStatus Device: T.Wohn Event: battery: ok Model: undef
2021.12.03 16:13:35 1: my_StoreBatteryStatus Device: T.Bad Event: battery: ok Model: undef
2021.12.03 16:13:37 1: my_StoreBatteryStatus Device: T.Gast Event: battery: ok Model: undef
2021.12.03 16:13:40 1: my_StoreBatteryStatus Device: T.Bad Event: battery: ok Model: undef
2021.12.03 16:13:43 1: my_StoreBatteryStatus Device: T.Wohn Event: battery: ok Model: undef
2021.12.03 16:13:47 1: my_StoreBatteryStatus Device: T.Gast Event: battery: ok Model: undef
2021.12.03 16:13:50 1: my_StoreBatteryStatus Device: T.Bad Event: battery: ok Model: undef
2021.12.03 16:13:51 1: my_StoreBatteryStatus Device: T.Buero Event: battery: ok Model: undef
2021.12.03 16:13:53 1: my_StoreBatteryStatus Device: T.Schlaf Event: battery: ok Model: undef
2021.12.03 16:14:01 1: my_StoreBatteryStatus Device: T.Buero Event: battery: ok Model: undef
2021.12.03 16:14:03 1: my_StoreBatteryStatus Device: T.Schlaf Event: battery: ok Model: undef
2021.12.03 16:14:11 1: my_StoreBatteryStatus Device: T.Buero Event: battery: ok Model: undef
2021.12.03 16:14:13 1: my_StoreBatteryStatus Device: T.Schlaf Event: battery: ok Model: undef
2021.12.03 16:14:14 1: my_StoreBatteryStatus Device: HmIP_AT_Balkon Event: battery: ok Model: undef
2021.12.03 16:14:14 1: my_StoreBatteryStatus Device: HmIP_AT_Balkon Event: battery: ok Model: undef
Zitat von: DonJuan am 03 Dezember 2021, 20:44:57
Vielen Dank, Joachim. Eingespielt und schon tauchten die Geräte auf.
Jetzt muss ich mal abwarten und gucken, wann die "schwache" Batterie angezeigt wird. Im Moment behauptet das System noch, dass die Batterien i. O. sind.
Gruss Dennis
setreading Devicename battery low
setreading T.Buero battery low
#########################################################################
# 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 BatteryStatusFunction($$)
{
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 $TYPE = InternalVal($Device, "TYPE", "undef"); # MAX!
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";
###############################
# Here you can change the variables to fit your installation.
#
my $text_now = "Die Batterien von $Device müssen JETZT gewechselt werden!"; #Text for changing battery now
my $text_soon = "Die Batterien von $Device sollten bald gewechselt werden!"; #Text for changing battery soon
my $text_changed = "Batterie zuletzt gewechselt: "; #Text for last change
my $BatteryStatus = "BatterieStatus"; #Name of the Dummy for status
my $BatteryStatusBot = "BatterieStatusBot"; #Name of the Dummy for status of send messages
my $BatteryChanged = "BatterieWechsel"; #Name of the Dummy for battery changed information
################################
# Here you choos your message device and how to send
# comment the device you do not want to use
#
# TelegramBot
my $msg = "set TelegramBot message \@\@User ";
#
# msg-command
# my $msg = "msg \@User title='Battery Check' ";
#
# Pushover
# my $msg = "set Pushover msg device=User title='Battery Check' ";
# 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" || $DeviceNameParts[0] eq "MAX")
#{
# 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($BatteryStatusBot, $SignalDevice, "undef") eq "undef")
{
fhem("setreading $BatteryStatusBot $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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $BatteryChanged $Device $text_changed");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
# status is "ok" so we set to 100% (we don't know better)
fhem("setreading $BatteryStatus $Device 100");
}
else
{
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
# status is NOT "ok" ("low") so we set to 0% (we don't know better)
fhem("setreading $BatteryStatus $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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $BatteryChanged $Device $text_changed");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
# set battery value to 100%
fhem("setreading $BatteryStatus $Device 100");
}
elsif(($ActBatLevel - $MinBatLevel) > (2 * $RemainingVoltageQuater))
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif(($ActBatLevel - $MinBatLevel) > (1 * $RemainingVoltageQuater))
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $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 $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
if(ReadingsVal($Device, "motorErr", "ok") eq "ValveErrorPosition")
{
fhem($msg." ".$text_now);
}
else
{
fhem($msg." ".$text_soon);
}
}
}
else
{
# between 0% and 25%
fhem("setreading $BatteryStatus $Device 25");
}
}
else
{
# totally empty
fhem("setreading $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $BatteryStatus $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 $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $BatteryStatus $Device 25");
# maybe already send a message! Easy possible with new signal states
}
else
{
# totally empty (below 5%)
fhem("setreading $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
}
}
##############################################
# MAX! Devices
##############################################
elsif(($BatteryType[0] eq "battery") && ($TYPE eq "MAX"))
{
if(ReadingsVal($Device, "battery", "low") eq "ok")
{
# check if battery was low before -> possibly changed
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") eq "low")
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $BatteryChanged $Device $text_changed");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
# status is "ok" so we set to 100% (we don't know better)
fhem("setreading $BatteryStatus $Device 100");
}
else
{
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
# status is NOT "ok" ("low") so we set to 0% (we don't know better)
fhem("setreading $BatteryStatus $Device 0");
}
}
##############################################
# HMCCU Devices
##############################################
elsif($BatteryType[0] eq "battery" && (InternalVal($Device, "TYPE", "undef") eq "HMCCUDEV" || InternalVal($Device, "TYPE", "undef") eq "LaCrosse"))
{
if(ReadingsVal($Device, "battery", "low") eq "ok")
{
# check if battery was low before -> possibly changed
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $BatteryChanged $Device $text_changed");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
# status is "ok" so we set to 100% (we don't know better)
fhem("setreading $BatteryStatus $Device 100");
}
else
{
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
# status is NOT "ok" ("low") so we set to 0% (we don't know better)
fhem("setreading $BatteryStatus $Device 0");
}
}
##################################################
# Helper for readingsGroup BatteryStatus:
# sets the icon and icon color depending on "calculated" percentage value
sub SetBatterieIcon($$)
{
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;
}
}
ZitatHier muss lediglich das Wort "User" durch den TelegramNamen des Empfängers geändert werden.
Zitat von: DonJuan am 04 Dezember 2021, 00:24:08
So, ein "kleiner" Fehler war noch drin. Jedenfalls hatte ich eine "}" zuviel. Daher funktionierte die Benachrichtigung per Telegram nicht. Ansonsten funktioniert es nun.
Ich kopiere hier mal den ganzen Code rein. So für den Fall der Fälle.
Danke nochmal.
Zitat von: DonJuan am 04 Dezember 2021, 00:24:08
Eine letzte Frage: Zum Senden mit Telegram steht in dem Code "\@\@User". Aber wenn ich da "\@\@<msgChat>" eintrage, dann bekomme ich im Log einen Fehler. Schreibe ich aber "\@<msgChatID>" dann funktioniert es. Ist das so richtig? Oder was versteht ihr unter
Zitat von: Amenophis86 am 03 Dezember 2021, 23:24:58
Danke Joachim fürs übernehmen.
Zitat von: Amenophis86 am 03 Dezember 2021, 23:24:58
Da ich bei mir mit dem neuen Haus auf KNX umgestellt habe, habe ich hier sehr wenig gemacht und aktuell andere Prios. Sollte sich jemand anbieten können wir den Thread gerne schließen und auf eine neue Version verweisen, die weiter gepflegt wird.
Zitat von: MadMax-FHEM am 04 Dezember 2021, 09:25:35
Ich hab meinen Code noch mal kontrolliert: der stimmt!! Vermutlich hast du falsch ANgefügt! Weil ich hatte ja geschrieben: einfach einen weiteren Block AN das letzte MAX! dran.
Also NACH dem MAX! Block aber VOR die letzte schließende Klammer der Sub (so war MEINE Idee).
Ich bin fast sicher, dass dein komplett geposteter Code einen Fehler hat?
(ich werde dann in Ruhe die Klammern noch mal checken aber auf den ersten schnellen Blick meldet mein Editor einen "Klammer-Mismatch")
EDIT: in deinem Gesamt-Post ist definitiv ein Fehler drin!! Bei dir ist die Readingsgroup-Sub IN der Batterie-Sub "mit drin"! Das muss eigentlich einen Fehler geben?
EDIT: in dem was im ersten Post verlinkt ist nach git (und da habe ich meine Erweiterungsgrundlage her) sindZWEI subsdrin! Korrigiere: DREI subs. D.h. der Block von mir muss einfach ans Ende der ersten Sub, bevor diese die schließende Klammer hat...
Hmm, wie gesagt der Code ist nicht ganz von mir aber ich würde denken, dass dort die PEER-ID oder der PEER-User-Name hin muss...
Gruß, Joachim
Zitat von: MadMax-FHEM am 03 Dezember 2021, 16:30:53Wo kann ich den aktuellen Code inkl. LaCrosse finden?
Ok, habe LaCrosse auch mal integriert (so ich denek)...
...also obigen Code angepasst/erweitert.
Bin gespannt, ob es tut...
Zitat von: Fredi69 am 24 Januar 2022, 12:32:14
Wo kann ich den aktuellen Code inkl. LaCrosse finden?
Vielen Dank
Fredi
Internals:
DEF sensor 12 IODev=HUEBridge01
FUUID 61edfd0e-f33f-0af0-cfb6-305e5233c5215efe
FVERSION 31_HUEDevice.pm:0.255380/2022-01-21
ID S12
INTERVAL
IODev HUEBridge01
NAME HUESensor12
NR 625
STATE 4002
TYPE HUEDevice
has_v2_api 1
inputs 4
manufacturername Signify Netherlands B.V.
modelid RWL021
name Hue dimmer switch Terrasse
on 1
productname Hue dimmer switch
reachable 1
swversion 6.1.1.28573
type ZLLSwitch
uniqueid 00:17:88:01:08:05:c8:89-02-fc00
v2_id 33f017a9-6a7a-4e90-8c9e-1c4afc05337b
Helper:
DBLOG:
battery:
MyDBlog:
TIME 1643035325.80401
VALUE 95
batteryPercent:
MyDBlog:
TIME 1643035325.80401
VALUE 95
batteryState:
MyDBlog:
TIME 1643035325.80401
VALUE normal
READINGS:
2022-01-24 13:46:46 IODev HUEBridge01
2022-01-24 15:42:05 battery 95
2022-01-24 15:42:05 batteryPercent 95
2022-01-24 15:42:05 batteryState normal
2022-01-18 21:46:22 reachable 1
2022-01-18 21:46:22 state 4002
helper:
devtype S
update_timeout 1
capabilities:
inputs:
HASH(0x69bb938)
HASH(0x69bbb60)
HASH(0x69bbd88)
HASH(0x69bbfb0)
configList:
events:
HASH(0x6a0b1e0)
HASH(0x6a0b2a0)
HASH(0x6a0b3d8)
HASH(0x6a0b468)
json:
diversityid 73bbabea-3420-499a-9856-46bf437e119b
manufacturername Signify Netherlands B.V.
modelid RWL021
name Hue dimmer switch Terrasse
productname Hue dimmer switch
swversion 6.1.1.28573
type ZLLSwitch
uniqueid 00:17:88:01:08:05:c8:89-02-fc00
capabilities:
inputs:
HASH(0x6d62310)
HASH(0x6f78558)
HASH(0x6ee6070)
HASH(0x6eda898)
config:
battery 95
pending:
state:
buttonevent 4002
lastupdated 2022-01-18T20:46:22
swupdate:
lastinstall 2020-05-26T22:16:53
state noupdates
setList:
Attributes:
IODev HUEBridge01
alias Hue dimmer switch Terrasse
group HUESensor
icon hue_filled_hds
model RWL021
room HUEDevice
##############################################
# 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");
}
##############################################
# ZWave Devices
##############################################
elsif($BatteryType[0] eq "battery" && (InternalVal($Device, "TYPE", "undef") eq "ZWave" || InternalVal($Device, "TYPE", "undef") eq "HUEDevice"))
###############################
# Here you can change the variables to fit your installation.
#
my $text_now = "Die Batterien von $Device müssen JETZT gewechselt werden!"; #Text for changing battery now
my $text_soon = "Die Batterien von $Device sollten bald gewechselt werden!"; #Text for changing battery soon
###############################
# Here you can change the variables to fit your installation.
#
my $SendName = $Device;
if(AttrVal($Device, "alias", "n.a.") ne "n.a.")
{
$SendName = AttrVal($Device, "alias", "n.a.");
}
my $text_now = "Die Batterien von $SendName müssen JETZT gewechselt werden!"; #Text for changing battery now
my $text_soon = "Die Batterien von $SendName sollten bald gewechselt werden!"; #Text for changing battery soon
Zitat von: MadMax-FHEM am 24 Januar 2022, 16:48:10...
Poste doch mal ein list der Homematic-Devices.
...
Internals:
CUL_0_MSGCNT 11
CUL_0_RAWMSG A0DD2A6416AABA42CD994019A0060::-66:CUL_0
CUL_0_RSSI -66
CUL_0_TIME 2022-01-24 19:20:19
DEF 6AABA4
FUUID 5e70d1ab-f33f-0af0-8758-af129eb92a7578b2
HMLAN1_MSGCNT 11
HMLAN1_RAWMSG E6AABA4,0000,00B24B5F,FF,FFB9,D2A6416AABA42CD994019A0060
HMLAN1_RSSI -71
HMLAN1_TIME 2022-01-24 19:20:19
HMLAN2_MSGCNT 11
HMLAN2_RAWMSG E6AABA4,0000,4DA922E9,FF,FFC2,D2A6416AABA42CD994019A0060
HMLAN2_RSSI -62
HMLAN2_TIME 2022-01-24 19:20:19
HMLAN3_MSGCNT 10
HMLAN3_RAWMSG E6AABA4,0000,75A77186,FF,FFBB,D2A6416AABA42CD994019A0060
HMLAN3_RSSI -69
HMLAN3_TIME 2022-01-24 19:20:19
IODev CUL_0
LASTInputDev HMLAN2
MSGCNT 43
NAME Aussen_Garten_Bewegungmelder_Haustuer
NR 553
NTFY_ORDER 48-Aussen_Garten_Bewegungmelder_Haustuer
STATE noMotion
TYPE CUL_HM
chanNo 01
disableNotifyFn 1
lastMsg No:D2 - t:41 s:6AABA4 d:2CD994 019A0060
protLastRcv 2022-01-24 19:20:19
protRcv 9 last_at:2022-01-24 19:20:19
protSnd 9 last_at:2022-01-24 19:20:19
protState CMDs_done
rssi_at_CUL_0 cnt:11 min:-66 max:-59.5 avg:-61.68 lst:-66
rssi_at_HMLAN1 cnt:11 min:-71 max:-66 avg:-68.18 lst:-71
rssi_at_HMLAN2 cnt:11 min:-79 max:-58 avg:-70.81 lst:-62
rssi_at_HMLAN3 cnt:10 min:-76 max:-69 avg:-73.2 lst:-69
Helper:
DBLOG:
battery:
MyDBlog:
TIME 1643048419.46738
VALUE ok
brightness:
MyDBlog:
TIME 1643048419.46738
VALUE 0
motion:
MyDBlog:
TIME 1643048481.28878
VALUE off
motionCount:
MyDBlog:
TIME 1643048419.46738
VALUE 154_next:60s
motionDuration:
MyDBlog:
TIME 1643048481.28878
VALUE 62
READINGS:
2022-01-24 19:23:03 Activity alive
2020-03-18 12:33:32 CommandAccepted yes
2020-03-17 14:36:01 D-firmware 1.6
2020-03-17 14:36:01 D-serialNr PEQ0659029
2022-01-24 19:20:19 IODev CUL_0
2020-03-18 12:43:35 PairedTo 0x2CD994
2020-03-18 12:33:29 R-brightFilter 7
2020-03-18 12:33:29 R-captInInterval off
2020-03-18 12:33:29 R-evtFltrNum 1
2020-03-18 12:33:29 R-evtFltrPeriod 1 s
2020-03-18 12:43:36 R-minInterval 60
2020-03-17 14:36:02 R-pairCentral 0x2CD994
2020-03-18 12:33:29 R-sign off
2020-03-18 12:43:35 RegL_00. 00:00 02:01 0A:2C 0B:D9 0C:94
2020-03-18 12:43:36 RegL_01. 00:00 01:12 02:72 08:00 22:00
2022-01-24 19:20:19 battery ok
2022-01-24 19:20:19 brightness 0
2021-08-09 22:51:26 cfgState ok
2022-01-24 19:20:19 commState CMDs_done
2022-01-24 19:21:21 motion off
2022-01-24 19:20:19 motionCount 154_next:60s
2022-01-24 19:21:21 motionDuration 62
2022-01-24 19:21:21 state noMotion
2022-01-24 19:20:19 trigger_cnt 154
helper:
HM_CMDNR 210
lastMsgTm 1643048419.27872
mId 005D
peerFriend peerAct,peerVirt
peerIDsState complete
peerOpt 4:motionDetector
regLst 0,1,4p
rxType 28
supp_Pair_Rep 0
ack:
cmds:
TmplKey :no:1643037182.58033
TmplTs 1643037182.58033
cmdKey 1:1:0::Aussen_Garten_Bewegungmelder_Haustuer:005D:01:
cmdLst:
assignHmKey noArg
clear [({msgErrors}|msgEvents|rssi|attack|trigger|register|oldRegs|readings|all)]
deviceRename -newName-
fwUpdate -filename- [-bootTime-]
getConfig noArg
getDevInfo noArg
getRegRaw (List0|List1|List2|List3|List4|List5|List6|List7) [-peerChn-]
peerBulk -peer1,peer2,...- [({set}|unset)]
peerChan -btnNumber- -actChn- [({single})] [({set}|unset)] [actor|remote|both]
raw -data- [...]
regBulk -list-.-peerChn- -addr1:data1- [-addr2:data2-]...
regSet [(prep|{exec})] -regName- -value- [-peerChn-]
reset noArg
sign [(on|{off})]
tplDel -tplDel-
tplSet_0 -tplChan-
trgEventL -peer- -condition-
trgEventS -peer- -condition-
trgPressL [(-peer-|{all})]
trgPressS [(-peer-|{all})]
unpair noArg
lst:
condition slider,0,1,255
peer
peerOpt
tplChan
tplDel
tplPeer
rtrvLst:
cmdList [({short}|long)]
deviceInfo [({short}|long)]
list [({normal}|full)]
param -param-
reg -addr- -list- [-peerChn-]
regList noArg
regTable noArg
regVal -addr- -list- [-peerChn-]
saveConfig [-filename-]
tplInfo noArg
expert:
def 1
det 0
raw 1
tpl 0
io:
flgs 0
newChn +6AABA4,00,00,00
nextSend 1643048419.43768
rxt 2
vccu VCCU
p:
6AABA4
00
00
00
prefIO:
CUL_0
mRssi:
mNo D2
io:
CUL_0:
-62
-62
HMLAN1:
-71
-71
HMLAN2:
-62
-62
HMLAN3:
-69
-69
peerIDsH:
00000000 broadcast
prt:
bErr 0
sProc 0
sleeping 1
rspWait:
q:
qReqConf
qReqStat
role:
chn 1
dev 1
rpt:
IO CUL_0
flg A
ts 1643048419.27872
ack:
HASH(0x6223cb8)
D280022CD9946AABA401010000
rssi:
at_CUL_0:
avg -61.6818181818182
cnt 11
lst -66
max -59.5
min -66
at_HMLAN1:
avg -68.1818181818182
cnt 11
lst -71
max -66
min -71
at_HMLAN2:
avg -70.8181818181818
cnt 11
lst -62
max -58
min -79
at_HMLAN3:
avg -73.2
cnt 10
lst -69
max -69
min -76
tmpl:
Attributes:
DbLogInclude brightness
IOgrp VCCU:CUL_0
actCycle 000:10
actStatus alive
alias Bewegungsmelder Haustür
autoReadReg 4_reqStatus
comment Inbetriebnahme: 17.03.2020
expert defReg,rawReg
firmware 1.6
group Bewegungsmelder
icon people_sensor
model HM-SEN-MDIR-SM
peerIDs 00000000
room Aussen,Übersicht
serialNr PEQ0659029
showtime 1
subType motionDetector
##################################################
# Helper for readingsGroup BatteryStatus:
# sets the icon and icon color depending on "calculated" percentage value
sub SetBatterieIcon($$)
{
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;
}
##################################################
# Helper for readingsGroup BatteryStatus:
# sets the icon and icon color depending on "calculated" percentage value
sub SetBatterieIcon($$)
{
my ($Device, $Value) = @_;
my $Icon = "measure_battery_" . "$Value"; # here the matching icon is "set"
# Log3(undef, 1, "my_SetBatteryIcon Device: $Device Value: $Value");
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;
}
Internals:
CFGFN /opt/fhem/FHEM/CFG/13_mqtt.cfg
FUUID 617a2729-f33f-d2f4-5e7e-67421914707b79af
IODev Mosquitto
NAME BueroChris
NR 288
STATE close
TYPE MQTT_DEVICE
eventCount 2
READINGS:
2022-10-19 08:18:46 IODev Mosquitto
2022-10-19 05:47:23 announce {"id":"mibueoben","model":"SHDW-2","mac":"E8DB84D3BA82","ip":"192.168.178.32","new_fw":false,"fw_ver":"xxxxxxxx-yyyyyyy/va.bb.c-eeeeee12"}
2022-10-19 05:47:23 batteryPercent 97
2022-10-19 08:18:50 batteryState ok
2022-10-19 05:47:23 error 0
2022-10-19 05:47:23 fw_ver xxxxxxxx-yyyyyyy/va.bb.c-eeeeee12
2022-10-19 05:47:23 id mibueoben
2022-10-19 05:47:23 ip 190.132.150.32
2022-10-19 05:47:23 mac E7DA84B3BC92
2022-10-19 05:47:23 model SHDW-2
2022-10-19 05:47:23 new_fw 0
2022-10-19 05:48:54 online false
2022-10-17 10:01:35 state close
2022-10-19 08:18:50 transmission-state subscription acknowledged
message_ids:
sets:
subscribe:
shellies/mibueoben/announce
shellies/mibueoben/sensor/battery
shellies/mibueoben/sensor/error
shellies/mibueoben/online
shellies/mibueoben/sensor/state
subscribeExpr:
^shellies\/mibueoben\/announce$
^shellies\/mibueoben\/sensor\/battery$
^shellies\/mibueoben\/sensor\/error$
^shellies\/mibueoben\/online$
^shellies\/mibueoben\/sensor\/state$
subscribeQos:
shellies/mibueoben/announce 0
shellies/mibueoben/online 0
shellies/mibueoben/sensor/battery 0
shellies/mibueoben/sensor/error 0
shellies/mibueoben/sensor/state 0
subscribeReadings:
shellies/mibueoben/announce:
cmd
name announce
shellies/mibueoben/online:
cmd
name online
shellies/mibueoben/sensor/battery:
cmd
name batteryPercent
shellies/mibueoben/sensor/error:
cmd
name error
shellies/mibueoben/sensor/state:
cmd
name state
Attributes:
DbLogExclude .*
alias Fenster Büro Chris
comment IP: 190.132.150.32
devStateIcon open:fts_window_1wbb_open@red close:fts_window_1w@black
group Chris Buero
room Buero Chris
subscribeReading_announce shellies/mibueoben/announce
subscribeReading_batteryPercent shellies/mibueoben/sensor/battery
subscribeReading_error shellies/mibueoben/sensor/error
subscribeReading_online shellies/mibueoben/online
subscribeReading_state shellies/mibueoben/sensor/state
userReadings batteryState { return "ok" if(ReadingsVal("BueroChris","batteryPercent","0"))>"25"; return "low"}
userattr subscribeReading_state subscribeReading_batteryPercent subscribeReading_error subscribeReading_announce subscribeReading_online
Internals:
CFGFN /opt/fhem/FHEM/CFG/21_heizung.cfg
DEF FritzSmart:09995_0702078 actuator,tempSensor
FUUID 6006cddc-f33f-d2f4-8485-208a926f2f4ce162
FritzSmart_MSGCNT 37
FritzSmart_TIME 2022-10-19 11:18:49
IODev FritzSmart
LASTInputDev FritzSmart
MSGCNT 37
NAME HzMiChBu
NR 400
STATE desired-temp: 14.0 C
TYPE FBDECT
eventCount 37
id 09995_0702078
props actuator,tempSensor
webCmd desired-temp
READINGS:
2022-10-19 11:18:49 AIN 09995 0702128
2022-10-19 11:18:49 FBNAME Büro Chris
2022-10-19 11:18:49 FBPROP actuator,tempSensor
2022-10-19 11:18:49 FBTYPE FRITZ!DECT 301
2022-10-19 11:18:49 ID 20
2022-10-19 08:18:46 IODev FritzSmart
2022-10-19 11:18:49 battery 80 %
2022-10-19 11:18:49 batteryPercent 80
2022-10-19 11:18:49 batteryState ok
2022-10-19 11:18:49 batterylow 0
2022-10-19 11:18:49 boostactive no
2022-10-19 11:18:49 boostactiveendtime N/A
2022-10-19 11:18:49 day-temp 21.0 C
2022-10-19 11:18:49 desired-temp 14.0 C
2022-10-19 11:18:49 devicelock no
2022-10-19 11:18:49 errorcode noError (0)
2022-10-19 11:18:49 fwversion 05.02
2022-10-19 11:18:49 holidayactive no
2022-10-19 11:18:49 locked no
2022-10-19 11:18:49 nextPeriodStart 1970-01-01 01:00:00
2022-10-19 11:18:49 nextPeriodTemp 21.0 C
2022-10-19 11:18:49 night-temp 16.0 C
2022-10-19 11:18:49 present yes
2022-10-19 11:18:49 state desired-temp: 14.0 C
2022-10-19 11:18:49 summeractive no
2022-10-19 11:18:49 tempadjust 0.0 C
2022-10-19 11:18:49 temperature 22.5 C (measured)
2022-10-19 11:18:49 windowopenactiv no
2022-10-19 11:18:49 windowopenactiveendtime N/A
Attributes:
DbLogExclude .*
IODev FritzSmart
alias Heizköper Büro
event-min-interval power:120
room DG_MI->Buero Chris
verbose 0
elsif($BatteryType[0] eq "batteryLevel" && InternalVal($Device, "TYPE", "undef") eq "XiaomiFlowerSens" || InternalVal($Device, "TYPE", "undef") eq "FBDECT")
elsif($BatteryType[0] eq "batteryLevel" && (InternalVal($Device, "TYPE", "undef") eq "XiaomiFlowerSens" || InternalVal($Device, "TYPE", "undef") eq "FBDECT"))
my $Room = "Z_System->BatteryCheck"; #room for the dummys
defmod BD.Fenster CUL_HM 697742
attr BD.Fenster .mId 00C7
attr BD.Fenster DbLogExclude .*
attr BD.Fenster IOgrp VCCU:CUL_1
attr BD.Fenster actCycle 002:50
attr BD.Fenster actStatus alive
attr BD.Fenster alias Badezimmerfenster
attr BD.Fenster autoReadReg 4_reqStatus
attr BD.Fenster devStateIcon devStateIcon closed:fts_door open:fts_door_open
attr BD.Fenster event-on-change-reading .*
attr BD.Fenster expert defReg,rawReg
attr BD.Fenster firmware 1.0
attr BD.Fenster model HM-SEC-SCO
attr BD.Fenster peerIDs 00000000,6951BB03
attr BD.Fenster room 02_Mitte->Bad,CUL_HM
attr BD.Fenster serialNr PEQ0579708
attr BD.Fenster subType threeStateSensor
setstate BD.Fenster open
setstate BD.Fenster 2020-12-22 19:47:15 .D-devInfo 810101
setstate BD.Fenster 2020-12-22 19:47:15 .D-stc 80
setstate BD.Fenster 2019-01-10 19:22:08 .R-msgScPosA open
setstate BD.Fenster 2019-01-10 19:22:08 .R-msgScPosB closed
setstate BD.Fenster 2019-01-10 19:22:08 .R-transmDevTryMax 6
setstate BD.Fenster 2019-01-10 19:22:08 .R-transmitTryMax 6
setstate BD.Fenster 2023-08-02 22:12:18 .associatedWith BD.Fenster,BD.Fenster,BD.Thermostat_WindowRec
setstate BD.Fenster 2023-05-10 19:20:25 .peerListRDate 2023-05-10 19:20:25
setstate BD.Fenster 2023-08-04 20:15:21 .protLastRcv 20230804201521
setstate BD.Fenster 2023-08-02 22:21:33 Activity alive
setstate BD.Fenster 2021-10-09 17:50:01 CommandAccepted no
setstate BD.Fenster 2020-12-22 19:47:15 D-firmware 1.0
setstate BD.Fenster 2020-12-22 19:47:15 D-serialNr PEQ0579708
setstate BD.Fenster 2023-08-04 20:15:21 IODev CUL_1
setstate BD.Fenster 2023-05-10 19:20:24 PairedTo 0x753347
setstate BD.Fenster 2019-08-19 20:24:22 R-BD.Thermostat_WindowRec-expectAES off
setstate BD.Fenster 2019-08-19 20:24:22 R-BD.Thermostat_WindowRec-peerNeedsBurst on
setstate BD.Fenster 2019-01-10 19:22:08 R-cyclicInfoMsg on
setstate BD.Fenster 2019-01-10 19:22:08 R-eventDlyTime 0 s
setstate BD.Fenster 2019-01-10 19:22:08 R-pairCentral 0x753347
setstate BD.Fenster 2019-01-10 19:22:08 R-sabotageMsg on
setstate BD.Fenster 2019-01-10 19:22:08 R-sign on
setstate BD.Fenster 2023-05-10 19:20:23 RegL_00. 00:00 02:01 09:01 0A:75 0B:33 0C:47 10:01 14:06
setstate BD.Fenster 2023-05-10 19:20:25 RegL_01. 00:00 08:01 20:9C 21:00 30:06
setstate BD.Fenster 2023-05-10 19:20:26 RegL_04.BD.Thermostat_WindowRec 00:00 01:01
setstate BD.Fenster 2019-08-19 20:24:21 aesCommToDev ok
setstate BD.Fenster 2019-08-19 20:24:20 aesKeyNbr 00
setstate BD.Fenster 2023-08-04 20:15:21 alive yes
setstate BD.Fenster 2023-08-04 20:15:21 battery ok
setstate BD.Fenster 2023-05-31 18:57:29 cfgState ok
setstate BD.Fenster 2023-08-04 20:15:21 commState CMDs_done
setstate BD.Fenster 2023-08-04 20:15:21 contact open (to VCCU)
setstate BD.Fenster 2023-08-02 22:12:18 peerList BD.Thermostat_WindowRec
setstate BD.Fenster 2023-05-10 18:22:01 powerOn 2023-05-10 18:22:01
setstate BD.Fenster 2023-08-04 20:15:21 recentStateType info
setstate BD.Fenster 2023-08-04 20:15:21 sabotageError off
setstate BD.Fenster 2023-08-04 20:15:21 state open
setstate BD.Fenster 2020-12-22 19:12:22 trigDst_BD.Thermostat noConfig
setstate BD.Fenster 2023-08-04 11:25:22 trigger_cnt 180
Zitatattr BD.Fenster event-on-change-reading .*
sub Battery_Send_Alarm {
my ($Text) = @_;
#send message via TelegramBot
fhem("set TelegramBot message \@\@User $Text");
# use your own function
#SendAlarm($Text);
}
Und überallfhem($msg." ".
mitBattery_Send_Alarm(
ersetzt.batteryVoltage:batterymV.* {ReadingsNum($name,'batterymV',0)/1000}, batteryPercent:battery.* {ReadingsNum($name,'battery',0)}, batteryState {if (ReadingsNum($name, "battery", 0) > 25) {return "ok"} else {return "low"}}
define MQTT2_zigbee_Lidl_Kontakt_1 MQTT2_DEVICE zigbee_Lidl_Kontakt_1
attr MQTT2_zigbee_Lidl_Kontakt_1 userattr myBattWechsel my_batteryType
attr MQTT2_zigbee_Lidl_Kontakt_1 DbLogExclude .*
attr MQTT2_zigbee_Lidl_Kontakt_1 alias zigbee_Kontakt_Wohnungstuer
attr MQTT2_zigbee_Lidl_Kontakt_1 devStateIcon open:fts_window_1w_open@red closed:fts_window_1w@green Secure..true:secur_open@red Secure..false:secur_locked@gree online:10px-kreis-gruen offline:10px-kreis-rot
attr MQTT2_zigbee_Lidl_Kontakt_1 devicetopic zigbee2mqtt/Lidl_Kontakt_1
attr MQTT2_zigbee_Lidl_Kontakt_1 event-on-change-reading .*
attr MQTT2_zigbee_Lidl_Kontakt_1 genericDeviceType ContactSensor
attr MQTT2_zigbee_Lidl_Kontakt_1 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;;open:CONTACT_NOT_DETECTED
attr MQTT2_zigbee_Lidl_Kontakt_1 icon fts_window_1w
attr MQTT2_zigbee_Lidl_Kontakt_1 jsonMap contact:state
attr MQTT2_zigbee_Lidl_Kontakt_1 model zigbee2mqtt_ContactSensor
attr MQTT2_zigbee_Lidl_Kontakt_1 myBattWechsel 0
attr MQTT2_zigbee_Lidl_Kontakt_1 my_batteryType 2xAAA
attr MQTT2_zigbee_Lidl_Kontakt_1 readingList $DEVICETOPIC:.* { my $ret=json2nameValue($EVENT,'',$JSONMAP);; $ret->{state}=$ret->{state} eq 'true' ? 'closed' : 'open';; return $ret }\
zigbee2mqtt/Lidl_Kontakt_1/availability:.* availability
attr MQTT2_zigbee_Lidl_Kontakt_1 room Zimmer->Flur,Geräte->Zigbee
attr MQTT2_zigbee_Lidl_Kontakt_1 stateFormat availability\
state\
Battery: battery%\
Secure: tamper
attr MQTT2_zigbee_Lidl_Kontakt_1 userReadings batteryPercent {ReadingsNum($name,'battery','0')}, batteryState {if (ReadingsNum($name, "battery", 0) > 25) {return "ok"} else {return "low"}}
# CID zigbee_Lidl_Kontakt_1
# DEF zigbee_Lidl_Kontakt_1
# FUUID 637bcf1a-f33f-be0c-9804-9ecba85255e59624
# FVERSION 10_MQTT2_DEVICE.pm:0.279350/2023-09-05
# IODev mqtt2server
# LASTInputDev mqtt2server
# MSGCNT 74
# NAME MQTT2_zigbee_Lidl_Kontakt_1
# NR 237
# STATE online
#closed
# Battery: 41.5%
#Secure: false
# TYPE MQTT2_DEVICE
# eventCount 73
# mqtt2server_CONN mqtt2server_172.18.0.4_52536
# mqtt2server_MSGCNT 74
# mqtt2server_TIME 2023-11-22 21:04:02
# JSONMAP:
# contact state
# READINGS:
# 2023-11-21 02:10:42 IODev mqtt2server
# 2022-11-22 00:25:02 associatedWith MQTT2_zigbee_bridge
# 2022-11-21 20:19:24 attrTemplateVersion 20220622
# 2023-11-21 02:11:01 availability online
# 2023-11-22 21:04:02 battery 41.5
# 2023-11-22 21:04:02 batteryPercent 41.5
# 2023-11-22 21:04:02 batteryState ok
# 2023-11-22 21:04:02 battery_low false
# 2023-11-22 21:04:02 last_seen 2023-11-22T20:04:02.803Z
# 2023-11-22 21:04:02 linkquality 255
# 2023-11-22 21:04:02 state closed
# 2023-11-22 21:04:02 tamper false
#
setstate MQTT2_zigbee_Lidl_Kontakt_1 online\
closed\
Battery: 41.5%\
Secure: false
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-21 02:10:42 IODev mqtt2server
setstate MQTT2_zigbee_Lidl_Kontakt_1 2022-11-22 00:25:02 associatedWith MQTT2_zigbee_bridge
setstate MQTT2_zigbee_Lidl_Kontakt_1 2022-11-21 20:19:24 attrTemplateVersion 20220622
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-21 02:11:01 availability online
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-22 21:04:02 battery 41.5
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-22 21:04:02 batteryPercent 41.5
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-22 21:04:02 batteryState ok
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-22 21:04:02 battery_low false
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-22 21:04:02 last_seen 2023-11-22T20:04:02.803Z
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-22 21:04:02 linkquality 255
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-22 21:04:02 state closed
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-22 21:04:02 tamper false
Zitat#############################################
# XiaomiFlowerSens Devices
#############################################
elsif($BatteryType[0] eq "batteryLevel" && InternalVal($Device, "TYPE", "undef") eq "XiaomiFlowerSens")
gegen das hier tauschen: elsif($BatteryType[0] eq "batteryLevel" && (InternalVal($Device, "TYPE", "undef") eq "XiaomiFlowerSens" || InternalVal($Device, "TYPE", "undef") eq "MQTT2_DEVICE"))
bzw. damit nicht (plötzlich) alle MQTT2_DEVICE Devices "geprüft" werden (wobei auch entsprechend an dem battery-notify eingeschränkt werden kann bzw. eh nur Devices mit irgendwas Battery hier aufgerufen werden sollten?) elsif($BatteryType[0] eq "batteryLevel" && (InternalVal($Device, "TYPE", "undef") eq "XiaomiFlowerSens" || (InternalVal($Device, "TYPE", "undef") eq "MQTT2_DEVICE" && AttrVal($Device, "my_batteryType", "n.a.") ne "n.a.")))
EDIT: Klammerfehler korrigiert 8so hoffe/denke ich)elsif($BatteryType[0] eq "batteryLevel" && (InternalVal($Device, "TYPE", "undef") eq "XiaomiFlowerSens" || InternalVal($Device, "TYPE", "undef") eq "FBDECT"))
Es wird doch bei dem Device das Reading "batteryLevel" gelesen, oder? Dass hab ich bei "FRITZ!DECT 440" und FRITZ!DECT 301 aber nicht. ??? defmod rg_BatterieLevel readingsGroup .*:[Bb]atteryPercent
attr rg_BatterieLevel DbLogExclude .*
attr rg_BatterieLevel comment als doif: https://forum.fhem.de/index.php/topic,131349.msg1255415.html#msg1255415
attr rg_BatterieLevel notime 1
attr rg_BatterieLevel room System->BatteryCheck
attr rg_BatterieLevel valueFormat {my $value = ($VALUE =~ m/(\d+)/)?$1:$VALUE;;;; return "0" if( $value < 20 );;;; return "25" if( $value < 40 );;;; return "50" if( $value < 60 );;;; return "75" if( $value < 80 );;;; return "100";;;;}
attr rg_BatterieLevel valueIcon {'batteryPercent.0' => 'measure_battery_0@red','batteryPercent.25' => 'measure_battery_25@red','batteryPercent.50' => 'measure_battery_50@orange','batteryPercent.75' => 'measure_battery_75@green','batteryPercent.100' => 'measure_battery_100@green'}
#############################################
# MQTT2_DEVICE Devices that have my_batteryType attribute!
#############################################
elsif(InternalVal($Device, "TYPE", "undef") eq "MQTT2_DEVICE" && AttrVal($Device, "my_batteryType", "n.a.") ne "n.a.")
{
$ActBatLevel = ReadingsNum($Device, "batteryPercent", "0");
if($ActBatLevel > 75)
{
# set date/time for changed battery if it was low before (so probably a change happended)
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
}
EDIT: Klammer korrigiert... #############################################
# MQTT2_DEVICE Devices that have batteryPercent Reading
#############################################
elsif($BatteryType[0] eq "batteryPercent" && InternalVal($Device, "TYPE", "undef") eq "MQTT2_DEVICE")
{
$ActBatLevel = ReadingsNum($Device, "batteryPercent", "0");
if($ActBatLevel > 75)
{
# set date/time for changed battery if it was low before (so probably a change happended)
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
}
EDIT: Klammer korrigiert... fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
} # <---
Zitat von: MadMax-FHEM am 23 November 2023, 19:37:26Geht es dir um FBDECT oder (wie ich dachte/denke) MQTT2_DEVICE?Um alle, zum Beispiel habe ich bei keinen meiner Device ein Reading: "batteryLevel". Verwenden tue ich mehrere Device von: Lidl / Sonnoff / TRADFRI (Ikea) - über Zigbee2MQTT angebunden und FBDECT Device: "FRITZ!DECT 440", "FRITZ!DECT 301".
Zitat von: MadMax-FHEM am 23 November 2023, 17:40:45Drum hab ich bei mir event-on-update für Batterie-Readings drinHabe ich jetzt (hoffe alle) eingetragen:
attr <Device> event-on-update-reading batteryPercent
Zitat von: MadMax-FHEM am 23 November 2023, 17:53:18(hast du die Beiträge hier [von mir] mal durch, ob nicht schon mal was gepostet wurde bzgl. batteryPercent oder weitere Abfragen? Leider landet das nicht in git)"batteryPercent" habe ich dem Thread keine Lösung gefunden. Der Code ist von dir:
Zitat von: MadMax-FHEM am 14 November 2022, 13:48:55eine Version hängt an
#############################################
# https://forum.fhem.de/index.php?msg=1245462
# 99_Batterycheck.pm - vom: 05 Dezember 2022, 16:00:50 von MadMax-FHEM
#
package main;
use strict;
use warnings;
use POSIX;
sub BatteryCheckUtils_Initialize($$)
{
my ($hash) = @_;
}
# Enter you functions below _this_ line.
#########################################################################
# 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 BatteryStatusFunction($$)
{
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 $TYPE = InternalVal($Device, "TYPE", "undef"); # MAX!
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";
###############################
# Here you can change the variables to fit your installation.
#
my $text_now = "Die Batterien von $Device müssen JETZT gewechselt werden!"; #Text for changing battery now
my $text_soon = "Die Batterien von $Device sollten bald gewechselt werden!"; #Text for changing battery soon
my $text_changed = "Batterie zuletzt gewechselt: "; #Text for last change
my $BatteryStatus = "BatterieStatus"; #Name of the Dummy for status
my $BatteryStatusBot = "BatterieStatusBot"; #Name of the Dummy for status of send messages
my $BatteryChanged = "BatterieWechsel"; #Name of the Dummy for battery changed information
################################
# Here you choos your message device and how to send
# comment the device you do not want to use
#
# TelegramBot
my $msg = "set WEB_TelegramBot message \@\@User ";
#
# msg-command
# my $msg = "msg \@User title='Battery Check' ";
#
# Pushover
# my $msg = "set Pushover msg device=User title='Battery Check' ";
# nächste Zeile war #
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" || $DeviceNameParts[0] eq "MAX")
{
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($BatteryStatusBot, $SignalDevice, "undef") eq "undef")
{
fhem("setreading $BatteryStatusBot $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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $BatteryChanged $Device $text_changed");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
# status is "ok" so we set to 100% (we don't know better)
fhem("setreading $BatteryStatus $Device 100");
}
else
{
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
# status is NOT "ok" ("low") so we set to 0% (we don't know better)
fhem("setreading $BatteryStatus $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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $BatteryChanged $Device $text_changed");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
# set battery value to 100%
fhem("setreading $BatteryStatus $Device 100");
}
elsif(($ActBatLevel - $MinBatLevel) > (2 * $RemainingVoltageQuater))
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif(($ActBatLevel - $MinBatLevel) > (1 * $RemainingVoltageQuater))
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $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 $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
if(ReadingsVal($Device, "motorErr", "ok") eq "ValveErrorPosition")
{
fhem($msg." ".$text_now);
}
else
{
fhem($msg." ".$text_soon);
}
}
}
else
{
# between 0% and 25%
fhem("setreading $BatteryStatus $Device 25");
}
}
else
{
# totally empty
fhem("setreading $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
}
}
##############################################
# ZWave and HUEDevice Devices
##############################################
#elsif($BatteryType[0] eq "battery" && InternalVal($Device, "TYPE", "undef") eq "ZWave")
elsif($BatteryType[0] eq "battery" && (InternalVal($Device, "TYPE", "undef") eq "ZWave" || InternalVal($Device, "TYPE", "undef") eq "HUEDevice"))
{
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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $BatteryStatus $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 $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
}
}
#############################################
# XiaomiFlowerSens and FBDECT Devices
#############################################
# elsif($BatteryType[0] eq "batteryLevel" && InternalVal($Device, "TYPE", "undef") eq "XiaomiFlowerSens")
elsif($BatteryType[0] eq "batteryLevel" && (InternalVal($Device, "TYPE", "undef") eq "XiaomiFlowerSens" || InternalVal($Device, "TYPE", "undef") eq "FBDECT"))
{
$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($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $BatteryStatus $Device 25");
# maybe already send a message! Easy possible with new signal states
}
else
{
# totally empty (below 5%)
fhem("setreading $BatteryStatus $Device 0");
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
}
}
##############################################
# MAX! Devices
##############################################
elsif(($BatteryType[0] eq "battery") && ($TYPE eq "MAX"))
{
if(ReadingsVal($Device, "battery", "low") eq "ok")
{
# check if battery was low before -> possibly changed
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") eq "low")
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $BatteryChanged $Device $text_changed");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
# status is "ok" so we set to 100% (we don't know better)
fhem("setreading $BatteryStatus $Device 100");
}
else
{
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
# status is NOT "ok" ("low") so we set to 0% (we don't know better)
fhem("setreading $BatteryStatus $Device 0");
}
}
##############################################
# HMCCU and LaCrosse Devices
##############################################
elsif($BatteryType[0] eq "battery" && (InternalVal($Device, "TYPE", "undef") eq "HMCCUDEV" || InternalVal($Device, "TYPE", "undef") eq "LaCrosse"))
{
if(ReadingsVal($Device, "battery", "low") eq "ok")
{
# check if battery was low before -> possibly changed
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $BatteryChanged $Device $text_changed");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
# status is "ok" so we set to 100% (we don't know better)
fhem("setreading $BatteryStatus $Device 100");
}
else
{
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
# status is NOT "ok" ("low") so we set to 0% (we don't know better)
fhem("setreading $BatteryStatus $Device 0");
}
}
#############################################
# MQTT2_DEVICE Devices that have batteryPercent Reading
#############################################
elsif($BatteryType[0] eq "batteryPercent" && InternalVal($Device, "TYPE", "undef") eq "MQTT2_DEVICE")
{
$ActBatLevel = ReadingsNum($Device, "batteryPercent", "0");
if($ActBatLevel > 75)
{
# set date/time for changed battery if it was low before (so probably a change happended)
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
}
}
##################################################
# Helper for readingsGroup BatteryStatus:
# sets the icon and icon color depending on "calculated" percentage value
sub SetBatterieIcon($$)
{
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;
}
#####################################################
# Start script once and delet after
sub BatteryStart()
{
#Define Dummys for script
my $BatteryStatus = "BatterieStatus"; #Name of the Dummy for status
my $BatteryStatusBot = "BatterieStatusBot"; #Name of the Dummy for status of send messages
my $BatteryChanged = "BatterieWechsel"; #Name of the Dummy for battery changed information
my $ReadingsGroup = "rgBatteryStatus"; #Name of the ReadingsGroup
my $Room = "System->BatteryCheck"; #room for the dummys
my $Notify = "NO.BatterieNotify"; #Name of the Notify for sending battery information
fhem("setdefaultattr room $Room; define $BatteryStatus dummy; define $BatteryStatusBot dummy; define $BatteryChanged dummy;
define $ReadingsGroup readingsGroup NAME=BatterieStatus:.*; attr $ReadingsGroup valueIcon {SetBatterieIcon(\$READING, \$VALUE)};
attr $ReadingsGroup mapping \$READING; setdefaultattr;");
#Set Readings for device with reading battery
my @bat_b = devspec2array("battery=.*");
for(my $x=0;$x<@bat_b;$x++)
{
my $stat_b = ReadingsVal($bat_b[$x],"battery","undef");
if($stat_b ne "undef")
{
BatteryStatusFunction($bat_b[$x],"battery: $stat_b");
}
}
#Set Readings for device with reading batteryLevel
my @bat_l = devspec2array("batteryLevel=.*");
for(my $x=0;$x<@bat_l;$x++)
{
my $stat_l = ReadingsVal($bat_l[$x],"batteryLevel","undef");
if($stat_l ne "undef")
{
BatteryStatusFunction($bat_l[$x],"batteryLevel: $stat_l");
}
}
fhem("define $Notify notify .*:battery.* {BatteryStatusFunction(\$NAME, \$EVENT)}; attr $Notify room $Room;")
}
1;
define FBDECT_HKV_301_WZ FBDECT FritzBoxHttp:09995_0507067 actuator,tempSensor
attr FBDECT_HKV_301_WZ userattr myBattWechsel my_batteryType
attr FBDECT_HKV_301_WZ DbLogExclude .*
attr FBDECT_HKV_301_WZ DbLogInclude temperature,batteryPercent,desired-temp
attr FBDECT_HKV_301_WZ alexaName Heizung Wohnzimmer
attr FBDECT_HKV_301_WZ alexaRoom Wohnzimmer
attr FBDECT_HKV_301_WZ alias AVM: Heizkörperregler FRITZ!DECT 301 WZ
attr FBDECT_HKV_301_WZ event-on-change-reading .*
attr FBDECT_HKV_301_WZ event-on-update-reading batteryPercent
attr FBDECT_HKV_301_WZ icon temp_control
attr FBDECT_HKV_301_WZ myBattWechsel 2023-09-25
attr FBDECT_HKV_301_WZ my_batteryType 2xAA
attr FBDECT_HKV_301_WZ readingsWatcher 3600,,battery,temperature
attr FBDECT_HKV_301_WZ room Zimmer->Wohnzimmer,Geräte->AVM
# DEF FritzBoxHttp:09995_0507067 actuator,tempSensor
# FUUID 60edd963-f33f-be0c-daed-7f5cc6fa51715a4f
# FVERSION 10_FBDECT.pm:0.250690/2021-10-13
# FritzBoxHttp_MSGCNT 20
# FritzBoxHttp_TIME 2023-11-23 20:52:53
# IODev FritzBoxHttp
# LASTInputDev FritzBoxHttp
# MSGCNT 20
# NAME FBDECT_HKV_301_WZ
# NR 134
# STATE desired-temp: 15.0 C
# TYPE FBDECT
# eventCount 22
# id 09995_0507067
# props actuator,tempSensor
# webCmd desired-temp
# Helper:
# DBLOG:
# batteryPercent:
# LOG_Db:
# TIME 1700769173.79331
# VALUE 90
# READINGS:
# 2023-11-23 20:52:53 AIN 09995 0507067
# 2023-11-23 20:52:53 FBNAME FRITZ!DECT 301 WZ
# 2023-11-23 20:52:53 FBPROP actuator,tempSensor
# 2023-11-23 20:52:53 FBTYPE FRITZ!DECT 301
# 2023-11-23 20:52:53 ID 17
# 2023-11-23 19:17:36 IODev FritzBoxHttp
# 2023-11-23 20:55:53 actifity alive
# 2023-11-23 20:52:53 battery 90 %
# 2023-11-23 20:52:53 batteryPercent 90
# 2023-11-23 20:52:53 batteryState ok
# 2023-11-23 20:52:53 batterylow 0
# 2023-11-23 20:52:53 boostactive no
# 2023-11-23 20:52:53 boostactiveendtime N/A
# 2023-11-23 20:52:53 day-temp 15.0 C
# 2023-11-23 20:52:53 desired-temp 15.0 C
# 2023-11-23 20:52:53 devicelock no
# 2023-11-23 20:52:53 errorcode noError (0)
# 2023-11-23 20:52:53 fwversion 05.08
# 2023-11-23 20:52:53 holidayactive no
# 2023-11-23 20:52:53 locked no
# 2023-11-23 20:52:53 nextPeriodStart 2023-11-23 22:00:00
# 2023-11-23 20:52:53 nextPeriodTemp 8.0 C
# 2023-11-23 20:52:53 night-temp 8.0 C
# 2023-11-23 20:52:53 present yes
# 2023-11-23 20:52:53 state desired-temp: 15.0 C
# 2023-11-23 20:52:53 summeractive no
# 2023-11-23 20:52:53 tempadjust 0.0 C
# 2023-11-23 20:52:53 temperature 20.0 C (measured)
# 2023-11-23 20:52:53 windowopenactiv no
# 2023-11-23 20:52:53 windowopenactiveendtime N/A
#
setstate FBDECT_HKV_301_WZ desired-temp: 15.0 C
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 AIN 09995 0507067
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 FBNAME FRITZ!DECT 301 WZ
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 FBPROP actuator,tempSensor
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 FBTYPE FRITZ!DECT 301
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 ID 17
setstate FBDECT_HKV_301_WZ 2023-11-23 19:17:36 IODev FritzBoxHttp
setstate FBDECT_HKV_301_WZ 2023-11-23 20:55:53 actifity alive
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 battery 90 %
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 batteryPercent 90
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 batteryState ok
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 batterylow 0
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 boostactive no
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 boostactiveendtime N/A
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 day-temp 15.0 C
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 desired-temp 15.0 C
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 devicelock no
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 errorcode noError (0)
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 fwversion 05.08
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 holidayactive no
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 locked no
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 nextPeriodStart 2023-11-23 22:00:00
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 nextPeriodTemp 8.0 C
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 night-temp 8.0 C
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 present yes
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 state desired-temp: 15.0 C
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 summeractive no
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 tempadjust 0.0 C
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 temperature 20.0 C (measured)
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 windowopenactiv no
setstate FBDECT_HKV_301_WZ 2023-11-23 20:52:53 windowopenactiveendtime N/A
define FBDECT_Taster_440 FBDECT FritzBoxHttp:13979_0436912 avmButton,tempSensor
attr FBDECT_Taster_440 userattr myBattWechsel my_batteryType
attr FBDECT_Taster_440 DbLogExclude .*
attr FBDECT_Taster_440 DbLogInclude rel_humidity,temperature
attr FBDECT_Taster_440 alias AVM: Taster FRITZ!DECT 440
attr FBDECT_Taster_440 devStateIcon yes:10px-kreis-gruen no:10px-kreis-rot
attr FBDECT_Taster_440 event-on-change-reading .*
attr FBDECT_Taster_440 event-on-update-reading batteryPercent
attr FBDECT_Taster_440 icon taster_ch
attr FBDECT_Taster_440 myBattWechsel 2023-08-01
attr FBDECT_Taster_440 my_batteryType 2xAAA
attr FBDECT_Taster_440 room Geräte->AVM
attr FBDECT_Taster_440 stateFormat present\
state_info
attr FBDECT_Taster_440 userReadings state_info {sprintf ("Temp: %.1f°C, Hum: %.1f%%, Dew: %.1f°C, Bat: %.0f%%", ReadingsNum($name,"temperature",0), ReadingsNum($name,"rel_humidity",0), ReadingsNum($name,"dewpoint",0), ReadingsNum($name,"batteryPercent",0))},\
schimmelt {sprintf ("%.1f°C",schimmelfreiMinTemp(ReadingsNum("$name","temperature",20),ReadingsNum("$name","rel_humidity",100),70))}
# DEF FritzBoxHttp:13979_0436912 avmButton,tempSensor
# FUUID 64d40558-f33f-be0c-8393-e96996b281816048
# FVERSION 10_FBDECT.pm:0.250690/2021-10-13
# FritzBoxHttp_MSGCNT 21
# FritzBoxHttp_TIME 2023-11-23 20:57:53
# IODev FritzBoxHttp
# LASTInputDev FritzBoxHttp
# MSGCNT 21
# NAME FBDECT_Taster_440
# NR 289
# STATE yes
#Temp: 20.0°C, Hum: 62.0%, Dew: 12.5°C, Bat: 100%
# TYPE FBDECT
# eventCount 23
# id 13979_0436912
# props avmButton,tempSensor
# Helper:
# DBLOG:
# rel_humidity:
# LOG_Db:
# TIME 1700764373.77117
# VALUE 62
# READINGS:
# 2023-11-23 20:57:53 AIN 13979 0436912
# 2023-11-23 20:57:53 FBNAME FRITZ!DECT 440
# 2023-11-23 20:57:53 FBPROP avmButton,tempSensor
# 2023-11-23 20:57:53 FBTYPE FRITZ!DECT 440
# 2023-11-23 20:57:53 ID 18
# 2023-11-23 19:17:36 IODev FritzBoxHttp
# 2023-11-23 19:32:53 absoluteHumidity 10.7
# 2023-11-23 20:57:53 battery 100 %
# 2023-11-23 20:57:53 batteryPercent 100
# 2023-11-23 20:57:53 batteryState ok
# 2023-11-23 20:57:53 batterylow 0
# 2023-11-23 19:32:53 dewpoint 12.5
# 2023-11-23 20:57:53 fwversion 05.32
# 2023-09-06 00:46:31 lastpressedtimestamp 2023-08-12 01:11:34
# 2023-09-06 00:46:31 lastpressedtimestamp_oben_links 2023-08-12 01:17:43
# 2023-09-06 00:46:31 lastpressedtimestamp_oben_rechts 2023-08-12 01:11:34
# 2023-09-06 00:46:31 lastpressedtimestamp_unten_links 2023-08-12 01:11:39
# 2023-09-06 00:46:31 lastpressedtimestamp_unten_rechts 2023-08-12 01:17:08
# 2023-11-23 20:57:53 present yes
# 2023-11-23 20:57:53 rel_humidity 62 %
# 2023-11-23 20:57:53 schimmelt 17.8°C
# 2023-11-23 20:57:53 state_info Temp: 20.0°C, Hum: 62.0%, Dew: 12.5°C, Bat: 100%
# 2023-11-23 20:57:53 tempadjust 0.0 C
# 2023-11-23 20:57:53 temperature 20.0 C (measured)
# 2023-11-23 19:32:53 vapourPressure 14.5
#
setstate FBDECT_Taster_440 yes\
Temp: 20.0°C, Hum: 62.0%, Dew: 12.5°C, Bat: 100%
setstate FBDECT_Taster_440 2023-11-23 20:57:53 AIN 13979 0436912
setstate FBDECT_Taster_440 2023-11-23 20:57:53 FBNAME FRITZ!DECT 440
setstate FBDECT_Taster_440 2023-11-23 20:57:53 FBPROP avmButton,tempSensor
setstate FBDECT_Taster_440 2023-11-23 20:57:53 FBTYPE FRITZ!DECT 440
setstate FBDECT_Taster_440 2023-11-23 20:57:53 ID 18
setstate FBDECT_Taster_440 2023-11-23 19:17:36 IODev FritzBoxHttp
setstate FBDECT_Taster_440 2023-11-23 19:32:53 absoluteHumidity 10.7
setstate FBDECT_Taster_440 2023-11-23 20:57:53 battery 100 %
setstate FBDECT_Taster_440 2023-11-23 20:57:53 batteryPercent 100
setstate FBDECT_Taster_440 2023-11-23 20:57:53 batteryState ok
setstate FBDECT_Taster_440 2023-11-23 20:57:53 batterylow 0
setstate FBDECT_Taster_440 2023-11-23 19:32:53 dewpoint 12.5
setstate FBDECT_Taster_440 2023-11-23 20:57:53 fwversion 05.32
setstate FBDECT_Taster_440 2023-09-06 00:46:31 lastpressedtimestamp 2023-08-12 01:11:34
setstate FBDECT_Taster_440 2023-09-06 00:46:31 lastpressedtimestamp_oben_links 2023-08-12 01:17:43
setstate FBDECT_Taster_440 2023-09-06 00:46:31 lastpressedtimestamp_oben_rechts 2023-08-12 01:11:34
setstate FBDECT_Taster_440 2023-09-06 00:46:31 lastpressedtimestamp_unten_links 2023-08-12 01:11:39
setstate FBDECT_Taster_440 2023-09-06 00:46:31 lastpressedtimestamp_unten_rechts 2023-08-12 01:17:08
setstate FBDECT_Taster_440 2023-11-23 20:57:53 present yes
setstate FBDECT_Taster_440 2023-11-23 20:57:53 rel_humidity 62 %
setstate FBDECT_Taster_440 2023-11-23 20:57:53 schimmelt 17.8°C
setstate FBDECT_Taster_440 2023-11-23 20:57:53 state_info Temp: 20.0°C, Hum: 62.0%, Dew: 12.5°C, Bat: 100%
setstate FBDECT_Taster_440 2023-11-23 20:57:53 tempadjust 0.0 C
setstate FBDECT_Taster_440 2023-11-23 20:57:53 temperature 20.0 C (measured)
setstate FBDECT_Taster_440 2023-11-23 19:32:53 vapourPressure 14.5
define MQTT2_zigbee_Lidl_BWM_1 MQTT2_DEVICE zigbee_Lidl_BWM_1
attr MQTT2_zigbee_Lidl_BWM_1 userattr HomeModeAlarmActive HomeReadings HomeValues HomeSensorLocation:inside,outside myBattWechsel my_batteryType
attr MQTT2_zigbee_Lidl_BWM_1 DbLogExclude .*
attr MQTT2_zigbee_Lidl_BWM_1 DbLogInclude occupancy
attr MQTT2_zigbee_Lidl_BWM_1 HomeModeAlarmActive armaway
attr MQTT2_zigbee_Lidl_BWM_1 HomeSensorLocation inside
attr MQTT2_zigbee_Lidl_BWM_1 alias zigbee_BWM_Kueche_1
attr MQTT2_zigbee_Lidl_BWM_1 comment jsonMap war: battery:batteryPercent voltage:batterymV\
geändert in:\
jsonMap: voltage:batterymV \
userReadings: batteryPercent:battery.* {ReadingsNum($name,'battery',0)}\
---\
devStateIcon:\
Motion..true:people_sensor Motion..false:motion_detector\
Motion..true:people_sensor Motion..false:motion_detector Secure..true:secur_open@red Secure..false:secur_locked@green'\
attr MQTT2_zigbee_Lidl_BWM_1 devStateIcon Motion..true:people_sensor Motion..false:motion_detector Secure..true:secur_open@red Secure..false:secur_locked@green online:10px-kreis-gruen offline:10px-kreis-rot
attr MQTT2_zigbee_Lidl_BWM_1 devicetopic zigbee2mqtt/Lidl_BWM_1
attr MQTT2_zigbee_Lidl_BWM_1 event-on-change-reading .*
attr MQTT2_zigbee_Lidl_BWM_1 event-on-update-reading batteryPercent
attr MQTT2_zigbee_Lidl_BWM_1 icon people_sensor
attr MQTT2_zigbee_Lidl_BWM_1 jsonMap voltage:batterymV
attr MQTT2_zigbee_Lidl_BWM_1 model zigbee2mqtt_human_body_movement
attr MQTT2_zigbee_Lidl_BWM_1 myBattWechsel 0
attr MQTT2_zigbee_Lidl_BWM_1 my_batteryType 2xAAA
attr MQTT2_zigbee_Lidl_BWM_1 readingList $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }\
zigbee2mqtt/Lidl_BWM_1/availability:.* availability
attr MQTT2_zigbee_Lidl_BWM_1 room Geräte->Zigbee,Zimmer->Küche
attr MQTT2_zigbee_Lidl_BWM_1 stateFormat availability\
Motion: occupancy\
Battery: batteryPercent%\
Secure: tamper
attr MQTT2_zigbee_Lidl_BWM_1 userReadings batteryVoltage:batterymV.* {ReadingsNum($name,'batterymV',0)/1000}, batteryPercent:battery.* {ReadingsNum($name,'battery',0)}, batteryState {if (ReadingsNum($name, "battery", 0) > 25) {return "ok"} else {return "low"}}
# CID zigbee_Lidl_BWM_1
# DEF zigbee_Lidl_BWM_1
# FUUID 63964301-f33f-be0c-dfa0-b165737aed677f5a
# FVERSION 10_MQTT2_DEVICE.pm:0.279350/2023-09-05
# IODev mqtt2server
# LASTInputDev mqtt2server
# MSGCNT 11
# NAME MQTT2_zigbee_Lidl_BWM_1
# NR 243
# STATE online
#Motion: false
# Battery: 92%
#Secure: false
# TYPE MQTT2_DEVICE
# eventCount 12
# mqtt2server_CONN mqtt2server_172.18.0.4_43194
# mqtt2server_MSGCNT 11
# mqtt2server_TIME 2023-11-23 21:03:40
# Helper:
# DBLOG:
# occupancy:
# LOG_Db:
# TIME 1700767612.1643
# VALUE false
# JSONMAP:
# voltage batterymV
# READINGS:
# 2023-11-23 19:17:36 IODev mqtt2server
# 2022-12-16 03:13:05 associatedWith MQTT2_zigbee_bridge
# 2022-12-11 22:03:25 attrTemplateVersion 20201208
# 2023-11-23 19:17:55 availability online
# 2023-11-23 21:03:40 battery 92
# 2023-11-23 18:01:55 batteryPercent 92
# 2023-11-23 21:03:40 batteryState ok
# 2023-11-23 18:01:55 batteryVoltage 2.9
# 2023-11-23 21:03:40 battery_low false
# 2023-11-23 21:03:40 batterymV 2900
# 2023-11-23 21:03:40 last_seen 2023-11-23T20:03:40.853Z
# 2023-11-23 21:03:40 linkquality 255
# 2023-11-23 21:03:40 occupancy false
# 2023-11-23 21:03:40 tamper false
#
setstate MQTT2_zigbee_Lidl_BWM_1 online\
Motion: false\
Battery: 92%\
Secure: false
setstate MQTT2_zigbee_Lidl_BWM_1 2023-11-23 19:17:36 IODev mqtt2server
setstate MQTT2_zigbee_Lidl_BWM_1 2022-12-16 03:13:05 associatedWith MQTT2_zigbee_bridge
setstate MQTT2_zigbee_Lidl_BWM_1 2022-12-11 22:03:25 attrTemplateVersion 20201208
setstate MQTT2_zigbee_Lidl_BWM_1 2023-11-23 19:17:55 availability online
setstate MQTT2_zigbee_Lidl_BWM_1 2023-11-23 21:03:40 battery 92
setstate MQTT2_zigbee_Lidl_BWM_1 2023-11-23 18:01:55 batteryPercent 92
setstate MQTT2_zigbee_Lidl_BWM_1 2023-11-23 21:03:40 batteryState ok
setstate MQTT2_zigbee_Lidl_BWM_1 2023-11-23 18:01:55 batteryVoltage 2.9
setstate MQTT2_zigbee_Lidl_BWM_1 2023-11-23 21:03:40 battery_low false
setstate MQTT2_zigbee_Lidl_BWM_1 2023-11-23 21:03:40 batterymV 2900
setstate MQTT2_zigbee_Lidl_BWM_1 2023-11-23 21:03:40 last_seen 2023-11-23T20:03:40.853Z
setstate MQTT2_zigbee_Lidl_BWM_1 2023-11-23 21:03:40 linkquality 255
setstate MQTT2_zigbee_Lidl_BWM_1 2023-11-23 21:03:40 occupancy false
setstate MQTT2_zigbee_Lidl_BWM_1 2023-11-23 21:03:40 tamper false
define MQTT2_zigbee_Lidl_Kontakt_1 MQTT2_DEVICE zigbee_Lidl_Kontakt_1
attr MQTT2_zigbee_Lidl_Kontakt_1 userattr myBattWechsel my_batteryType
attr MQTT2_zigbee_Lidl_Kontakt_1 DbLogExclude .*
attr MQTT2_zigbee_Lidl_Kontakt_1 alias zigbee_Kontakt_Wohnungstuer
attr MQTT2_zigbee_Lidl_Kontakt_1 devStateIcon open:fts_window_1w_open@red closed:fts_window_1w@green Secure..true:secur_open@red Secure..false:secur_locked@gree online:10px-kreis-gruen offline:10px-kreis-rot
attr MQTT2_zigbee_Lidl_Kontakt_1 devicetopic zigbee2mqtt/Lidl_Kontakt_1
attr MQTT2_zigbee_Lidl_Kontakt_1 event-on-change-reading .*
attr MQTT2_zigbee_Lidl_Kontakt_1 event-on-update-reading batteryPercent
attr MQTT2_zigbee_Lidl_Kontakt_1 genericDeviceType ContactSensor
attr MQTT2_zigbee_Lidl_Kontakt_1 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;;open:CONTACT_NOT_DETECTED
attr MQTT2_zigbee_Lidl_Kontakt_1 icon fts_window_1w
attr MQTT2_zigbee_Lidl_Kontakt_1 jsonMap contact:state
attr MQTT2_zigbee_Lidl_Kontakt_1 model zigbee2mqtt_ContactSensor
attr MQTT2_zigbee_Lidl_Kontakt_1 myBattWechsel 0
attr MQTT2_zigbee_Lidl_Kontakt_1 my_batteryType 2xAAA
attr MQTT2_zigbee_Lidl_Kontakt_1 readingList $DEVICETOPIC:.* { my $ret=json2nameValue($EVENT,'',$JSONMAP);; $ret->{state}=$ret->{state} eq 'true' ? 'closed' : 'open';; return $ret }\
zigbee2mqtt/Lidl_Kontakt_1/availability:.* availability
attr MQTT2_zigbee_Lidl_Kontakt_1 room Zimmer->Flur,Geräte->Zigbee
attr MQTT2_zigbee_Lidl_Kontakt_1 stateFormat availability\
state\
Battery: battery%\
Secure: tamper
attr MQTT2_zigbee_Lidl_Kontakt_1 userReadings batteryPercent {ReadingsNum($name,'battery','0')}, batteryState {if (ReadingsNum($name, "battery", 0) > 25) {return "ok"} else {return "low"}}
# CID zigbee_Lidl_Kontakt_1
# DEF zigbee_Lidl_Kontakt_1
# FUUID 637bcf1a-f33f-be0c-9804-9ecba85255e59624
# FVERSION 10_MQTT2_DEVICE.pm:0.279350/2023-09-05
# IODev mqtt2server
# LASTInputDev mqtt2server
# MSGCNT 2
# NAME MQTT2_zigbee_Lidl_Kontakt_1
# NR 237
# STATE online
#closed
# Battery: 42.5%
#Secure: false
# TYPE MQTT2_DEVICE
# eventCount 2
# mqtt2server_CONN mqtt2server_172.18.0.4_43194
# mqtt2server_MSGCNT 2
# mqtt2server_TIME 2023-11-23 20:14:55
# JSONMAP:
# contact state
# READINGS:
# 2023-11-23 19:17:36 IODev mqtt2server
# 2022-11-22 00:25:02 associatedWith MQTT2_zigbee_bridge
# 2022-11-21 20:19:24 attrTemplateVersion 20220622
# 2023-11-23 19:17:55 availability online
# 2023-11-23 20:14:55 battery 42.5
# 2023-11-23 20:14:55 batteryPercent 42.5
# 2023-11-23 20:14:55 batteryState ok
# 2023-11-23 20:14:55 battery_low false
# 2023-11-23 20:14:55 last_seen 2023-11-23T19:14:55.395Z
# 2023-11-23 20:14:55 linkquality 255
# 2023-11-23 20:14:55 state closed
# 2023-11-23 20:14:55 tamper false
#
setstate MQTT2_zigbee_Lidl_Kontakt_1 online\
closed\
Battery: 42.5%\
Secure: false
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-23 19:17:36 IODev mqtt2server
setstate MQTT2_zigbee_Lidl_Kontakt_1 2022-11-22 00:25:02 associatedWith MQTT2_zigbee_bridge
setstate MQTT2_zigbee_Lidl_Kontakt_1 2022-11-21 20:19:24 attrTemplateVersion 20220622
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-23 19:17:55 availability online
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-23 20:14:55 battery 42.5
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-23 20:14:55 batteryPercent 42.5
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-23 20:14:55 batteryState ok
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-23 20:14:55 battery_low false
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-23 20:14:55 last_seen 2023-11-23T19:14:55.395Z
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-23 20:14:55 linkquality 255
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-23 20:14:55 state closed
setstate MQTT2_zigbee_Lidl_Kontakt_1 2023-11-23 20:14:55 tamper false
define MQTT2_zigbee_SONOFF_TH01_Medikamente MQTT2_DEVICE zigbee_SONOFF_TH01_Medikamente
attr MQTT2_zigbee_SONOFF_TH01_Medikamente userattr myBattWechsel my_batteryType
attr MQTT2_zigbee_SONOFF_TH01_Medikamente DbLogExclude .*
attr MQTT2_zigbee_SONOFF_TH01_Medikamente DbLogInclude humidity,temperature
attr MQTT2_zigbee_SONOFF_TH01_Medikamente devStateIcon online:10px-kreis-gruen offline.*:10px-kreis-rot
attr MQTT2_zigbee_SONOFF_TH01_Medikamente devicetopic zigbee2mqtt/SONOFF_TH01_Medikamente
attr MQTT2_zigbee_SONOFF_TH01_Medikamente event-on-change-reading .*
attr MQTT2_zigbee_SONOFF_TH01_Medikamente event-on-update-reading batteryPercent
attr MQTT2_zigbee_SONOFF_TH01_Medikamente icon temperature_humidity
attr MQTT2_zigbee_SONOFF_TH01_Medikamente model zigbee2mqtt_TempHumSensor
attr MQTT2_zigbee_SONOFF_TH01_Medikamente myBattWechsel 0
attr MQTT2_zigbee_SONOFF_TH01_Medikamente my_batteryType 1xCR2450
attr MQTT2_zigbee_SONOFF_TH01_Medikamente readingList $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }\
zigbee2mqtt/SONOFF_TH01_Medikamente/availability:.* availability
attr MQTT2_zigbee_SONOFF_TH01_Medikamente room Geräte->Zigbee
attr MQTT2_zigbee_SONOFF_TH01_Medikamente stateFormat availability\
formatedState
attr MQTT2_zigbee_SONOFF_TH01_Medikamente userReadings batteryPercent {ReadingsNum($name,'battery','0')}, batteryState {if (ReadingsNum($name, "battery", 0) > 25) {return "ok"} else {return "low"}}, formatedState {sprintf ("Temperature: %.1f°C Humidity: %.1f%%", ReadingsVal($name,"temperature",0), ReadingsVal($name,"humidity",0)) }
# CID zigbee_SONOFF_TH01_Medikamente
# DEF zigbee_SONOFF_TH01_Medikamente
# FUUID 637b8492-f33f-be0c-64d7-b9c221f5e385832f
# FVERSION 10_MQTT2_DEVICE.pm:0.279350/2023-09-05
# IODev mqtt2server
# LASTInputDev mqtt2server
# MSGCNT 181
# NAME MQTT2_zigbee_SONOFF_TH01_Medikamente
# NR 233
# STATE online
#Temperature: 18.6°C Humidity: 65.7%
# TYPE MQTT2_DEVICE
# eventCount 181
# mqtt2server_CONN mqtt2server_172.18.0.4_43194
# mqtt2server_MSGCNT 181
# mqtt2server_TIME 2023-11-23 21:09:34
# Helper:
# DBLOG:
# humidity:
# LOG_Db:
# TIME 1700770174.71745
# VALUE 65.7
# temperature:
# LOG_Db:
# TIME 1700769712.88877
# VALUE 18.6
# READINGS:
# 2023-11-23 19:17:36 IODev mqtt2server
# 2022-11-21 20:08:49 associatedWith MQTT2_zigbee_bridge
# 2022-11-21 15:06:05 attrTemplateVersion 20200904
# 2023-11-23 19:17:55 availability online
# 2023-11-23 21:09:34 battery 79
# 2023-11-23 21:09:34 batteryPercent 79
# 2023-11-23 21:09:34 batteryState ok
# 2023-11-23 21:09:34 formatedState Temperature: 18.6°C Humidity: 65.7%
# 2023-11-23 21:09:34 humidity 65.7
# 2023-11-23 21:09:34 last_seen 2023-11-23T20:09:34.701Z
# 2023-11-23 21:09:34 linkquality 255
# 2023-11-23 21:09:34 temperature 18.6
# 2023-11-23 21:09:34 voltage 2900
#
setstate MQTT2_zigbee_SONOFF_TH01_Medikamente online\
Temperature: 18.6°C Humidity: 65.7%
setstate MQTT2_zigbee_SONOFF_TH01_Medikamente 2023-11-23 19:17:36 IODev mqtt2server
setstate MQTT2_zigbee_SONOFF_TH01_Medikamente 2022-11-21 20:08:49 associatedWith MQTT2_zigbee_bridge
setstate MQTT2_zigbee_SONOFF_TH01_Medikamente 2022-11-21 15:06:05 attrTemplateVersion 20200904
setstate MQTT2_zigbee_SONOFF_TH01_Medikamente 2023-11-23 19:17:55 availability online
setstate MQTT2_zigbee_SONOFF_TH01_Medikamente 2023-11-23 21:09:34 battery 79
setstate MQTT2_zigbee_SONOFF_TH01_Medikamente 2023-11-23 21:09:34 batteryPercent 79
setstate MQTT2_zigbee_SONOFF_TH01_Medikamente 2023-11-23 21:09:34 batteryState ok
setstate MQTT2_zigbee_SONOFF_TH01_Medikamente 2023-11-23 21:09:34 formatedState Temperature: 18.6°C Humidity: 65.7%
setstate MQTT2_zigbee_SONOFF_TH01_Medikamente 2023-11-23 21:09:34 humidity 65.7
setstate MQTT2_zigbee_SONOFF_TH01_Medikamente 2023-11-23 21:09:34 last_seen 2023-11-23T20:09:34.701Z
setstate MQTT2_zigbee_SONOFF_TH01_Medikamente 2023-11-23 21:09:34 linkquality 255
setstate MQTT2_zigbee_SONOFF_TH01_Medikamente 2023-11-23 21:09:34 temperature 18.6
setstate MQTT2_zigbee_SONOFF_TH01_Medikamente 2023-11-23 21:09:34 voltage 2900
define MQTT2_zigbee_TRADFRI_MotionSensor1 MQTT2_DEVICE zigbee_TRADFRI_MotionSensor1
attr MQTT2_zigbee_TRADFRI_MotionSensor1 userattr HomeModeAlarmActive HomeReadings HomeValues HomeSensorLocation:inside,outside myBattWechsel my_batteryType
attr MQTT2_zigbee_TRADFRI_MotionSensor1 DbLogExclude .*
attr MQTT2_zigbee_TRADFRI_MotionSensor1 HomeModeAlarmActive armaway
attr MQTT2_zigbee_TRADFRI_MotionSensor1 HomeSensorLocation inside
attr MQTT2_zigbee_TRADFRI_MotionSensor1 devStateIcon Motion..true:people_sensor Motion..false:motion_detector online:10px-kreis-gruen offline:10px-kreis-rot
attr MQTT2_zigbee_TRADFRI_MotionSensor1 devicetopic zigbee2mqtt/TRADFRI_MotionSensor1
attr MQTT2_zigbee_TRADFRI_MotionSensor1 event-on-change-reading .*
attr MQTT2_zigbee_TRADFRI_MotionSensor1 event-on-update-reading batteryPercent
attr MQTT2_zigbee_TRADFRI_MotionSensor1 icon people_sensor
attr MQTT2_zigbee_TRADFRI_MotionSensor1 jsonMap battery:batteryPercent voltage:batterymV illuminance_lux:0
attr MQTT2_zigbee_TRADFRI_MotionSensor1 model zigbee2mqtt_human_body_movement_illuminance
attr MQTT2_zigbee_TRADFRI_MotionSensor1 myBattWechsel 0
attr MQTT2_zigbee_TRADFRI_MotionSensor1 my_batteryType 2xCR2032
attr MQTT2_zigbee_TRADFRI_MotionSensor1 readingList $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }\
zigbee2mqtt/TRADFRI_MotionSensor1/availability:.* availability
attr MQTT2_zigbee_TRADFRI_MotionSensor1 room Geräte->Zigbee
attr MQTT2_zigbee_TRADFRI_MotionSensor1 stateFormat availability\
Motion: occupancy\
Luminance: requested_brightness_level Battery: batteryPercent%
attr MQTT2_zigbee_TRADFRI_MotionSensor1 userReadings batteryVoltage:batterymV.* {ReadingsNum($name,'batterymV',0)/1000}
# CID zigbee_TRADFRI_MotionSensor1
# DEF zigbee_TRADFRI_MotionSensor1
# FUUID 637bcfe4-f33f-be0c-aa27-04a558d5f2da221b
# FVERSION 10_MQTT2_DEVICE.pm:0.279350/2023-09-05
# IODev mqtt2server
# LASTInputDev mqtt2server
# MSGCNT 1
# NAME MQTT2_zigbee_TRADFRI_MotionSensor1
# NR 239
# STATE offline
#Motion: false
# Luminance: 76 Battery: 60%
# TYPE MQTT2_DEVICE
# eventCount 2
# mqtt2server_CONN mqtt2server_172.18.0.4_43194
# mqtt2server_MSGCNT 1
# mqtt2server_TIME 2023-11-23 19:17:55
# JSONMAP:
# battery batteryPercent
# illuminance_lux 0
# voltage batterymV
# READINGS:
# 2023-11-23 19:17:36 IODev mqtt2server
# 2022-12-16 03:13:05 associatedWith MQTT2_zigbee_bridge
# 2022-12-11 22:19:42 attrTemplateVersion 20201208
# 2023-11-23 19:17:55 availability offline
# 2023-11-20 14:45:47 batteryPercent 60
# 2023-11-20 14:45:47 illuminance_above_threshold false
# 2023-11-20 14:45:47 last_seen 2023-03-21T13:23:29.386Z
# 2023-11-20 14:45:47 linkquality 255
# 2023-11-20 14:45:47 occupancy false
# 2023-11-20 14:45:47 requested_brightness_level 76
# 2023-11-20 14:45:47 requested_brightness_percent 30
# 2023-11-20 14:45:47 update_available false
# 2023-11-20 14:45:47 update_state idle
#
setstate MQTT2_zigbee_TRADFRI_MotionSensor1 offline\
Motion: false\
Luminance: 76 Battery: 60%
setstate MQTT2_zigbee_TRADFRI_MotionSensor1 2023-11-23 19:17:36 IODev mqtt2server
setstate MQTT2_zigbee_TRADFRI_MotionSensor1 2022-12-16 03:13:05 associatedWith MQTT2_zigbee_bridge
setstate MQTT2_zigbee_TRADFRI_MotionSensor1 2022-12-11 22:19:42 attrTemplateVersion 20201208
setstate MQTT2_zigbee_TRADFRI_MotionSensor1 2023-11-23 19:17:55 availability offline
setstate MQTT2_zigbee_TRADFRI_MotionSensor1 2023-11-20 14:45:47 batteryPercent 60
setstate MQTT2_zigbee_TRADFRI_MotionSensor1 2023-11-20 14:45:47 illuminance_above_threshold false
setstate MQTT2_zigbee_TRADFRI_MotionSensor1 2023-11-20 14:45:47 last_seen 2023-03-21T13:23:29.386Z
setstate MQTT2_zigbee_TRADFRI_MotionSensor1 2023-11-20 14:45:47 linkquality 255
setstate MQTT2_zigbee_TRADFRI_MotionSensor1 2023-11-20 14:45:47 occupancy false
setstate MQTT2_zigbee_TRADFRI_MotionSensor1 2023-11-20 14:45:47 requested_brightness_level 76
setstate MQTT2_zigbee_TRADFRI_MotionSensor1 2023-11-20 14:45:47 requested_brightness_percent 30
setstate MQTT2_zigbee_TRADFRI_MotionSensor1 2023-11-20 14:45:47 update_available false
setstate MQTT2_zigbee_TRADFRI_MotionSensor1 2023-11-20 14:45:47 update_state idle
define MQTT2_zigbee_TRADFRI_OnOffSwitch3 MQTT2_DEVICE zigbee_TRADFRI_OnOffSwitch3
attr MQTT2_zigbee_TRADFRI_OnOffSwitch3 userattr myBattWechsel my_batteryType
attr MQTT2_zigbee_TRADFRI_OnOffSwitch3 DbLogExclude .*
attr MQTT2_zigbee_TRADFRI_OnOffSwitch3 devStateIcon online:10px-kreis-gruen offline:10px-kreis-rot
attr MQTT2_zigbee_TRADFRI_OnOffSwitch3 devicetopic zigbee2mqtt/TRADFRI_OnOffSwitch3
attr MQTT2_zigbee_TRADFRI_OnOffSwitch3 event-on-change-reading .*
attr MQTT2_zigbee_TRADFRI_OnOffSwitch3 event-on-update-reading batteryPercent
attr MQTT2_zigbee_TRADFRI_OnOffSwitch3 icon tradfri_dimmerswitch
attr MQTT2_zigbee_TRADFRI_OnOffSwitch3 jsonMap battery:batteryPercent voltage:batterymV
attr MQTT2_zigbee_TRADFRI_OnOffSwitch3 model zigbee2mqtt_Wireless_Button
attr MQTT2_zigbee_TRADFRI_OnOffSwitch3 myBattWechsel 0
attr MQTT2_zigbee_TRADFRI_OnOffSwitch3 my_batteryType 1xCR2032
attr MQTT2_zigbee_TRADFRI_OnOffSwitch3 readingList $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }\
zigbee2mqtt/TRADFRI_OnOffSwitch3/availability:.* availability
attr MQTT2_zigbee_TRADFRI_OnOffSwitch3 room Geräte->Zigbee
attr MQTT2_zigbee_TRADFRI_OnOffSwitch3 stateFormat availability\
Batterie: batteryPercent%, Action: action
attr MQTT2_zigbee_TRADFRI_OnOffSwitch3 userReadings battery:batteryPercent.* {ReadingsNum($name,'batteryPercent',0)}, batteryState {if (ReadingsNum($name, "battery", 0) > 25) {return "ok"} else {return "low"}}
# CID zigbee_TRADFRI_OnOffSwitch3
# DEF zigbee_TRADFRI_OnOffSwitch3
# FUUID 64302a05-f33f-be0c-d574-721a1e0314d3c815
# FVERSION 10_MQTT2_DEVICE.pm:0.279350/2023-09-05
# IODev mqtt2server
# LASTInputDev mqtt2server
# MSGCNT 2
# NAME MQTT2_zigbee_TRADFRI_OnOffSwitch3
# NR 267
# STATE online
#Batterie: 75%, Action: on
# TYPE MQTT2_DEVICE
# eventCount 3
# mqtt2server_CONN mqtt2server_172.18.0.4_43194
# mqtt2server_MSGCNT 2
# mqtt2server_TIME 2023-11-23 21:09:34
# JSONMAP:
# battery batteryPercent
# voltage batterymV
# READINGS:
# 2023-11-23 19:17:36 IODev mqtt2server
# 2023-10-12 01:03:34 action on
# 2023-10-12 01:03:30 action_brightness_delta 5
# 2023-10-12 01:03:30 action_rate 83
# 2023-04-07 16:34:45 associatedWith MQTT2_zigbee_bridge
# 2023-04-07 16:39:21 attrTemplateVersion 20201208
# 2023-11-23 19:17:55 availability online
# 2023-11-23 21:09:34 battery 75
# 2023-11-23 21:09:34 batteryPercent 75
# 2023-11-23 21:09:34 batteryState ok
# 2023-11-23 21:09:34 brightness 225
# 2023-11-23 21:09:34 last_seen 2023-11-23T20:09:34.668Z
# 2023-11-23 21:09:34 linkquality 255
# 2023-11-23 21:09:34 update_available false
# 2023-11-23 21:09:34 update_installed_version 604241926
# 2023-11-23 21:09:34 update_latest_version 604241926
# 2023-06-15 02:54:26 update_progress 100
# 2023-06-15 02:54:26 update_remaining 6
# 2023-11-23 21:09:34 update_state idle
#
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 online\
Batterie: 75%, Action: on
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-11-23 19:17:36 IODev mqtt2server
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-10-12 01:03:34 action on
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-10-12 01:03:30 action_brightness_delta 5
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-10-12 01:03:30 action_rate 83
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-04-07 16:34:45 associatedWith MQTT2_zigbee_bridge
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-04-07 16:39:21 attrTemplateVersion 20201208
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-11-23 19:17:55 availability online
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-11-23 21:09:34 battery 75
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-11-23 21:09:34 batteryPercent 75
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-11-23 21:09:34 batteryState ok
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-11-23 21:09:34 brightness 225
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-11-23 21:09:34 last_seen 2023-11-23T20:09:34.668Z
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-11-23 21:09:34 linkquality 255
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-11-23 21:09:34 update_available false
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-11-23 21:09:34 update_installed_version 604241926
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-11-23 21:09:34 update_latest_version 604241926
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-06-15 02:54:26 update_progress 100
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-06-15 02:54:26 update_remaining 6
setstate MQTT2_zigbee_TRADFRI_OnOffSwitch3 2023-11-23 21:09:34 update_state idle
define OMG_A4C1381A61FB MQTT2_DEVICE A4C1381A61FB
attr OMG_A4C1381A61FB userattr myBattWechsel my_batteryType
attr OMG_A4C1381A61FB DbLogExclude .*
attr OMG_A4C1381A61FB DbLogInclude humidity,temperature
attr OMG_A4C1381A61FB IODev mqtt2server
attr OMG_A4C1381A61FB alias OMG 1FB WZ
attr OMG_A4C1381A61FB autocreate 0
attr OMG_A4C1381A61FB devStateIcon alive:10px-kreis-gruen dead:10px-kreis-rot
attr OMG_A4C1381A61FB event-on-change-reading batteryPercent,temperature:0.2,humidity:0.5,distance:5
attr OMG_A4C1381A61FB event-on-update-reading batteryPercent
attr OMG_A4C1381A61FB icon temperature_humidity
attr OMG_A4C1381A61FB jsonMap batt:batteryPercent tempc:temperature tem:0 tempf:0 hum:humidity servicedatauuid:0 servicedata:0
attr OMG_A4C1381A61FB model OpenMQTTGateway_BT_temp_hum_sensor
attr OMG_A4C1381A61FB myBattWechsel 0
attr OMG_A4C1381A61FB my_batteryType 1xCR2032
attr OMG_A4C1381A61FB readingList home/O[^/]*M[^/]*G[^/]*/BTtoMQTT/A4C1381A61FB:.* { json2nameValue($EVENT,'',$JSONMAP) }
attr OMG_A4C1381A61FB readingsWatcher 3600,,humidity,temperature,rssi
attr OMG_A4C1381A61FB room Geräte->ESP32
attr OMG_A4C1381A61FB stateFormat actifity\
state_info
attr OMG_A4C1381A61FB userReadings state_info {sprintf ("Temp: %.1f°C, Hum: %.1f%%, Dew: %.1f°C, Bat: %.0f%%", ReadingsNum($name,"temperature",0), ReadingsNum($name,"humidity",0), ReadingsNum($name,"dewpoint",0), ReadingsNum($name,"batteryPercent",0))},\
schimmelt {schimmelfreiMinTemp(ReadingsNum("$name","temperature",20),ReadingsNum("$name","humidity",100),70)}
# CID A4C1381A61FB
# DEF A4C1381A61FB
# FUUID 649b5190-f33f-be0c-bf9c-4c884b3cad37f2b4
# FVERSION 10_MQTT2_DEVICE.pm:0.279350/2023-09-05
# IODev mqtt2server
# LASTInputDev mqtt2server
# MSGCNT 175
# NAME OMG_A4C1381A61FB
# NR 281
# STATE alive
#Temp: 20.3°C, Hum: 61.0%, Dew: 12.5°C, Bat: 59%
# TYPE MQTT2_DEVICE
# eventCount 177
# mqtt2server_CONN mqtt2server_192.168.178.230_64178
# mqtt2server_MSGCNT 175
# mqtt2server_TIME 2023-11-23 21:22:52
# Helper:
# DBLOG:
# temperature:
# LOG_Db:
# TIME 1700763476.73095
# VALUE 20.3
# JSONMAP:
# batt batteryPercent
# hum humidity
# servicedata 0
# servicedatauuid 0
# tem 0
# tempc temperature
# tempf 0
# READINGS:
# 2023-11-23 19:17:36 IODev mqtt2server
# 2023-11-23 19:17:56 absoluteHumidity 10.7
# 2023-11-23 21:23:53 actifity alive
# 2023-06-27 23:16:00 attrTemplateVersion 20220220
# 2023-11-23 21:22:52 batteryPercent 59
# 2023-11-23 19:17:56 dewpoint 12.5
# 2023-11-23 21:22:52 humidity 61
# 2023-11-23 21:22:52 id A4:C1:38:1A:61:FB
# 2023-11-23 21:22:52 model LYWSD03MMC_ATC
# 2023-11-23 21:22:52 name ATC_1A61FB
# 2023-11-23 21:22:52 rssi -93
# 2023-11-23 21:23:53 schimmelt 17.8
# 2023-11-23 21:23:53 state_info Temp: 20.3°C, Hum: 61.0%, Dew: 12.5°C, Bat: 59%
# 2023-11-23 21:22:52 temperature 20.3
# 2023-11-23 19:17:56 vapourPressure 14.5
# 2023-11-23 21:22:52 volt 2.752
#
setstate OMG_A4C1381A61FB alive\
Temp: 20.3°C, Hum: 61.0%, Dew: 12.5°C, Bat: 59%
setstate OMG_A4C1381A61FB 2023-11-23 19:17:36 IODev mqtt2server
setstate OMG_A4C1381A61FB 2023-11-23 19:17:56 absoluteHumidity 10.7
setstate OMG_A4C1381A61FB 2023-11-23 21:23:53 actifity alive
setstate OMG_A4C1381A61FB 2023-06-27 23:16:00 attrTemplateVersion 20220220
setstate OMG_A4C1381A61FB 2023-11-23 21:22:52 batteryPercent 59
setstate OMG_A4C1381A61FB 2023-11-23 19:17:56 dewpoint 12.5
setstate OMG_A4C1381A61FB 2023-11-23 21:22:52 humidity 61
setstate OMG_A4C1381A61FB 2023-11-23 21:22:52 id A4:C1:38:1A:61:FB
setstate OMG_A4C1381A61FB 2023-11-23 21:22:52 model LYWSD03MMC_ATC
setstate OMG_A4C1381A61FB 2023-11-23 21:22:52 name ATC_1A61FB
setstate OMG_A4C1381A61FB 2023-11-23 21:22:52 rssi -93
setstate OMG_A4C1381A61FB 2023-11-23 21:23:53 schimmelt 17.8
setstate OMG_A4C1381A61FB 2023-11-23 21:23:53 state_info Temp: 20.3°C, Hum: 61.0%, Dew: 12.5°C, Bat: 59%
setstate OMG_A4C1381A61FB 2023-11-23 21:22:52 temperature 20.3
setstate OMG_A4C1381A61FB 2023-11-23 19:17:56 vapourPressure 14.5
setstate OMG_A4C1381A61FB 2023-11-23 21:22:52 volt 2.752
im nächsten Post weiter - zu viele Zeichen?2023-11-23 20:46:49.252 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:46:49.265 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":67.3,"last_seen":"2023-11-23T19:46:49.222Z","linkquality":255,"temperature":18.7,"voltage":2900}'
2023-11-23 20:46:49.282 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:46:59.270 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.3,"last_seen":"2023-11-23T19:46:59.247Z","linkquality":255,"temperature":18.7,"voltage":2900}'
2023-11-23 20:46:59.293 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:47:09.318 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.3,"last_seen":"2023-11-23T19:47:09.290Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 20:47:09.344 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:47:29.394 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.5,"last_seen":"2023-11-23T19:47:29.370Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 20:47:29.419 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:47:29.898 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:47:37.421 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 20:47:44.574 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:47:53.864 FBDECT FBDECT_HKV_301_WZ batteryPercent: 90
2023-11-23 20:47:53.881 FBDECT FBDECT_HKV_301_SZ batteryPercent: 90
2023-11-23 20:47:53.903 FBDECT FBDECT_Taster_440 batteryPercent: 100
2023-11-23 20:47:54.729 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 20:47:58.248 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 20:48:00.882 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 20:48:37.779 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:48:49.461 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 20:48:50.217 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 20:48:50.261 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 20:48:56.594 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:48:56.787 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 20:49:06.499 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 20:49:06.525 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 20:49:29.928 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.5,"last_seen":"2023-11-23T19:49:29.878Z","linkquality":255,"temperature":18.7,"voltage":2900}'
2023-11-23 20:49:29.952 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:49:39.948 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.5,"last_seen":"2023-11-23T19:49:39.921Z","linkquality":255,"temperature":18.5,"voltage":2900}'
2023-11-23 20:49:39.966 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:49:41.879 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:49:45.725 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 20:49:48.835 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 20:49:51.552 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 20:49:55.042 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:49:55.846 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 20:49:56.613 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.5,"last_seen":"2023-11-23T19:49:56.590Z","linkquality":255,"temperature":18.5,"voltage":2900}'
2023-11-23 20:49:56.634 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:49:56.650 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.5,"last_seen":"2023-11-23T19:49:56.603Z","linkquality":255,"temperature":18.5,"voltage":2900}'
2023-11-23 20:49:56.668 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:50:02.913 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 20:50:30.142 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.5,"last_seen":"2023-11-23T19:50:30.118Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 20:50:30.166 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:50:41.868 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/Lidl_Kontakt_3', payload '{"battery":100,"battery_low":false,"contact":true,"last_seen":"2023-11-23T19:50:41.846Z","linkquality":255,"tamper":false}'
2023-11-23 20:50:41.893 MQTT2_DEVICE MQTT2_zigbee_Lidl_Kontakt_3 batteryPercent: 100
2023-11-23 20:50:46.102 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:50:55.654 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 20:50:57.821 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 20:50:58.749 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 20:51:13.832 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 20:51:17.739 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 20:51:48.338 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:51:58.337 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 20:51:59.317 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 20:52:03.445 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:52:16.096 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 20:52:18.703 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 20:52:20.558 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 20:52:53.811 FBDECT FBDECT_HKV_301_WZ batteryPercent: 90
2023-11-23 20:52:53.831 FBDECT FBDECT_HKV_301_SZ batteryPercent: 90
2023-11-23 20:52:53.853 FBDECT FBDECT_Taster_440 batteryPercent: 100
2023-11-23 20:52:56.331 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:53:00.737 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":67.5,"last_seen":"2023-11-23T19:53:00.728Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 20:53:00.748 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:53:03.978 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 20:53:10.790 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.4,"last_seen":"2023-11-23T19:53:10.769Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 20:53:10.818 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:53:11.871 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 20:53:28.870 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 20:53:28.900 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 20:53:50.971 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.4,"last_seen":"2023-11-23T19:53:50.939Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 20:53:51.001 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:54:08.037 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:54:13.730 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:54:25.477 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 20:54:30.766 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 20:54:34.505 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:55:14.117 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:55:23.910 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 20:55:36.851 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 20:56:12.553 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:56:29.485 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 20:56:29.531 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:56:29.561 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 20:56:29.593 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 20:56:45.692 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 20:56:51.701 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.4,"last_seen":"2023-11-23T19:56:51.677Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 20:56:51.726 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:57:18.595 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:57:24.843 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 20:57:26.771 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 20:57:28.059 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:57:31.854 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.4,"last_seen":"2023-11-23T19:57:31.833Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 20:57:31.876 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:57:43.223 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 20:57:43.749 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 20:57:51.225 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 20:57:53.827 FBDECT FBDECT_HKV_301_WZ batteryPercent: 90
2023-11-23 20:57:53.852 FBDECT FBDECT_HKV_301_SZ batteryPercent: 90
2023-11-23 20:57:53.868 FBDECT FBDECT_Taster_440 batteryPercent: 100
2023-11-23 20:58:01.975 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.4,"last_seen":"2023-11-23T19:58:01.950Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 20:58:02.001 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:58:12.026 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.8,"last_seen":"2023-11-23T19:58:11.994Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 20:58:12.054 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:58:22.717 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:58:28.966 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 20:58:40.796 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 20:58:42.146 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.5,"last_seen":"2023-11-23T19:58:42.122Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 20:58:42.170 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:58:47.315 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 20:58:56.850 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 20:59:12.270 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.7,"last_seen":"2023-11-23T19:59:12.242Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 20:59:12.297 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:59:22.300 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.3,"last_seen":"2023-11-23T19:59:22.275Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 20:59:22.313 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 20:59:34.472 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:59:43.874 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 20:59:45.722 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 20:59:46.419 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 20:59:55.821 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:00:02.440 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":67,"last_seen":"2023-11-23T20:00:02.428Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:00:02.455 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:00:22.551 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.6,"last_seen":"2023-11-23T20:00:22.503Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:00:22.571 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:00:34.872 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:00:46.211 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:00:52.634 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.7,"last_seen":"2023-11-23T20:00:52.617Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:00:52.659 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:00:59.254 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:01:00.047 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:01:06.709 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:01:12.728 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.4,"last_seen":"2023-11-23T20:01:12.700Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:01:12.754 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:01:32.802 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.4,"last_seen":"2023-11-23T20:01:32.777Z","linkquality":255,"temperature":18.5,"voltage":2900}'
2023-11-23 21:01:32.827 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:01:39.113 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:01:47.189 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:01:50.474 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/Lidl_BWM_1', payload '{"battery":92,"battery_low":false,"last_seen":"2023-11-23T20:01:50.454Z","linkquality":255,"occupancy":false,"tamper":false,"voltage":2900}'
2023-11-23 21:01:52.880 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.4,"last_seen":"2023-11-23T20:01:52.857Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:01:52.905 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:01:52.918 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.8,"last_seen":"2023-11-23T20:01:52.870Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:01:52.935 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:01:54.830 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:01:56.088 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:01:57.661 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:02:02.929 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.6,"last_seen":"2023-11-23T20:02:02.904Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:02:02.956 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:02:11.824 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:02:12.746 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:02:43.097 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.7,"last_seen":"2023-11-23T20:02:43.069Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:02:43.123 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:02:52.747 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:02:53.766 FBDECT FBDECT_HKV_301_WZ batteryPercent: 90
2023-11-23 21:02:53.780 FBDECT FBDECT_HKV_301_SZ batteryPercent: 90
2023-11-23 21:02:53.792 FBDECT FBDECT_Taster_440 batteryPercent: 100
2023-11-23 21:02:58.131 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:03:00.901 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:03:13.206 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.4,"last_seen":"2023-11-23T20:03:13.181Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:03:13.235 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:03:18.781 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:03:19.248 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:03:19.265 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:03:23.239 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.9,"last_seen":"2023-11-23T20:03:23.214Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:03:23.263 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:03:40.872 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/Lidl_BWM_1', payload '{"battery":92,"battery_low":false,"last_seen":"2023-11-23T20:03:40.853Z","linkquality":255,"occupancy":false,"tamper":false,"voltage":2900}'
2023-11-23 21:03:43.321 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.6,"last_seen":"2023-11-23T20:03:43.301Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:03:43.346 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:03:48.158 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:03:59.460 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:04:08.071 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:04:17.453 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:04:24.848 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:04:26.565 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/Lidl_Kontakt_2', payload '{"battery":78,"battery_low":false,"contact":true,"last_seen":"2023-11-23T20:04:26.542Z","linkquality":208,"tamper":false}'
2023-11-23 21:04:26.591 MQTT2_DEVICE MQTT2_zigbee_Lidl_Kontakt_2 batteryPercent: 78
2023-11-23 21:04:49.661 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:05:14.183 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:05:14.429 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:05:14.509 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:05:21.452 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:05:30.424 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:05:59.324 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:06:18.308 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:06:20.079 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:06:20.127 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:06:29.348 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:06:30.385 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:06:54.107 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.7,"last_seen":"2023-11-23T20:06:54.074Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:06:54.129 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:07:04.896 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:07:17.472 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:07:22.189 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:07:24.207 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.7,"last_seen":"2023-11-23T20:07:24.181Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:07:24.235 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:07:25.696 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:07:25.755 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:07:31.636 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:07:41.660 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:07:41.678 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:07:53.797 FBDECT FBDECT_HKV_301_WZ batteryPercent: 90
2023-11-23 21:07:53.816 FBDECT FBDECT_HKV_301_SZ batteryPercent: 90
2023-11-23 21:07:53.832 FBDECT FBDECT_Taster_440 batteryPercent: 100
2023-11-23 21:08:05.980 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:08:29.266 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:08:31.344 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:08:37.689 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:08:47.256 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:09:10.090 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:09:16.140 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:09:24.660 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.9,"last_seen":"2023-11-23T20:09:24.651Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:09:24.672 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:09:30.434 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:09:34.200 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:09:34.683 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/TRADFRI_OnOffSwitch3', payload '{"battery":75,"brightness":225,"last_seen":"2023-11-23T20:09:34.668Z","linkquality":255,"update":{"installed_version":604241926,"latest_version":604241926,"state":"idle"},"update_available":false}'
2023-11-23 21:09:34.698 MQTT2_DEVICE MQTT2_zigbee_TRADFRI_OnOffSwitch3 batteryPercent: 75
2023-11-23 21:09:34.712 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.7,"last_seen":"2023-11-23T20:09:34.701Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:09:34.726 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:09:35.333 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:09:45.456 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:10:21.710 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:10:35.747 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:10:40.255 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:10:48.972 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:10:51.516 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:11:27.305 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:11:39.881 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:11:40.567 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:11:59.381 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:12:04.004 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:12:26.511 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:12:28.941 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:12:32.877 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:12:44.039 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:12:53.781 FBDECT FBDECT_HKV_301_WZ batteryPercent: 90
2023-11-23 21:12:53.794 FBDECT FBDECT_HKV_301_SZ batteryPercent: 90
2023-11-23 21:12:53.807 FBDECT FBDECT_Taster_440 batteryPercent: 100
2023-11-23 21:13:01.640 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:13:02.929 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:13:09.651 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:13:09.675 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:13:25.641 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.7,"last_seen":"2023-11-23T20:13:25.626Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:13:25.666 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:13:34.514 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:13:45.734 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.6,"last_seen":"2023-11-23T20:13:45.710Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:13:45.760 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:13:56.340 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:13:59.285 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:14:07.699 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:14:15.210 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:14:15.243 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:14:36.739 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:14:55.621 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:14:58.589 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:15:14.070 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:15:15.543 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:15:16.100 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.6,"last_seen":"2023-11-23T20:15:16.076Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:15:16.125 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:15:23.951 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/Lidl_Kontakt_1', payload '{"battery":42.5,"battery_low":false,"contact":true,"last_seen":"2023-11-23T20:15:23.926Z","linkquality":255,"tamper":false}'
2023-11-23 21:15:23.977 MQTT2_DEVICE MQTT2_zigbee_Lidl_Kontakt_1 batteryPercent: 42.5
2023-11-23 21:15:40.949 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:15:56.246 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.6,"last_seen":"2023-11-23T20:15:56.238Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:15:56.258 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:16:05.894 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:16:10.608 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:16:21.036 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:16:46.453 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.6,"last_seen":"2023-11-23T20:16:46.427Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:16:46.478 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:16:49.344 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:16:54.596 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:17:06.536 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.6,"last_seen":"2023-11-23T20:17:06.511Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:17:06.561 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:17:11.959 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:17:16.146 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:17:16.214 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:17:16.234 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:17:26.604 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.6,"last_seen":"2023-11-23T20:17:26.594Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:17:26.618 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:17:27.079 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:17:31.314 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:17:54.251 FBDECT FBDECT_HKV_301_WZ batteryPercent: 90
2023-11-23 21:17:54.269 FBDECT FBDECT_HKV_301_SZ batteryPercent: 90
2023-11-23 21:17:54.286 FBDECT FBDECT_Taster_440 batteryPercent: 100
2023-11-23 21:17:55.002 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:18:00.821 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:18:14.224 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:18:16.840 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.5,"last_seen":"2023-11-23T20:18:16.816Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:18:16.867 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:18:20.431 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:18:35.479 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:18:35.778 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:18:46.950 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.8,"last_seen":"2023-11-23T20:18:46.922Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:18:46.975 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:18:56.559 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:18:56.989 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.6,"last_seen":"2023-11-23T20:18:56.963Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:18:57.021 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:18:57.253 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:19:02.279 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:19:02.879 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:19:35.891 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:19:43.209 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:19:47.191 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.7,"last_seen":"2023-11-23T20:19:47.163Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:19:47.209 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:20:02.696 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:20:10.885 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:20:17.301 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.5,"last_seen":"2023-11-23T20:20:17.287Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:20:17.321 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:20:32.976 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:20:48.742 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:20:48.760 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:21:07.512 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.7,"last_seen":"2023-11-23T20:21:07.491Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:21:07.533 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:21:09.758 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:21:11.180 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:21:14.360 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:21:27.599 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.5,"last_seen":"2023-11-23T20:21:27.583Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:21:27.622 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:21:30.075 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:21:35.132 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:21:38.624 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:22:07.772 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.7,"last_seen":"2023-11-23T20:22:07.749Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:22:07.800 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:22:13.442 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:22:17.680 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:22:23.295 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:22:35.503 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:22:36.554 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:22:44.205 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:22:44.256 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:22:47.965 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.6,"last_seen":"2023-11-23T20:22:47.908Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:22:47.984 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:22:52.497 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:22:53.840 FBDECT FBDECT_HKV_301_WZ batteryPercent: 90
2023-11-23 21:22:53.857 FBDECT FBDECT_HKV_301_SZ batteryPercent: 90
2023-11-23 21:22:53.873 FBDECT FBDECT_Taster_440 batteryPercent: 100
2023-11-23 21:22:55.980 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:22:57.978 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.6,"last_seen":"2023-11-23T20:22:57.960Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:22:58.003 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:23:08.025 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.4,"last_seen":"2023-11-23T20:23:08.000Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:23:08.051 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:23:25.785 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:23:28.842 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:23:42.203 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:23:42.774 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:23:48.720 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:23:58.145 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:23:58.215 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.6,"last_seen":"2023-11-23T20:23:58.201Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:23:58.236 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:23:59.733 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:24:28.341 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.6,"last_seen":"2023-11-23T20:24:28.318Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:24:28.366 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:24:48.776 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:24:52.826 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:24:55.170 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:25:05.715 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:25:06.013 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:25:08.506 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.7,"last_seen":"2023-11-23T20:25:08.480Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:25:08.528 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:25:11.195 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:25:28.583 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.6,"last_seen":"2023-11-23T20:25:28.566Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:25:28.605 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:25:40.025 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:25:52.858 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:25:54.396 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:26:12.077 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:26:18.779 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.6,"last_seen":"2023-11-23T20:26:18.754Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:26:18.807 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:26:36.034 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:26:38.851 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.5,"last_seen":"2023-11-23T20:26:38.829Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:26:38.868 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:26:58.932 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:27:06.563 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:27:19.040 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.6,"last_seen":"2023-11-23T20:27:19.010Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:27:19.067 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:27:19.971 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:27:29.069 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.6,"last_seen":"2023-11-23T20:27:29.045Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:27:29.094 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:27:39.124 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.7,"last_seen":"2023-11-23T20:27:39.091Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:27:39.151 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:27:41.950 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:27:49.146 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.6,"last_seen":"2023-11-23T20:27:49.125Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:27:49.169 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:27:49.848 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:27:53.810 FBDECT FBDECT_HKV_301_WZ batteryPercent: 90
2023-11-23 21:27:53.830 FBDECT FBDECT_HKV_301_SZ batteryPercent: 90
2023-11-23 21:27:53.849 FBDECT FBDECT_Taster_440 batteryPercent: 100
2023-11-23 21:28:10.255 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:28:10.675 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:28:12.222 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:28:24.088 MQTT2_DEVICE OMG_A4C138201D33 batteryPercent: 50
2023-11-23 21:28:25.711 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
2023-11-23 21:28:27.963 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:28:29.307 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.7,"last_seen":"2023-11-23T20:28:29.283Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:28:29.334 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:28:49.374 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":65.6,"last_seen":"2023-11-23T20:28:49.358Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:28:49.390 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:28:51.793 MQTT2_DEVICE OMG_A4C138239A92 batteryPercent: 58
2023-11-23 21:28:59.404 MQTT2_DEVICE MQTT2_zigbee_bridge log_message: MQTT publish: topic 'zigbee2mqtt/SONOFF_TH01_Medikamente', payload '{"battery":79,"humidity":66.6,"last_seen":"2023-11-23T20:28:59.393Z","linkquality":255,"temperature":18.6,"voltage":2900}'
2023-11-23 21:28:59.417 MQTT2_DEVICE MQTT2_zigbee_SONOFF_TH01_Medikamente batteryPercent: 79
2023-11-23 21:29:09.949 MQTT2_DEVICE OMG_A4C1381A61FB batteryPercent: 59
2023-11-23 21:29:10.975 MQTT2_DEVICE OMG_A4C1388CA934 batteryPercent: 59
Zitat von: LutzG am 23 November 2023, 21:55:11Die Screenshots sind immer noch aktuell, Mal sehen, ob sich bis morgen was ändert.Evtl. noch welche von den geposteten Code-Varianten (also meinen elsif) du aktuell verwendest.
elsif($BatteryType[0] eq "batteryPercent")
Zitat von: LutzG am 23 November 2023, 21:51:16"batteryPercent" habe ich dem Thread keine Lösung gefunden. Der Code ist von dir:Ich habe nachgesehen, der Einbau der FBDECT in dem verlinkten Beitrag ist fehlerhaft, eieiei...Zitateine Version hängt anhttps://forum.fhem.de/index.php?topic=82637.msg1245462#msg1245462
Zitat von: MadMax-FHEM am 23 November 2023, 22:17:39Wichtig (darum auch "Typprüfung"), dass Devices nicht doppelt ausgewertet werden.die meisten Device haben jetzt: "battery" und "batteryPercent", weswegen ich angefangen habe überall "batteryPercent" (eindeutig) einzubauen, wo nicht vorhanden. Mit "battery" habe ich immer doppelte Einträge gehabt.
Zitat von: MadMax-FHEM am 23 November 2023, 22:17:39(wobei: wenn schon mal wo ein elsif getroffen hat, dann ist ja "fertig" denke ich.Da verstehe ich leider den Code nicht. Ich habe nicht gefunden, dass die doppelten Readings / Device gefiltert werden. Ich glaube, wenn von einem Device "battery" und "batteryPercent" gefeuert wird, werden beide Readings ausgewertet (doppelt für ein Device)?
#############################################
# MQTT2_DEVICE Devices that have batteryPercent Reading
#############################################
elsif($BatteryType[0] eq "batteryPercent")
# elsif($BatteryType[0] eq "batteryPercent" && InternalVal($Device, "TYPE", "undef") eq "MQTT2_DEVICE")
{
$ActBatLevel = ReadingsNum($Device, "batteryPercent", "0");
if($ActBatLevel > 75)
{
# set date/time for changed battery if it was low before (so probably a change happended)
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") eq "low" || ReadingsVal($BatteryStatus, $Device, 100) < 25)
{
fhem("setreading $BatteryChanged $Device $text_changed");
}
# set the battery value to 75% - 100%
fhem("setreading $BatteryStatus $Device 100");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $BatteryStatus $Device 75");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $BatteryStatus $Device 50");
# set the signal state back to none
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $BatteryStatus $Device 25");
# maybe already send a message! Easy possible with new signal states
}
else
{
# totally empty (below 5%)
fhem("setreading $BatteryStatus $Device 5"); # <-- bei ...$Device 0" keine Funktion?
# check if message was already sent
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $BatteryStatusBot $SignalDevice low");
#send message via TelegramBot
fhem($msg." ".$text_soon);
}
}
}
fhem("setreading $BatteryStatus $Device $ActBatLevel");
funktioniert es, aber ich bekomme lauter Meldungen. ??? 2023.11.24 00:51:48.229 1: my_StoreBatteryStatus Device: MQTT2_zigbee_SONOFF_TH01_Medikamente Event: batteryPercent: 79.5 Model: zigbee2mqtt_TempHumSensor
2023.11.24 00:51:48.537 1: my_StoreBatteryStatus Device: OMG_A4C1381A61FB Event: batteryPercent: 59 Model: OpenMQTTGateway_BT_temp_hum_sensor
2023.11.24 00:51:48.637 1: my_StoreBatteryStatus Device: OMG_A4C1388CA934 Event: batteryPercent: 59 Model: OpenMQTTGateway_BT_temp_hum_sensor
2023.11.24 00:51:58.252 1: my_StoreBatteryStatus Device: MQTT2_zigbee_SONOFF_TH01_Medikamente Event: batteryPercent: 79.5 Model: zigbee2mqtt_TempHumSensor
2023.11.24 00:52:08.286 1: my_StoreBatteryStatus Device: MQTT2_zigbee_SONOFF_TH01_Medikamente Event: batteryPercent: 79.5 Model: zigbee2mqtt_TempHumSensor
2023.11.24 00:52:28.366 1: my_StoreBatteryStatus Device: MQTT2_zigbee_SONOFF_TH01_Medikamente Event: batteryPercent: 79.5 Model: zigbee2mqtt_TempHumSensor
2023.11.24 00:52:39.899 1: my_StoreBatteryStatus Device: OMG_A4C138201D33 Event: batteryPercent: 50 Model: OpenMQTTGateway_BT_temp_hum_sensor
2023.11.24 00:52:40.550 1: my_StoreBatteryStatus Device: OMG_A4C1388CA934 Event: batteryPercent: 58 Model: OpenMQTTGateway_BT_temp_hum_sensor
elsif($BatteryType[0] eq "batteryPercent" && (InternalVal($Device, "TYPE", "undef") eq "MQTT2_DEVICE" || InternalVal($Device, "TYPE", "undef") eq "FBDECT"))
Zitat von: LutzG am 24 November 2023, 01:21:20funktioniert es, aber ich bekomme lauter Meldungen.Du hast
Zitat von: LutzG am 24 November 2023, 01:21:20Mein jetziger Stand:... funktioniert nicht korrekt, obwohl ich keine Batterie gewechselt habe, hatte ich im Dummy: Batteriewechsel 4 Einträge. Ich logge jetzt Mal ein paar Tage batteryPercent.
Zitat von: MadMax-FHEM am 24 November 2023, 08:48:43tatsächlichen Werte in den dummy zu schreiben [...]Das "schwere Wachstum" habe ich gelesen (mangels Hardware aber nicht nachvollziene können). Optisch macht das keinen Unterschied? ??? Ich habe alle (korrekten) Werte "gesammelt"! 8) Ich träume ja immer noch von einem Device, wo alle Batterie-Infos zusammen sind (%, ob bald ausfällt, gewechselt, Zustand melden, ...). Nebenbei, mit:
Macht aber optisch keinen Unterschied ;)
Und: der Code ist schwer "gewachsen"... 8)
fhem("setreading $BatteryStatus $Device $ActBatLevel");
funktioniert es doch nicht so richtig. Im Dummy: BatterieStatus werden zwar die Zahlen-Werte eingetragen, in der ReadingsDroup: rgBatteryStatus werden aber statt Icons Text angezeigt. ??? Zitat von: MadMax-FHEM am 24 November 2023, 10:37:20Du hastDeine Glaskugel ist top! :o Wieder auskommentiert und die Meldungen sind weg. ::)
1. (verm.) den Log-Aufruf gleich zu beginn wieder "einkommentiert"
Zitat von: MadMax-FHEM am 24 November 2023, 08:48:43Falls nun zu viele Devices erfasst werden [...] kannst du auch das probieren:Ich habe das Notify geändert (nur Device mit "batteryPercent" will ich auswerten - damit eindeutig):
defmod NO.BatterieNotify notify .*:batteryPercent.* {BatteryStatusFunction($NAME, $EVENT)}
Zitat von: MadMax-FHEM am 24 November 2023, 08:48:43wenn (Weihnachten) mal Zeit ist, vielleicht schaffe ich eine "saubere" (und evtl. auch einfachere) Variante...Weihnachten? Ich finde, da ist deine Familie wichtiger! Nicht deine Zeit wegen mir versauen! Seit 2021 hätte ich gern so eine Anzeige, da kommt es auf ein paar Monate nicht an! :)
batteryVoltage:batterymV.* {ReadingsNum($name,'batterymV',0)/1000}, batteryPercent:battery.* {ReadingsNum($name,'battery',0)}, batteryState {if (ReadingsNum($name, "battery", 0) > 25) {return "ok"} else {return "low"}}
Zitat von: LutzG am 27 November 2023, 02:52:42funktioniert es doch nicht so richtig. Im Dummy: BatterieStatus werden zwar die Zahlen-Werte eingetragen, in der ReadingsDroup: rgBatteryStatus werden aber statt Icons Text angezeigt.Nutzt du bei der readingsGroup auch die Sub "my_SetBatteryIcon" zum Setzen der Icons? ;)
Zitatattr rg_BatterieLevel valueIcon {'batteryPercent.0' => 'measure_battery_0@red','batteryPercent.25' => 'measure_battery_25@red','batteryPercent.50' => 'measure_battery_50@orange','batteryPercent.75' => 'measure_battery_75@green','batteryPercent.100' => 'measure_battery_100@green'}
Zitatset MyFhemTelegram message @@Michael : TelegramBot_Set: Command message, no msg content specified
{ Log 1, "Version 1" }
{ Log 1, $Text }
{ Log 1, "Version 2" }
{ Log 1, $SignalDevice }
2024.02.15 17:25:34.949 1: Version 1
2024.02.15 17:25:34.950 1:
2024.02.15 17:25:34.950 1: Version 2
2024.02.15 17:25:34.950 1: OG_BueroThermostat_BatState
Zitatmy $msg = "set MyFhemTelegram message \@\@Michael ";
Zitatset MyFhemTelegram message @Michael TEST
my $msg = "set TelegramBot message \@\@User ";
muss eigentlich nur 1x escaped werden, zumindest hat es so bei einem Schnelltest geklappt: my $msg = "set TelegramBot message \@User ";
ZitatDie Batterien von OG_BueroThermostat sollten bald gewechselt werden!
elsif(($BatteryType[0] eq "battery") && ($TYPE eq "MAX" || $TYPE eq "CUL_TCM97001"))
,Zitat von: weini am 19 März 2024, 19:34:51Ich nutze Außentemperaturfühler von Pearl (NC-7159), dich ich als CUL_TCM97001 mit model=NC_WS in FHEM einbinde.Danke, nehme ich bei Gelegenheit mit auf...
Im Perl-Code have ich Zeile 295 so angepasst
Code Auswählen ErweiternCode Auswählenelsif(($BatteryType[0] eq "battery") && ($TYPE eq "MAX" || $TYPE eq "CUL_TCM97001"))
,
dass neben den Max Devices auch diese Temperaturfühler verarbeitet werden.
Zitat von: weini am 19 März 2024, 19:34:51Nun senden die aber die ersten Battery=low Warnungen schon, wenn die Batterie noch recht gut ist. Der Status springt nach ein paar Sekunden oder Minuten wieder auf "ok" zurück. Trotzdem löst natürlich die Alarmierung aus. In meiner alten DOIF Lösung hatte ich mir da mit einem simplen "wait" geholfen, so dass der Alarm erst ausgelöst wurde, wenn der Status für mindestens 5 Minuten auf "low" geblieben ist.Muss ich mir ansehen.
Wäre es möglich, etwas vergleichares in BatteryCheckUtils zu integrieren?
Zitat von: weini am 19 März 2024, 19:34:51Alternativ würde ich ggf. den Status mit einem DOIF & wait selbst für die Alarmierung überwachen. Gehe ich damit besser auf das "BatterieStatus" oder auf das "BatterieStatusBot" Device los?Wenn dann verm. BatterieStatus, dort stehen ja die aktuellen Batteriestände der "gematchten" Devices "in Kopie" drin.
Zitat von: MadMax-FHEM am 20 März 2024, 07:55:04Frage: lieber schon mal eine Nachricht beim ersten "low" und dann keine erneute Nachricht (für eine bestimmte Zeit) oder erst eine Nachricht, wenn eine bestimmte Zeit "stabil" low war/ist?Aus meiner Sicht klar die zweite Variante. Der Außenfühler geht z. B. auch gerne mal kältebedingt auf "low", läuft dann aber noch Monate lang.
Zitat von: weini am 20 März 2024, 16:22:23Aus meiner Sicht klar die zweite Variante. Der Außenfühler geht z. B. auch gerne mal kältebedingt auf "low", läuft dann aber noch Monate lang.Ja, dachte ich mir ;)
Zitat von: Prof. Dr. Peter Henning am 20 März 2024, 16:49:48Könnt Ihr bitte mal schreiben, wo der genannte Code auf diesen X Seiten steckt? Oder das mal zusammengefasst hier posten?
LG
pah
Zitat von: _fhemuser_ am 21 März 2024, 09:17:05Hallo,
gibt es jetzt zwei verschiedene Module für die Batterieprüfung?
Im ersten Posting ist 99_BatteryCheckUtils.pm und 2 Posts oberhalb 99_Battercheck.pm.
Eingerichtet werden beide gleich wie im ersten Post beschrieben oder gibt es Unterschiede?
Kann man noch zusätzlich den BatterieTyp mit übermitteln?
Ich habe bei allen Geräten eine Userattr BatteryTyp angelgt in dem der Batterietyp zB 2 x AA eingefügt ist.
Gruß
_fhemuser_
Zitat von: _fhemuser_ am 21 März 2024, 12:11:06In jedem batteriebetriebenen Gerät steht unter UserReadings ', BatteryTyp {"CR2032"}', sowie evtl andere Berechnungen. zB erzeuge ich zusätzlich ein BatteryPer das die Prozentzahl enthält abhängig vom Gerätetyp. Mir gefiel das Durcheinander nicht, dass teilweise Prozente, teilweise OK, teilweise Spannungen, voll oder OK angezeigt werden. Dadurch konnte ich mit ReadingGroups und DOIF eine einfache Übersicht und Alarmierung erhalten.
Zitat von: MadMax-FHEM am 21 März 2024, 13:20:05Ähnlich habe ich das mit den userReadings bei den MAX Thermostaten gelöst:Zitat von: _fhemuser_ am 21 März 2024, 12:11:06In jedem batteriebetriebenen Gerät steht unter UserReadings ', BatteryTyp {"CR2032"}', sowie evtl andere Berechnungen. zB erzeuge ich zusätzlich ein BatteryPer das die Prozentzahl enthält abhängig vom Gerätetyp. Mir gefiel das Durcheinander nicht, dass teilweise Prozente, teilweise OK, teilweise Spannungen, voll oder OK angezeigt werden. Dadurch konnte ich mit ReadingGroups und DOIF eine einfache Übersicht und Alarmierung erhalten.
In dem angelegten dummy stehen dann auch pro Device die Prozente :)
(zumindest so der Plan ;) )
Allerdings bei low/ok Devices halt nur 0%/100% 8)
batteryPer {if
(ReadingsVal($NAME,"batteryState","") eq "ok") {return 100} elsif
(ReadingsVal($NAME,"batteryState","") eq "low") {return 1} else
{return -1}}, BatteryTyp {"2 x AA"}
ZitatuserReadings BatteryTyp ODER userattr BatteryTyp?
Ich habe dafür (weil es ja eine Konfiguration ist, die man 1x pro Device macht) ein userattr, Beispiel:
Devicename userattr my_batteryType
Devicename my_batteryType 2xAA
ZitatDas mit userattr würde ich evtl. ins Modul einbauen.
Das userattr muss dann entweder global oder pro Device wo es gebraucht wird ergänzt werden (selbst!) und den Wert nat. auch selbst füllen...
Das dann in den Meldungstext einbauen kann ich ja dann machen: wenn es das Attribut gibt (Name wird zu Beginn der Datei festgelegt, wie andere Dinge auch), dann wird der Inhalt dazugebastelt, wenn nicht, dann nicht ;)
Gruß, Joachim
ZitatBatteryTyp {"2 x AA"}Naja: es wird bei JEDEM Event des Devices getriggert (kein Trigger angegeben) und setzt jedesmal das Reading auf einen gleichbleibende Zeichenkette ;)
ZitatBei Gelegenheit baue ich das mit dem Attribut und Batterie-Typ mal ein...
EDIT: muss ja keiner nutzen ;)
Zitat von: _fhemuser_ am 21 März 2024, 15:12:34Einige Geräte sind "doppelt" vorhanden. ZB die HUE Bewegungssensoren werden als 3 Geräte eingerichtet um die Helligkeit, Bewegung und Temperatur zu übertragen. Wie kann man solche Einträge verhindern?
Dann habe ich noch einige Funkschalter die nur selten benutzt werden und bei denen die Batterie entfernt ist. Wie können diese ausgeschlossen werden? Eine Blacklst oder Whitelist gibt es ja bei den Dummy und Notify nicht.
Zitat von: MadMax-FHEM am 21 März 2024, 15:24:19Naja um möglichst andere Anwender nicht zu "stören" (also Verhalten möglichst lassen wie es ist für alle aktuellen Nutzer), wäre mein Vorschlag ebenfalls ein weiteres userattr zu spendieren?
Sowas wie: doNotAccount (oder so) / wobei: Namen kann jeder selber wählen und dann entsprechend oben in die Datei eintragen
Wenn das Attribut existiert bzw. besser wenn es gesetzt ist: 1 dann wird das Device nicht beachtet...
Eine Whitelist/Blacklist ginge auch: oben in der Datei ein Array mit den Devicenamen (die beachtet werden sollen: whitelist / oder eben nicht beachtet werden sollen: blacklist)
Was wäre besser?
Gruß, Joachim
Zitat von: _fhemuser_ am 21 März 2024, 15:41:19Kann vielleicht in FHEM eine Konfiguration hinterlegt werden bei denen Änderunge zb für die gracetime eingetragen werden. Damit müsste die Datei bei einem Update nicht geändert werden.
#Set Readings for device with reading batteryPercent
my @bat_p = devspec2array("batteryPercent=.*");
for(my $x=0;$x<@bat_p;$x++)
{
my $stat_p = ReadingsVal($bat_p[$x],"batteryPercent","undef");
if($stat_p ne "undef")
{
BatteryStatusFunction($bat_p[$x],"batteryPercent: $stat_p");
}
}
Zitat von: TK67 am 21 März 2024, 16:44:04Hallo,
habe da noch eine Ergänzung für die sub BatteryStart()
Dient zur Vorbelegung von Geräten mit "batteryPercent" beim ersten Start.
Habe den Block nach dem Block #Set Readings for device with reading batteryLevel eingefügt:Code Auswählen#Set Readings for device with reading batteryPercent
my @bat_p = devspec2array("batteryPercent=.*");
for(my $x=0;$x<@bat_p;$x++)
{
my $stat_p = ReadingsVal($bat_p[$x],"batteryPercent","undef");
if($stat_p ne "undef")
{
BatteryStatusFunction($bat_p[$x],"batteryPercent: $stat_p");
}
}
Gruß TK67
attr Device userattr batteryType doNotAccount
Beide userattr oder nur eins davon...attr Device doNotAccount 1
attr Device batteryType 2xAA
ZitatDie Batterien vom Typ 2xAA von Device sollten bald gewechselt werden!
if($BatteryType[0] eq "battery" && $Model ne "HM-TC-IT-WM-W-EU" && $Model ne "HM-CC-RT-DN" && $Model ne "undef")
ergänztif($BatteryType[0] eq "battery" && $Model ne "HM-TC-IT-WM-W-EU" && $Model ne "HM-CC-RT-DN" && $Model ne "undef" && $TYPE ne "HUEDevice")
elsif($BatteryType[0] eq "batteryPercent" && ($TYPE eq "ZWave" || $TYPE eq "HUEDevice" || $TYPE eq "FBDECT" || $TYPE eq "MQTT2_DEVICE"))
mitelsif($BatteryType[0] eq "batteryPercent" && ($TYPE eq "ZWave" || $TYPE eq "HUEDevice" || $TYPE eq "FBDECT" || $TYPE eq "MQTT2_DEVICE" || $TYPE eq "withings"))
Zitat von: TK67 am 21 März 2024, 18:58:42Wäre nett wenn du das auch noch anhängen kannst.Ich habe hier kein "Monopol" auf den Code ;)
Zitatelsif($BatteryType[0] eq "batteryPercent" && ($TYPE eq "ZWave" || $TYPE eq "HUEDevice" || $TYPE eq "FBDECT" || $TYPE eq "MQTT2_DEVICE" || $TYPE eq "withings"))Sorry wenn ich das so deutlich sage: Aber das ist primitiver Spaghetti-Code, den nach kurzer Zeit niemand mehr warten kann. Außerdem führt er zu vielen unnötigen Tests.
Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 04:26:30Es ist in jedem Fall für die innere Logik von FHEM besser, mit userattr als mit userReadings zu arbeiten - der Typ einer Batterie ist eben kein Messwert des Gerätes.Ja, sehe ich auch so.
Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 04:26:30Zweitens ein Tipp: Gerade Wandthermostate sitzen oft entweder neben oder in einer 230V-Wandanschlussdose. Die kann man problemlos mit einem 3,3 V-Einbaunetzteil versorgen. Daraus folgt schon mal, dass das gesamte System nicht viel Sinn macht ohne ein Attribut zum ignorieren.Ja und andere Geräte/Gründe...
Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 04:26:30Drittens sollte man die Terminologie im Auge behalten. Ein Attributname "doNotAccount" ist so generisch, dass er sich auf jede Art der Liste beziehen könnte, das sollte man auf jeden Fall vermeiden. Auch beim Sortieren in längeren Attributlisten wäre es besser, wenn man das Attribut "batteryChk" oder so ähnlich nennt. Das mache ich bei mir seit Jahren so, hat sich gut bewährt. Außerdem kann man den Attributwert auch etwas aufpolstern. Beispiel: Der Attributwert kann aus einer "|"-getrennten Liste bestehen, sagen wir
<readingname>|<readingtype>
battery|simple kann beispielsweise bedeuten, dass das Reading für den Batteriezustand "battery" heißt und nur "ok" oder "low" sein kann.
batteryLevel|ignore kann beispielsweise bedeuten, dass das Reading den "batteryLevel" heißt, aber bei der Prüfung ignoriert wird.
Entsprechend kann man das auch mit dem Batterietyp machen, z.B. als
<batteryType>|<batteryChange>
Geräte, bei denen das Datum des letzten Wechsels nicht bekannt ist, haben dann eben nur Attributwerte wie z.B. "2AA". Und selbstverständlich könnte man auch erreichen, dass bei einem Wechsel des Messwertes von "low" auf "ok" das Datum automatisch an diesen Attributwert angehängt wird.
Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 04:26:30Viertens, auch das zur Terminologie: Ein Readingsname "batteryPercent" ist semantisch unsinnig, weil er die Einheit (eben dimensionslose Prozent) in den Namen mit aufnimmt. Das ist ungefähr so doof, als ob man den Messwert der Netzspannung als "Netzvolt" bezeichnet. Wenn man das schon selbst auswählt, sollte man das korrekter benennen, z.B. batteryLevel. Es ist schon ärgerlich genug, dass in vielen FHEM-Devices wie Dimmern und Rollladenaktoren einfach "pct" als Reading auftaucht, das ist aber immerhin weitgehend einheitlich geregelt.An den Reading-Namen (bzgl. Battrie-Stand) den die Devices (vom jedeiligen Modul) bekommen (haben) kann ich nix ändern.
Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 08:09:38Sorry wenn ich das so deutlich sage: Aber das ist primitiver Spaghetti-Code, den nach kurzer Zeit niemand mehr warten kann. Außerdem führt er zu vielen unnötigen Tests.Kein Monopol auf Code und Code-Schnipsel ;)
Stattdessen sollte es einen zentralen Hash geben, in dem die Gegebenheiten für bestimmte TYPEs abgelegt sind, und natürlich Ausnahmen für konkrete Modelle.
Zitat von: _fhemuser_ am 21 März 2024, 15:41:19Kann vielleicht in FHEM eine Konfiguration hinterlegt werden bei denen Änderunge zb für die gracetime eingetragen werden. Damit müsste die Datei bei einem Update nicht geändert werden.
Zitat von: weini am 22 März 2024, 07:53:27Die Grace Period scheint gut zu funktionieren. Ich hatte die Situation jetzt wieder und die Alarmierung wurde wie gewünscht unterdrückt.
Nochmals vielen Dank!
Zitat von: TK67 am 21 März 2024, 18:58:42Meine Hue Bewegungsmelder und der Hue Dimmschalter haben jeweils battery und batteryPercent als Readings, dies führte teilweise zu unplausiblen Zuständen.
Zitat von: MadMax-FHEM am 06 Januar 2024, 14:50:08Es wird nun auf folgende Readings geprüft:
battery -> ok/low für CUL_HM (außer HM-TC-IT-WM-W-EU und HM-CC-RT-DN), MAX!, HMCCU und LaCrosse
batteryLevel -> voltage für HM-TC-IT-WM-W-EU und HM-CC-RT-DN (CUL_HM)
batteryPercent -> percentage für ZWave, HUEDevice, FBDECT und MQTT2_DEVICE <- das darf aber dann KEIN Reading battery haben! (sonst taucht es doppelt auf)
battery -> percentage für MQTT2_DEVICE ("früher" auch ZWave und HUEDevice) <- das darf aber dann KEIN Reading batteryPercent haben! (sonst taucht es doppelt auf)
batteryLevel -> percentage für XiaomiFlowerSens
define Fenster_Ess MQTT2_DEVICE zigbee_Sensor_Fenster_Licht
attr Fenster_Ess BatteryTyp CR2032
attr Fenster_Ess DbLogExclude .*
attr Fenster_Ess DbLogInclude tamper.*|state.*|battery.*
attr Fenster_Ess devStateIcon open:fts_window_1w_open@red closed:fts_window_1w@green\
.*false:rc_BLANK \
.*true:message_service@red\
Batt.*100:measure_battery_100@green \
Batt.*9[0-9].*:measure_battery_100@green \
Batt.*8[0-9].*:measure_battery_75@green \
Batt.*7[0-9].*:measure_battery_75@green \
Batt.*6[0-9].*:measure_battery_50@green \
Batt.*5[0-9].*:measure_battery_50@green \
Batt.*4[0-9].*:measure_battery_50@green \
Batt.*3[0-9].*:measure_battery_25@orange \
Batt.*2[0-9].*:measure_battery_25@orange \
Batt.*1[0-9].*:measure_battery_25@red \
Batt.*[0][0-9].*:measure_battery_0@red
attr Fenster_Ess devicetopic zigbee2mqtt/Sensor_Fenster_Licht
attr Fenster_Ess fp_Grundriss 206,847,1,Fenster_Ess
attr Fenster_Ess genericDeviceType ContactSensor
attr Fenster_Ess group Door-Window
attr Fenster_Ess homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;;open:CONTACT_NOT_DETECTED
attr Fenster_Ess icon tuer_fenster_kontakt
attr Fenster_Ess jsonMap contact:state
attr Fenster_Ess model zigbee2mqtt_ContactSensor
attr Fenster_Ess readingList $DEVICETOPIC:.* { my $ret=json2nameValue($EVENT,'',$JSONMAP);; $ret->{state}=$ret->{state} eq 'true' ? 'closed' : 'open';; return $ret }
attr Fenster_Ess room Heizkoerper->-Heizkoerper,MQTT2_DEVICE,Zigbee
attr Fenster_Ess stateFormat state\
Batt: battery\
Hell: illuminance
attr Fenster_Ess userReadings batteryPer {ReadingsVal($NAME,'battery',0) }
# CID zigbee_Sensor_Fenster_Licht
# DEF zigbee_Sensor_Fenster_Licht
# FUUID 6593dfde-f33f-d33d-4e3d-3167c848f406e555
# IODev MQTT2_FHEM_Server
# LASTInputDev MQTT2_FHEM_Server
# MQTT2_FHEM_Server_CONN MQTT2_FHEM_Server_192.168.0.103_53406
# MQTT2_FHEM_Server_MSGCNT 48
# MQTT2_FHEM_Server_TIME 2024-03-22 08:04:43
# MSGCNT 48
# NAME Fenster_Ess
# NR 858
# STATE closed
#Batt: 100
#Hell: 447
# TYPE MQTT2_DEVICE
# eventCount 54
# Helper:
# DBLOG:
# battery:
# logdb:
# TIME 1711091083.43459
# VALUE 100
# batteryPer:
# logdb:
# TIME 1711091083.43459
# VALUE 100
# state:
# logdb:
# TIME 1711091083.43459
# VALUE closed
# JSONMAP:
# contact state
# OLDREADINGS:
# READINGS:
# 2024-03-21 09:24:16 IODev MQTT2_FHEM_Server
# 2024-03-22 08:04:43 battery 100
# 2024-03-22 08:04:43 batteryPer 100
# 2024-03-22 08:04:43 device_applicationVersion 131
# 2024-03-22 08:04:43 device_friendlyName Sensor_Fenster_Licht
# 2024-03-22 08:04:43 device_hardwareVersion 1
# 2024-03-22 08:04:43 device_ieeeAddr 0xa4c138b67155d016
# 2024-03-22 08:04:43 device_manufacturerID 4098
# 2024-03-22 08:04:43 device_manufacturerName _TZE200_pay2byax
# 2024-03-22 08:04:43 device_model ZG-102ZL
# 2024-03-22 08:04:43 device_networkAddress 63979
# 2024-03-22 08:04:43 device_powerSource Battery
# 2024-03-22 08:04:43 device_softwareBuildID 0122052017
# 2024-03-22 08:04:43 device_stackVersion 2
# 2024-03-22 08:04:43 device_type EndDevice
# 2024-03-22 08:04:43 device_zclVersion 3
# 2024-03-22 08:04:43 illuminance 447
# 2024-03-22 08:04:43 illuminance_interval 60
# 2024-03-22 08:04:43 last_seen 2024-03-22T08:04:43+01:00
# 2024-03-22 08:04:43 linkquality 255
# 2024-03-22 08:04:43 state closed
# 2024-01-04 07:17:08 tamper false
#
setstate Fenster_Ess closed\
Batt: 100\
Hell: 447
setstate Fenster_Ess 2024-03-21 09:24:16 IODev MQTT2_FHEM_Server
setstate Fenster_Ess 2024-03-22 08:04:43 battery 100
setstate Fenster_Ess 2024-03-22 08:04:43 batteryPer 100
setstate Fenster_Ess 2024-03-22 08:04:43 device_applicationVersion 131
setstate Fenster_Ess 2024-03-22 08:04:43 device_friendlyName Sensor_Fenster_Licht
setstate Fenster_Ess 2024-03-22 08:04:43 device_hardwareVersion 1
setstate Fenster_Ess 2024-03-22 08:04:43 device_ieeeAddr 0xa4c138b67155d016
setstate Fenster_Ess 2024-03-22 08:04:43 device_manufacturerID 4098
setstate Fenster_Ess 2024-03-22 08:04:43 device_manufacturerName _TZE200_pay2byax
setstate Fenster_Ess 2024-03-22 08:04:43 device_model ZG-102ZL
setstate Fenster_Ess 2024-03-22 08:04:43 device_networkAddress 63979
setstate Fenster_Ess 2024-03-22 08:04:43 device_powerSource Battery
setstate Fenster_Ess 2024-03-22 08:04:43 device_softwareBuildID 0122052017
setstate Fenster_Ess 2024-03-22 08:04:43 device_stackVersion 2
setstate Fenster_Ess 2024-03-22 08:04:43 device_type EndDevice
setstate Fenster_Ess 2024-03-22 08:04:43 device_zclVersion 3
setstate Fenster_Ess 2024-03-22 08:04:43 illuminance 447
setstate Fenster_Ess 2024-03-22 08:04:43 illuminance_interval 60
setstate Fenster_Ess 2024-03-22 08:04:43 last_seen 2024-03-22T08:04:43+01:00
setstate Fenster_Ess 2024-03-22 08:04:43 linkquality 255
setstate Fenster_Ess 2024-03-22 08:04:43 state closed
setstate Fenster_Ess 2024-01-04 07:17:08 tamper false
Dieser Thermostat gar nicht.define MQTT2_zigbee_Heiz_Ess MQTT2_DEVICE zigbee_Heiz_Ess
attr MQTT2_zigbee_Heiz_Ess userattr AlleHeizungen AlleHeizungen_map MQTTHeizungen MQTTHeizungen_map structexclude weekprofile
attr MQTT2_zigbee_Heiz_Ess BatteryTyp 2 x AA
attr MQTT2_zigbee_Heiz_Ess DbLogInclude desired-temp temperature mode\
desiredTemperature
attr MQTT2_zigbee_Heiz_Ess alias Ess
attr MQTT2_zigbee_Heiz_Ess devStateIcon .*UNLOCK:secur_open@green:btnLock+LOCK\
.*LOCK:secur_locked@yellow:btnLock+UNLOCK \
\
.*Battery.*ok:measure_battery_100@green \
\
Frost.*ON:frost@lime:frost_protection+OFF\
Frost.*OFF:frost@grey:frost_protection+ON\
\
Fenster.*OFF:fts_window_1w@green:open_window+ON\
Fenster.*ON:fts_window_1w_open@red:open_window+OFF\
\
.*Aus.*ON:sani_heating@red:heating_stop+OFF # Thermostat abgeschaltet im Sommer Strom sparen\
.*Aus.*OFF:sani_heating@green:heating_stop+ON+preset+auto # Thermostat abgeschaltet im Sommer Strom sparen\
\
.*auto:sani_heating_automatic@lightgray:preset+manual \
.*manual:sani_heating_manual@black:preset+auto\
\
BT.*[0-9][0-9][1-9]*:sani_heating_boost@red\
BT.*[1-9]:sani_heating_boost@orange\
BT.*0:sani_heating_boost@grey:boost_time+300\
\
.*temporary:sani_heating_timer@red\
.*holiday:sani_heating_calendar@blue:preset+auto
attr MQTT2_zigbee_Heiz_Ess devicetopic zigbee2mqtt/Heiz_Ess
attr MQTT2_zigbee_Heiz_Ess fp_Grundriss 333,1074,1,MQTT2_zigbee_Heiz_Ess,
attr MQTT2_zigbee_Heiz_Ess genericDeviceType thermostat
attr MQTT2_zigbee_Heiz_Ess icon temp_control
attr MQTT2_zigbee_Heiz_Ess jsonMap current_heating_setpoint:desiredTemperature local_temperature:temperature Battery:batteryPercent system_mode:mode battery:batteryPercent voltage:batterymV btnLock:child_lock
attr MQTT2_zigbee_Heiz_Ess model zigbee2mqtt_thermostat_with_weekrofile
attr MQTT2_zigbee_Heiz_Ess readingList $DEVICETOPIC:.* { my %h;; my $temp = $EVENT;; $temp =~ s/,?("(holidays|workdays)":.([^]]+))./$h{$2}=$3/ge;; $EVENT =~ s/,?("(holidays|workdays)":.([^]]+)).//g;; my $h2 = json2nameValue($EVENT,'',$JSONMAP);; %h = (%h,%$h2);; \%h }
attr MQTT2_zigbee_Heiz_Ess room Heizkoerper->-Heizkoerper,Heizkoerper->Ess,MQTT2_DEVICE
attr MQTT2_zigbee_Heiz_Ess setList desiredTemperature:slider,5.0,0.5,22.0,1 $DEVICETOPIC/set {"current_heating_setpoint": $EVTPART1 }\
btnLock:LOCK,UNLOCK $DEVICETOPIC/set {"child_lock": "$EVTPART1"}\
preset:auto,manual,holiday $DEVICETOPIC/set {"preset": "$EVTPART1"}\
mode:heat,auto,off $DEVICETOPIC/set {"system_mode": "$EVTPART1"}\
holidays $DEVICETOPIC/set/schedule { "holidays":[$EVTPART1] }\
open_window:OFF,ON $DEVICETOPIC/set {"open_window": "$EVTPART1"}\
workdays $DEVICETOPIC/set/schedule { "workdays":[$EVTPART1] }\
week:5+2,6+1,7 $DEVICETOPIC/set $EVTPART1\
weekprofile { FHEM::attrT_z2m_thermostat_Utils::z2t_send_weekprofile($NAME, $EVTPART1, $EVTPART2) }\
x_send_set_payload:textField { my $payload = $EVENT;;$payload =~ s/$EVTPART0 //;; qq($DEVICETOPIC/set $payload)}\
boost_time:select,20,60,120,180,240,300,450 $DEVICETOPIC/set {"boost_timeset_countdown": $EVTPART1}\
comfort_temperature:slider,5.0,0.5,30.0,1 $DEVICETOPIC/set {"comfort_temperature": $EVTPART1}\
frost_protection:OFF,ON $DEVICETOPIC/set {"frost_protection": "$EVTPART1"}\
heating_stop:OFF,ON $DEVICETOPIC/set {"heating_stop": "$EVTPART1"}\
holiday_temperature:slider,8.0,0.5,18.0,1 $DEVICETOPIC/set {"holiday_temperature": $EVTPART1 }\
open_window_temperature:slider,6.0,0.5,15.0,1 $DEVICETOPIC/set {"open_window_temperature": $EVTPART1 }\
local_temperature_calibration:slider,-5.0,0.1,5.0,1 $DEVICETOPIC/set {"local_temperature_calibration": $EVTPART1 }
attr MQTT2_zigbee_Heiz_Ess stateFormat Modus: preset\
Kinder: child_lock\
Frost: frost_protection\
Aus: heating_stop\
BT:boost_timeset_countdown\
<br>\
Fenster: open_window\
Battery: batteryState\
<br>\
Temp: temperature°C, \
Wunsch: desiredTemperature °C\
Dev: diffe °C
attr MQTT2_zigbee_Heiz_Ess userReadings batteryState:battery_low.* {ReadingsVal($name,'battery_low','false') eq 'false'?'ok':'low'}, \
batteryVoltage:batterymV.* {ReadingsNum($name,'batterymV',0)/1000}, \
diffe {sprintf("%.1f", ReadingsVal($name, "temperature", 0) - ReadingsVal($name, "desiredTemperature", 0))},\
batteryPer {if\
(ReadingsVal($NAME,"batteryState","") eq "ok") {return 100} elsif\
(ReadingsVal($NAME,"batteryState","") eq "low") {return 1} else \
{return -1}}
attr MQTT2_zigbee_Heiz_Ess webCmd temperature:desiredTemperature
attr MQTT2_zigbee_Heiz_Ess widgetOverride temperature:slider,5,0.1,25,1 desiredTemperature:select,6.0,8.0,10.0,13.0,14.0,16.0,17.5,19.0,20.0,21.5,30.0
# CID zigbee_Heiz_Ess
# DEF zigbee_Heiz_Ess
# FUUID 653d1be3-f33f-d33d-abf5-9957dfd784cccbc3
# IODev MQTT2_FHEM_Server
# LASTInputDev MQTT2_FHEM_Server
# MQTT2_FHEM_Server_CONN MQTT2_FHEM_Server_192.168.0.103_53406
# MQTT2_FHEM_Server_MSGCNT 335
# MQTT2_FHEM_Server_TIME 2024-03-22 08:27:08
# MSGCNT 335
# NAME MQTT2_zigbee_Heiz_Ess
# NR 844
# STATE Modus: auto
#Kinder: UNLOCK
#Frost: OFF
#Aus: OFF
#BT:0
#<br>
#Fenster: OFF
#Battery: ok
#<br>
#Temp: 20.3°C,
#Wunsch: 20 °C
#Dev: 0.3 °C
# TYPE MQTT2_DEVICE
# eventCount 395
# Helper:
# DBLOG:
# BatteryTyp:
# logdb:
# TIME 1711025830.11604
# VALUE 2 x AA
# batteryPer:
# logdb:
# TIME 1711092428.41369
# VALUE 100
# batteryState:
# logdb:
# TIME 1711092428.41369
# VALUE ok
# battery_low:
# logdb:
# TIME 1711092428.41369
# VALUE false
# boost_timeset_countdown:
# logdb:
# TIME 1711092428.41369
# VALUE 0
# child_lock:
# logdb:
# TIME 1711092428.41369
# VALUE UNLOCK
# comfort_temperature:
# logdb:
# TIME 1711092428.41369
# VALUE 20
# desiredTemperature:
# logdb:
# TIME 1711092428.41369
# VALUE 20
# device_applicationVersion:
# logdb:
# TIME 1711092428.41369
# VALUE 69
# device_dateCode:
# logdb:
# TIME 1711092428.41369
# VALUE
# device_friendlyName:
# logdb:
# TIME 1711092428.41369
# VALUE Heiz_Ess
# device_hardwareVersion:
# logdb:
# TIME 1711092428.41369
# VALUE 1
# device_ieeeAddr:
# logdb:
# TIME 1711092428.41369
# VALUE 0x0c4314fffe6a36b5
# device_manufacturerID:
# logdb:
# TIME 1711092428.41369
# VALUE 4098
# device_manufacturerName:
# logdb:
# TIME 1711092428.41369
# VALUE _TZE200_mudxchsu
# device_model:
# logdb:
# TIME 1711092428.41369
# VALUE TV02-Zigbee
# device_networkAddress:
# logdb:
# TIME 1711092428.41369
# VALUE 30240
# device_powerSource:
# logdb:
# TIME 1711092428.41369
# VALUE Battery
# device_stackVersion:
# logdb:
# TIME 1711092428.41369
# VALUE 0
# device_type:
# logdb:
# TIME 1711092428.41369
# VALUE EndDevice
# device_zclVersion:
# logdb:
# TIME 1711092428.41369
# VALUE 3
# diffe:
# logdb:
# TIME 1711092428.41369
# VALUE 0.3
# eco_temperature:
# logdb:
# TIME 1711092428.41369
# VALUE 16
# error_status:
# logdb:
# TIME 1711092428.41369
# VALUE 0
# frost_protection:
# logdb:
# TIME 1711092428.41369
# VALUE OFF
# heating_stop:
# logdb:
# TIME 1711092428.41369
# VALUE OFF
# holiday_start_stop:
# logdb:
# TIME 1711092428.41369
# VALUE 2024/05/01 02:00 _ESC_ 2024/10/15 01:00
# holiday_temperature:
# logdb:
# TIME 1711092428.41369
# VALUE 13
# last_seen:
# logdb:
# TIME 1711092428.41369
# VALUE 2024-03-22T08:27:08+01:00
# linkquality:
# logdb:
# TIME 1711092428.41369
# VALUE 255
# local_temperature_calibration:
# logdb:
# TIME 1711092428.41369
# VALUE -1
# mode:
# logdb:
# TIME 1711092428.41369
# VALUE heat
# online:
# logdb:
# TIME 1711092428.41369
# VALUE ON
# open_window:
# logdb:
# TIME 1711092428.41369
# VALUE OFF
# open_window_temperature:
# logdb:
# TIME 1711092428.41369
# VALUE 8
# preset:
# logdb:
# TIME 1711092428.41369
# VALUE auto
# schedule_friday:
# logdb:
# TIME 1711092428.41369
# VALUE 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
# schedule_monday:
# logdb:
# TIME 1711092428.41369
# VALUE 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
# schedule_saturday:
# logdb:
# TIME 1711092428.41369
# VALUE 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
# schedule_schedule:
# logdb:
# TIME 1711092428.41369
# VALUE 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
# schedule_sunday:
# logdb:
# TIME 1711092428.41369
# VALUE 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
# schedule_thursday:
# logdb:
# TIME 1711092428.41369
# VALUE 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
# schedule_tuesday:
# logdb:
# TIME 1711092428.41369
# VALUE 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
# schedule_wednesday:
# logdb:
# TIME 1711092428.41369
# VALUE 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
# schedule_week_day:
# logdb:
# TIME 1711092428.41369
# VALUE monday
# state:
# logdb:
# TIME 1711091083.29753
# VALUE open_window
# temperature:
# logdb:
# TIME 1711092428.41369
# VALUE 20.3
# update_available:
# logdb:
# TIME 1711092428.41369
# VALUE false
# update_installed_version:
# logdb:
# TIME 1711092428.41369
# VALUE 69
# update_latest_version:
# logdb:
# TIME 1711092428.41369
# VALUE 69
# update_state:
# logdb:
# TIME 1711092428.41369
# VALUE idle
# working_day:
# logdb:
# TIME 1711092428.41369
# VALUE mon_sun
# JSONMAP:
# Battery batteryPercent
# battery batteryPercent
# btnLock child_lock
# current_heating_setpoint desiredTemperature
# local_temperature temperature
# system_mode mode
# voltage batterymV
# OLDREADINGS:
# READINGS:
# 2024-03-21 09:24:17 IODev MQTT2_FHEM_Server
# 2024-03-22 08:27:08 batteryPer 100
# 2024-03-22 08:27:08 batteryState ok
# 2024-03-22 08:27:08 battery_low false
# 2024-03-22 08:27:08 boost_timeset_countdown 0
# 2024-03-22 08:27:08 child_lock UNLOCK
# 2024-03-22 08:27:08 comfort_temperature 20
# 2024-03-22 08:27:08 desiredTemperature 20
# 2024-03-22 08:27:08 device_applicationVersion 69
# 2024-03-22 08:27:08 device_dateCode
# 2024-03-22 08:27:08 device_friendlyName Heiz_Ess
# 2024-03-22 08:27:08 device_hardwareVersion 1
# 2024-03-22 08:27:08 device_ieeeAddr 0x0c4314fffe6a36b5
# 2024-03-22 08:27:08 device_manufacturerID 4098
# 2024-03-22 08:27:08 device_manufacturerName _TZE200_mudxchsu
# 2024-03-22 08:27:08 device_model TV02-Zigbee
# 2024-03-22 08:27:08 device_networkAddress 30240
# 2024-03-22 08:27:08 device_powerSource Battery
# 2024-03-22 08:27:08 device_stackVersion 0
# 2024-03-22 08:27:08 device_type EndDevice
# 2024-03-22 08:27:08 device_zclVersion 3
# 2024-03-22 08:27:08 diffe 0.3
# 2024-03-22 08:27:08 eco_temperature 16
# 2024-03-22 08:27:08 error_status 0
# 2024-03-22 08:27:08 frost_protection OFF
# 2024-03-22 08:27:08 heating_stop OFF
# 2024-03-22 08:27:08 holiday_start_stop 2024/05/01 02:00 | 2024/10/15 01:00
# 2024-03-22 08:27:08 holiday_temperature 13
# 2024-03-22 08:27:08 last_seen 2024-03-22T08:27:08+01:00
# 2024-03-22 08:27:08 linkquality 255
# 2024-03-22 08:27:08 local_temperature_calibration -1
# 2024-03-22 08:27:08 mode heat
# 2024-03-22 08:27:08 online ON
# 2024-03-22 08:27:08 open_window OFF
# 2024-03-22 08:27:08 open_window_temperature 8
# 2024-03-22 08:27:08 preset auto
# 2024-03-22 08:27:08 schedule_friday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
# 2024-03-22 08:27:08 schedule_monday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
# 2024-03-22 08:27:08 schedule_saturday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
# 2024-03-22 08:27:08 schedule_schedule 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
# 2024-03-22 08:27:08 schedule_sunday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
# 2024-03-22 08:27:08 schedule_thursday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
# 2024-03-22 08:27:08 schedule_tuesday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
# 2024-03-22 08:27:08 schedule_wednesday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
# 2024-03-22 08:27:08 schedule_week_day monday
# 2024-03-22 08:04:43 state open_window
# 2024-03-22 08:27:08 temperature 20.3
# 2024-03-22 08:27:08 update_available false
# 2024-03-22 08:27:08 update_installed_version 69
# 2024-03-22 08:27:08 update_latest_version 69
# 2024-03-22 08:27:08 update_state idle
# 2024-03-22 08:27:08 working_day mon_sun
#
setstate MQTT2_zigbee_Heiz_Ess Modus: auto\
Kinder: UNLOCK\
Frost: OFF\
Aus: OFF\
BT:0\
<br>\
Fenster: OFF\
Battery: ok\
<br>\
Temp: 20.3°C, \
Wunsch: 20 °C\
Dev: 0.3 °C
setstate MQTT2_zigbee_Heiz_Ess 2024-03-21 09:24:17 IODev MQTT2_FHEM_Server
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 batteryPer 100
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 batteryState ok
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 battery_low false
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 boost_timeset_countdown 0
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 child_lock UNLOCK
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 comfort_temperature 20
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 desiredTemperature 20
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_applicationVersion 69
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_dateCode
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_friendlyName Heiz_Ess
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_hardwareVersion 1
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_ieeeAddr 0x0c4314fffe6a36b5
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_manufacturerID 4098
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_manufacturerName _TZE200_mudxchsu
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_model TV02-Zigbee
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_networkAddress 30240
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_powerSource Battery
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_stackVersion 0
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_type EndDevice
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_zclVersion 3
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 diffe 0.3
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 eco_temperature 16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 error_status 0
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 frost_protection OFF
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 heating_stop OFF
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 holiday_start_stop 2024/05/01 02:00 | 2024/10/15 01:00
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 holiday_temperature 13
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 last_seen 2024-03-22T08:27:08+01:00
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 linkquality 255
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 local_temperature_calibration -1
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 mode heat
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 online ON
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 open_window OFF
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 open_window_temperature 8
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 preset auto
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_friday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_monday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_saturday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_schedule 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_sunday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_thursday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_tuesday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_wednesday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_week_day monday
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:04:43 state open_window
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 temperature 20.3
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 update_available false
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 update_installed_version 69
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 update_latest_version 69
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 update_state idle
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 working_day mon_sun
Zitat von: MadMax-FHEM am 22 März 2024, 08:19:04EDIT: und ja, habe auch gemerkt, dass man einiges vereinfachen und zusammenfassen kann aber ich habe dafür keine Zeit (und da ich eh bei mir anderen Code nutze auch keine rechte Lust) und testen ist ohne den Zoo zu haben nicht möglich und dann bei komplett umgebauten Code zu supporten kann ich auch nicht leisten, drum isses wie's ist ;)
Zitat von: MadMax-FHEM am 22 März 2024, 08:46:05Und halt: Zeit das zu machen... :-\
##############################################
# MQTT2_DEVICE that have battery Reading showing battery_low
##############################################
elsif($BatteryType[0] eq "battery_low" && $TYPE eq "MQTT2_DEVICE")
{
my $GraceStatus = checkGracePeriod($Device, $BatteryStatusBot, ReadingsVal($Device, "battery", "low"), $GracePeriod);
if(ReadingsVal($Device, "battery_low", "false") eq "false")
{
# check if battery was low before -> possibly changed
if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") eq "low")
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $BatteryChanged $Device $text_changed");
# set the signal state back to none
fhem("setreading $BatteryStatusBot $SignalDevice none");
}
# status is "ok" so we set to 100% (we don't know better)
fhem("setreading $BatteryStatus $Device 100");
}
else
{
if($GraceStatus eq "true")
{
# send message
Battery_Send_Alarm($BatteryStatusBot, $SignalDevice, $text_soon);
# status is NOT "ok" ("low") so we set to 0% (we don't know better)
fhem("setreading $BatteryStatus $Device 0");
}
}
}
Ist quasi der Teil aus MAX! mit der passenden Bedingung.
Zitat von: _fhemuser_ am 22 März 2024, 10:25:04Hier fehlten die Leerzeichen zwischen Batterien und $BatteryTypeText ca Zeile 42:-> NEIN!
Zitat von: _fhemuser_ am 22 März 2024, 10:25:04Könnte man auch den Aliasnamen statt des Devicenamens nehmen?Klar, es ist SW und da geht (fast) alles ;)
Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 10:02:27@MadMax-FHEM: Erst einmal großes Lob, dass Du Dir das überhaupt an die Backe gebunden hast. Das ist nämlich wirklich ein wilder Zoo, der sich kaum in einer einzelnen Codebasis verwalten lässt. Und wenn man glaubt, fertig zu sein, kommt noch User DAU123 und schreibt, dass leider sein Device Garglschnax aus dem Baumarkt in Hintertupfingen immer noch nicht korrekt angezeigt wird.Danke!
Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 10:02:27Andererseits zeigt gerade dieser Traffic, dass dafür ein großer Bedarf besteht.Ja, der ist aber Wellenweise, weil es war ganz zu Beginn etwas los (da war der TE ja noch dabei/dran)...
Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 10:02:27Also hier der konkrete Vorschlag:
Statt des gigantischen if - elsif - Konstruktes kürzt Du Deinen Code auf ein Minimum. Die einzelnen elsif-Zweige werden in separate Unterprogramme ausgelagert. Beispielsweise gibt es ein sub "batteryCheckZWaveType", das als Argument den Devicenamen bekommt. Und entweder die globalen Parameter $BatteryStatus etc. kennt, oder auf diese zugreifen kann.
In dem eigentlichen Code gibt es dann einen Hash, der unter anderem enthält
( "ZWave" => "ZWaveType",
"HUEDevice" => "ZWaveType" ...)
Die BatteryStatusFunction schaut dann in diesem Hash nach, welche Funktion für ein Device des gegenwärtigen TYPE aufgerufen werden muss - eben z.B. dieselbe, wie bei ZWave.
Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 10:02:27Diese einzelnen Funktionen kann man (weil jetzt sehr viel kompakter) problemlos auf je einer Wiki-Seite beschreiben. Und wer möchte, kann sich diese eben in seiner eigenen 99_BatteryUtils.pm (oder was auch immer...) zusammenkopieren. Oder dazu eine eigene Funktion schreiben.
Zitat von: _fhemuser_ am 22 März 2024, 10:00:58Dann gebe ich auch mal etwas zurück.
Erweiterung für MQTT Geräte die das Attribut battery_low haben
Zitat von: _fhemuser_ am 22 März 2024, 10:00:58if(ReadingsVal($Device, "battery_low", "false") eq "false")
Zitat von: _fhemuser_ am 22 März 2024, 08:47:32Dieser Sensor wird mit 0 in der Readingsgroup angezeigt:Hmm, eigenartig.
Zitatmy $BatteryStatus = "BatterieStatus"; #Name of the Dummy for status
Zitat von: _fhemuser_ am 22 März 2024, 08:47:32setstate Fenster_Ess 2024-03-22 08:04:43 battery 100
Zitat##############################################
# MQTT2_DEVICE that have battery Reading showing percentage!
##############################################
ZitatZitat von: _fhemuser_ am 22 März 2024, 08:47:32# TYPE MQTT2_DEVICE
Zitat von: _fhemuser_ am 22 März 2024, 08:47:32Dieser Thermostat gar nicht.Wohin gegen hier ist klar: weder ein Attribut model/type o.ä. oder ein vergleichbares Internal...
Zitat von: _fhemuser_ am 22 März 2024, 11:52:58Ich bin kein Programmierer und habe mir das selber beigebracht.
Der Codeschnipsel funktioniert bei mir. :)
Und mit dem Alias habe ich auch etwas gebastelt.
my $Alias = AttrVal($Device, "alias", "undef"); # get the corresponding alias name
my $text_now = "Die Batterien $BatteryTypeText von $Alias müssen JETZT gewechselt werden!"; #Text for changing battery now
my $text_soon = "Die Batterien $BatteryTypeText von $Alias sollten bald gewechselt werden!"; #Text for changing battery soon
Zitat von: MadMax-FHEM am 22 März 2024, 12:09:01Den alias baue ich noch ein, sodass er auch geht bzw. halt den Devicenamen anzeigt, wenn kein alias gesetzt ist...
Zitat von: _fhemuser_ am 22 März 2024, 12:20:58Wird dabei nicht der Wert auf "n.a." geprüft und nicht auf "nichtvorhanden" oder "ohneInhalt"?Ja ;)
Zitat von: _fhemuser_ am 22 März 2024, 12:20:58Und es würden alle Geräte neu angelegt?Verstehe ich nicht?
Zitat von: MadMax-FHEM am 22 März 2024, 07:49:41Zitat von: TK67 am 21 März 2024, 18:58:42Wäre nett wenn du das auch noch anhängen kannst.Ich habe hier kein "Monopol" auf den Code ;)
Es darf jeder gerne mitarbeiten :)
Ist ja Code-Schnipsel und kein Modul mit Maintainer...
Aber falls du nicht willst (warum auch immer), kann ich die überschaubaren Änderungen auch einbauen... 8)
Gruß, Joachim
Zitat von: TK67 am 22 März 2024, 16:16:55Hallo Joachim,
da die letzten Änderungen von dir gemacht wurden, dachte ich es macht Sinn es an dich weiter zu leiten.
Damit man einen einigermaßen gleichen Stand hat und nicht zig verschiedene Versionen.
Zitat von: TK67 am 22 März 2024, 16:16:55Wie gesagt es war jetzt keine Bequemlichkeit das nicht selber zu posten.
Zitat von: TK67 am 22 März 2024, 16:16:55Grace Period und die letzten Erweiterungen mit skipped Device und Nachricht mit Batterietyp funktionieren bestens :)Dann is ja gut. Danke :)
Zitat von: TK67 am 22 März 2024, 16:16:55Habe in deiner veröffentlichten Version eine Erweiterung mit CalculateBatteryLife laufen, die ich mir aus dem Topic 303 / 304 zusammen gebaut habe.
Entspricht somit auch nicht deiner Version und würde wahrscheinlich wieder zur Verwirrung führen, wenn ich die auch noch poste.
Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 16:59:03@TK67: Sorry, aber so läuft das bei FHEM nicht. Joachim ist hier nicht der Maintainer eines offiziell mit FHEM verteilten Moduls, man kann ihm also bitte nicht von außen die Verantwortung für die Pflege und Verteilung dieser Batteriesachen aufbürden. Das genau ist der Unterschied zwischen den "Codeschnipseln" in diesem Bereich des Forums, und den offiziell gewarteten Modulen.
Also bitte: Code genießen und mitwirken - aber nicht "ich leite das mal an Dich weiter, damit es eine Version gibt".
LG
pah
ZitatMir würde dazu git einfallen.Wir pflegen denjenigen Code, der gepflegt wird, im zentralen SVN (nicht in git, das hat historische Gründe). Und wir warten ihn sehr intensiv.
ZitatAber auch da sollte einer über den Code sehen bevor die Änderungen zusammen geführt werden.Das ist absoluter Unsinn. Das zentrale Programm fhem.pl wird von Rudi König gepflegt, wichtige Design-Entscheidungen von ihm und einer kleinen Gruppe getroffen. Aber für die allermeisten Module ist nur der jeweilige Maintainer zuständig. Und wenn sie nicht funktionieren, werden sie eben nicht verwendet.
ZitatAber selbt in Programmierteams arbeiten nicht mehrere Personen im gleichen Bereich an dem Code, was hier aber durchaus passiert.Das ist doppelt unkorrekt. Selbstverständlich arbeiten in professionellen Teams durchaus verschiedene Entwickler an demselben Code. Hier in FHEM ist das wegen der verteilten Verantwortlichkeiten allerdings nicht die Regel.
ZitatDaher finde ich die Vorgehensweise, dass man einen bittet die Änderungen zusammen zu fassen und diese "komplette" Version dann anfügt, im Hobbybereich, und um den geht es hier, vertretbar.Nein, ganz sicher nicht. Dieser Teil des Forums heißt "Codeschnipsel" und befasst sich nicht mit gewartetem Code. Sondern hier kann jeder etwas Kleineres einstellen, das anderen vielleicht nutzt. Und daraus ergibt sich keinerlei Vepflichtung, die sollte sich auch niemand aufbürden lassen.
Zitat von: Prof. Dr. Peter Henning am 23 März 2024, 18:26:30Ich kann gar nicht so oft "Nein" schreiben, wie ich möchte ...mich macht ihre Antwort echt sauer! Ich kann keine Silbe finden, die irgend etwas mit dem Thema: "Batteriestatus und Speicherung des letzten Wechsel" zu tun hat! Wenn ich mich wie @Joachim mit dem Codeschnipsel befassen könnte / hätte, hätte ich spätestens jetzt keinen Bock mehr darauf! (Was ich hoffe, nicht passiert.)
[...] Das ist absoluter Unsinn.
[...] Das ist doppelt unkorrekt. Selbstverständlich arbeiten in professionellen Teams
[...] Nein, ganz sicher nicht.
[...] Mein Tipp: Sich einfach mal mit den Verzeichnisstrukturen befassen und einen Blick in die Datei MAINTAINER.txt werfen.
Zitat von: Prof. Dr. Peter Henning am 23 März 2024, 18:26:30Bei den Modulen ist der Maintainer derjenige der den Code überprüft vor der Veröffentlchung. Also sieht einer über den geänderten Code. Ich sprach nicht davon, dass der ganze Code immer komplett geprüft werden muss.ZitatAber auch da sollte einer über den Code sehen bevor die Änderungen zusammen geführt werden.Das ist absoluter Unsinn. Das zentrale Programm fhem.pl (https://fhem.pl/) wird von Rudi König gepflegt, wichtige Design-Entscheidungen von ihm und einer kleinen Gruppe getroffen. Aber für die allermeisten Module ist nur der jeweilige Maintainer zuständig. Und wenn sie nicht funktionieren, werden sie eben nicht verwendet.
Zitat von: Prof. Dr. Peter Henning am 23 März 2024, 18:26:30Ja die Entwickler arbeiten am selben Code, aber nicht in der gleichen Struktur, im gleichen Absatz, im selben Block, an einer sub, oder wie man das auch immer nennen möchte. Hier auf FHEM bezogen am selben Modul.ZitatAber selbt in Programmierteams arbeiten nicht mehrere Personen im gleichen Bereich an dem Code, was hier aber durchaus passiert.Das ist doppelt unkorrekt. Selbstverständlich arbeiten in professionellen Teams durchaus verschiedene Entwickler an demselben Code. Hier in FHEM ist das wegen der verteilten Verantwortlichkeiten allerdings nicht die Regel.
ZitatBenutzerverwaltung gibt die auch gepflegt werden mussDie gibt es auch für den gewarteten Code.
ZitatBei den Modulen ist der Maintainer derjenige der den Code überprüft vor der Veröffentlchung. Also sieht einer über den geänderten Code.Ich schreib es ja ungern: Das ist immer noch falsch. Denn nur der Maintainer ändert den Code und checkt ihn ein. Gerne natürlich nach Vorschlägen anderer Nutzer - aber in der Regel nach sorgfältigen Tests, die nicht aus "drüber sehen" bestehen.
Zitatnicht in der gleichen Struktur,.... Hier auf FHEM bezogen am selben Modul.Aber doch.
attr BatterieStatus stateFormat anzahl
attr BatterieStatus userReadings anzahl {my $anz = grep( m/ */, ( keys %{$hash->{READINGS}} ));; return $anz - 1;;},
Kleiner Nachteil. In der Readingsgroup wird anzahl mit aufgeführt und versucht mit einem Batterieicon darzustellen.Zitat von: MadMax-FHEM am 25 März 2024, 17:49:20@TK67: es ist eine Mischung aus allem geworden ;)
Zitatif($BatteryType[0] eq "battery" && $Model ne "HM-TC-IT-WM-W-EU" && $Model ne "HM-CC-RT-DN" && $Model ne "undef" && $TYPE ne "HUEDevice")
Zitatif($BatteryType[0] eq "battery" && $Model ne "HM-TC-IT-WM-W-EU" && $Model ne "HM-CC-RT-DN" && $Model ne "undef" && $TYPE ne "HUEDevice" && $TYPE ne "MQTT2_DEVICE")für MQTT Device mit battery % gibt es einen eigenen Abschnitt ab Zeile 425
Zitat##############################################[/edit]
# MQTT2_DEVICE that have battery Reading showing percentage!
##############################################
elsif($BatteryType[0] eq "battery" && ($TYPE eq "MQTT2_DEVICE" || $TYPE eq "HUEDevice"))
Zitat von: _fhemuser_ am 27 März 2024, 13:25:24der muss um MQTT_Device erweitert werden.Hab's eingebaut, Version hängt an.