Shelly templates: unterschiedliche Readings in den Modellen (z.B. ip, mac)

Begonnen von gestein, 15 Dezember 2020, 23:32:51

Vorheriges Thema - Nächstes Thema

gestein

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

TomLee

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

gestein

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

TomLee

Wsl.

Zeig doch aber einfach ein List von dem Device (oder Raw Definition) das man das selbst korrekt nachvollziehen kann.

gestein

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

TomLee

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.

gestein

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

TomLee

Wenn du das light_0.* aus event-on-change-reading rausnimmst / treffender definierst, könnt ich mir noch vorstellen ?


Quatsch

TomLee

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

Prof. Dr. Peter Henning

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