Reading wird nicht erstellt obwohl die Syntax richtig ist? Anfänger Problem?

Begonnen von Olli7766, 03 September 2025, 11:36:13

Vorheriges Thema - Nächstes Thema

Olli7766

Hallo!

Ich möchte aus folgendem Receive in meinem Device 2 Readings erstellen.
"settemp" mit der Temperatur und "device" mit dem Gerät.
Das Reading für settemp wird auch erstellt, jedoch nicht für device.

Input Reading:
FHEM/FHT_4f0c/cmnd/settemp
22.5

readingList:
FHEM/(.*?)/cmnd/settemp:.* { "settemp" => $EVENT, "device" => $1 }

Kann mir jemand helfen?

betateilchen

$1 steht in Deinem perl Teil nicht zur Verfügung.
Du müsstest das darin nochmal selbst auswerten, um es verwenden zu können.
Außerdem fehlt da ein Paar geschweifte Klammern.

attr ... readingList FHEM/(.*?)/cmnd/settemp:.* { $TOPIC =~ m,FHEM\/(.*?)\/,;;  {settemp=>$EVENT, device=> $1}}


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

$1 ist zwar gesetzt kurz nach Pruefung des topics, als naechstes wird aber per Regexp geprueft, ob es sich beim Argument/Reading um Perl-Code handelt
if($code =~ m/^{.*}$/s) {
und damit/danach ist $1 nicht mehr gesetzt (wie betateilchen es geschrieben hat).

Ich habe jetzt das Modul so geaendert, dass die Werte in der MATCHED Variable gespeichert werden.
Damit funktioniert Folgendes:
FHEM/(.*)/cmnd/settemp:.*  { "settemp" => $EVENT, "device" => $MATCHED[0] }

betateilchen

Zitat von: rudolfkoenig am 03 September 2025, 12:39:24Ich habe jetzt das Modul so geaendert, dass die Werte in der MATCHED Variable gespeichert werden.

Vermutlich hast Du das jetzt nur für mqtt umgesetzt oder funktioniert das jetzt auch beispielsweise bei Einzeilern in notify? Da (und auch in userReading) hätte ich das schon viel öfters brauchen können als bei mqtt.

Das setze ich hiermit mal auf den Weihnachtswunschzettel 2025 :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Olli7766

WoW Danke!

Das hört sich super an!

Ich habe jetzt ein "Update" im FHEM laufen lassen aber vermissen das Modul MQTT?!

2025.09.03 13:03:34 1:
2025.09.03 13:03:34 1: Downloading https://fhem.de/fhemupdate/controls_fhem.txt
2025.09.03 13:03:34 1: RMDIR: ./restoreDir/update/2024-02-17
2025.09.03 13:03:34 1: UPD ./CHANGED
2025.09.03 13:03:34 1: UPD FHEM/00_ZWDongle.pm
2025.09.03 13:03:34 1: UPD FHEM/57_Calendar.pm
2025.09.03 13:03:34 1: UPD FHEM/72_FRITZBOX.pm
2025.09.03 13:03:35 1: UPD FHEM/76_SolarForecast.pm
2025.09.03 13:03:35 1: saving fhem.cfg
2025.09.03 13:03:35 1: saving ./log/fhem.save
2025.09.03 13:03:35 1:
2025.09.03 13:03:35 1: New entries in the CHANGED file:
2025.09.03 13:03:35 1:  - bugfix: 72_FRITZBOX: Fehler bei set <name> phoneBookEntry
2025.09.03 13:03:35 1:  - feature: 57_Calendar: new attribute userAgent (forum #142335)
2025.09.03 13:03:35 1:  - bugfix: 72_FRITZBOX: kleinere Fehler (erm upnp)
2025.09.03 13:03:35 1:  - feature: 76_SolarForecast: Version 1.57.3
2025.09.03 13:03:35 1: Calling /usr/bin/perl ./contrib/commandref_modular.pl, this may take a while
2025.09.03 13:03:36 1:
2025.09.03 13:03:36 1: update finished, "shutdown restart" is needed to activate the changes.
2025.09.03 13:03:36 1:
2025.09.03 13:03:36 1: Please consider using the global attribute sendStatistics
2025.09.03 13:04:48 0: Server shutdown

betateilchen

Zitat von: Olli7766 am 03 September 2025, 14:04:59Ich habe jetzt ein "Update" im FHEM laufen lassen aber vermissen das Modul MQTT?!

Zum 27.345. Mal:

  • Das reguläre FHEM Update wird einmal pro Tag morgens um etwa 07:45 Uhr bereitgestellt.
  • Alle Änderungen, die heute veröffentlicht werden, sind also MORGEN im Update verfügbar.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

Hallo Rudolf,

die Änderung hat Nebenwirkungen. Bei mir werden jetzt ständig neue Geräte angelegt, obwohl die Topics bereits von einem MQTT2_DEVICE "abonniert" wurden.

Zu einem jetzt willkürlich ausgesuchten bereits vorhandenen Device:
defmod MQTT2_Sensorkrake MQTT2_DEVICE DVES_016D18C
attr MQTT2_Sensorkrake IODev MQTT2_Server
attr MQTT2_Sensorkrake comment D2 GPIO4 DS18B20\
D5 GPIO14 IRsend\
D4 GPIO2 IRRecv\
\
RESULT = {"Time":"2020-02-29T18:49:40","IrReceived":{"Protocol":"UNKNOWN","Bits":3,"Hash":"0x25AE7EE0"}}\
\
SetOption38 6..255 = set IRReceive protocol detection sensitivity minimizing UNKNOWN protocols\
\
SetOption29 IR received data format\
0 = hex (default)\
1 = decimals\
https://github.com/arendst/Tasmota/issues/2116#issuecomment-440716483\

attr MQTT2_Sensorkrake devStateIcon {my $onl = ReadingsVal($name,"LWT","0") eq "Online"?"10px-kreis-gruen":"10px-kreis-rot";;;;my $lamp = ReadingsVal($name,"state","off");;;;"<a href=\"http://".ReadingsVal($name,"IPAddress","none")." \"target=\"_blank\">".FW_makeImage($onl)."</a> <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($lamp)."</a>"}
attr MQTT2_Sensorkrake event-on-change-reading temperature
attr MQTT2_Sensorkrake group Tasmota,Temperaturen Vorderhaus
attr MQTT2_Sensorkrake jsonMap DS18B20_Temperature:temperature
attr MQTT2_Sensorkrake readingList tele/sensorkrake/LWT:.* LWT\
tele/sensorkrake/INFO.:.* { json2nameValue($EVENT) }\
tele/sensorkrake/STATE:.* { json2nameValue($EVENT) }\
tele/sensorkrake/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }\
tele/sensorkrake/UPTIME:.* { json2nameValue($EVENT) }\
tele/sensorkrake/RESULT:.* RESULT\
tele/sensorkrake/RESULT:.* { $EVENT =~ m,..IrReceived....Protocol...([A-Za-z0-9]+)...Bits..([\d]+)..Data...([A-Za-z0-9]+)..., ? {"$1_$2"=>$3} : json2nameValue($EVENT) }\
stat/sensorkrake/RESULT:.* { json2nameValue($EVENT) }
attr MQTT2_Sensorkrake room Ebus,MQTT2_DEVICE
attr MQTT2_Sensorkrake setList power:noArg   cmnd/sensorkrake/IRSend {"protocol": "NEC","bits": 32, "data": 551489775,"Repeat": 2}\
MIN:noArg   cmnd/sensorkrake/IRSend {"Protocol":"NEC","Bits":32,"Data":"0x20DF807F"}
attr MQTT2_Sensorkrake stateFormat NEC_32<br>temperature
attr MQTT2_Sensorkrake timestamp-on-change-reading temperature

setstate MQTT2_Sensorkrake NEC_32<br>23.6
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 DS18B20_Id 0416730E23FF
setstate MQTT2_Sensorkrake 2024-11-08 16:14:41 DS18B20_Temperature 19.8
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 Heap 27
setstate MQTT2_Sensorkrake 2025-09-01 12:53:59 IODev MQTT2_Server
setstate MQTT2_Sensorkrake 2025-06-17 03:05:17 Info1_FallbackTopic cmnd/DVES_16D18C_fb/
setstate MQTT2_Sensorkrake 2025-06-17 03:05:17 Info1_GroupTopic cmnd/tasmotas/
setstate MQTT2_Sensorkrake 2025-06-17 03:05:17 Info1_Module Generic
setstate MQTT2_Sensorkrake 2025-06-17 03:05:17 Info1_Version 10.0.0(tasmota)
setstate MQTT2_Sensorkrake 2025-06-17 03:05:17 Info2_Hostname sensorkrake-4492
setstate MQTT2_Sensorkrake 2025-06-17 03:05:17 Info2_IPAddress 192.168.188.157
setstate MQTT2_Sensorkrake 2025-06-17 03:05:17 Info2_WebServerMode Admin
setstate MQTT2_Sensorkrake 2025-06-17 03:05:17 Info3_RestartReason External System
setstate MQTT2_Sensorkrake 2025-09-03 14:15:04 IrReceived_Bits 18
setstate MQTT2_Sensorkrake 2025-09-03 14:15:04 IrReceived_Hash 0x2DEB5766
setstate MQTT2_Sensorkrake 2025-09-03 14:15:04 IrReceived_Protocol UNKNOWN
setstate MQTT2_Sensorkrake 2025-09-01 12:55:36 LWT Online
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 LoadAvg 19
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 MqttCount 36
setstate MQTT2_Sensorkrake 2025-09-03 14:15:04 RESULT {"Time":"2025-09-03T13:15:03","IrReceived":{"Protocol":"UNKNOWN","Bits":18,"Hash":"0x2DEB5766"}}
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 Sleep 50
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 SleepMode Dynamic
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 TempUnit C
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 Time 2025-09-03T13:15:11
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 Uptime 78T11:02:57
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 UptimeSec 6778977
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 Wifi_AP 1
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 Wifi_BSSId 02:EC:DA:FD:26:1A
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 Wifi_Channel 3
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 Wifi_Downtime 0T00:22:42
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 Wifi_LinkCount 10
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 Wifi_Mode 11n
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 Wifi_RSSI 56
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 Wifi_SSId FBF
setstate MQTT2_Sensorkrake 2025-09-03 14:15:12 Wifi_Signal -72
setstate MQTT2_Sensorkrake 2025-09-03 10:51:12 temperature 23.6

wird jetzt zusätzlich angelegt:
defmod sensorkrake MQTT2_DEVICE sensorkrake
attr sensorkrake readingList tele/sensorkrake/STATE:.* { json2nameValue($EVENT) }\
tele/sensorkrake/SENSOR:.* { json2nameValue($EVENT) }\
tele/sensorkrake/RESULT:.* { json2nameValue($EVENT) }
attr sensorkrake room MQTT2_DEVICE

setstate sensorkrake 2025-09-03 14:33:12 DS18B20_Id 0416730E23FF
setstate sensorkrake 2025-09-03 14:33:12 DS18B20_Temperature 23.7
setstate sensorkrake 2025-09-03 14:33:12 Heap 27
setstate sensorkrake 2025-09-03 14:27:12 IODev MQTT2_Server
setstate sensorkrake 2025-09-03 14:31:44 IrReceived_Bits 20
setstate sensorkrake 2025-09-03 14:31:44 IrReceived_Hash 0xE0EB56A0
setstate sensorkrake 2025-09-03 14:31:44 IrReceived_Protocol UNKNOWN
setstate sensorkrake 2025-09-03 14:33:12 LoadAvg 19
setstate sensorkrake 2025-09-03 14:33:12 MqttCount 36
setstate sensorkrake 2025-09-03 14:33:12 Sleep 50
setstate sensorkrake 2025-09-03 14:33:12 SleepMode Dynamic
setstate sensorkrake 2025-09-03 14:33:12 TempUnit C
setstate sensorkrake 2025-09-03 14:33:12 Time 2025-09-03T13:33:11
setstate sensorkrake 2025-09-03 14:33:12 Uptime 78T11:20:57
setstate sensorkrake 2025-09-03 14:33:12 UptimeSec 6780057
setstate sensorkrake 2025-09-03 14:33:12 Wifi_AP 1
setstate sensorkrake 2025-09-03 14:33:12 Wifi_BSSId 02:EC:DA:FD:26:1A
setstate sensorkrake 2025-09-03 14:33:12 Wifi_Channel 3
setstate sensorkrake 2025-09-03 14:33:12 Wifi_Downtime 0T00:22:42
setstate sensorkrake 2025-09-03 14:33:12 Wifi_LinkCount 10
setstate sensorkrake 2025-09-03 14:33:12 Wifi_Mode 11n
setstate sensorkrake 2025-09-03 14:33:12 Wifi_RSSI 54
setstate sensorkrake 2025-09-03 14:33:12 Wifi_SSId FBF
setstate sensorkrake 2025-09-03 14:33:12 Wifi_Signal -73
setstate sensorkrake 2025-09-03 14:31:44 associatedWith MQTT2_Owntracks_Bridge

Es ist nicht nur einmalig, wenn ich das neue Device lösche, wird es wieder angelegt wenn das Device was schickt.

TomLee

Kommando zurück, sry.

Ich dachte ich kann mir mit
{ Svn_GetFile("FHEM/10_MQTT2_DEVICE.pm", "FHEM/10_MQTT2_DEVICE.pm", sub(){ CommandReload(undef, "10_MQTT2_DEVICE.pm") }) }die Änderungen holen. Offensichtlich reicht da ein reload nicht.
Nach einem restart von FHEM ist das oben gezeigte Verhalten weg.

rudolfkoenig

ZitatDas setze ich hiermit mal auf den Weihnachtswunschzettel 2025 :)
Habs auch da eingebaut.

betateilchen

Zitat von: rudolfkoenig am 03 September 2025, 15:53:06Habs auch da eingebaut.

Ja, ist denn schon Weihnachten?
Super, dankeschön!

Endlich kann ich die Verarbeitung meiner gesamten Homematic Fernbedienungen vereinfachen.
Jetzt reicht ein einziges notify für sämtliche buttons aller Fernbedienungen,
deren Name so aussieht HM_RC_8_MEQ0600631_4 :

defmod n_HM_RC_8 notify HM_RC_8_(.EQ.*)_(\d):PRESS_(SHORT|LONG):.pressed {myRemote2($MATCHED[0],$MATCHED[1],lc($MATCHED[2]))}

sub myRemote2($$$){
  my ($dev,$button,$evt) = @_;
  Debug "d:$dev b:$button e:$evt";
}

2025.09.04 09:11:27 1: DEBUG>d:MEQ0600631 b:4 e:short

Ein Träumchen :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Olli7766

Update habe ich gemacht, aber er kennt $MATCHED nicht...........

FHEM/(.*)/cmnd/settemp:.*  { "settemp" => $EVENT, "device" => $MATCHED[0] }

Global symbol "@MATCHED" requires explicit package name (did you forget to declare "my @MATCHED"?) at (eval 2420) line 1.

TomLee

Was gibt in der Kommandozeile ausgeführt
Zitatversion 10_MQTT2_DEVICE
zurück?

Olli7766

Zitat von: TomLee am 04 September 2025, 12:17:19Was gibt in der Kommandozeile ausgeführt
Zitatversion 10_MQTT2_DEVICE
zurück?

File               Rev   Last Change

10_MQTT2_DEVICE.pm 30247 2025-09-03 10:35:29Z rudolfkoenig

f18.js                     29347 2024-11-16 10:08:45Z rudolfkoenig
fhemweb.js                 29073 2024-08-16 16:33:42Z rudolfkoenig

TomLee

Ok, muss gestehen das ich mich gestern gar nicht weiter mit beschäftigt habe.

Bei mir kommt die gleiche Meldung, wenn ich das Attribut setzen will.