MQTT2+Shelly: erste Konfiguration und template-Entwicklung

Begonnen von miggun, 03 Dezember 2018, 21:05:34

Vorheriges Thema - Nächstes Thema

87insane

Das muss nicht zwangsläufig mit rein. Jemand der Alexa nutzt weiß das aber auch ... Steht alles im Wiki. Wenn du dieses Attribut weg lässt geht es immer noch.

Wichtig ist nur das Homebridgemapping und die setList OHNE on/off. Also es erfüllt alles :)

Die Perl Sache wird so oder so in Angriff genommen. Ich heule deswegen schon viel zu oft. Immer alles ergooglen bei den einfachsten Sachen macht auch keinen Spaß.

Beta-User

Zitat von: 87insane am 04 Mai 2019, 13:45:24
Ich heule deswegen schon viel zu oft. Immer alles ergooglen bei den einfachsten Sachen macht auch keinen Spaß.
Damit du die Suchmaschine deiner Wahl nicht kaputtmachen mußt... Versuch' mal das:attr sz_deckenlicht devStateIcon {my $onl = ReadingsVal($name,"online","false") eq "true"?"10px-kreis-gruen":"10px-kreis-rot";; my $light = ReadingsVal($name,"state","off") eq "on"?'light_pendant_light@green':'light_pendant_light';; my $cons = ReadingsVal($name,"relay_0_power","unknown");; my $temp = ReadingsVal($name,"temperature","-100");;\"<a href=\"http://".ReadingsVal($name,"ip","none")." \"target=\"_blank\">".FW_makeImage($onl)."</a><a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a><div>Verbrauch: $cons / Temp: $temp</div>"}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

87insane

Hey - Danke!

Hab es mal schnell rein geworfen. stateFormat und webcmd gelöscht.
Er zeigt nur noch das normale Lampen Symbol an. Kein Verbrauch, kein online/offline icon und schalten kann man über das Symbol auch nicht. Die Syntax meckert er so nicht an wobei mich beim überfliegen wundert (aber dafür hast du sicher einen Grund), dass einmal ein Icon Name in ' ist und einmal in ". Aber das zu ändern brachte auch nichts.
In STATE steht nur noch off (soll vermutlich auch so sein, wenn man das so macht).

