Hallo,
ich habe etliche Shellys (1, 1pm, 2.5) die ich über MQTT in fhem einbinde.
Dazu verwende ich die gegebenen templates.
Bei den erwähnten Shellys gibt es bestimmte Readings: ip, mac
Diese gibt es aber bei den anderen Modellen (dimmer, bulb etc.) nicht.
in den Templates kann ich zu den Feldern aber auch nichts finden.
Bei den Modellen gibt es aber dafür z.B. info_mac, info_ip, announce_ip, announce_mac
Wie schaffe ich es in allen Shellys z.B. die Felder ip und mac zu haben?
Danke im Voraus
lg, Gerhard
Mit dem Attribut jsonMap.
Beispiel:
attr <devicename> jsonMap info_mac:mac info_ip:ip announce_ip:0
Aus info_mac wird mac, aus info_ip wird ip und announce_ip mit 0 in Zukunft gar nicht erst angelegt.
Einmal die betroffenen oder auch alle Readings löschen nach dem definieren des Attributs.
Gruß
Thomas
Hallo,
Danke. Verstehe.
Bei den Shelly Dimmern wird lt. template bereits eine jsonMap angelegt.
Darin steht: brightness:pct
Und bei den Dimmern steht die IP-Adresse im Feld "announce_ip" und im "info_wifi_sta_ip".
Die MAC-Adresse steht in den Feldern "announce_mac" und "info_mac".
Welche Felder sollte ich da zum Mappen nehmen?
Sollte es also bei den Dimmern richtigerweise heißen?
attr <devicename> jsonMap info_mac:mac info_wifi_sta_ip:ip announce_ip:0 brightness:pct
Danke
lg, Gerhard
Wsl.
Zeig doch aber einfach ein List von dem Device (oder Raw Definition) das man das selbst korrekt nachvollziehen kann.
Gerne.
lg, Gerhard
Internals:
CID shellydimmer2_D8BFC01A0128
DEF shellydimmer2_D8BFC01A0128
DEVICETOPIC MQTT2_shellydimmer2_D8BFC01A0128
FUUID 5f440a43-f33f-0b7a-5d87-db300077a9ba9f5a
FVERSION 10_MQTT2_DEVICE.pm:0.232990/2020-12-06
IODev MQTT2_FHEM_Server
LASTInputDev MQTT2_FHEM_Server
MQTT2_FHEM_Server_MSGCNT 47918
MQTT2_FHEM_Server_TIME 2020-12-16 13:43:40
MSGCNT 47918
NAME MQTT2_shellydimmer2_D8BFC01A0128
NR 1726
STATE off
TYPE MQTT2_DEVICE
JSONMAP:
brightness pct
READINGS:
2020-12-16 13:43:40 0_event
2020-12-16 13:43:40 0_event_cnt 0
2020-12-16 13:43:40 1_event
2020-12-16 13:43:40 1_event_cnt 0
2020-12-16 00:02:41 announce_fw_ver 20200904-094614/v1.8.4@699b08ac
2020-12-16 00:02:41 announce_id shellydimmer2-D8BFC01A0128
2020-12-16 00:02:41 announce_ip 192.168.0.98
2020-12-16 00:02:41 announce_mac D8BFC01A0128
2020-12-16 00:02:41 announce_model SHDM-2
2020-12-16 00:02:41 announce_new_fw true
2020-12-16 00:02:38 attrTemplateVersion 20200831
2020-12-16 13:43:40 has_timer false
2020-12-16 00:02:42 info_actions_stats_skipped 0
2020-12-16 00:02:42 info_calib_progress 0
2020-12-16 00:02:42 info_calib_status 0
2020-12-16 00:02:42 info_cfg_changed_cnt 0
2020-12-16 00:02:42 info_cloud_connected false
2020-12-16 00:02:42 info_cloud_enabled false
2020-12-16 00:02:42 info_debug 0
2020-12-16 00:02:42 info_fs_free 114958
2020-12-16 00:02:42 info_fs_size 233681
2020-12-16 00:02:42 info_has_update true
2020-12-16 00:02:42 info_inputs_1_event
2020-12-16 00:02:42 info_inputs_1_event_cnt 0
2020-12-16 00:02:42 info_inputs_1_input 0
2020-12-16 00:02:42 info_inputs_2_event
2020-12-16 00:02:42 info_inputs_2_event_cnt 0
2020-12-16 00:02:42 info_inputs_2_input 0
2020-12-16 00:02:42 info_lights_1_brightness 66
2020-12-16 00:02:42 info_lights_1_has_timer false
2020-12-16 00:02:42 info_lights_1_ison false
2020-12-16 00:02:42 info_lights_1_mode white
2020-12-16 00:02:42 info_lights_1_timer_duration 0
2020-12-16 00:02:42 info_lights_1_timer_remaining 0
2020-12-16 00:02:42 info_lights_1_timer_started 0
2020-12-16 00:02:42 info_loaderror 0
2020-12-16 00:02:42 info_mac D8BFC01A0128
2020-12-16 00:02:42 info_meters_1_counters_1 0.000
2020-12-16 00:02:42 info_meters_1_counters_2 0.000
2020-12-16 00:02:42 info_meters_1_counters_3 0.000
2020-12-16 00:02:42 info_meters_1_is_valid true
2020-12-16 00:02:42 info_meters_1_power 0.00
2020-12-16 00:02:42 info_meters_1_timestamp 1608076960
2020-12-16 00:02:42 info_meters_1_total 0
2020-12-16 00:02:42 info_mqtt_connected true
2020-12-16 00:02:42 info_overload false
2020-12-16 00:02:42 info_overtemperature false
2020-12-16 00:02:42 info_ram_free 37100
2020-12-16 00:02:42 info_ram_total 48816
2020-12-16 00:02:42 info_serial 959
2020-12-16 00:02:42 info_time 00:02
2020-12-16 00:02:42 info_tmp_is_valid true
2020-12-16 00:02:42 info_tmp_tC 52.30
2020-12-16 00:02:42 info_tmp_tF 126.14
2020-12-16 00:02:42 info_unixtime 1608076960
2020-12-16 00:02:42 info_update_beta_version 20201202-141422/v1.9.3-rc3@50c6ab57
2020-12-16 00:02:42 info_update_has_update true
2020-12-16 00:02:42 info_update_new_version 20201124-092706/v1.9.0@57ac4ad8
2020-12-16 00:02:42 info_update_old_version 20200904-094614/v1.8.4@699b08ac
2020-12-16 00:02:42 info_update_status pending
2020-12-16 00:02:42 info_uptime 57879
2020-12-16 00:02:42 info_wifi_sta_connected true
2020-12-16 00:02:42 info_wifi_sta_ip 192.168.0.98
2020-12-16 00:02:42 info_wifi_sta_rssi -62
2020-12-16 00:02:42 info_wifi_sta_ssid XX
2020-12-16 00:02:42 info_wire_mode 1
2020-12-16 13:43:40 input_0 0
2020-12-16 13:43:40 input_1 0
2020-12-16 13:43:40 ison false
2020-08-24 20:45:54 light_0 off
2020-12-16 13:43:40 light_0_energy 0
2020-12-16 13:43:40 light_0_power 0.00
2020-12-16 13:43:40 loaderror 0
2020-11-22 19:13:28 longpush_0 0
2020-12-11 19:12:06 longpush_1 0
2020-12-16 13:43:40 mode white
2020-12-16 00:02:40 online true
2020-12-16 13:43:40 overload 0
2020-12-16 13:43:40 overtemperature 0
2020-12-16 13:43:40 pct 66
2020-12-16 13:43:40 state off
2020-12-16 13:43:40 temperature 52.10
2020-12-16 13:43:40 temperature_f 125.78
2020-12-16 13:43:40 timer_duration 0
2020-12-16 13:43:40 timer_remaining 0
2020-12-16 13:43:40 timer_started 0
helper:
bm:
MQTT2_DEVICE_Attr:
cnt 14
dmx -1000
dtot 0
dtotcnt 0
mTS 16.12. 00:02:45
max 0.0249569416046143
tot 0.0780000686645508
mAr:
set
MQTT2_shellydimmer2_D8BFC01A0128
readingList
shellies/shellydimmer2-D8BFC01A0128/light/0/status:.* {json2nameValue($EVENT,'',$JSONMAP)}
shellies/shellydimmer2-D8BFC01A0128/light/0:.* state
shellies/shellydimmer2-D8BFC01A0128/light/0/power:.* light_0_power
shellies/shellydimmer2-D8BFC01A0128/light/0/energy:.* light_0_energy
shellies/shellydimmer2-D8BFC01A0128/temperature:.* temperature
shellies/shellydimmer2-D8BFC01A0128/temperature_f:.* temperature_f
shellies/shellydimmer2-D8BFC01A0128/online:.* online
shellies/shellydimmer2-D8BFC01A0128/overtemperature:.* overtemperature
shellies/shellydimmer2-D8BFC01A0128/overload:.* overload
shellies/shellydimmer2-D8BFC01A0128/loaderror:.* loaderror
shellies/announce:.* { $EVENT =~ m,..id...shellydimmer2-D8BFC01A0128...mac.*, ? json2nameValue($EVENT) : return }
shellydimmer2_D8BFC01A0128:shellies/shellydimmer2-D8BFC01A0128/announce:.* { json2nameValue($EVENT, 'announce_', $JSONMAP) }
shellydimmer2_D8BFC01A0128:shellies/shellydimmer2-D8BFC01A0128/info:.* { json2nameValue($EVENT, 'info_', $JSONMAP) }
shellydimmer2_D8BFC01A0128:shellies/shellydimmer2-D8BFC01A0128/input/0:.* input_0
shellydimmer2_D8BFC01A0128:shellies/shellydimmer2-D8BFC01A0128/input_event/0:.* { json2nameValue($EVENT, '0_', $JSONMAP) }
MQTT2_DEVICE_Get:
cnt 10
dmx -1000
dtot 0
dtotcnt 0
mTS 16.12. 10:01:37
max 0.000197887420654297
tot 0.00105094909667969
mAr:
HASH(0x98c8bc8)
MQTT2_shellydimmer2_D8BFC01A0128
?
MQTT2_DEVICE_Set:
cnt 109
dmx -1000
dtot 0
dtotcnt 0
mTS 16.12. 00:02:38
max 1.57964897155762
tot 1.67621612548828
mAr:
HASH(0x98c8bc8)
MQTT2_shellydimmer2_D8BFC01A0128
attrTemplate
shellydimmer
Attributes:
IODev MQTT2_FHEM_Server
alias BZ.Badewanne
devStateIcon {my $state = ReadingsVal($name,"state","off") eq "on"?"\@orange":"";; my $lderr = ReadingsVal($name,"loaderror","true") eq "true"?"10px-kreis-rot":"10px-kreis-gruen";; my $ison = ReadingsVal($name,"ison","false") eq "true"?"on":"off";; my $cons = ReadingsVal($name,"light_0_power","unknown");; my $dim=Color::devStateIcon($name,"dimmer",undef,"pct");; $dim =~ s/.*:([^:]+):.*/$1/;; if($dim eq "on") {$dim="dim100%";;} FW_makeImage($lderr)."<a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($dim.$state)."</a><div>Leistung: $cons</div>";}
event-min-interval .*:3600
event-on-change-reading light_0.*
group Badezimmer,Licht
icon light_control
jsonMap brightness:pct
model shellydimmer
readingList shellies/shellydimmer2-D8BFC01A0128/light/0/status:.* {json2nameValue($EVENT,'',$JSONMAP)}
shellies/shellydimmer2-D8BFC01A0128/light/0:.* state
shellies/shellydimmer2-D8BFC01A0128/light/0/power:.* light_0_power
shellies/shellydimmer2-D8BFC01A0128/light/0/energy:.* light_0_energy
shellies/shellydimmer2-D8BFC01A0128/temperature:.* temperature
shellies/shellydimmer2-D8BFC01A0128/temperature_f:.* temperature_f
shellies/shellydimmer2-D8BFC01A0128/online:.* online
shellies/shellydimmer2-D8BFC01A0128/overtemperature:.* overtemperature
shellies/shellydimmer2-D8BFC01A0128/overload:.* overload
shellies/shellydimmer2-D8BFC01A0128/loaderror:.* loaderror
shellies/announce:.* { $EVENT =~ m,..id...shellydimmer2-D8BFC01A0128...mac.*, ? json2nameValue($EVENT) : return }
shellydimmer2_D8BFC01A0128:shellies/shellydimmer2-D8BFC01A0128/announce:.* { json2nameValue($EVENT, 'announce_', $JSONMAP) }
shellydimmer2_D8BFC01A0128:shellies/shellydimmer2-D8BFC01A0128/info:.* { json2nameValue($EVENT, 'info_', $JSONMAP) }
shellydimmer2_D8BFC01A0128:shellies/shellydimmer2-D8BFC01A0128/input/0:.* input_0
shellydimmer2_D8BFC01A0128:shellies/shellydimmer2-D8BFC01A0128/input_event/0:.* { json2nameValue($EVENT, '0_', $JSONMAP) }
shellydimmer2_D8BFC01A0128:shellies/shellydimmer2-D8BFC01A0128/input/1:.* input_1
shellydimmer2_D8BFC01A0128:shellies/shellydimmer2-D8BFC01A0128/input_event/1:.* { json2nameValue($EVENT, '1_', $JSONMAP) }
room Badezimmer,Shelly
setList off:noArg shellies/shellydimmer2-D8BFC01A0128/light/0/command off
on:noArg shellies/shellydimmer2-D8BFC01A0128/light/0/command on
pct:slider,0,1,100 shellies/shellydimmer2-D8BFC01A0128/light/0/set {"turn": "on","brightness": $EVTPART1}
dimup:noArg { my $num=int((ReadingsNum($NAME,'pct',0)+4)/10)*10+10; return qq {shellies/shellydimmer2-D8BFC01A0128/light/0/set {"turn": "on", "brightness": $num}}; }
dimdown:noArg { my $num=int((ReadingsNum($NAME,'pct',0)+7)/10)*10-10; return qq {shellies/shellydimmer2-D8BFC01A0128/light/0/set {"turn": "on", "brightness": $num}}; }
x_mqttcom shellies/shellydimmer2-D8BFC01A0128/command $EVTPART1
webCmd pct:on:off
Denke spricht nichts dagegen, warum hast du es denn noch nicht ausprobiert ?
Du kannst nichts mit der Definition kaputtmachen, wenn sie falsch gewesen wäre hättest sie einfach wieder gelöscht.
Alle (oder die betroffenen Readings) dann gelöscht und den Shelly mal neu gestartet -> alles wieder wie zuvor.
Ok, Danke.
Hab's gerade so geändert.
Im Attribut "jsonMap" steht nun "info_mac:mac info_wifi_sta_ip:ip announce_ip:0 brightness:pct"
Wann werden denn die beiden neuen Readings angelegt?
Den Shelly habe ich schon ein-/ausgeschalten, aber die Readings erscheinen nicht.
lg, Gerhard
Wenn du das light_0.* aus event-on-change-reading rausnimmst / treffender definierst, könnt ich mir noch vorstellen ?
Quatsch
Also bei mir mit einem aktuellen System gar nicht, jsonMap greift nicht.
Bei meinen Geräten mit bisherigem gesetzten jsonMap ist alles OK.
Hab testweise ein update gemacht, ein willkürliches jsonMap gesetzt, den Shelly rebootet, das Ergebniss:
defmod MQTT2_shelly1_24CA1B MQTT2_DEVICE shelly1_24CA1B
attr MQTT2_shelly1_24CA1B IODev MQTT2_Server
attr MQTT2_shelly1_24CA1B alexaName fridolin
attr MQTT2_shelly1_24CA1B devStateIcon {my $onl = ReadingsVal($name,"online","false") eq "false" ? "rot" : ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen";; my $light = ReadingsVal($name,"state","off");; my $show = '<a href="';;$show .= $onl eq "gelb" ? "/fhem?cmd.dummy=set $name x_update&XHR=1\">" : "http://".ReadingsVal($name,"ip","none").' "target="_blank">';; $show .= FW_makeImage("10px-kreis-".$onl)."</a>";; "<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a></div>" }
attr MQTT2_shelly1_24CA1B event-on-change-reading state
attr MQTT2_shelly1_24CA1B genericDeviceType switch
attr MQTT2_shelly1_24CA1B jsonMap mac:maca
attr MQTT2_shelly1_24CA1B model shelly1
attr MQTT2_shelly1_24CA1B readingList shellies/shelly1-24CA1B/relay/0:.* state\
shellies/shelly1-24CA1B/relay/0:.* relay0\
shellies/shelly1-24CA1B/input/0:.* input0\
shellies/shelly1-24CA1B/online:.* online\
shellies/shelly1-24CA1B/announce:.* { json2nameValue($EVENT) }\
shellies/announce:.* { $EVENT =~ m,..id...shelly1-24CA1B...mac.*, ? json2nameValue($EVENT) : return }\
shelly1_24CA1B:shellies/shelly1-24CA1B/info:.* { json2nameValue($EVENT) }\
shelly1_24CA1B:shellies/shelly1-24CA1B/input_event/0:.* { json2nameValue($EVENT) }
attr MQTT2_shelly1_24CA1B room MQTT2_DEVICE
attr MQTT2_shelly1_24CA1B setList off:noArg shellies/shelly1-24CA1B/relay/0/command off\
on:noArg shellies/shelly1-24CA1B/relay/0/command on\
x_update:noArg shellies/shelly1-24CA1B/command update_fw\
x_mqttcom shellies/shelly1-24CA1B/command $EVTPART1
setstate MQTT2_shelly1_24CA1B off
setstate MQTT2_shelly1_24CA1B 2020-12-16 17:26:33 event
setstate MQTT2_shelly1_24CA1B 2020-12-16 17:26:33 event_cnt 0
setstate MQTT2_shelly1_24CA1B 2020-12-16 17:23:33 fw_ver 20201124-091217/v1.9.0@57ac4ad8
setstate MQTT2_shelly1_24CA1B 2020-12-16 17:23:33 id shelly1-24CA1B
setstate MQTT2_shelly1_24CA1B 2020-12-16 17:26:33 input0 0
setstate MQTT2_shelly1_24CA1B 2020-12-16 17:23:33 ip 192.168.188.46
setstate MQTT2_shelly1_24CA1B 2020-12-16 17:23:33 mac ECFABC24CA1B
setstate MQTT2_shelly1_24CA1B 2020-12-16 17:23:33 model SHSW-1
setstate MQTT2_shelly1_24CA1B 2020-12-16 17:23:33 new_fw false
setstate MQTT2_shelly1_24CA1B 2020-12-16 17:23:33 online true
setstate MQTT2_shelly1_24CA1B 2020-12-16 17:26:33 relay0 off
setstate MQTT2_shelly1_24CA1B 2020-12-16 17:26:33 state off
Bei mir greift jsonMap nicht wegen dem nicht gesetzten dritten Parameter $JSONMAP in json2nameValue
Wie schon an anderer Stelle bemerkt: Natürlich kann man alle paar Sekunden die MAC Adresse seines Shelly abfragen. Allerdings ist das so sinnfrei wie das tägliche Auslesen, ob Deutschland noch EU-Mitglied ist, aus der Webseite des Bundesaußenministeriums.
LG
pah