[gelöst] Readings mit json2nameValue bei komplexen topics

Begonnen von JoWiemann, 02 August 2023, 17:17:32

Vorheriges Thema - Nächstes Thema

JoWiemann

Hallo,

meine Alarmanlage (EIMSIG) stellt einen MQTT Server zur Verfügung. Ein passendes MQTT2Client Device war auch schnell definiert und funktioniert. Jetzt habe ich aber Probleme vernünftige Readings erstellen zu lassen:

eimsig/z200-bwa100307/sensors_0/new:.* new
eimsig/z200-bwa100307/sensors_0/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/\x24type:.* _type
eimsig/z200-bwa100307/sensors_0/subtype:.* subtype
eimsig/z200-bwa100307/sensors_0/icon:.* icon
eimsig/z200-bwa100307/sensors_0/icon/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/icon/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/subtype/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/subtype/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/serial:.* serial
eimsig/z200-bwa100307/sensors_0/trafficlight_value:.* trafficlight_value
eimsig/z200-bwa100307/sensors_0/trafficlight_value/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/trafficlight_value/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/trafficlight_value/\x24format:.* _format
eimsig/z200-bwa100307/sensors_0/active:.* active
eimsig/z200-bwa100307/sensors_0/active/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/active/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/active/\x24settable:.* _settable
eimsig/z200-bwa100307/sensors_0/signal:.* signal
eimsig/z200-bwa100307/sensors_0/signal/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/signal/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/battery:.* battery
eimsig/z200-bwa100307/sensors_0/battery/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/battery/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/positions:.* positions
eimsig/z200-bwa100307/sensors_0/positions/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/positions/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/positions/\x24format:.* _format
eimsig/z200-bwa100307/sensors_0/positions/\x24settable:.* _settable
eimsig/z200-bwa100307/sensors_0/domain:.* domain
eimsig/z200-bwa100307/sensors_0/domain/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/domain/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/domain/\x24format:.* _format
eimsig/z200-bwa100307/sensors_0/domain/\x24settable:.* _settable
eimsig/z200-bwa100307/sensors_0/value:.* value
eimsig/z200-bwa100307/sensors_0/value/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/value/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/is_calibrated:.* is_calibrated
eimsig/z200-bwa100307/sensors_0/is_calibrated/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/is_calibrated/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/invert_positions:.* invert_positions
eimsig/z200-bwa100307/sensors_0/invert_positions/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/invert_positions/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/invert_positions/\x24settable:.* _settable
eimsig/z200-bwa100307/sensors_0/disable_shutter_automatic_on_red:.* disable_shutter_automatic_on_red
eimsig/z200-bwa100307/sensors_0/disable_shutter_automatic_on_red/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/disable_shutter_automatic_on_red/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/disable_shutter_automatic_on_red/\x24settable:.* _settable
eimsig/z200-bwa100307/sensors_0/dont_arm_on_yellow:.* dont_arm_on_yellow
eimsig/z200-bwa100307/sensors_0/dont_arm_on_yellow/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/dont_arm_on_yellow/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/dont_arm_on_yellow/\x24settable:.* _settable
eimsig/z200-bwa100307/sensors_0/limit_green_yellow:.* limit_green_yellow
eimsig/z200-bwa100307/sensors_0/limit_green_yellow/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/limit_green_yellow/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/limit_green_yellow/\x24settable:.* _settable
eimsig/z200-bwa100307/sensors_0/limit_yellow_red:.* limit_yellow_red
eimsig/z200-bwa100307/sensors_0/limit_yellow_red/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/limit_yellow_red/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/limit_yellow_red/\x24settable:.* _settable
eimsig/z200-bwa100307/sensors_0/alarm_delay:.* alarm_delay
eimsig/z200-bwa100307/sensors_0/alarm_delay/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/alarm_delay/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/alarm_delay/\x24settable:.* _settable
eimsig/z200-bwa100307/sensors_0/arm_delay:.* arm_delay
eimsig/z200-bwa100307/sensors_0/arm_delay/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/arm_delay/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/arm_delay/\x24settable:.* _settable
eimsig/z200-bwa100307/sensors_0/close_delay:.* close_delay
eimsig/z200-bwa100307/sensors_0/close_delay/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/close_delay/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/close_delay/\x24settable:.* _settable
eimsig/z200-bwa100307/sensors_0/reachable:.* reachable
eimsig/z200-bwa100307/sensors_0/reachable/\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/reachable/\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/\x24properties:.* _properties

führt zu folgenden Readings:
_datatype boolean   2023-08-02 16:58:04
_format   0:2       2023-08-02 16:57:57
_name     Reachable 2023-08-02 16:58:03
_properties serial,trafficlight_value,active,signal,battery,icon,positions,domain,value,is_calibrated,invert_positions,disable_shutter_automatic_on_red,dont_arm_on_yellow,limit_green_yellow,limit_yellow_red,alarm_delay,arm_delay,close_delay,reachable
2023-08-02 16:58:04
_settable true 2023-08-02 16:58:03
_type window 2023-08-02 16:57:55
active true 2023-08-02 16:57:56
alarm_delay 0 2023-08-02 16:58:00
arm_delay 0 2023-08-02 16:58:01
associatedWith MQTT2_EimsigAlarm 2023-08-02 16:58:04
battery 100 2023-08-02 16:57:56
close_delay 0 2023-08-02 16:58:02
...
[/close]

