[gelöst] Antw:Führendes Zeichen im Reading entfernen

Begonnen von Nielsiwilsi, 02 Februar 2020, 20:14:44

Vorheriges Thema - Nächstes Thema

Nielsiwilsi

Hallo Zusammen,
ich habe seit heute das Temp-Addon für einen Shelly1 im Einsatz. Da ergibt sich das Problem, dass im Reading ein führendes ":" mit gesendet wird.

Hat jemand eine Idee, wie man das führende Zeichen löscht, wenn das ein ":" ist?

defmod UG_Technik_ZPumpe_Temp MQTT2_DEVICE mqtt2client
attr UG_Technik_ZPumpe_Temp DbLogExclude .*
attr UG_Technik_ZPumpe_Temp DbLogInclude temp0,temp1,temp2
attr UG_Technik_ZPumpe_Temp IODev mqtt2_client
attr UG_Technik_ZPumpe_Temp autocreate 0
attr UG_Technik_ZPumpe_Temp model shelly1
attr UG_Technik_ZPumpe_Temp readingList shellies/shelly1-123456/ext_temperature/0:.* temp0\
shellies/shelly1-123456/ext_temperature/1:.* temp1\
shellies/shelly1-123456/ext_temperature/2:.* temp2\
shellies/shelly1-123456/online:.* online\
shellies/shelly1-123456/announce:.* { json2nameValue($EVENT) }\
shellies/announce:.* { $EVENT =~ m,..id...shelly1-123456...mac.*, ? json2nameValue($EVENT) : undef }
attr UG_Technik_ZPumpe_Temp room UG->Technik
attr UG_Technik_ZPumpe_Temp setList x_update:noArg shellies/shelly1-12C8FB/command update_fw\
x_request_announces:noArg {"shellies/command announce"}\
x_mqttcom shellies/shelly1-123456/command $EVTPART1
attr UG_Technik_ZPumpe_Temp stateFormat temp0 temp1 temp2


[...]
setstate UG_Technik_ZPumpe_Temp 2020-02-02 20:06:18 temp0 :19.19
setstate UG_Technik_ZPumpe_Temp 2020-02-02 20:06:18 temp1 :41.94


Danke für eure Hilfe
Niels

87insane

Beispiel

shellies/shelly1-123456/ext_temperature/2:.* temp2\

Hast du und machst daraus:
shellies/shelly1-123456/ext_temperature/2:.:.* temp2\

Könnte klappen. Glaube aber nicht das es so rein kommt. Sende mal einen eventmonitor Mitschnitt...

Gesendet von meinem LM-G810 mit Tapatalk


Nielsiwilsi

Zitat von: 87insane am 02 Februar 2020, 20:39:53
Glaube aber nicht das es so rein kommt. Sende mal einen eventmonitor Mitschnitt...

Ne kommt nix rein, Eventmonitor bleibt leer. Announces gehen, hilft hier aber nix.

Gisbert

Vorneweg, ich bin Perl-Laie.
Wenn's um HTTPMOD gehen würde,
würde das helfen:
attr DEVICE reading01OExpr $val =~ s/\://g; $val
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

87insane

Wenn nix über diese readings rein kommt, dann würden die nicht angelegt werden. Hast du Event-on-change an? Lösch mal die ext readings aus deiner resdingslist. Bin gespannt ob sie wieder kommen.

Danach bitte nochmal ein list vom Gerät.

Gesendet von meinem LM-G810 mit Tapatalk


Nielsiwilsi

Also, readings gelöscht, die announce reading kommen wieder rein. Die temp nach o.g. modifikation nicht.
Events (Filter: UG_Technik_ZPumpe_Temp)   FHEM log   