Anbei mal ein Bild wie es dann aussieht. Interessant ist ja schon mal das du die Lampe gewählt hast, welche ich auch immer genommen hatte, da es ein Deckenlicht ist. Aber selbst das wandelt er so leider nicht um. Leider kann ich aktuell auch nicht viel testen. Diese Woche ist zu bis oben hin :(
Wenn ich am WE eine Sekunde Zeit habe, versuche ich mal mit deinem Code ein wenig zu spielen. Immerhin meckert er die Syntax nicht an.

Beta-User

Hmm, ich hatte deinen RAW-Code von neulich genommen, aber natürlich mit on/off in der setList. Sind die noch drin?

defmod sz_deckenlicht MQTT2_DEVICE shelly1pm_B1D951
attr sz_deckenlicht IODev MQTT2_FHEM_Server
attr sz_deckenlicht alias Schlafzimmer Deckenlicht
attr sz_deckenlicht autocreate 1
attr sz_deckenlicht devStateIcon {my $onl = ReadingsVal($name,"online","false") eq "true"?"10px-kreis-gruen":"10px-kreis-rot";; my $light = ReadingsVal($name,"state","off") eq "on"?'light_pendant_light@green':'light_pendant_light';; my $cons = ReadingsVal($name,"relay_0_power","unknown");; my $temp = ReadingsVal($name,"temperature","-100");;\
"<a href=\"http://".ReadingsVal($name,"ip","none")." \"target=\"_blank\">".FW_makeImage($onl)."</a><a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a><div>Verbrauch: $cons / Temp: $temp °C</div>"}
attr sz_deckenlicht event-on-change-reading .*
attr sz_deckenlicht model A_10b_shelly1pm
attr sz_deckenlicht readingList shellies/shelly1pm-B1D951/relay/0:.* state\
  shellies/shelly1pm-B1D951/relay/0:.* relay0\
  shellies/shelly1pm-B1D951/input/0:.* input0\
  shellies/shelly1pm-B1D951/online:.* online\
  shellies/shelly1pm-B1D951/announce:.* { json2nameValue($EVENT) }\
  shellies/shelly1pm-B1D951/relay/0/power:.* relay_0_power\
  shellies/shelly1pm-B1D951/temperature:.* temperature\
  shellies/shelly1pm-B1D951/overtemperature:.* overtemperature\
  shellies/shelly1pm-B1D951/relay/0/energy:.* relay_0_energy\
  shellies/shelly1pm-B1D951/longpush/0:.* longpush_0\
  shellies/announce:.* { json2nameValue($EVENT) }
attr sz_deckenlicht room Alexa,MQTT,Schlafzimmer
attr sz_deckenlicht setList relay0:on,off,toggle shellies/shelly1pm-B1D951/relay/0/command $EVTPART1\
  off:noArg shellies/shelly1pm-B1D951/relay/0/command off\
  on:noArg shellies/shelly1pm-B1D951/relay/0/command on\
online shellies/shelly1pm-B1D951/relay/n/command $EVTPART1
attr sz_deckenlicht webCmd :

setstate sz_deckenlicht off
setstate sz_deckenlicht 2019-05-02 11:32:16 fw_ver 20190423-080637/v1.4.9-switch1pm-hotfix4@f8c51629
setstate sz_deckenlicht 2019-05-02 11:32:16 id shelly1pm-B1D951
setstate sz_deckenlicht 2019-05-02 11:34:49 input0 0
setstate sz_deckenlicht 2019-05-02 11:32:16 ip 192.168.20.53
setstate sz_deckenlicht 2019-05-02 11:32:16 mac 840D8EB1D951
setstate sz_deckenlicht 2019-05-02 11:32:16 new_fw false
setstate sz_deckenlicht 2019-05-02 11:53:53 online false
setstate sz_deckenlicht 2019-05-02 11:34:49 overtemperature 0
setstate sz_deckenlicht 2019-05-02 11:34:49 relay0 off
setstate sz_deckenlicht 2019-05-02 11:34:19 relay_0_energy 6
setstate sz_deckenlicht 2019-05-02 11:34:49 relay_0_power 0.00
setstate sz_deckenlicht 2019-05-08 15:15:58 state off
setstate sz_deckenlicht 2019-05-02 11:34:49 temperature 32.26

Das mit den Hochkommatas solltest du nochmal nachlesen... Das mit den einfachen war nur, um zu verhindern, dass _evtl._ wg. des "@" Perl-seitig gemeckert wird...

Das mit dem Symbol hätte ich für das template noch geändert, war nur zu Demo-Zwecken...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

87insane

setList hatte ich so gelassen und einfach auf mein relay0+on/off angepasst.
Das mit dem Lampen-Symbol ist zum testen ja sogar gut um zu wissen ob er es machen würde oder nicht.

Gemeckert wird da nur mit " anstelle von '. Also alles richtig von dir :) Er müsste aber ja zumindest irgendwas anzeigen. Anstelle dessen eben nur ein off/on und daraus resultierend die Lampe. Nur mal eben was rein kopieren und ein Ergebnis mitteilen kann ich natürlich immer mal nebenbei.

Wenn in devStateIcon ein Perl Code gepackt wird und dieser nur "halb" geht aber die Syntax nicht bemängelt wird, dann sollte ich mit der Aussage "Er müsste aber ja zumindest irgendwas anzeigen" richtig liegen. Wenn dem nicht so ist, bitte hier kurz eine Info. Damit ich diesen Test korrekt für dich/alle die davon profitieren durchführen kann, sind solche Infos natürlich wichtig.  Hatte bisher keinen Perl-Code in devStateIcon benötigt und weiß es deswegen nicht. Bitte nicht falsch verstehen....

Beta-User

Die RAW-Def hatte ich - allerdings ohne Hardware... - getestet, das hat soweit was sinnvolles angezeigt. Also Vorschlag: mach erst mal die setList wieder komplett.

Alternative: du paßt das für die Relay-Anweisung an (wenn du weißt, wie ;) ).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

