Gelöst: readingsProxy für mehr als ein Reading? hier: Nest Protect

Begonnen von rubbertail, 25 Juni 2018, 18:15:18

Vorheriges Thema - Nächstes Thema

rubbertail

Hallo all,

leider haben mich weder Versuche noch Suche im Forum weitergebracht, daher meine Frage:

Ich hab recht neu drei Nest Protect-Rauch-und CO-Melder. Dafür gibt es schon ein (beta-)Modul, vielen Dank dem Ersteller. "Problem" dabei: dieses Modul liest die gesamten Kontendaten für alle drei Rauchmelder aus und speichert diese in Readings, es erstellt aber kein eigenes Gerät pro Rauchmelder. Dies versuchte ich jetzt mal zu machen; mit readingsGroup-Definitionen und Mappings, die die hässlichen Readings-Namen (die sehen zB so aus: "devices_smoke_co_alarms_pmxpMKgsVDxE8SVOt8zxzAdQxXlShtQp_battery_health" statt "battery") in allgemeingängige verwandeln, sieht es schonmal ganz gut aus, allerdings sind das halt keine Devices - und werden dadurch ihrerseits nicht durch "automatische" ReadingGroups (zB der kollektive "Battery"-Sammelpunkt lt. Wiki) erfasst.
Eine zweite Idee war jetzt, readingsProxy zu verwenden; allerdings bekomme ich es nicht hin, da mehr als ein Reading abzugreifen (dafür wars ja auch gemacht worden), vermutlich geht das auch gar nicht - oder doch?
Gibt es ggf. noch andere Ideen, wie ich mir meine Devices selber zusammenbasteln könnte aus den Readings des einen Sammeldevices?

Danke für jeden Vorschlag - ggf. auch Suchvorschlag, alle meine Ideen von SChlagwörtern haben mir nix gangbares gezeigt.

LG
Martin
FHEM auf Raspi, CUL433, CUL868, RFXTRX433e, CULCuBE
FRITZ: Fritzbox7590AX, 6xFritzDECT301, 10xFritzDECT200, FritzRepeater 6000
MAX!: Fensterkontakte
netatmo: Wetterstation & Thermostat
Milights, IT, Withings, HUE

rudolfkoenig

#1
Ich brauche mehr Daten (z.Bsp. alle Events), damit ich bessere Antworten geben kann, solange rate ich: mit einem notify koennte man die geraetespezifischen Readings zu unterschiedlichen dummys mit besseren Namen umleiten. Folgendes Beispiel geht davon aus, dass die NEST Instanz mynest heisst.
define myNestDev1 dummy
defmod myNestDev1Ntfy notify mynest:.*pmxpMKgsVDxE8SVOt8zxzAdQxXlShtQp_.* { $EVENT=~m/.*pmxpMKgsVDxE8SVOt8zxzAdQxXlShtQp_([^ ]*) (.*)/;; fhem("setreading myNestDev1 $1 $2") }


Das macht dann aus deinem Beispiel sowas:fhem> trigger mynest devices_smoke_co_alarms_pmxpMKgsVDxE8SVOt8zxzAdQxXlShtQp_battery_health ok
2018-06-25 19:58:11 dummy myNestDev1 battery_health: ok

Auf Lange Sicht waere aber besser, das NEST-Modul auf zweistufig umzubauen.
Und wegen battery-Werte hatten wir gerade eine Diskussion.

rubbertail

Salut Rudi,

Vielen Dank für den Tipp - das hatte ich (weit weniger elegant allerdings) fast vermutet...

Da ich stets ehrfürchtig staunend Fhem und die EntwicklerInnen betrachte, will ich da niemandem was vorschlagen, der eh schon unheimlich viel Arbeit reinhängt, daher meine Frage - eher vertrau ich auf meine eigene Blindheit. Dann versuch ich mal, mit deinem Beispiel weiterzubasteln. Wenns was wird, klopp ich's hier rein oder ins Wiki.

Danke schomma! :)

Martin
FHEM auf Raspi, CUL433, CUL868, RFXTRX433e, CULCuBE
FRITZ: Fritzbox7590AX, 6xFritzDECT301, 10xFritzDECT200, FritzRepeater 6000
MAX!: Fensterkontakte
netatmo: Wetterstation & Thermostat
Milights, IT, Withings, HUE

