devStateIcon aus readings von anderem Device

Begonnen von morrpheus, 05 Oktober 2025, 00:27:22

Vorheriges Thema - Nächstes Thema

morrpheus

Moin Moin.
Ich brauche mal Hilfe.
Ich habe an meinem Garagentor einen Shelly 1 Gen 3 verbaut. Zusätzlich ein Shelly Addon mit Magnetschalter um die Position zu erfassen.
Ich habe bei Geräte in fhem eingebunden. Den Shelly übers entsprechende Modul und das Addon per MQTT.

Einmal das Addon:
defmod Torsensor MQTT2_DEVICE shelly1g3
attr Torsensor devStateIcon {my $onl = ReadingsVal($name,'online','false') eq 'false'?'10px-kreis-rot':'10px-kreis-gruen';; $onl = FW_makeImage($onl);; my $light = FW_makeImage(ReadingsVal($name,'state','off'));; my $temp = ReadingsVal($name,'temperature','-100');; my $ip = ReadingsVal($name,'ip','none');; my $reb = ReadingsVal($name,'sys_restart_required','false') eq 'true'?'<a href="/fhem?cmd.dummy=set '.$name.' x_reboot&XHR=1"> ... Notwendigen Reboot durchführen</a>':'';; qq(<a href="http://$ip" target="_blank">${onl}</a><a href="/fhem?cmd.dummy=set $name toggle&XHR=1">${light}</a>$reb<div>Temp: $temp °C</div>)}
attr Torsensor devicetopic Torsensor
attr Torsensor genericDeviceType switch
attr Torsensor getList in_mode:noArg in_mode $DEVICETOPIC/rpc {"id": 1,"src":"$DEVICETOPIC", "method": "Switch.GetConfig", "params": {"id": 0}}
attr Torsensor icon message_socket
attr Torsensor jsonMap switch_state:state switch_temperature_tC:temperature switch_temperature_tF:0 params_wifi_sta_ip:ip params_switch_0_temperature_tC:temperature params_switch_0_temperature_tF:0 req_result_in_mode:in_mode
attr Torsensor model shellyPlus_1
attr Torsensor readingList $DEVICETOPIC/online:.* online\
  $DEVICETOPIC/events/rpc:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  $DEVICETOPIC/status/mqtt:.* { json2nameValue($EVENT, 'mqtt_', $JSONMAP) }\
  $DEVICETOPIC/status/sys:.* { json2nameValue($EVENT, 'sys_', $JSONMAP) }\
  $DEVICETOPIC/status/switch_0:.* { $EVENT =~ s/"output":true/"state":"on"/g;; $EVENT =~ s/"output":false/"state":"off"/g;; json2nameValue($EVENT, 'switch_', $JSONMAP) }\
  $DEVICETOPIC/status/cloud:.* {}\
  $DEVICETOPIC/rpc:.* { json2nameValue($EVENT, 'req_', $JSONMAP, 'in_mode')}\
  $DEVICETOPIC/status/input_0:.* { json2nameValue($EVENT, 'input_', $JSONMAP) }\
  fhem2shelly/rpc:.* {}\
shelly1g3:shelly1g3-28372f2a9320/events/rpc:.* { json2nameValue($EVENT, 'rpc_', $JSONMAP) }\
shelly1g3:shelly1g3-28372f2a9320/online:.* online
attr Torsensor room MQTT2_DEVICE
attr Torsensor setList toggle:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Toggle","params": {"id":0}}\
  off:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":false}}\
  on:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":true}}\
  on-for-timer $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":true,"toggle_after":$EVTPART1}}\
  off-for-timer $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":false,"toggle_after":$EVTPART1}}\
  in_mode:toggle,flip,detached {fhem("sleep 0.2;; get $NAME in_mode");; my $val = $EVTPART1 ne 'toggle' ? $EVTPART1 : ReadingsVal($NAME,'in_mode','flip') eq 'flip' ? 'detached':'flip';; qq($DEVICETOPIC/rpc {"id":1,"src":"fhem2shelly","method":"Switch.SetConfig","params": {"id":0, "config": {"in_mode": "$val"}}})}\
  x_update:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Shelly.Update","params": {"stage":"stable"}}\
  x_reboot:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Shelly.Reboot"}\
  x_eco:true,false $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Sys.SetConfig","params": {"config": {"device": {"eco_mode": $EVTPART1}}}}
attr Torsensor setStateList on off toggle on-for-timer off-for-timer
attr Torsensor webCmd :

setstate Torsensor 2025-10-04 17:44:09 IODev MQTT2Server
setstate Torsensor 2025-10-04 17:44:39 attrTemplateVersion 20220304
setstate Torsensor 2025-10-04 17:47:38 online true
setstate Torsensor 2025-10-04 23:58:04 rpc_dst shelly1g3-28372f2a9320/events
setstate Torsensor 2025-10-04 23:58:04 rpc_method NotifyStatus
setstate Torsensor 2025-10-04 20:13:23 rpc_params_input_100_state false
setstate Torsensor 2025-10-04 17:47:38 rpc_params_mqtt_connected true
setstate Torsensor 2025-10-04 20:13:02 rpc_params_switch_0_output false
setstate Torsensor 2025-10-04 20:13:02 rpc_params_switch_0_source timer
setstate Torsensor 2025-10-04 20:13:01 rpc_params_switch_0_timer_duration 1.00
setstate Torsensor 2025-10-04 20:13:01 rpc_params_switch_0_timer_started_at 1759601581.80
setstate Torsensor 2025-10-04 23:58:04 rpc_params_sys_last_sync_ts 1759615084
setstate Torsensor 2025-10-04 23:58:04 rpc_params_sys_time 23:58
setstate Torsensor 2025-10-04 23:58:04 rpc_params_sys_unixtime 1759615084
setstate Torsensor 2025-10-04 23:58:04 rpc_params_ts 1759615084.70
setstate Torsensor 2025-10-04 23:58:04 rpc_src shelly1g3-28372f2a9320
setstate Torsensor 2025-10-04 17:44:39 x_reboot set