87insane

Mit einem "fast" fertigen Code kann ich eigentlich viel. Ich meine wenn er schon da steht muss man nur lesen, verstehen, testen.

Ich hoffe ich verstehe die fhem Abhängigkeit mit dem Perl in Devstateicon. Nicht das ich das was falsch machte.
Stateformat gelöscht, webcmd (einfach mal mit) gelöscht. Und wie ich den code verstehe, sollte er alles machen. Kann leider heute nicht mehr testen aber das schaffe ich ggf irgendwie morgen. Geht ja schneller als dieser Beitrag am handy hier.

Das ich das umgestellt hatte, schrieb ich aber oben. Also zu deiner alternative. Mache aber mal ne Copy und mache es in der einfach komplett neu. Dann ist der Test auch zu 100% und nicht halb meins und halb deins usw.

Melde mich....

87insane

#322
Moin moin....

So ist es perfekt. Du hattest nur ein \ zu viel drin. Habe es den anderen Schaltern vom Abstand her angepasst (On/Offline Icon zu Lampe zu Text.). Also nur kleine Dinge geändert.
Untereinander, muss ich leider gestehen ist doof. Hab es wieder nebeneinander gemacht. Finde ich um Längen besser.

# shelly1pm using original firmware.
name:A_10b_shelly1pm
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*shellies.*
par:DEVNAME;Shelly1 name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,shellies/([^/]*)/, ? $1 : undef }
attr DEVICE setList\
  relay0:on,off,toggle shellies/DEVNAME/relay/0/command $EVTPART1\
  off:noArg shellies/DEVNAME/relay/0/command off\
  on:noArg shellies/DEVNAME/relay/0/command on
attr DEVICE readingList \
  shellies/DEVNAME/relay/0:.* state\
  shellies/DEVNAME/relay/0:.* relay0\
  shellies/DEVNAME/input/0:.* input0\
  shellies/DEVNAME/online:.* online\
  shellies/DEVNAME/announce:.* { json2nameValue($EVENT) }\
  shellies/DEVNAME/relay/0/power:.* relay_0_power\
  shellies/DEVNAME/temperature:.* temperature\
  shellies/DEVNAME/overtemperature:.* overtemperature\
  shellies/DEVNAME/relay/0/energy:.* relay_0_energy\
  shellies/DEVNAME/longpush/0:.* longpush_0
attr DEVICE devStateIcon {my $onl = ReadingsVal($name,"online","false") eq "true"?"10px-kreis-gruen":"10px-kreis-rot";; my $light = ReadingsVal($name,"state","off") eq "on"?'light_pendant_light@green':'light_pendant_light';; my $cons = ReadingsVal($name,"relay_0_power","unknown");; my $temp = ReadingsVal($name,"temperature","-100");;"<div><a href=\"http://".ReadingsVal($name,"ip","none")." \"target=\"_blank\">".FW_makeImage($onl)."</a> <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a> Aktuell: $cons W / Temperatur: $temp °C</div>"}
attr DEVICE webCmd :
deletereading -q DEVICE (?!associatedWith).*
attr DEVICE model A_10b_shelly1pm


Das hier hast du gepostet (hinter dem folgendem Teil ist das \ zu viel ...ReadingsVal($name,"temperature","-100");;):
attr sz_deckenlicht devStateIcon {my $onl = ReadingsVal($name,"online","false") eq "true"?"10px-kreis-gruen":"10px-kreis-rot";; my $light = ReadingsVal($name,"state","off") eq "on"?'light_pendant_light@green':'light_pendant_light';; my $cons = ReadingsVal($name,"relay_0_power","unknown");; my $temp = ReadingsVal($name,"temperature","-100");;
\"<a href=\"http://".readingsval($name,"ip","none")." \"target=\"_blank\">".FW_makeImage($onl)."</a><a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a><div>Verbrauch: $cons / Temp: $temp</div>"}

Danke an der Stelle, dass du den Code gepostet hast :)
Anbei ein Bild für die Nachwelt.

