[gelöst]stateFormat und Readings name

Begonnen von DasQ, 04 Dezember 2022, 19:25:47

Vorheriges Thema - Nächstes Thema

DasQ

Hi,

ich versuche gerade verzweifelt mehreren Devices gleichzeitig ein Stateformat zu verpassen, scheitere aber daran das ich die readings namen nicht greifen kann, da sie am anfang vareieren.

list vom device
Internals:
   CID        MQTT2_tasmota_ble
   DEF        MQTT2_tasmota_ble
   FUUID      637fd31e-f33f-5aff-ca88-aa3c99df3c01625d
   IODev      MQTT2_Broker
   LASTInputDev MQTT2_Broker
   MQTT2_Broker_CONN MQTT2_Broker_192.168.1.181_62163
   MQTT2_Broker_MSGCNT 12951
   MQTT2_Broker_TIME 2022-12-04 19:20:57
   MSGCNT     12951
   NAME       MI_ATCa78a8d
   NR         206
   STATE      =~ m{.*Battery}x
   TYPE       MQTT2_DEVICE
   eventCount 12951
   READINGS:
     2022-12-04 19:20:57   ATCa78a8d_Battery 84
     2022-12-04 19:20:57   ATCa78a8d_Btn   1
     2022-12-04 19:20:57   ATCa78a8d_DewPoint 9.1
     2022-12-04 19:20:57   ATCa78a8d_Humidity 47.0
     2022-12-04 19:20:57   ATCa78a8d_RSSI  -80
     2022-12-04 19:20:57   ATCa78a8d_Temperature 20.9
     2022-12-04 19:20:57   ATCa78a8d_mac   a4c138a78a8d
     2022-11-25 19:07:45   IODev           MQTT2_Broker
     2022-12-04 19:20:57   TempUnit        C
     2022-12-04 19:20:57   Time            2022-12-04T19:20:57
Attributes:
   alias      WohnZi_Temp
   autocreate 0
   group      1_temperaturen
   icon       mqtt
   readingList tele/tasmota_ble/ATCa78a8d:.* { json2nameValue($EVENT) }
   room       Wohnzimmer
   sortby     3


und zwar würde ich gern immer den hinteren teil von z.b. "ATCa78a8d_Temperature" abfragen wollen.
ich weis das ich mal eine anleitung hier gesehen habe wie man wo welche maskierung oder perlcodesyntax verwendet.
aber wie ich auch such ich finds einfach nimmer.
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Beta-User

jsonMap würde helfen, einfachere Reading-Namen zu haben.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

OdfFhem

#2
Mein Testgerät heisst ftuitest und das fragliche Reading ftuitest_temperature.

Folgendes Attribut würde bei jedem gleichgestrickten Gerät funktionieren:

attr ftuitest stateFormat Temperature: {(ReadingsVal("$DEV","$DEV".'_temperature','unbekannt'))} # {(ReadingsVal("$name","$name".'_temperature','unbekannt'))}\


Bei gebräuchlichen MQTT2_DEVICE-Namen würde es aber nicht passen ...

DasQ

@Beta-User sicherlich die richtigere herangehensweise, aber dazu müsste ich wieder an jeden wert einzeln ein maping dran basteln.
ich habe sinnigerweise, die namen umbenannt (Mi_)(ja ich habs schon bereut) war aber der meinung ich umgehe hiermit eine mögliche verwechsungsgefahr. war doof geb ich zu. werd ich vermutlich rückgänig machen um mit $name weiter arbeiten zu können. und ggf ne schleife schreiben und die über readingsnamen laufen lassen.

@OdfFhem danke für den codeschnipsel, werd ich mal versuchen auf mich umzumünzen, auch wenn das womöglich die "nicht" richtige lösung sein sollte, so komm ich zumindest im "trial and error" wieder besser in den syntax. ich bin ein plasitischer mensch und muß sachen anfassen um sie begreifen zu können. So ein schnipsel hilft mir da ungemein weiter.
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Beta-User

