MQTT2+Shelly: erste Konfiguration und template-Entwicklung

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

Vorheriges Thema - Nächstes Thema

87insane

Starte die alle mal neu. Danach sollte es gehen. Das hat was mit announce zu tun.

Gesendet von meinem LG-H850 mit Tapatalk


kabanett

Hardware: Fhem auf Raspi3 / selbtsbau CUL 433 und 868 MHz / MAX Thermostate / IT-Dosen nur noch Weihnachten / diverse ESP Aktoren/Sensoren / X10 Fernbedienung / Shelly 1, 1L, 2, 2.5, Dimmer, RGB2 / LaCrosseGateway / Zigbee2531 / diverse Zigbee Aktoren/Sensoren

87insane

#452
@Beta-User: Ich weiß du bist im Urlaub und wünsche Dir auch viel Spaß :)

Kannst du bei deiner Rückkehr ggf. eine Abfrage von announce beim aktivieren des Templates einbauen? Also ganz am Ende einmal DEVICE announce abfragen, bei allen Shellys. Damit würde der Neustart wegfallen, den z.B. der Kollege hier über meinem Post machen musste.

Danke!




Für alle die es interessiert, anbei devStateIcon für das "Ampel-System" bei Shellys.
Es wird auf folgendes geprüft:
online = true + new_fw true = gelb = bei klick wird das FW Update durchgeführt
online = false + new_fw false = rot = bei klick wird versucht das WEB-IF zu öffnen
online = true + new_fw false = grün = bei klick wird das WEB-IF geöffnet
online = false + new_fw true = rot = bei klick wird versucht das WEB-IF zu öffnen

Natürlich könnt ihr die Funktionen anpassen. Man könnte z.B. bei rot/offline eine Konsole öffnen und einen dauer-Ping laufen lassen. Oder oder oder... Hatte das nicht getan, da hier jeder auf anderen Systemen unterwegs ist. Ist als Anreiz gedacht und ich mag es nicht in den Shelly hinein zu müssen und direkt zu sehen da ist ein Update vorhanden und dann kann ich es auch noch direkt anklicken. Viel Spaß damit :)


{ my $amp = ReadingsVal($name,"online","false") eq "false" && ReadingsVal($name,"new_fw","false") eq "false" || ReadingsVal($name,"online","false") eq "false" && ReadingsVal($name,"new_fw","false") eq "true" ? "rot" : ReadingsVal($name,"online","false") eq "true" && ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen";; 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");; my $show = "$amp" eq "gelb" ? "<a href=\"/fhem?cmd.dummy=set $name x_update&XHR=1\">".FW_makeImage("10px-kreis-".$amp)."</a>" : "<a href=\"http://".ReadingsVal($name,"ip","none")." \"target=\"_blank\">".FW_makeImage("10px-kreis-".$amp)."</a>";; "<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a> Aktuell: $cons W / Temp.: $temp °C </div>" }

Beta-User

Da ich keine Hardware haben: Wie soll das mit dem announce genau gehen (sorry, webb das hier irgendwo schon mal dargestellt war, habe nicht gesucht)?
Optimal fände ich, wenn wir das recht neue "farewell"-feature nutzen könnten, also ein Dialogfeld anzeigen, mit dem man das optional abrufen kann. Dafür wäre vermutlich ein link für einen http-Request die einfachste Lösung, sonst muß man das IO und das passende topic ermitteln...




Was das "Ampel-System" angeht: wenn du es auf das notwendige Minimum reduzierst (das geht m.E. an mehreren Stellen kürzer) und nicht die "pending"-Lampe nimmst, bau ich's ggf. ein ;) ...
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

shootingstar

Hallo in die Runde,

ich möchte einige der Shelly´s 2.5 als Rolladen Aktoren nutzen und stehe etwas auf dem Schlauch.
Die Einbindung in FHEM erfolgt über den internen MQTT Server, was auch problemlos funktioniert.
Ich möchte die Rolladen ebenfalls per Apple Homekit und Siri, als auch Alexa nutzen.
Mit Homekit über die seit Jahren funktionierende Homebridge gibt es keine Probleme.
Nur bei fhem-alexa habe ich das Problem, das die Shelly´s nur in der Alexa App erkannt werden, wenn diese das genericDevice Type ,,switch" haben. Wenn ich dieses auf ,,blind" setze, wenden die Shelly´s weder gefunden, noch sind sie bei einer nachträglichen Änderung anzusprechen.
Ich könnte ja mit ,,switch" als Wert leben, was auch funktioniert (Fahre Rolladen xxx auf 0 oder 100), aber dann will Homekit nicht mehr.
Die Shelly´s habe ich mit dem Template ,,A_11b1a_shelly25_roller_invert_0" parametriert.
Ich brauch da glaube ich mal einen kleinen Stoß in die richtige Richtung.
Gruß Andreas