87insane

@All / Beta-User: Habe bei mir in allen Shellys folgendes in setList hinzugefügt:
update:noArg shellies/DEVNAME/command update_fw

So kann man beim Vorhandensein einer neuen FW über FHEM den Befehl an den Shelly senden.
Quelle: https://shelly-api-docs.shelly.cloud/#mqtt-configuration

Man könnte nun sogar wenn das Reading new_fw true anzeigt eine Art autoupdate=1 setzen. Das habe ich aus verschiedenen Gründen nicht gemacht - aber es ginge (in FHEM).

Was sagt ihr dazu? Würde das in zukünftige Templates mit aufnehmen.
Anbei ein Bild. Nicht wundern, da steht natürlich aktuell new_fw = false.

TomLee

Hallo,

klar muss das mit in ein Template.
Hatte das letzte Woche auch auf der Seite gelesen und wunderte mich über pahs Bemerkung unter den Gegenargumenten zu MQTT  im Wiki, dacht mir dann aber kam sicher irgendwann die letzte Zeit mit einem update.

Ich wäre für eine Option autoupdate.

Gruß

Thomas

87insane

#325
Habe im Shelly Forum mal in der Wunschliste, die Funktion in der Firmware der Sehllys gewünscht.
Also ein AutoUpdate an/aus. In FHEM würde ich das manuell machen, wie ich oben schrieb. Wer mag kann sich das ja ganz einfach als notify basteln. Ich gehe davon aus, dass es so oder so bald in der neuen FW sein wird. Dort werden auch ON/OFF URLs unterstützt in Zukunft. So kann man z.B. sagen ShellyABC an und dann bitte auch immer ShellyXYZ mit an.

Hier ging es mir hauptsächlich darum, dass einige vermutlich kein AutoUpdate wollen (wie ich). Ich teste neue FWs erst immer auf einem Gerät.
Ein Update Button an sich, für manuelle Updates würde ich gerne mit aufnehmen und das könnte Beta-User bei gefallen einchecken :)

EDIT: Das ist schon längere Zeit drin. Solche Kommentare ignoriere ich aber gern, da ich nicht als Besserwisser dar stehen will. Gerne wird sowas ja falsch verstanden. Der Code für setList steht ja schon mal oben und kann so übernommen werden.

Beta-User

...ist ja gut, ihr bekommt den update-setter mit dem nächsten update der templates ::) ...

(einen Automatismus via template halte ich aber nicht für sinnvoll).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

87insane

Nicht direkt so störrisch :-P

Halte ich auch für überflüssig da dies in die FW gehört. Maximal noch ein an/aus setter....
Je nachdem wann du updatest, ich werde nachher den Shelly 2.5 verbauen und mit dem Template beginnen. Ich weiß nicht wie schnell ich sein werde aber ich würde versuchen ggf. schon was zu liefern am Abend.

Beta-User

Zitat von: 87insane am 15 Mai 2019, 12:42:34
Je nachdem wann du updatest, ich werde nachher den Shelly 2.5 verbauen und mit dem Template beginnen. Ich weiß nicht wie schnell ich sein werde aber ich würde versuchen ggf. schon was zu liefern am Abend.
Gerne; vermutlich kommt das von meiner Seite eher morgen früh. Ansonsten gibt es eben 2 updates...

(Und wenn es Diskussionsbedarf "geben sollte", wird's eh' später :P )
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

87insane

#329
Leider muss ich nachliefern. Hab es zu 95% fertig aber muss nun erstmal arbeiten ;)
Spiele noch mit der letzten Sache. Das Icon das bei laufendem Motor die Fahrtrichtung anzeigt ist in meinen Augen noch nicht so gut. Da ich aber keinen Müll (absichtlich) posten will, geht es nach der Arbeit weiter.

SORRY

@Beta-User: Wie soll das am Ende heißen? Oder korrigierst du dann selber? Hab aktuell nur einen blabla Namen.

