MQTT2+Shelly: erste Konfiguration und template-Entwicklung

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

Vorheriges Thema - Nächstes Thema

87insane

Mit den Werten ist Quark. Aber ich kann am handy nicht ausreichend testen um heraus zu finden warum das nun nicht mehr geht. Nach ein paar Tests die ich machte, denke ich das der string einfach geändert wurde?(Reihenfolge)

Leider haben die shellys keine Konsole wie zb tasmota. Sonst würde ich auf anderer Seite ja direkt sehen warum es nicht mehr klappt.

Will kein Mitleid aber kann leider noch nicht mehr als 5 sitzen nach der knie OP. Somit setze ich gerade auf euch, am pc :)

Gesendet von meinem LM-G810 mit Tapatalk


flummy1978

Moinsen,

habe Beta-Users Wunsch entsprochen und einen anderen Ausdruck getestet. Zusätzlich ist weiter unten eine (ergänzende) Möglichkeit aufgeführt....

Zitat von: Beta-User am 07 April 2020, 16:34:02
@flummy1978: Evtl. magst du den setter für den shelly nochmal kritisch beäugen, zwei Dinge sind mir noch unklar:
- gibt es nette Symbole, wenn man z.B. webCmd mit dimUp:dimDown ergänzt? (sonst müßte man das so umbenennen, dass FHEMWEB das automatisch richtig macht)
- Sind die "\" erforderlich oder nur "Hosenträger und Gürtel kombiniert" - ich meine eigentlich, das sollte ohne gehen bzw. (jüngst gelernt) mit einer "qq"-Anweisung einfacher:
dimUp:noArg { my $num=ReadingsNum($NAME,'pct',0)+10;; return qq{shellies/DEVNAME/light/0/set {"turn": "on", "brightness": $num}};; }
Funktioniert genau wie gewünscht und macht alles was es soll. Zusätzlich ist es etwas übersichtlicher vom Quellcode her. Hat aber Verbesserungspotential:

