FHEM Forum

FHEM - Entwicklung => Wunschliste => Thema gestartet von: Jostar am 12 November 2022, 15:11:18

Titel: SetList für FBDECT ermöglichen
Beitrag von: Jostar am 12 November 2022, 15:11:18
Hallo zusammen,

kennt ihr den Wunsch, den letzten Batteriewechsel an mobilen Geräten zu protokollieren, um z.B. zu sehen, wie lange welche Art von Batterien oder je nach Einsatzmodus halten?

Ich behelfe mich aktuell mit einem:
setreading Heizkoerper_Wintergarten Batteriewechsel 12.11.2022
(damit kann ich auch den Batteriewechsel leicht am Folgetag nachtragen, bin also nicht vom Systemdatum abhängig)

Für DUMMY
setList Batterietest Batteriewechsel
(damit erscheint ein Eingabefeld im "Device Overview")

webCmd Batterietest:Batteriewechsel
(damit habe ich zwei Links hinter dem Gerätenamen) Zusammem mit einem Notify setze ich das Reading.
Leider klappt das bei FBDECT Geräten nicht:
ZitatUnknown argument Batteriewechsel, choose one of boost:textField close:noArg desired-temp:slider,7.5,0.5,28.5,1 open:noArg raw:textField windowopen:textField

Kann man "setList" bitte aktiveren für den Gerätetyp? Dieser soll einfach die bestehende Liste von Argumenten entsprechend verlängern, also in dem Fall zu
* boost
* close
* desired-temp
* open
* raw
* windowopen
* Batteriewechsel

Danke und Gruß
Titel: Antw:SetList für FBDECT ermöglichen
Beitrag von: MadMax-FHEM am 12 November 2022, 19:01:14
Warum nicht einfach:

setreading Devicename Readingname Wert

Dann brauchst du keine setList...
Bzw. muss das doch bei jedem Device gehen.
EDIT: bzw. was machst du bei den FBDECT-Devices? Wie wäre es lists der Devices inkl. notify zu posten?

Ich nutze ja das hier bzw. (immer noch meine Variante, inkl. Batterievorat und Berechnung des neuen Vorats wenn erneuert usw.): https://forum.fhem.de/index.php/topic,82637.msg747514.html#msg747514

Gruß, Joachim
Titel: Antw:SetList für FBDECT ermöglichen
Beitrag von: Jostar am 12 November 2022, 21:47:48
Guten Abend! Na, weil ich ich da soviel tippen muss (z.B. den exakten Namen vom Device). Schöner ist ein Feld fürs Datum bzw. Ein "Knopf", wo man nach Batteriewechsel einfach draufklickt.

Reding vom DECT Heizkörper hast du im übrigen in deinem Link vom
Antw:Batteriestatus und Speicherung des letzten Wechsel
« Antwort #355 am: 19 Oktober 2022, 12:02:00 schon. Sieht bei mir auch nicht anders aus. Text vom Notify kann ich gerne hier noch teilen, hat aber mit der ursprünglichen Frage auch nichts zu tun.

Viele Grüße
Titel: Antw:SetList für FBDECT ermöglichen
Beitrag von: MadMax-FHEM am 12 November 2022, 21:51:31
Du musst doch nichts tippen, wenn du ein notify hast (das ich ja nicht kenne)...

Ich schau mir das im anderen Thread mal an.

Gruß, Joachim
Titel: Antw:SetList für FBDECT ermöglichen
Beitrag von: MadMax-FHEM am 14 November 2022, 13:50:19
Zitat von: MadMax-FHEM am 12 November 2022, 21:51:31
Du musst doch nichts tippen, wenn du ein notify hast (das ich ja nicht kenne)...

Ich schau mir das im anderen Thread mal an.

Gruß, Joachim

So, ich hab da mal was versucht... :)