EDIT:
Jetzt doch noch ganz schnell. Ist getestet aber nur sehr kurz.... Bei mir geht so alles. (0% = Rollo oben / 100% Rollo unten)
Was habe ich gemacht?
- Template an ROLLO Modul angepasst (Habe alle Rollos so).
- Man erkennt hoch / runter anhand des Icons
- PCT wird vom Rollo/Shelly auf den PCT Slider wiedergegeben und kann gesteuert werden
- Update Button für Shelly hinzugefügt
- Eigenen Button um selber noch andere Befehle ab zu setzen
- "Funktion" half hinzugefügt
- Grüner Punkt / Roter Punkt in STATE zeigt online/offline und ist klickbar. Man landet dann auf dem Webinterface vom Shelly


# shelly25 using original firmware in roller mode.
name:A_11z_shelly25_roller
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*shellies.*
desc:shelly25 using original firmware. <br>NOTE: shelly25 roller operated, change settings first!
par:DEVNAME;Shellyswitch25 name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,shellies/([^/]*)/, ? $1 : undef }
attr DEVICE comment shelly25 roller operated
attr DEVICE setList \
  open:noArg shellies/DEVNAME/roller/0/command open\
  close:noArg shellies/DEVNAME/roller/0/command close\
  half:noArg shellies/DEVNAME/roller/0/command/pos 50\
  stop:noArg shellies/DEVNAME/roller/0/command stop\
  pct:slider,0,1,100 shellies/DEVNAME/roller/0/command/pos $EVTPART1\
  x_recalibration:noArg shellies/DEVNAME/roller/0/command rc\
  x_update:noArg shellies/DEVNAME/command update_fw\
  x_mqttcom shellies/DEVNAME/command $EVTPART1
attr DEVICE readingList \
  shellies/DEVNAME/roller/0/pos:.* pct\
  shellies/DEVNAME/status/0/rollers:.* power\
  shellies/DEVNAME/online:.* online\
  shellies/DEVNAME/announce:.* { json2nameValue($EVENT) }\
  shellies/shellyswitch25-007FC8/roller/0:.* current\
  shellies/shellyswitch25-007FC8/roller/0:open {{'state' => 'opening'}}\
  shellies/shellyswitch25-007FC8/roller/0:close {{'state' => 'closing'}}\
  shellies/shellyswitch25-007FC8/roller/0/pos:.* state\
  shellies/shellyswitch25-007FC8/input/1:.* input1\
  shellies/shellyswitch25-007FC8/input/0:.* input0\
  shellies/shellyswitch25-007FC8/relay/power:.* power\
  shellies/shellyswitch25-007FC8/relay/energy:.* energy\
  shellies/shellyswitch25-007FC8/temperature:.* temperature\
  shellies/shellyswitch25-007FC8/overtemperature:.* overtemperature
attr DEVICE devStateIcon opening:fts_shutter_up@red closing:fts_shutter_down@red true:10px-kreis-gruen false:10px-kreis-rot 100:fts_shutter_100 0:fts_shutter_10 9\d.*:fts_shutter_90 8\d.*:fts_shutter_80 7\d.*:fts_shutter_70 6\d.*:fts_shutter_60 5\d.*:fts_shutter_50 4\d.*:fts_shutter_40 3\d.*:fts_shutter_30 2\d.*:fts_shutter_20 1\d.*:fts_shutter_10 \b\d\b.*:fts_shutter_10 set_.*:fts_shutter_updown
attr DEVICE cmdIcon open:fts_shutter_up close:fts_shutter_down stop:fts_shutter_manual half:fts_shutter_50
attr DEVICE webCmd :open:close:half:stop:pct
attr DEVICE stateFormat <a href="http://ip" target="_blank">\
online\
</a>\
state
deletereading -q DEVICE (?!associatedWith).*
attr DEVICE setStateList open close half stop pct
attr DEVICE model A_11z_shelly25_roller



Bitte Namen anpassen wenn du eincheckst.... Normal dürfte es hier nichts zu meckern geben... (Gucke nachher aber nochmal ob ich in der Eile nichts vergessen habe.)
Ist in diesem Fall eh zusammengewürfelt aus Tasmota Rollo Template / Shelly 2 Rollo Template und ein wenig eigenes + Anpassungen.