dimUp:noArg { my $num=ReadingsNum($NAME,'pct',0)+10; return qq {shellies/DEVNAME/light/0/set {"turn": "on", "brightness": $num}}; }
Das Leerzeichen sorgt dafür, dass in der Code Darstellung beim FHEM Web die { nicht in rot angezeigt  wird, weil sie angeblich "fehlt" -> Folglich noch schöner anzusehen und daher verständlicher
Der gesamte Befehl funktioniert auch ohne die ;; zu escapen. Sprich ein ; reicht.
Nachteil dieser Variante: Hat man mit einem Wert z.B.11-19 oder auch 22-27 angefangen, geht es über diese Funktion nie auf 100 und bleibt zwischen 90 und 100 stehen (je nach Ausgangswert)  - Man muss das devStateIcon auch auf krumme Zahlen anpassen.

Ich habe das Ganze (für mich) noch erweitert indem ich vorher auf die vorherige 10er Zahl runde abschneide.
dimUp:noArg { my $num=(int(ReadingsNum($NAME,'pct',0)/10)*10-10); return qq {shellies/DEVNAME/light/0/set {"turn": "on", "brightness": $num}}; }
Nachteil(e) dieser Variante: Geht man bsw mit pct=48 schrittweise nach unten, geht das System von 48(=>40) direkt auf 30 d.h. einmal einen großen Schritt. geht man von 48(=>40) direkt auf 50 gibt es erstmal einen kleinen Schritt, der kaum spürbar ist.
Da bei mir aber ein Bewegungsmelder 5 einstellt und ich händisch zu 98 % nach oben dimme, sind das Schönheitsfehler, mit den ich persönlich sehr gut leben kann.

Man könnte das Ganze umgehen, in dem mann mathematisch rundet oder ceil und floor aber ganz ehrlich, für so eine Funktion ein extra Modul oder einen 20 statt 1 Zeiler -> Das ist sogar MIR den Aufwand zuviel  ;D


Für diejenigen die es interessiert, wie ich es gelöst habe, dass die Icons entsprechend angezeigt werden (RAW export) - Screenshots weiter unten:


attr Licht_OG_BD_dimmer devStateIcon light_light_dim_.*::off up.*:control_arrow_upward@orange:dimUp down.*:control_arrow_downward@YellowGreen:dimDown
attr Licht_OG_BD_dimmer stateFormat { \
my $z1 = int(ReadingsVal($name,"pct",0)/10)*10+10;;\
#fhem ("set LogDummy z1 $z1 -- ");;\
my $z2 = ReadingsVal($name,"ison","false") eq "true"?"light_light_dim_".int(ReadingsVal($name,"pct",0)/10)*10:"off";; \
my $z3 = int(ReadingsVal($name,"pct",0)/10)*10-10;; \
return "up$z1\n$z2\ndown$z3";;\
}
attr Licht_OG_BD_dimmer webCmd pct:

stateFormat sorgt dafür, dass nur 10er Werte für das devStateIcon icon übergeben werden und errechnet gleichzeitig die Werte für das SET icon (das ist doppelt gemoppelt mit der setList, weil man sonst die icons nicht korrekt anzeit - oder die Definition in devStateIcon statt in StateFormat machen müsste)
devStateIcon fängt alle light_light_dim_XX zeilen ab und wandelt sie in das Icon light_light_dim_10 .....light_light_dim_100 ab
der Rest ist für die Pfeile da.

Mir gefallen die dimup / dimdown icons nicht, weshalb ich mich für die "control_arrow" icons entschieden habe - Vergleich auf den Screenshots.

Hier noch ein Vorschlag:
@Beta-User: Wenn Du Du als Befehl "dimup" und "dimdown" statt Großbuchstaben nimmst, passt die Schreibweise direkt für die Dimmericons. Auch wenn jemand andere haben möchte, hat er so sofort die richtigen drin und kann es so machen wie bei mir mit dem light_light_dim teil...

Bei Fragen, fragen... bei Verbesserungsvorschlägen bin ich natürlich sehr offen ( Beta-User hat bsw für mich einen Vorschlag gebracht, der meinen Code wesentlich vereinfacht hat, an den ich nicht gedacht habe)


Viele Grüße
Andreas

frober

Man könnte das Ganze umgehen, in dem mann mathematisch rundet oder ceil und floor aber ganz ehrlich, für so eine Funktion ein extra Modul oder einen 20 statt 1 Zeiler -> Das ist sogar MIR den Aufwand zuviel  [emoji16]



Wenn du schummelt [emoji6] geht es auch:


(Wert+5)/10*10+10

Dann wird aus z.B. 43 -> 48 und danach wie gehabt 40, aber aus 48 wird 53, also 50

D.h. es wird sozusagen gerundet.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

flummy1978

Zitat von: frober am 10 April 2020, 10:09:45
Wenn du schummelt [emoji6] geht es auch:
(Wert+5)/10*10+10

Und ohne schummeln ist es eine sehr gute Idee:
+4 erhöhen der Helligkeit
und
+7 beim verringern (damit sind die Sprünge nur minimal größer / kleiner als ohnehin bei +-10 )

ergbit 36-45 => erhöhen => 50 
und  26-33 => verringern => 20

Danke für die Idee :)

Grüße
Andreas

majestro84

#619
Ich habe hier ein Shelly DoorWindow Sensor den ich per MQTT verbunden habe.
Ich habe es so angepasst das ich im state open, closed und tilted bekomme.
Somit habe ich eine Threestate Sensor.
Evtl kannst du Beta-User was damit anfangen für ein Template...... Wenn du mehr Infos brauchst lass es mich wissen.