rubbertail

Salut nochmal,

wegen nem ausgedehnten Krankenhausaufenthalt erst jetzt nochmal:

Dürfte ich nochmal um Hilfe bitten mangels ausreichender PERL-Kenntnisse? Irgendwo ist da offenbar ein "unsupported character" im den Readings, aber außer einem Leerzeichen (das ich nicht sähe) könnte ich da nix finden, und ich wäre mir unsicher, wo auch dieses ggf. einbauen.

Folgendes ist jetzt definiert (wie vorgeschlagen):
Grund-Device: Name: NESTprotect, Readings unten

Dummy-Device:
Internals:
   CFGFN     
   NAME       d_NESTprotectGang
   NR         1039
   STATE      ???
   TYPE       dummy
Attributes:
   event-on-change-reading .*
   group      Feuermelder
   room       Alarm,_dummy


Notify:
Internals:
   CFGFN     
   DEF        NESTprotect:.*pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_.*
{
$EVENT=~m/.*pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_([^ ]*) (.*)/;
fhem("setreading d_NESTprotectGang $1 $2")
}
   NAME       n_NESTprotectGang
   NOTIFYDEV  NESTprotect
   NR         1061
   NTFY_ORDER 50-n_NESTprotectGang
   REGEXP     NESTprotect:.*pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_.*
   STATE      2018-08-30 11:51:37
   TRIGGERTIME 1535622698.02178
   TYPE       notify
   Helper:
     DBLOG:
       state:
         fhemlogdb:
           TIME       1535622676.13214
           VALUE      active
   READINGS:
     2018-08-30 11:51:16   state           active
Attributes:
   group      Feuermelder
   room       _notify


Im Log ergeben sich beim Trigger des Notify nun folgende Einträge:

2018.08.30 11:51:38 3: setreading d_NESTprotectGang name_long: Hallway Nest Protect : WARNING: unsupported character in reading name_long: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: n_NESTprotectGang return value: WARNING: unsupported character in reading name_long: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: setreading d_NESTprotectGang locale: de-DE : WARNING: unsupported character in reading locale: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: n_NESTprotectGang return value: WARNING: unsupported character in reading locale: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: setreading d_NESTprotectGang battery_health: ok : WARNING: unsupported character in reading battery_health: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: n_NESTprotectGang return value: WARNING: unsupported character in reading battery_health: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: setreading d_NESTprotectGang structure_id: WLM_n1fmX9T4adD_Hcohn81CsO_P05hWlOEgQdJ_bgzkxQjM3L2qPg : WARNING: unsupported character in reading structure_id: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: n_NESTprotectGang return value: WARNING: unsupported character in reading structure_id: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: setreading d_NESTprotectGang last_connection: 2018-08-30T09:13:14.248Z : WARNING: unsupported character in reading last_connection: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: n_NESTprotectGang return value: WARNING: unsupported character in reading last_connection: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: setreading d_NESTprotectGang last_manual_test_time: 2018-06-27T10:36:46.000Z : WARNING: unsupported character in reading last_manual_test_time: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: n_NESTprotectGang return value: WARNING: unsupported character in reading last_manual_test_time: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: setreading d_NESTprotectGang device_id: pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp : WARNING: unsupported character in reading device_id: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: n_NESTprotectGang return value: WARNING: unsupported character in reading device_id: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: setreading d_NESTprotectGang where_id: Vz0uwe6iB3OScVFgDLtRMJxQfHrwWq3O4PQFn8xmYlQfzBLWV8VlVg : WARNING: unsupported character in reading where_id: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: n_NESTprotectGang return value: WARNING: unsupported character in reading where_id: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: setreading d_NESTprotectGang where_name: Hallway : WARNING: unsupported character in reading where_name: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: n_NESTprotectGang return value: WARNING: unsupported character in reading where_name: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: setreading d_NESTprotectGang smoke_alarm_state: ok : WARNING: unsupported character in reading smoke_alarm_state: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: n_NESTprotectGang return value: WARNING: unsupported character in reading smoke_alarm_state: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: setreading d_NESTprotectGang software_version: 3.1.4rc3 : WARNING: unsupported character in reading software_version: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: n_NESTprotectGang return value: WARNING: unsupported character in reading software_version: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: setreading d_NESTprotectGang ui_color_state: green : WARNING: unsupported character in reading ui_color_state: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: n_NESTprotectGang return value: WARNING: unsupported character in reading ui_color_state: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: setreading d_NESTprotectGang co_alarm_state: ok : WARNING: unsupported character in reading co_alarm_state: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: n_NESTprotectGang return value: WARNING: unsupported character in reading co_alarm_state: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: setreading d_NESTprotectGang name: Hallway : WARNING: unsupported character in reading name: (not A-Za-z/\d_\.-)
2018.08.30 11:51:38 3: n_NESTprotectGang return value: WARNING: unsupported character in reading name: (not A-Za-z/\d_\.-)