Hier noch das List von einem der Devices:

IODev mymqtt
alexaName Rollladen Schlafzimmer links
alexaRoom Schlafzimmer
alias Rollladen Schlafzimmer links
cmdIcon open:fts_shutter_up close:fts_shutter_down stop:fts_shutter_manual half:fts_shutter_50
comment Shelly 2.5 in Roller-Mode. 100=opened / 0=closed
devStateIcon
opening:fts_shutter_up@red closing:fts_shutter_down@red true:10px-kreis-gruen false:10px-kreis-rot 0:fts_shutter_100 100:fts_shutter_10 9\d:fts_shutter_10 8\d:fts_shutter_20 7\d:fts_shutter_30 6\d:fts_shutter_40 5\d:fts_shutter_50 4\d:fts_shutter_60 3\d:fts_shutter_70 2\d:fts_shutter_80 1\d:fts_shutter_90 0\d:fts_shutter_100 set_.*:fts_shutter_updown
genericDeviceType switch
group Rolladen
model A_11b1a_shelly25_roller_invert_0
readingList shellies/shellyswitch25-00CC5F/roller/0/pos:.* pct
  shellies/shellyswitch25-00CC5F/status/0/rollers:.* power
  shellies/shellyswitch25-00CC5F/online:.* online
  shellies/shellyswitch25-00CC5F/announce:.* { json2nameValue($EVENT) }
  shellies/announce:.* { $EVENT =~ m,..id...shellyswitch25-00CC5F...mac.*, ? json2nameValue($EVENT) : undef }
  shellies/shellyswitch25-00CC5F/roller/0:.* current
  shellies/shellyswitch25-00CC5F/roller/0:open {{'state' => 'opening'}}
  shellies/shellyswitch25-00CC5F/roller/0:close {{'state' => 'closing'}}
  shellies/shellyswitch25-00CC5F/roller/0/pos:.* state
  shellies/shellyswitch25-00CC5F/input/1:.* input1
  shellies/shellyswitch25-00CC5F/input/0:.* input0
  shellies/shellyswitch25-00CC5F/relay/power:.* power
  shellies/shellyswitch25-00CC5F/relay/energy:.* energy
  shellies/shellyswitch25-00CC5F/temperature:.* temperature
  shellies/shellyswitch25-00CC5F/overtemperature:.* overtemperature
shellyswitch25_00CC5F:shellies/shellyswitch25-00CC5F/roller/0/power:.* roller_0_power
shellyswitch25_00CC5F:shellies/shellyswitch25-00CC5F/roller/0/energy:.* roller_0_energy
shellyswitch25_00CC5F:shellies/shellyswitch25-00CC5F/temperature_f:.* temperature_f
room Homekit,MQTT2_DEVICE
setList
open:noArg shellies/shellyswitch25-00CC5F/roller/0/command open
  close:noArg shellies/shellyswitch25-00CC5F/roller/0/command close
  half:noArg shellies/shellyswitch25-00CC5F/roller/0/command/pos 50
  stop:noArg shellies/shellyswitch25-00CC5F/roller/0/command stop
  pct:slider,0,1,100 shellies/shellyswitch25-00CC5F/roller/0/command/pos $EVTPART1
  x_recalibration:noArg shellies/shellyswitch25-00CC5F/roller/0/command rc
  x_update:noArg shellies/shellyswitch25-00CC5F/command update_fw
  x_mqttcom shellies/shellyswitch25-00CC5F/command $EVTPART1
setStateList open close half stop pct
siriName Jalousie Schlafzimmer links
stateFormat
<a href="http://ip" target="_blank">
online
</a>
state
webCmd :open:close:half:stop:pct

TomLee

Hallo,

hast es mal mit genericDeviceType light versucht oder gar keiner Angabe des Attributes ?