Gruß, Joachim
Titel: Antw:SetList für FBDECT ermöglichen
Beitrag von: Jostar am 15 November 2022, 15:26:04
define notify_Batteriewechsel notify .*Batterie(wechsel|test) { \
  if ($EVTPART0 eq "Batteriewechsel") {\
    fhem("sleep 0.1;; setreading $NAME Batteriewechsel ".strftime('%d.%m.%Y', localtime));;\
  }\
  if ($EVTPART0 eq "Batterietest") {\
    fhem("sleep 0.1;; setreading $NAME battery ok");;\
  }\
}
attr notify_Batteriewechsel comment schreibt das reading "Batteriewechsel" ins Device falls event "Batteriewechsel", z.B. wenn via webcmd gesendet\
\
Alternative, falls "set" im "device" nicht implementiert wurde:\
setReadingsVal($defs{$NAME},"Batteriewechsel",strftime('%d.%m.%Y', localtime),TimeNow())\
\
In der Kommandozeile\
{ setReadingsVal($defs{"Wintergarten_Klein"},"Batteriewechsel",strftime('%d.%M.%Y', localtime),TimeNow()) }\
\
das aktualisiert aber nicht das log, das geht nur via:\
setReading Wintergarten_Klein Batteriewechsel 03.11.2018
#   DEF        .*Batterie(wechsel|test) {
#  if ($EVTPART0 eq "Batteriewechsel") {
#    fhem("sleep 0.1; setreading $NAME Batteriewechsel ".strftime('%d.%m.%Y', localtime));
#  }
#  if ($EVTPART0 eq "Batterietest") {
#    fhem("sleep 0.1; setreading $NAME battery ok");
#  }
#}
#   FUUID      5c548992-f33f-bea7-8ef4-6b621af52f7c7878
#   NAME       notify_Batteriewechsel
#   NR         356
#   NTFY_ORDER 50-notify_Batteriewechsel
#   REGEXP     .*Batterie(wechsel|test)
#   STATE      2022-11-12 15:15:13
#   TYPE       notify
#   READINGS:
#     2022-11-14 22:23:58   state           active
#     2022-11-12 15:15:13   triggeredByDev  global
#     2022-11-12 15:15:13   triggeredByEvent ATTR Heizkoerper_Wintergarten event-on-change-reading FBNAME,temperatur:0.1,batteryState,window,windowopenactiv,batteryPercent:5,Batteriewechsel
#
setstate notify_Batteriewechsel 2022-11-12 15:15:13
setstate notify_Batteriewechsel 2022-11-14 22:23:58 state active
setstate notify_Batteriewechsel 2022-11-12 15:15:13 triggeredByDev global
setstate notify_Batteriewechsel 2022-11-12 15:15:13 triggeredByEvent ATTR Heizkoerper_Wintergarten event-on-change-reading FBNAME,temperatur:0.1,batteryState,window,windowopenactiv,batteryPercent:5,Batteriewechsel

Titel: Antw:SetList für FBDECT ermöglichen
Beitrag von: MadMax-FHEM am 15 November 2022, 16:46:45
Ich verstehe ja immer noch nicht, warum eine Anpassung von setList notwendig ist/sein sollte?
(vermutlich bin ich zu doof)

Ein setreading $NAME Batteriewechsel "Datum/Uhrzeit" schreibt doch den erfolgten Wechsel ins Device $NAME, also das "auslösende" Device und erzeugt auch ein Event für das Log?

Und setReadingsVal?

eher: set ReadingsVal()? Aber auch das wird so nicht gehen.

set ist ein fhem-Befehl und ReadingsVal ist Perl...

Im notify bist du mittels { } in Perl -> ReadingsVal funktioniert, set nicht (einfach so), dazu braucht es fhem("set ...") (hast du ja auch bereits verwendet)...