Hier der entsprechende List-Ausschnitt des "Grund"-Devices "NESTprotect":

Internals:
   CFGFN     
   DEF        SXHM885U interval 01:00
   Interval   interval
   NAME       NESTprotect
   NOTIFYDEV  NESTprotect
   NR         971
   NTFY_ORDER 50-NESTprotect
   PIN        SXHM885U
   STATE      active
   TYPE       nestprotect
   s_regexp   NESTprotect:json:.*
   t_regexp   .*
   version    0.16b
   Helper:
     DBLOG:
       devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_battery_health:
         fhemlogdb:
           TIME       1535622697.88616
           VALUE      ok
       devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_co_alarm_state:
         fhemlogdb:
           TIME       1535622697.88616
           VALUE      ok
       devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_device_id:
         fhemlogdb:
           TIME       1535622697.88616
           VALUE      pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp
       devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_last_connection:
         fhemlogdb:
           TIME       1535622697.88616
           VALUE      2018-08-30T09:13:14.248Z
       devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_last_manual_test_time:
         fhemlogdb:
           TIME       1535622697.88616
           VALUE      2018-06-27T10:36:46.000Z
       devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_locale:
         fhemlogdb:
           TIME       1535622697.88616
           VALUE      de-DE
       devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_name:
         fhemlogdb:
           TIME       1535622697.88616
           VALUE      Hallway
       devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_name_long:
         fhemlogdb:
           TIME       1535622697.88616
           VALUE      Hallway Nest Protect
       devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_smoke_alarm_state:
         fhemlogdb:
           TIME       1535622697.88616
           VALUE      ok
       devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_software_version:
         fhemlogdb:
           TIME       1535622697.88616
           VALUE      3.1.4rc3
       devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_structure_id:
         fhemlogdb:
           TIME       1535622697.88616
           VALUE      WLM_n1fmX9T4adD_Hcohn81CsO_P05hWlOEgQdJ_bgzkxQjM3L2qPg
       devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_ui_color_state:
         fhemlogdb:
           TIME       1535622697.88616
           VALUE      green
       devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_where_id:
         fhemlogdb:
           TIME       1535622697.88616
           VALUE      Vz0uwe6iB3OScVFgDLtRMJxQfHrwWq3O4PQFn8xmYlQfzBLWV8VlVg
       devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_where_name:
         fhemlogdb:
           TIME       1535622697.88616
           VALUE      Hallway
READINGS:
     2018-08-30 11:51:37   devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_battery_health ok
     2018-08-30 11:51:37   devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_co_alarm_state ok
     2018-08-30 11:51:37   devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_device_id pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp
     2018-08-30 11:51:37   devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_last_connection 2018-08-30T09:13:14.248Z
     2018-08-30 11:51:37   devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_last_manual_test_time 2018-06-27T10:36:46.000Z
     2018-08-30 11:51:37   devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_locale de-DE
     2018-08-30 11:51:37   devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_name Hallway
     2018-08-30 11:51:37   devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_name_long Hallway Nest Protect
     2018-08-30 11:51:37   devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_smoke_alarm_state ok
     2018-08-30 11:51:37   devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_software_version 3.1.4rc3
     2018-08-30 11:51:37   devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_structure_id WLM_n1fmX9T4adD_Hcohn81CsO_P05hWlOEgQdJ_bgzkxQjM3L2qPg
     2018-08-30 11:51:37   devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_ui_color_state green
     2018-08-30 11:51:37   devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_where_id Vz0uwe6iB3OScVFgDLtRMJxQfHrwWq3O4PQFn8xmYlQfzBLWV8VlVg
     2018-08-30 11:51:37   devices_smoke_co_alarms_pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_where_name Hallway