Zitat von: DasQ am 05 Dezember 2022, 07:56:24
@Beta-User sicherlich die richtigere herangehensweise, aber dazu müsste ich wieder an jeden wert einzeln ein maping dran basteln.
Moin. Da fällt mir noch ein, dass es hier so ähnlich zu sein scheint wie bei zigbee2tasmota. Da ist es so, dass die eigentlichen Werte in einer Art "innerem JSON" stecken. Dann wäre es möglich, nur diesen inneren JSON an json2nameValue() zu übergeben, und das Umbenennen könnte sich weitgehend erledigt haben bzw. überall gleich laufen. Da sieht das so aus:
attr DEVICE readingList \
TELETOPIC:.* { $EVENT =~ m,^.*(..Device.+)..$, ?  json2nameValue($1,'',$JSONMAP) : $EVENT =~ m,0xDEV_ID.:(.*).., ?  json2nameValue($1,'',$JSONMAP) : undef }


Wenn ich das richtig verstanden habe, könnte das hier klappen:
tele/tasmota_ble/ATCa78a8d { $EVENT =~ m,ATCa78a8d.:(.*).., ?  json2nameValue($1,'',$JSONMAP) : undef }
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

DasQ

Danke @OdfFhem mit dem codeschnipsel habe ich nun 10 geräten in einem rutsch das attribut zugewiesen.
zuvor musste ich allerdings wie oben geschrieben, erstmal alles wieder zurück umbennen inkls gplots (dank subline-text in 5 minuten erledigt)(zurück umbennen wegen der systemvariable und weil mich hier im board mal ein schlauer mensch drauf hingewiesen hat  ;) )

attr TYPE=MQTT2_DEVICE:FILTER=NAME=ATC.* stateFormat  T: {(ReadingsVal("$DEV","$DEV".'_Temperature','unbekannt'))}°, H: {(ReadingsVal("$DEV","$DEV".'_Humidity','unbekannt'))} % <br> Bat: {(ReadingsVal("$DEV","$DEV".'_Battery','unbekannt'))}%, Name $name (nicht schön, aber selten  ::) )

fürs erste ok und langsam kommt auch wieder das syntax verständis

@Beta-User ich werd mich mal an
tele/tasmota_ble/ATCa78a8d { $EVENT =~ m,ATC.:(.*).., ?  json2nameValue($1,'',$JSONMAP) : undef }
versuchen, da ja ATC immer gleichbleibend ist. Das mit den punkten und komma raff ich noch nicht so ganz. wo bekommt man denn diese infos kompakt her?

atc1441 ist ja der vater von der ganzen geschichte, drum fangen die thermometer ja auch mit seim nick an. tasmota bastelt das nur mit der MI32Option6 2 an das topic mit dran und läd es in dem gemeinsamen topiclevel "tasmota_ble" ab. so spar ich mir das nach signalstärke, den aktuellsten wert raus suchen. die landen da einfach alle von allen 3 empfängern.
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Beta-User

Zitat von: DasQ am 05 Dezember 2022, 10:48:38
@Beta-User ich werd mich mal an
tele/tasmota_ble/ATCa78a8d { $EVENT =~ m,ATC..*).., ?  json2nameValue($1,'',$JSONMAP) : undef }
versuchen, da ja ATC immer gleichbleibend ist. Das mit den punkten und komma raff ich noch nicht so ganz. wo bekommt man denn diese infos kompakt her?
https://regex101.com/

Ein Punkt ist ein beliebiges Zeichen. (Hinten also die beiden schließenden Klammern).
Deswegen greift "ATC." m.E. auch zu kurz. Ist vermutlich dann eher "alles bis zum nächsten Doppelpunkt", also so:
tele/tasmota_ble/ATCa78a8d { $EVENT =~ m,ATC[^:]+:(.*).., ?  json2nameValue($1,'',$JSONMAP) : undef }
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

DasQ