Die mehrfach vorkommenden Topics:
eimsig/z200-bwa100307/sensors_0/.../\x24name:.* _name
eimsig/z200-bwa100307/sensors_0/.../\x24datatype:.* _datatype
eimsig/z200-bwa100307/sensors_0/.../\x24format:.* _format

erzeugen alle das selbe Reading:
_name
_datatype
_format

Wie kann ich nun dafür sorgen, dass für jedes Topic ein "vernünftiges" Reading erzeugt wird? json2nameValue() funtioniert nicht, da wohl kein JSON übertragen wird. Jedenfalls finde ich hier keinen entsprechenden Log-Eintrag:
[code]
2023.08.02 17:09:30 5: EimsigAlarm: dispatch autocreate=complex\000EimsigAlarm\000eimsig/z200-bwa100307/central/time\0002023-08-02T17:09:30
2023.08.02 17:09:30 5: EimsigAlarm: received PUBLISH (0)"eimsig/z200-bwa100307/central/time2023-08-02T17:09:30
2023.08.02 17:09:30 4: EimsigAlarm received PUBLISH
2023.08.02 17:09:23 5: EimsigAlarm: received PINGRESP
2023.08.02 17:09:23 4: EimsigAlarm received PINGRESP
2023.08.02 17:09:23 5: EimsigAlarm: sending PINGREQ (192)(0)
2023.08.02 17:09:03 5: EimsigAlarm: dispatch autocreate=complex\000EimsigAlarm\000eimsig/z200-bwa100307/central/time\0002023-08-02T17:09:03
2023.08.02 17:09:03 5: EimsigAlarm: received PUBLISH (0)"eimsig/z200-bwa100307/central/time2023-08-02T17:09:03
2023.08.02 17:09:03 4: EimsigAlarm received PUBLISH
2023.08.02 17:09:00 5: EimsigAlarm: dispatch autocreate=complex\000EimsigAlarm\000eimsig/z200-bwa100307/central/pairingmode\000false
2023.08.02 17:09:00 5: EimsigAlarm: received PUBLISH (0))eimsig/z200-bwa100307/central/pairingmodefalse
2023.08.02 17:09:00 4: EimsigAlarm received PUBLISH
2023.08.02 17:09:00 5: EimsigAlarm: dispatch autocreate=complex\000EimsigAlarm\000eimsig/z200-bwa100307/central/pairingmode\000false
2023.08.02 17:09:00 5: EimsigAlarm: received PUBLISH (0))eimsig/z200-bwa100307/central/pairingmodefalse
2023.08.02 17:09:00 4: EimsigAlarm received PUBLISH
2023.08.02 17:09:00 5: EimsigAlarm: dispatch autocreate=complex\000EimsigAlarm\000eimsig/z200-bwa100307/sensors_0/$properties\000serial,trafficlight_value,active,signal,battery,icon,positions,domain,value,is_calibrated,invert_positions,disable_shutter_automatic_on_red,dont_arm_on_yellow,limit_green_yellow,limit_yellow_red,alarm_delay,arm_delay,close_delay,reachable
2023.08.02 17:09:00 5: EimsigAlarm: received PUBLISH (0)+eimsig/z200-bwa100307/sensors_0/$propertiesserial,trafficlight_value,active,signal,battery,icon,positions,domain,value,is_calibrated,invert_positions,disable_shutter_automatic_on_red,dont_arm_on_yellow,limit_green_yellow,limit_yellow_red,alarm_delay,arm_delay,close_delay,reachable
2023.08.02 17:09:00 4: EimsigAlarm received PUBLISH
2023.08.02 17:09:00 5: EimsigAlarm: dispatch autocreate=complex\000EimsigAlarm\000eimsig/z200-bwa100307/sensors_0/reachable/$datatype\000boolean
2023.08.02 17:09:00 5: EimsigAlarm: received PUBLISH (0)3eimsig/z200-bwa100307/sensors_0/reachable/$datatypeboolean
2023.08.02 17:09:00 4: EimsigAlarm received PUBLISH
2023.08.02 17:09:00 5: EimsigAlarm: dispatch autocreate=complex\000EimsigAlarm\000eimsig/z200-bwa100307/sensors_0/reachable/$name\000Reachable
2023.08.02 17:09:00 5: EimsigAlarm: received PUBLISH (0)/eimsig/z200-bwa100307/sensors_0/reachable/$nameReachable
2023.08.02 17:09:00 4: EimsigAlarm received PUBLISH
2023.08.02 17:09:00 5: EimsigAlarm: dispatch autocreate=complex\000EimsigAlarm\000eimsig/z200-bwa100307/sensors_0/reachable\000true
2023.08.02 17:09:00 5: EimsigAlarm: received PUBLISH (0))eimsig/z200-bwa100307/sensors_0/reachabletrue
2023.08.02 17:09:00 4: EimsigAlarm received PUBLISH
2023.08.02 17:09:00 5: EimsigAlarm: dispatch autocreate=complex\000EimsigAlarm\000eimsig/z200-bwa100307/sensors_0/close_delay/$settable\000true
2023.08.02 17:09:00 5: EimsigAlarm: received PUBLISH (0)5eimsig/z200-bwa100307/sensors_0/close_delay/$settabletrue
2023.08.02 17:09:00 4: EimsigAlarm received PUBLISH
2023.08.02 17:09:00 5: EimsigAlarm: dispatch autocreate=complex\000EimsigAlarm\000eimsig/z200-bwa100307/sensors_0/close_delay/$datatype\000integer
2023.08.02 17:09:00 5: EimsigAlarm: received PUBLISH (0)5eimsig/z200-bwa100307/sensors_0/close_delay/$datatypeinteger
2023.08.02 17:09:00 4: EimsigAlarm received PUBLISH
2023.08.02 17:09:00 5: EimsigAlarm: dispatch autocreate=complex\000EimsigAlarm\000eimsig/z200-bwa100307/sensors_0/close_delay/$name\000Close delay
2023.08.02 17:09:00 5: EimsigAlarm: received PUBLISH (0)1eimsig/z200-bwa100307/sensors_0/close_delay/$nameClose delay
2023.08.02 17:09:00 4: EimsigAlarm received PUBLISH
usw.