defmod AZ_Fensterkontakt MQTT2_DEVICE shellydw_F032F9
attr AZ_Fensterkontakt IODev MQTT_Server
attr AZ_Fensterkontakt devStateIcon open:fts_window_1w_open@red tilted:fts_window_1w_tilt@yellow closed:fts_window_1w@green
attr AZ_Fensterkontakt model shellydw
attr AZ_Fensterkontakt readingList shellies/shellydw-az/online:.* online\
  shellies/shellydw-az/sensor/state:.* doorWindow\
  shellies/shellydw-az/sensor/tilt:.* tilt\
  shellies/shellydw-az/sensor/vibration:.* vibration\
  shellies/shellydw-az/sensor/lux:.* lux\
  shellies/shellydw-az/sensor/battery:.* batteryPercent\
  shellies/shellydw-az/announce:.* { json2nameValue($EVENT) }
  shellies/announce:.* { $EVENT =~ m,..id...shellydw-az...mac.*, ? json2nameValue($EVENT) : return }
attr AZ_Fensterkontakt room Arbeitszimmer,MQTT2
attr AZ_Fensterkontakt setList x_update:noArg shellies/shellydw-az/command update_fw\
  x_mqttcom shellies/shellydw-az/command $EVTPART1
attr AZ_Fensterkontakt userReadings state {if(ReadingsVal($name,"doorWindow","") eq "close") {"closed"}\
elsif (ReadingsVal($name,"doorWindow","") eq "open" and ReadingsNum($name,"tilt","") eq 0) {"open"}\
elsif (ReadingsVal($name,"doorWindow","") eq "open" and ReadingsNum($name,"tilt","") > 0) {"tilted"}}


VG Alex
Server: Fujitsu ESPRIMO Q920 - aktuellen FHEM-Docker Image:Z-Wave (RollerShutter,DoorWindow,Socket,PIR,....) | ENIGMA2 | EGPM2LAN | BLE-Tag(PRESENCE) | HUE | alexa-fhem | Shelly | MQTT2
1.Pi-Zero:Viessmann(optolink) mit 89_VCONTROL300.pm
2.Pi3 Dongle Server: Zigbee2MQTT(CC1352P-2), Z-Wave(UZB1), BT

Beta-User

 :) sieht gut aus!

Schade, dass der den Zustand nicht von sich aus konsolidiert.

Kannst du mal testen, ob ein "reduziertes" und klarer getriggertes userReadings auch hinhaut:
attr AZ_Fensterkontakt userReadings state:(doorWindow|tilt).* { ReadingsVal($name,"doorWindow","") eq "close" ? 'closed' : ReadingsNum($name,"tilt","") ? 'tilted' :'open' }
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

majestro84

Danke für das userreading es funktioniert und sieht doch eleganter aus :)
Server: Fujitsu ESPRIMO Q920 - aktuellen FHEM-Docker Image:Z-Wave (RollerShutter,DoorWindow,Socket,PIR,....) | ENIGMA2 | EGPM2LAN | BLE-Tag(PRESENCE) | HUE | alexa-fhem | Shelly | MQTT2
1.Pi-Zero:Viessmann(optolink) mit 89_VCONTROL300.pm
2.Pi3 Dongle Server: Zigbee2MQTT(CC1352P-2), Z-Wave(UZB1), BT

Beta-User

Dann sollte das hier passen (ich checke es bei Gelegenheit ein, THX):
# shellydw using original firmware
name:shellydw
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*shellies.*
desc:shellydw using original firmware
order:A_16b
par:DEVNAME;name of this shelly;{ AttrVal("DEVICE","readingList","") =~ m,shellies/([^/]+)/, ? $1 : undef }
par:ICON;ICON as set, defaults to fts_window_1w_open;{ AttrVal("DEVICE","icon","fts_window_1w_open") }
attr DEVICE icon ICON
attr DEVICE devStateIcon open:fts_window_1w_open@red tilted:fts_window_1w_tilt@yellow closed:fts_window_1w@green
attr DEVICE readingList shellies/DEVNAME/online:.* online\
  shellies/DEVNAME/sensor/state:.* doorWindow\
  shellies/DEVNAME/sensor/tilt:.* tilt\
  shellies/DEVNAME/sensor/vibration:.* vibration\
  shellies/DEVNAME/sensor/lux:.* lux\
  shellies/DEVNAME/sensor/battery:.* batteryPercent\
  shellies/DEVNAME/announce:.* { json2nameValue($EVENT) }
  shellies/announce:.* { $EVENT =~ m,..id...DEVNAME...mac.*, ? json2nameValue($EVENT) : return }
