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?
$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}}
$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] }
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 :)
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
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.
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.
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.
ZitatDas setze ich hiermit mal auf den Weihnachtswunschzettel 2025 :)
Habs auch da eingebaut.
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 :)
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.
Was gibt in der Kommandozeile ausgeführt
Zitatversion 10_MQTT2_DEVICE
zurück?
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
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.
ZitatBei mir kommt die gleiche Meldung, wenn ich das Attribut setzen will.
Tut mir Leid, die Pruefung beim Aendern bzw. Anlegen im Frontend habe ich uebersehen.
Das habe ich jetzt nachgeholt.
Habs getestet und funzt.
@Olli7766
Wenn Du nicht bis Morgen warten möchtest:
Gib in der Kommandozeile ein:
{ Svn_GetFile("FHEM/10_MQTT2_DEVICE.pm", "FHEM/10_MQTT2_DEVICE.pm") }
und mach danach ein restart von FHEM.