Vielen Dank und Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Beta-User

Wenn kein JSON übertragen wird, ist es mit json2nameValue() eher schwierig...

Gibt es evtl. eine Option, das auf der Seite des 2MQTT-Dienstes der EIMSIG anders einzustellen? (JSON wäre auch bei mehreren zusammengefaßten Infos effizienter in der Verarbeitung auf der FHEM-Seite).

Ansonsten muss man nämlich überall die zu bildenden Reading-Namen händisch anpassen, auszugsweise z.B. so:
eimsig/z200-bwa100307/sensors_0/icon/\x24name:.* icon_name
eimsig/z200-bwa100307/sensors_0/icon/\x24datatype:.* icon_datatype

(Irgendwo hatte ich (bei ebus?) auch mal was gebaut, mit dem sich sowas (die Umstellung) automatisieren läßt bzw. ggf. auch der Topic mit ausgewertet wird (was aber ineffizient sein dürfte).)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

JoWiemann

#2
Hallo Beta-User,

leider ist der MQTT nicht konfigurierbar. Bin froh, dass es den überhaupt gibt. Nach einem ausgiebigen Spaziergang habe ich für mich folgende Lösung gefunden.

Sub in der 99_myUtils.pm
sub myEimsigReading {
  my ($mTopic, $Event) = @_;
  my $rName;
  $mTopic =~ s/\$//gs;
  $mTopic =~ s/\//_/gs;
  $mTopic .= "_Ende";
  Log3 "Test", 2, "Topic: " . $mTopic;
  if ($mTopic =~ m/eimsig_z200.*?_(sensors_[0-9]?)_Ende/ ) {
    Log3 "Test", 2, "Reading: " . $1;
    return { $1 => $Event};
  }
  if ($mTopic =~ m/eimsig_z200.*?_(sensors_[0-9]?)[_]?(.*?)_Ende/ ) {
    Log3 "Test", 2, "Reading: " . $2;
    return { $2 => $Event};
  }
  return undef;
}

In readingList wird folgendes definiert: eimsig/z200-bwa100307/sensors_.* { myEimsigReading($TOPIC, $EVENT) }

Für mich so Ok.

Was ich mich noch frage ist. Im "Zentraldevice" habe ich bridgeRegexp gesetzt um separierte Devices zu erzeugen. Kann man bridgeRegexp eigentlich auch eine Perl Code ausführen lassen, um dem neuen Device Attribute mitgeben zu können.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Beta-User

Schön, dass du eine zufriedenstellende Lösung gefunden hast,

Zitat von: JoWiemann am 02 August 2023, 21:58:31Was ich mich noch frage ist. Im "Zentraldevice" habe ich bridgeRegexp gesetzt um separierte Devices zu erzeugen. Kann man bridgeRegexp eigentlich auch eine Perl Code ausführen lassen, um dem neuen Device Attribute mitgeben zu können.
Perl-Code nicht, und die "Treffer" aus einer regex hast du ja anscheinend schon verwertet (("sensors_0") wäre ggf. "$1"; im "allgemeinen attrTemplate" für M2C sind ein paar Beispiele dafür enthalten).

Die "Nachbearbeitung" bzgl. der Attribute muss dann aber anderswo erfolgen, z.B. über "archetype", bei dem auch (schlagwortartig) ein paar andere Lösungen zu finden sind.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors