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
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
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.
Vorneweg, ich bin Perl-Laie.
Wenn's um HTTPMOD gehen würde,
würde das helfen:
attr DEVICE reading01OExpr $val =~ s/\://g; $val
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
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
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
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
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
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
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;;}
Bedanke mich ebenfalls recht herzlich. War schwer zu finden.
Dank euch konnte ich es auch für mich übernehmen, anpassen, einbauen.
Gruß bUll1t
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
Gute Nachricht!
Mit Firmware 1.6.0 ist dieser Fix nicht mehr notwendig.
VG
Niels
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