du glaubst garnicht, was ich die seite die letzten tage gequält hab. :o
aber ausser ganz viele hübsche fehlermeldung, in fhem, hab ich nicht hinbekommen. ::)

du meinst den doppelpunkt?
Zitat{"Time":"2022-12-05T11:40:49","ATC595e99":{"mac":"a4c138595e99","Temperature":21.8,"Humidity":47.7,"DewPoint":10.2,"Btn":1,"Battery":98,"RSSI":-87},"TempUnit":"C"}

langsam rieselt es wieder ... mußte mich erstmal wieder an mein MQTT.fx erinnern. (OMG)
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Beta-User

OK, wenn der JSON anders aussieht, ist es klar, dass json2NameValue() das nicht mag...

Dann versuchen wir es mal mit "alles bist einschließlich der nächsten schleißenden geschweiften Klammer":
tele/tasmota_ble/ATCa78a8d { $EVENT =~ m,ATC[^:]+:([^}]+[}]).., ?  json2nameValue($1,'',$JSONMAP) : undef }
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

DasQ

*bussi*  :)

da fehlte noch ein :.* aber egal, das war einfach

Internals:
   CID        MQTT2_tasmota_ble
   DEF        MQTT2_tasmota_ble
   FUUID      63805ac8-f33f-5aff-c37b-5bc59de37b653017
   IODev      MQTT2_Broker
   LASTInputDev MQTT2_Broker
   MQTT2_Broker_CONN MQTT2_Broker_192.168.1.181_62165
   MQTT2_Broker_MSGCNT 33
   MQTT2_Broker_TIME 2022-12-05 12:25:59
   MSGCNT     33
   NAME       ATC364197
   NR         235
   STATE      T: 20.2°, H: 50.8 % <br> Bat: 87%, Name ATC364197
   TYPE       MQTT2_DEVICE
   eventCount 33
   READINGS:
     2022-12-05 12:15:59   ATC364197_Battery 87
     2022-12-05 12:15:59   ATC364197_Btn   1
     2022-12-05 12:15:59   ATC364197_DewPoint 9.6
     2022-12-05 12:15:59   ATC364197_Humidity 50.8
     2022-12-05 12:15:59   ATC364197_RSSI  -93
     2022-12-05 12:15:59   ATC364197_Temperature 20.2
     2022-12-05 12:15:59   ATC364197_mac   a4c138364197
     2022-12-05 12:25:59   Battery         87
     2022-12-05 12:25:59   Btn             1
     2022-12-05 12:25:59   DewPoint        9.5
     2022-12-05 12:25:59   Humidity        50.2
     2022-12-05 10:04:36   IODev           MQTT2_Broker
     2022-12-05 12:25:59   RSSI            -85
     2022-12-05 12:15:59   TempUnit        C
     2022-12-05 12:25:59   Temperature     20.2
     2022-12-05 12:15:59   Time            2022-12-05T12:15:58
     2022-12-05 12:25:59   mac             a4c138364197
Attributes:
   alias      LukasZi_Temp
   group      1_temperaturen
   icon       mqtt
   readingList tele/tasmota_ble/ATC364197:.* { $EVENT =~ m,ATC[^:]+:([^}]+[}]).., ?  json2nameValue($1,'',$JSONMAP) : undef }
   room       Lukas
   sortby     2
   stateFormat T: {(ReadingsVal("$DEV","$DEV".'_Temperature','unbekannt'))}°, H: {(ReadingsVal("$DEV","$DEV".'_Humidity','unbekannt'))} % <br> Bat: {(ReadingsVal("$DEV","$DEV".'_Battery','unbekannt'))}%, Name $name


vielen lieben dank, jetzt kann ich das stateformat und die readingsgroup doch noch etwas aufhübschen.
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Beta-User

Jetzt kannst du das noch mit jsonMap auf Kleinschreibung, batteryPercent (?) etc. umstellen ;) . Dann ist es "standardkonform" 8) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files