Und einmal der Shelly

defmod Tor Shelly 192.168.178.166
attr Tor icon fts_garage
attr Tor model shellypro1
attr Tor room 2.0 aussen

setstate Tor off
setstate Tor 2025-10-04 16:54:24 addon sensor
setstate Tor 2025-10-04 16:54:24 cloud enabled(connected)
setstate Tor 2025-10-04 16:54:24 firmware v1.7.1
setstate Tor 2025-10-04 16:54:24 input_0 unknown
setstate Tor 2025-10-04 16:54:24 input_0_mode button straight momentary
setstate Tor 2025-10-05 00:00:29 inttemp 37.2
setstate Tor 2025-10-04 16:54:24 network <html>connected to <a href="http://192.168.178.166">192.168.178.166</a> (Wifi)</html>
setstate Tor 2025-10-04 16:43:31 network_disconnects 1
setstate Tor 2025-10-04 23:54:15 network_rssi -58
setstate Tor 2025-10-04 16:54:24 network_ssid Speed!Box
setstate Tor 2025-10-04 16:58:25 network_threshold -80
setstate Tor 2025-10-04 16:54:15 relay off
setstate Tor 2025-10-04 17:46:10 source timer
setstate Tor 2025-10-04 16:54:15 state off
setstate Tor 2025-10-04 16:54:04 webhook_cnt 0
setstate Tor 2025-10-04 16:54:04 webhook_ver 0



Das Reading vom Magnetkontakt ist "rpc_params_input_100_state false" oder eben true.
Ich hätte gerne je nachdem als devStateIcon vom Shelly die icons fts_garage_door_10 und fts_garage_door_100.

Wie bekomme ich das am besten hin?

betateilchen

Das Attribut devStateIcon unterstützt perl-Code. Du kannst darin also einfach eine Abfrage auf das reading einbauen und den gewünschten Icon-Namen zurückgeben.

Also zum Beispiel so:

{(ReadingsVal("$name",'rpc_params_input_100','false') eq 'true')?'fts_garage_door_100':'fts_garage_door_10'}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

morrpheus

Danke erstmal.
Ich habs jetzt allerdings über ein userreading gelöst.

defmod Tor Shelly 192.168.178.166
attr Tor devStateIcon false:fts_garage_door_100@green true:fts_garage_door_10@red
attr Tor icon fts_garage
attr Tor model shellypro1
attr Tor room 2.0 aussen
attr Tor userReadings state {ReadingsVal("Torsensor","rpc_params_input_100_state","false")}

setstate Tor false
setstate Tor 2025-10-04 16:54:24 addon sensor
setstate Tor 2025-10-04 16:54:24 cloud enabled(connected)
setstate Tor 2025-10-04 16:54:24 firmware v1.7.1
setstate Tor 2025-10-04 16:54:24 input_0 unknown
setstate Tor 2025-10-04 16:54:24 input_0_mode button straight momentary
setstate Tor 2025-10-05 11:53:37 inttemp 37.9
setstate Tor 2025-10-05 03:48:38 network <html>connected to <a href="http://192.168.178.166">192.168.178.166</a> (Wifi)</html>
setstate Tor 2025-10-05 03:45:40 network_disconnects 2
setstate Tor 2025-10-05 11:57:44 network_rssi -58
setstate Tor 2025-10-04 16:54:24 network_ssid Speed!Box
setstate Tor 2025-10-04 16:58:25 network_threshold -80
setstate Tor 2025-10-05 11:36:06 relay off
setstate Tor 2025-10-05 11:36:06 source timer
setstate Tor 2025-10-05 11:58:38 state false
setstate Tor 2025-10-05 11:36:05 timer 1
setstate Tor 2025-10-04 16:54:04 webhook_cnt 0
setstate Tor 2025-10-04 16:54:04 webhook_ver 0

TomLee

#3
Hallo,
nur den Icon-Name zurückzugeben ist nur die halbe Miete. Bei devStateIcon in Perl muss HTML-Code zurückgegeben werden, nicht einfach nur der Name. Dafür sorgt die Funktion FW_makeImage(). Wie bei $onl in deinem bisher verwendeten Perl-Code in devStateIcon.

   
{my $garage=ReadingsVal('Torsensor','rpc_params_input_100_state','false') eq 'true'?'fts_garage_door_100':'fts_garage_door_10';; $garage = FW_makeImage($garage)}oder so:
{my $garage=FW_makeImage(ReadingsVal('Torsensor','rpc_params_input_100_state','false') eq 'true'?'fts_garage_door_100':'fts_garage_door_10')}

betateilchen

Ok, mit dem html Code hast Du natürlich recht, aber mein Codeschnipsel war nur ein nicht getesteter Vorschlag zur Prinzipbeschreibung.

Allerdings muss man es nicht so kompliziert machen, wie von Dir vorgeschlagen.

{FW_makeImage(ReadingsVal('Torsensor','rpc_params_input_100_state','false') eq 'true'?'fts_garage_door_100':'fts_garage_door_10')}
(auch ungetestet)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

MadMax-FHEM

Allerdings werden mWn die Statusänderungen nicht einfach angezeigt.
Also das Device Tor ist in FHEMWEB angezeigt.
Der Status von Torsensor ändert sich, wird aber doch erst nach einem Refresh beim Device Tor angezeigt, oder irre ich?

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

TomLee

Ja ::)  Lösungvorschlag: Den Shelly selbst auch via MQTT2 einbinden, dann hat man alles in einem Device.