Gruß

Thomas

87insane

Lass das typedevice mal ganz Weng. Bei mir laufen die so auch ohne Probleme über Alexa. Steuern tust du dann über "Alexa Rollo Name 60%" zb.

Gesendet von meinem LG-H850 mit Tapatalk


87insane

Guten Morgen zusammen,

anbei mal die kürzere Version zu dem "Ampel-Projekt" der Shellys.
{
my $amp = ReadingsVal($name,"online","false") eq "false" ? "rot" : ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen";;
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");;
my $show = "$amp" eq "gelb" ? "<a href=\"/fhem?cmd.dummy=set $name x_update&XHR=1\">".FW_makeImage("10px-kreis-".$amp)."</a>" : "<a href=\"http://".ReadingsVal($name,"ip","none")." \"target=\"_blank\">".FW_makeImage("10px-kreis-".$amp)."</a>";;
"<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a> Aktuell: $cons W / Temp.: $temp °C </div>"
}


amp: Wertet den Zustand aus. Gibt es eine neue FW? Wenn ja = Kreis gelb und mit Klick wird das Update auf dem Shelly angestoßen. Wenn nein und Shelly ist online, ist der Kreis grün. Wenn offline, dann Kreis = rot.
light: Ist das Icon des Gerätes. Wird hier im Template vermutlich einfach die Standard Lampe. Aber so kann man das gut ändern bei der kleinen Zeile in devStateIcon.
cons: Aktueller Verbrauch in W
temp: Aktueller Temperaturwert des eingebauten Fühlers (wenn vorhanden). Bei einem Shelly 1 OHNE PM kann das natürlich weg.
show: Hängt zusammen mit amp. Je nachdem welche Farbe ausgewertet wurde, wird hiermit die Aktion beim klicken des Punktes eingestellt.
Der div Teil definiert das letztendliche Aussehen.

@all: Verbesserungen oder Ideen, bitte gerne melden :)
@Beta-User: Ist das für dich so besser? Kürzer bekomme ich das mit dem Funktionsumfang nicht.

Bilder habe ich hier keine angefügt. Sieht aber genauso aus, wie ich bereits ein paar Posts vorher gezeigt hatte. Nur der Code ist viel weniger.

Beta-User

 :) Geht doch... ;D

Ein paar Zeichen lassen sich noch einsparen, aber man kann zugegebenermaßen darüber streiten, ob das vollends lohnt ;D ::) ;D :

{
my $amp = ReadingsVal($name,"online","false") eq "false" ? "rot" : ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen";;
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");;
my $show = "<a href=\"";;$show .= $amp eq "gelb" ? "/fhem?cmd.dummy=set $name x_update&XHR=1\">" : "http://".ReadingsVal($name,"ip","none")." \"target=\"_blank\">";;$show .= FW_makeImage("10px-kreis-".$amp)."</a>";;
"<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a> Aktuell: $cons W / Temp.: $temp °C </div>"
}


Für's template würde ich dann noch die $light-Zeile so ändern:
my $light = ReadingsVal($name,"state","off");;
(Man kann das ReadingsVal auch in FW_makeImage direkt aufrufen, aber so läßt sich das leichter anpassen, wenn man UNBEDINGT diese Pendelleuchte (oder was anderes) haben will :P .

Bitte kurz (mit der "template"-Zeile) testen, bevor ich das einchecke...
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

ZitatEin paar Zeichen lassen sich noch einsparen, aber man kann zugegebenermaßen darüber streiten, ob das vollends lohnt ;D ::) ;D :
Aus Interesse....was denn? :)

ZitatFür's template würde ich dann noch die $light-Zeile so ändern:
my $light = ReadingsVal($name,"state","off");;
(Man kann das ReadingsVal auch in FW_makeImage direkt aufrufen, aber so läßt sich das leichter anpassen, wenn man UNBEDINGT diese Pendelleuchte (oder was anderes) haben will :P .
Deswegen hatte ich das so gemacht ;) Ich weiß das du sie nicht nutzt aber bei x Geräten sieht das Auge so schneller :) Die Pendel-Leuchte ist auch immer nur wegen meines Test Schalters.

ZitatBitte kurz (mit der "template"-Zeile) testen, bevor ich das einchecke...
Kann ich von hier aus aktuell leider nicht. Wird also (wenn sich kein anderer dafür kurz meldet) etwas dauern...