2020-02-02 22:02:12.862 MQTT2_DEVICE UG_Technik_ZPumpe_Temp x_request_announces
2020-02-02 22:02:13.275 MQTT2_DEVICE UG_Technik_ZPumpe_Temp online: true
2020-02-02 22:02:13.295 MQTT2_DEVICE UG_Technik_ZPumpe_Temp id: shelly1-12C8FB
2020-02-02 22:02:13.295 MQTT2_DEVICE UG_Technik_ZPumpe_Temp mac: CC50E312C8FB
2020-02-02 22:02:13.295 MQTT2_DEVICE UG_Technik_ZPumpe_Temp fw_ver: 20200122-090220/v1.5.9@4b657c90
2020-02-02 22:02:13.295 MQTT2_DEVICE UG_Technik_ZPumpe_Temp new_fw: false
2020-02-02 22:02:13.295 MQTT2_DEVICE UG_Technik_ZPumpe_Temp ip: 192.168.1.117


Hier das list:
Internals:
   CID        mqtt2client
   DEF        mqtt2client
   DEVICETOPIC UG_Technik_ZPumpe_Temp
   FUUID      5e367a8b-f33f-7cb5-c6ba-1184970e0a86078f
   IODev      mqtt2_client
   LASTInputDev mqtt2_client
   MSGCNT     2428
   NAME       UG_Technik_ZPumpe_Temp
   NR         351
   STATE      temp0 temp1 temp2
   TYPE       MQTT2_DEVICE
   mqtt2_client_MSGCNT 2428
   mqtt2_client_TIME 2020-02-02 22:02:13
   Helper:
     DBLOG:
       temp0:
         LOG_Db:
           TIME       1580673379.54561
           VALUE      :19.19
       temp1:
         LOG_Db:
           TIME       1580673379.58199
           VALUE      :37.44
   OLDREADINGS:
   READINGS:
     2020-02-02 22:02:13   fw_ver          20200122-090220/v1.5.9@4b657c90
     2020-02-02 22:02:13   id              shelly1-12C8FB
     2020-02-02 22:02:13   ip              192.168.1.117
     2020-02-02 22:02:13   mac             CC50E312C8FB
     2020-02-02 22:02:13   new_fw          false
     2020-02-02 22:02:13   online          true
     2020-02-02 22:02:12   state           x_request_announces
Attributes:
   DbLogExclude .*
   DbLogInclude temp0,temp1,temp2
   IODev      mqtt2_client
   autocreate 0
   group      Heizungssteuerung
   model      shelly1
   readingList shellies/shelly1-12C8FB/ext_temperature/0:.:.* temp0
shellies/shelly1-123456/ext_temperature/1:.:.* temp1
shellies/shelly1-123456/ext_temperature/2:.:.* temp2
shellies/shelly1-12C8FB/online:.* online
shellies/shelly1-12C8FB/announce:.* { json2nameValue($EVENT) }
shellies/announce:.* { $EVENT =~ m,..id...shelly1-12C8FB...mac.*, ? json2nameValue($EVENT) : undef }
   room       UG->Technik
   setList    x_update:noArg shellies/shelly1-12C8FB/command update_fw
x_request_announces:noArg {"shellies/command announce"}
x_mqttcom shellies/shelly1-12C8FB/command $EVTPART1
   stateFormat temp0 temp1 temp2


Bei meiner ursprünglichen configuration von ganz oben kommen auch die temp readings wieder rein.

Gruß Niels

87insane

Die Form der readings wäre gut. Die Modifikation war ja nur geraten da ich nicht weiß wie der Block überhaupt rein kommt.

Du sagst im eventmonitor kommt nix aber es werden Temperaturen angezeigt. Das verwirrt mich alles :-/

Gesendet von meinem LM-G810 mit Tapatalk


Nielsiwilsi

Noch mal von Anfang, ich glaub ich bin zu kompliziert beim Beschreiben.

- Der Vorschlag aus Antwort 1 funktioniert leider nicht.
- Der shelly sendet :49.31 auf diesem topic shellies/shelly1-12C8FB/ext_temperature/1
- der ":" soll weg.

...und ich hab grad keine Idee wie.

Viele Grüße
Niels

Gisbert

#8
Hallo Niels,

im raw-Format:
attr myDevice userReadings text {\
my $val = '';; \
$val = ReadingsVal($name,'old_text','');; \
$val =~ s/\://g;; \
return $val;;}

Doppelpunkt wird durch nichts ersetzt, allgemeiner:
$val =~ s/\old/new/g
Geht vielleicht noch einfacher, aber so läuft es auch.

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

87insane

Das sagte mein Vorredner ja auch oben schon. Aber wir reden hier über zwei Dinge:

1) das ist einfach regex. Gibt diverse Seiten auf denen man das super testen kann. Ich selber nehm gern regex101.com

2) das ist der entscheidende Punkt.
100% ist das so nicht gewollt u wird gefixt. Also kannst du natürlich den Doppelpunkt auf verschiedene Arten weg bekommen, aber am ende wird es eh gefixt. Die frage ist was man am ende mit welchem Aufwand ereichen will.....

Da du leider kein RAW gesendet hast bzw ich nicht genau erkennen konnte woher das Leerzeichen kommt, war es schwer zu beurteilen. Ich würde da maximal zu lernzwecken Mühe rein stecken. Sicher ist das gerade mqtt nach wie vor ne shelly Baustelle ist.

Gesendet von meinem LM-G810 mit Tapatalk


Nielsiwilsi

Dank Gisbert hab ich eine Lösung bauen können. Danke! Mal schauen, wann die Shelly Jungs und Mädels einen Fix liefern, die bauen ja immer noch recht viel an der Firmware rum.

defmod UG_Technik_ZPumpe_Temp MQTT2_DEVICE mqtt2client
attr UG_Technik_ZPumpe_Temp DbLogExclude .*
attr UG_Technik_ZPumpe_Temp DbLogInclude temp0,temp1,temp2
attr UG_Technik_ZPumpe_Temp IODev mqtt2_client
attr UG_Technik_ZPumpe_Temp autocreate 0
attr UG_Technik_ZPumpe_Temp event-on-change-reading .*
attr UG_Technik_ZPumpe_Temp group Heizungssteuerung
attr UG_Technik_ZPumpe_Temp model shelly1
attr UG_Technik_ZPumpe_Temp readingList shellies/shelly1-12C8FB/ext_temperature/0:.* ext_temp0\
shellies/shelly1-12C8FB/ext_temperature/1:.* ext_temp1\
shellies/shelly1-123456/ext_temperature/2:.* ext_temp2\
shellies/shelly1-12C8FB/online:.* online\
shellies/shelly1-12C8FB/announce:.* { json2nameValue($EVENT) }\
shellies/announce:.* { $EVENT =~ m,..id...shelly1-12C8FB...mac.*, ? json2nameValue($EVENT) : undef }
attr UG_Technik_ZPumpe_Temp room UG->Technik
attr UG_Technik_ZPumpe_Temp setList x_update:noArg shellies/shelly1-12C8FB/command update_fw\
x_request_announces:noArg {"shellies/command announce"}\
x_mqttcom shellies/shelly1-12C8FB/command $EVTPART1
attr UG_Technik_ZPumpe_Temp stateFormat temp0 temp1 temp2
attr UG_Technik_ZPumpe_Temp userReadings temp0 {my $val = ReadingsVal($name,'ext_temp0','');; $val =~ s/\://g;; return $val;;}, temp1 {my $val = ReadingsVal($name,'ext_temp1','');; $val =~ s/\://g;; return $val;;}, temp2 {my $val = ReadingsVal($name,'ext_temp2','');; $val =~ s/\://g;; return $val;;}

bull1t

Bedanke mich ebenfalls recht herzlich. War schwer zu finden.
Dank euch konnte ich es auch für mich übernehmen, anpassen, einbauen.

Gruß bUll1t

Nielsiwilsi

Freut mich.  ;D

Oha,
jetzt wo ich meinen Post lese, fällt mir auf, ich hab einen Fehler in meinem Code.
Und zwar für das temp2 topic. Hatte bei mir bisher keine Auswirkungen, da ich nur zwei Sensoren dran hab.

VG
Niels

Nielsiwilsi

#13
Gute Nachricht!

Mit Firmware 1.6.0 ist dieser Fix nicht mehr notwendig.

VG
Niels

87insane

Das meinte ich vor 18 Tagen ;) aber ich mag es wenn jemand ne kleine macke hat, wie ich :)

Gesendet von meinem LM-G810 mit Tapatalk