attr DEVICE setList x_update:noArg shellies/DEVNAME/command update_fw\
  x_mqttcom shellies/DEVNAME/command $EVTPART1
attr DEVICE userReadings state:(doorWindow|tilt).* { ReadingsVal($name,"doorWindow","") eq "close" ? 'closed' : ReadingsNum($name,"tilt","") ? 'tilted' :'open' }
attr DEVICE model shellydw
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

majestro84

Server: Fujitsu ESPRIMO Q920 - aktuellen FHEM-Docker Image:Z-Wave (RollerShutter,DoorWindow,Socket,PIR,....) | ENIGMA2 | EGPM2LAN | BLE-Tag(PRESENCE) | HUE | alexa-fhem | Shelly | MQTT2
1.Pi-Zero:Viessmann(optolink) mit 89_VCONTROL300.pm
2.Pi3 Dongle Server: Zigbee2MQTT(CC1352P-2), Z-Wave(UZB1), BT

KurtK

Hey Beta-User,

zu deinem Beitrag https://forum.fhem.de/index.php/topic,94495.msg1055012.html#msg1055012 kann ich nur sagen,
dass ich den Sensor für unsere Kellertür nutze und dort die Kippfunktion nicht vorkommt und daher die states open und close ausreichend sind.

Evtl. kann man das Template nach Verwendungszweck Fenster und Tür aufteilen.
Habe in meinem Templatevorschlag das StateIcon auf Tür geändert.
- FHEM auf Intel NUC mit Proxmox -
- FTUI mit FUIP -
- HM, Zigbee,  WLAN -

87insane

Oder wie bei vielen mittlerweile schon mit dem Assistenten zur Auswahl. Hab leider noch keinen der Sensoren aber bin gespannt was man da so raus holen kann. Ggf auch für sonnen einstrahlung und automatische Rollo Absenkung usw.

Gesendet von meinem LM-G810 mit Tapatalk


majestro84

Hallo
Wenn du die Kipp Funktion nicht kalibrierst kann der Sensor ja nur Open und Close. Somit geht das Templet doch auch für Türen.
VG Alex
Server: Fujitsu ESPRIMO Q920 - aktuellen FHEM-Docker Image:Z-Wave (RollerShutter,DoorWindow,Socket,PIR,....) | ENIGMA2 | EGPM2LAN | BLE-Tag(PRESENCE) | HUE | alexa-fhem | Shelly | MQTT2
1.Pi-Zero:Viessmann(optolink) mit 89_VCONTROL300.pm
2.Pi3 Dongle Server: Zigbee2MQTT(CC1352P-2), Z-Wave(UZB1), BT

KurtK

Alles klar. Die Funktionsweise war mir gar nicht bewusst. Dann reicht tatsächlich ein Template
- FHEM auf Intel NUC mit Proxmox -
- FTUI mit FUIP -
- HM, Zigbee,  WLAN -

majestro84

Hallo

Das Template für den shellydw muss wohl doch noch etwas angepasst werden. Habe nun einen weiteren hinzugefügt und das Template benutzt. Wenn man die Kippfunktion nicht konfiguriert steht im Reading tilt -1. Somit wird nur Open und tilted im state ausgegeben.
Beta-User kannst du das noch mit einbauen? Tilted nur bei Größer 0.
VG Alex
Server: Fujitsu ESPRIMO Q920 - aktuellen FHEM-Docker Image:Z-Wave (RollerShutter,DoorWindow,Socket,PIR,....) | ENIGMA2 | EGPM2LAN | BLE-Tag(PRESENCE) | HUE | alexa-fhem | Shelly | MQTT2
1.Pi-Zero:Viessmann(optolink) mit 89_VCONTROL300.pm
2.Pi3 Dongle Server: Zigbee2MQTT(CC1352P-2), Z-Wave(UZB1), BT

Beta-User

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