Also ich stehe auf dem Schlauch, weil so wie es jetzt ist, wird doch beim drücken auf den "Link" (webCmd) "Batteriewechsel" doch entsprechend "Datum/Uhrzeit" in das Reading "Batteriewechsel" zum zugehörigen Device geschrieben (oder?).
Und das ist doch das Ziel?

Wobei ich es ja schöner finde, das automatisch tun zu lassen :) (so wie im verlinkten Thread ;) / gut da wird der Wechsel in einem dummy "protokolliert" aber das ist ja auch schon lange her, könnte man genau so gut auch im Device selbst "protokollieren")...

Gruß, Joachim
Titel: Antw:SetList für FBDECT ermöglichen
Beitrag von: Jostar am 15 November 2022, 16:58:02
Ja, es gibt eine Menge Lösungen, da hast du recht. Im Kommentar steht's eigentlich schon, der Link nutzt das aktuelle Datum, will man einen Batteriewechsel nachtragen, so geht das aktuell nur mit einer Befehlszeile (und der Schwierigkeit den genauen Geräte Namen angeben zu müssen). Darum als dritten Weg ein Eingabefeld, direkt im Device. Klappt bei einigen Typen, z.B. Dummy ganz prima, leider nicht bei FBDECT.

Ich schätze Mal, es ist eine Zeile, die zusätzliche List-Einträge zulässt. Kann aber auch sein, dass man den Teil dann extra im Modul noch einbauen müsste...

Viele Grüße!
Titel: Antw:SetList für FBDECT ermöglichen
Beitrag von: MadMax-FHEM am 15 November 2022, 17:04:38
Zitat von: Jostar am 15 November 2022, 16:58:02
Ja, es gibt eine Menge Lösungen, da hast du recht. Im Kommentar steht's eigentlich schon, der Link nutzt das aktuelle Datum, will man einen Batteriewechsel nachtragen, so geht das aktuell nur mit einer Befehlszeile (und der Schwierigkeit den genauen Geräte Namen angeben zu müssen). Darum als dritten Weg ein Eingabefeld, direkt im Device. Klappt bei einigen Typen, z.B. Dummy ganz prima, leider nicht bei FBDECT.

Ich schätze Mal, es ist eine Zeile, die zusätzliche List-Einträge zulässt. Kann aber auch sein, dass man den Teil dann extra im Modul noch einbauen müsste...

Viele Grüße!

Ah, ok, nachtragen...

Gut, wenn es automatisch beim Wechsel passiert (wie bei mir :)  ), dann stimmt die Uhrzeit usw. ja immer.
Ich muss nichts nachtragen...

Was noch gehen könnte: cmdAlias...

Dann ist mir das jetzt klar... 8)

Gruß, Joachim
Titel: Antw:SetList für FBDECT ermöglichen
Beitrag von: DeeSPe am 15 November 2022, 17:16:18
Ich wollte auch nochmal auf cmdalias hinweisen! Ist zwar auch nicht "Klick und gut", aber auch einfacher als vorher.
Z.B.:
defmod ca_batw cmdalias batw .* AS {\
  return if !$EVENT;;\
  fhem "setreading $EVENT Batteriewechsel $mday.$month.$year";;\
}


Und dann einfach:
batw <DEVICENAME>

Gruß
Dan
Titel: Antw:SetList für FBDECT ermöglichen
Beitrag von: DeeSPe am 15 November 2022, 21:49:52
Man könnte es auch mittels eines Dummy und eines Notify lösen.
Z.B.:
defmod Batteriewechsel dummy
attr Batteriewechsel event-on-update-reading device
attr Batteriewechsel readingList device
attr Batteriewechsel setList device

defmod n_Batteriewechsel notify Batteriewechsel:device:.* {fhem "setreading $EVTPART1 Batteriewechsel $mday.$month.$year"}


Dann einfach mit:
set Batteriewechsel device <DEVICENAME>
das Reading "Batteriewechsel" in <DEVICENAME> auf das heutige Datum setzen.

Gruß
Dan