Beta-User

Zitat von: 87insane am 17 September 2019, 10:36:14
Aus Interesse....was denn? :)
Steht doch im meinem Post...

Statt
my $show = "$amp" eq "gelb" ? "<a href=\"/fhem?cmd.dummy=set $name x_update&XHR=1\">".FW_makeImage("10px-kreis-".$amp)."</a>" : "<a href=\"http://".ReadingsVal($name,"ip","none")." \"target=\"_blank\">".FW_makeImage("10px-kreis-".$amp)."</a>";; steht da
my $show = "<a href=\"";;$show .= $amp eq "gelb" ? "/fhem?cmd.dummy=set $name x_update&XHR=1\">" : "http://".ReadingsVal($name,"ip","none")." \"target=\"_blank\">";;$show .= FW_makeImage("10px-kreis-".$amp)."</a>";;
Macht zwei Anführungszeichen und ca. 10 sonstige Zeichen weniger, bei mehr Codezeilen, die da "in einer" sind (damit man das besser von der Länge her vergleichen kann :P ).

(Ich sehe grade, man könnte auch das \"> noch nach hinten verlagern, aber kürzer wir es damit "leider" nicht mehr... ;D
my $show = "<a href=\"";;$show .= $amp eq "gelb" ? "/fhem?cmd.dummy=set $name x_update&XHR=1" : "http://".ReadingsVal($name,"ip","none")." \"target=\"_blank";;$show .= "\">".FW_makeImage("10px-kreis-".$amp)."</a>";;
Etwas kürzer geht aber doch noch 8) :
my $show = '<a href="';;$show .= $amp eq "gelb" ? "/fhem?cmd.dummy=set $name x_update&XHR=1" : "http://".ReadingsVal($name,"ip","none").' "target="_blank';;$show .= '">'.FW_makeImage("10px-kreis-".$amp)."</a>";;
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

#461
Du machst mich fertig :-P muss ich mir am pc nachher mal ansehen. Freut mich aber das die Ampel nun eine Lebens Berechtigung bekommt :)

EDIT: Würde dann mit meinem testen. Finde das (wie du es immer schön sagst) besser als Beispiel für den Benutzer. Selbst das ist ja schon relativ komplex. Kann es aber, wie schon gesagt, leider erst recht spät in dieser Woche testen über das Template.

Gesendet von meinem LG-H850 mit Tapatalk


87insane

Hey... Hatte das total vergessen. Aber die Shellys geben den Gesamt Verbrauch über MQTT NICHT in kW sondern Joule an!
1 Watt Minute = 0,017 Watt Stunden (Rechnung: 1 / 60). Das ganze noch durch 1.000 sind dann Kilo Watt Stunden.

Deswegen sind bei mir die Readings für relay_0_energy auch angepasst in der ReadingList.

Wer es auch haben will oder ggf Template, wenn es gut genug ist:
shellies/shelly1pm-005A2D/relay/0/energy:.* {'relay_0_energy' => sprintf("%.2f",$EVENT/60/1000)}
(natürlich muss der Name des Shelly angepasst werden, wenn das Beispiel kopiert wird)

Beta-User

Bin noch am Zweifeln, ob man die Umrechnung gleich machen sollte oder erst beim stateFormat, tendiere aber zu gleich. Meinungen dazu?

Ansonsten würde ich das dann ggf. zusammen mit einem weiteren Gedanken von rebuehl - Zustand des angeschlossenen Geräts gleich mit anzeigen - einchecken, wenn das final getestet und für gut befunden wurde?

Bitte möglichst die "Ampel" so testen, wie ich sie dann einchecke ::) . Du darfst das dann gerne wieder so ändern, wie du das magst, aber ich kann das nicht selbst testen ohne Rückmeldung von der Hardware...
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

Zuerst erzähle mir vom rebühl Zustand :) ich bin gespannt....!

Testen geht leider echt erst die Tage. An sich sollte das ja schnell gemacht sein, da nur die erste Zeile in devstateicon angepasst wurde. Alles andere ist gleich geblieben. Außer du willst eine deiner 35 Varianten :-P da müsstest du mir mal eben vorwerfen welche du getestet haben magst. Dann passiert das die Tage (vermutlich we).

Gesendet von meinem LG-H850 mit Tapatalk