Danke schonmal für jede Hilfe!

LG
Martin
FHEM auf Raspi, CUL433, CUL868, RFXTRX433e, CULCuBE
FRITZ: Fritzbox7590AX, 6xFritzDECT301, 10xFritzDECT200, FritzRepeater 6000
MAX!: Fensterkontakte
netatmo: Wetterstation & Thermostat
Milights, IT, Withings, HUE

rudolfkoenig

Zitat2018.08.30 11:51:38 3: setreading d_NESTprotectGang name_long: Hallway Nest Protect : WARNING: unsupported character in reading name_long: (not A-Za-z/\d_\.-)
Das hier bemaengelte Reading heisst name_long: (Doppelpunkt is Teil des Namens!), und das passt den "neuen" Richtlinien nicht, da : als Trenner fuer diverse Operationen verwendet wird.

rubbertail

Hallo Rudi,

ich habs fast beffürchtet. Hast du auf die Schnelle vielleicht einen Trick, wie man ggf. das Notify anpassen könnte, damit es den ":" bei der Benennung des Readings weglässt? In
$EVENT=~m/.*pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_([^ ]*) (.*)/;
wird dieser Name ja, wenn ichs richtig verstehe, im ersten Teil extrahiert... kann man da (oder dann bei der Folgeverwendung $1 - wiederum richtiges Verständnis vorausgesetzt - diesen ":" ausnehmen?

RegExe sind toll, aber für mich immer noch ein wenig verwirrend...

VIelen Dank jedenfalls schonmal fürs drüberschauen!

Martin
FHEM auf Raspi, CUL433, CUL868, RFXTRX433e, CULCuBE
FRITZ: Fritzbox7590AX, 6xFritzDECT301, 10xFritzDECT200, FritzRepeater 6000
MAX!: Fensterkontakte
netatmo: Wetterstation & Thermostat
Milights, IT, Withings, HUE

rudolfkoenig

ZitatHast du auf die Schnelle vielleicht einen Trick, wie man ggf. das Notify anpassen könnte, damit es den ":" bei der Benennung des Readings weglässt?
Die zulaessige Menge steht in der Fehlermeldung, und da du fragst, hast du vermutlich das Ersetzen kopiert :)
Ich wuerde es so bauen (ungetestet):
  $EVENT=~m/.*pmxpMKgsVDoE8SVOt8znzAdQwXlShtQp_([^ ]*) (.*)/;
  my ($readingName, $value) = ($1, $2);
  $readingName =~ s/[^A-Za-z\d_\.-]//g;
  fhem("setreading d_NESTprotectGang $readigName $value");

rubbertail

Salut Rudi,

vielen lieben Dank, das klappt super jetzt. Ich wäre grade noch verzweifelt, weil ich ständig ein
Global symbol "$readigName" requires explicit package name at (eval 153940) line 5.
bekommen habe - und dabei wars doch mit "my" definiert und alles - bis ich dann gesehen habe, dass in der letzten Zeile ein "n" bei $readigstate fehlte (und die Fehlermeldung das auch völlig korrekt angemahnt hat, es gab eben ein "readigs"... du wolltest mich testen, gell? ;)

Danke dir vielmals für den PERL-Grundkurs, Teil 0.5, und sorry für die doofen Fragen... Vielleicht fällt dann doch irgendwann mal der Groschen bei mir. :)

Martin
FHEM auf Raspi, CUL433, CUL868, RFXTRX433e, CULCuBE
FRITZ: Fritzbox7590AX, 6xFritzDECT301, 10xFritzDECT200, FritzRepeater 6000
MAX!: Fensterkontakte
netatmo: Wetterstation & Thermostat
Milights, IT, Withings, HUE