MQTT2+Shelly: erste Konfiguration und template-Entwicklung

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

Vorheriges Thema - Nächstes Thema

87insane

....brauche noch deine Lieblings Variante...
Werde es Vermutlich morgen schaffen. Ach ja zu deiner idee wolltest du doch auch noch was sagen, oder? :)

Gesendet von meinem LG-H850 mit Tapatalk


87insane

So anbei mal getestet mit Ampel-System und Umrechnung von Gesamt Energie-Wert.
Getestet mit Shelly1pm.

Ich denke für die anderen Shelly kannst du das auch direkt einbauen. (Hinweis: Der normale Shelly1 hat KEINE Energie-Messung.)


name:TEST
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*shellies.*
desc:Applies to single relay Shelly devices offering energy meassuring like Shelly 1PM or Shelly Plug S
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\
  x_update:noArg shellies/DEVNAME/command update_fw\
  x_mqttcom shellies/DEVNAME/command $EVTPART1
attr DEVICE readingList \
  shellies/DEVNAME/relay/0:.* state\
  shellies/DEVNAME/relay/0:.* relay0\
  shellies/DEVNAME/input/0:.* input0\
  shellies/DEVNAME/online:.* online\
  shellies/announce:.* { $EVENT =~ m,..id...DEVNAME...mac.*, ? json2nameValue($EVENT) : undef }\
  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' => sprintf("%.2f",$EVENT/60/1000)}\
  shellies/DEVNAME/longpush/0:.* longpush_0
attr DEVICE 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") 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 = "$onl" eq "gelb" ? "<a href=\"/fhem?cmd.dummy=set $name x_update&XHR=1\">".FW_makeImage("10px-kreis-".$onl)."</a>" : "<a href=\"http://".ReadingsVal($name,"ip","none")." \"target=\"_blank\">".FW_makeImage("10px-kreis-".$onl)."</a>";; "<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a> Aktuell: $cons W / Temp.: $temp °C</div>" }
attr DEVICE webCmd :
deletereading -q DEVICE (?!associatedWith).*
attr DEVICE TEST



Danke!

Wie immer, wenn jemand Wünsche hat, einfach melden und mit basteln. Ich stecke ja selber auch schon zu tief hier drin :)

Beta-User

Moin,

wird etwas dauern, wenn ich die ganzen templates durchsehen muß, wo das jetzt (mit on/off... ::) ) im Detail wie sinnvollerweise hin muß.

Der user reibuehl hat für den Zustand des angeschlossenen Geräts noch folgendes beigesteuert;
shellies/shellyplug-s-123456/relay/0/power:.* { my $limit = 100;; my $compare = $EVTPART0<$limit ? "off":"on";; ReadingsVal($NAME,"loadState","on") eq $compare ? undef: {loadState => $compare} }Fände es gut, wenn wir das auch gleich mit verarbeiten könnten. Bekommt jemand das in den devStateIcon-Code mit rein als separates Icon?

Was die Energiemessung (mit Formel) angeht: Da fände ich es besser, wir würden das doppeln (also den originalen Wert belassen/zusätzlich reinkommen lassen und ein neues Reading für den kalkulierten Wert verwenden, z.B. relay_0_kwh? (Geht darum, dass jemand keine Irritationen bekommt, der heute eine andere Methode verwendet).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

87insane

#468
Bei mir sind nur zwei Zeilen anders. Hab es aber komplett gepostet.

Nur devstateicon und readinglist die Umrechnung. Das doppeln macht Sinn, muss ja nicht separat getestet werden.

Die Fragestellung bezüglich des Power States vom Slave....
Für mich macht es wenig Sinn bei einer z.B. Lampe ein Zusatz Icon zu haben. Diese ist nur an wenn auch das Relay an ist.
Bei Geräten wie einer Waschmaschine macht es wiederum Sinn. Dort arbeite ich aber eh anders.


{ my $amp = ReadingsVal($name,"online","false") eq "false" ? "rot" : ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen";; my $pic = ReadingsVal($name,"running","") eq "true"?'scene_laundry_room_fem@green':'scene_laundry_room_fem';; my $text = ReadingsVal($name,"running","") eq "true"?"Waschmaschine läuft - Aktuell: ".ReadingsVal($name,"power","")." W":'Standby';; 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\"></a>".FW_makeImage($pic)." $text </div>" }


Hier ist das Relay des Shelly immer auf AN. Das Icon der Waschmaschine kann auch nicht geklickt werden, damit man nicht aus versehen dran kommt und die Waschmaschine unterbricht. Wenn nun ein von mir definierter Schwellwert (je nach Gerät) überschritten wird, geht running auf true. Dann wird das Icon grün und es stehen auch die Werte des Verbrauchers (slave) dort. In dem Reading was hier in ReadingList kommt, wird loadState auf on oder off gesetzt. Macht also das gleiche nur auf andere Art. Hier wird mit $limit, direkt in der ReadingList das erzeugt, was bei mir running ist. Mir fällt bis auf z.B. Pumpen, Waschmaschine, Trockner nichts ein wofür das überall drin sein sollte. An was habt ihr da gedacht?

Umgebaut auf das wie ich es nutzen würde wäre das:
shellies/shellyplug-s-040C7E/relay/0/power:.* { my $compare = $EVTPART0<ReadingsVal($NAME,"swerta","on") ? "false":"true";; ReadingsVal($NAME,"running","true") eq $compare ? undef: {running => $compare} }

Danke für die super Idee und gleichzeitige Problem-Lösung bei einem meiner Projekte!

Anbei mal ein Bild wie es aktuell bei mir ist und ggf. kann man dafür wiederrum bei Geräten, bei denen es Sinn macht ein fertiges Waschmaschinen oder Trockner Template bauen.





Beta-User

Dachte schon, dass das dir gefällt ;D ;D ;D .

Jep, ist ein readingList-Auszug, hast du ja zwischenzeitlich gemerkt. Sollte funktionieren, geht nur noch um die Frage, wie man das grafisch sinnvoll darstellt.

MMn. wäre es wichtig zu wissen, an welcher Stelle der Kette das "off" ist, daher zwei Symbole? (Die Idee, das "vorne" nur schaltbar zu machen, wenn der Slave "off" ist, finde ich super!).
Vielleicht den Master als Steckdosensymbol (gab es mit an/aus, oder?) und den eigentlichen slave dann als "on/off" wie üblich? (cool wäre, das _optional_ über einen als userAttr hinterlegbaren Devicenamen on/off-schaltbar zu machen? Wenn da ein Devicename steht: Plug nicht schaltbar, wenn nicht: Einschalten über Plug erlauben?).

Da ich die Dinger nicht habe: Laßt eurer Phantasie etwas Raum, eventuell macht es Sinn, da zwei templates anzubieten, eines als "full-featured", das andere nur "basic"?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

87insane

ZitatMMn. wäre es wichtig zu wissen, an welcher Stelle der Kette das "off" ist, daher zwei Symbole? (Die Idee, das "vorne" nur schaltbar zu machen, wenn der Slave "off" ist, finde ich super!).
Bei mir ist das über das Icon garnicht schaltbar. Nur im Gerät selber. Der Stecker geht nach Stromverlust direkt wieder auf relay an und deswegen brauche ich keine Funktion hinter dem Icon. Im Gegenteil. Nachher komme ich aus versehen da drauf und schalte die Maschine aus.
Off ist dann, wenn der Schwellwert unterschritten wird. Hier habt ihr das mit $limit gelöst - ich eben mit einem Reading (swerta).


ZitatVielleicht den Master als Steckdosensymbol (gab es mit an/aus, oder?) und den eigentlichen slave dann als "on/off" wie üblich? (cool wäre, das _optional_ über einen als userAttr hinterlegbaren Devicenamen on/off-schaltbar zu machen? Wenn da ein Devicename steht: Plug nicht schaltbar, wenn nicht: Einschalten über Plug erlauben?
Das verstehe ich nicht. Wie sollte man das schalten, wenn es nur virtuell ist? Welchen Nutzen könnte das mit sich bringen? Oder ist das noch anders gemeint?

ZitatDa ich die Dinger nicht habe: Laßt eurer Phantasie etwas Raum, eventuell macht es Sinn, da zwei templates anzubieten, eines als "full-featured", das andere nur "basic"?
Hatte meinen Beitrag editiert. Schrieb ich auch schon. Das macht am meisten Sinn. Die Frage ist, ob man ggf. direkt ein Waschmaschinen oder Trockner Template macht. Ist eines der meist gefragten Themen und mit der Idee absolut einfach um zu setzen. Die Frage ist nur was am besten ist. Ich selber mache mir einfach selber Readings und nutze userReadings nur selten. Hinzu gibt es auch Geräte die haben zwei Schwellwerte. Also einmal nach dem einschalten und einmal nach dem Beendet des, z.B. Waschvorgangs. Gerade bei Trocknern hat man auch den Knitterschutz. Der brauch natürlich mehr Energie als wenn der Trockner wirklich im Idle ist.

Beta-User

Zitat von: 87insane am 26 September 2019, 10:25:34
Bei mir ist das über das Icon garnicht schaltbar. Nur im Gerät selber.
Das macht in vielen Fällen absolut Sinn.

Es gibt aber Ausnahmen, da kann man eventuell beides schalten (vielleicht auch nur über einen unidirektionalen Befehl). Ich denke grade an eine Dunstabzugshaube, die via 433MHz-Signal geschaltet werden kann. Von der kenne ich den Status nicht ohne weiteres, kann sie aber auch von FHEM aus via Signalduino schalten (manchmal findet man Problemlösungen für Anwendungsfälle, die einem noch gar nicht bekannt waren 8) ; da muß wohl ein innr mal testweise umziehen ;D ; ist aber ein HUEDevice). Die Dunstabzugshaube ist also ein solches "virtuelles" Device.

ZitatDie Frage ist, ob man ggf. direkt ein Waschmaschinen oder Trockner Template macht. Ist eines der meist gefragten Themen und mit der Idee absolut einfach um zu setzen. Die Frage ist nur was am besten ist. Ich selber mache mir einfach selber Readings und nutze userReadings nur selten. Hinzu gibt es auch Geräte die haben zwei Schwellwerte. Also einmal nach dem einschalten und einmal nach dem Beendet des, z.B. Waschvorgangs. Gerade bei Trocknern hat man auch den Knitterschutz. Der brauch natürlich mehr Energie als wenn der Trockner wirklich im Idle ist.
Die Idee, templates nach zwei konkreten Anwendungsfällen zu benennen, finde ich gut, wäre klasse, wenn man das umgesetzt bekäme, ggf. auch mit mehreren Schwellwerten (ist aber vermutlich zu schwierig, da der Knitterschutz vermutlich nicht konstant eine Mindestleistung abfordert?).

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

87insane

#472
ZitatEs gibt aber Ausnahmen, da kann man eventuell beides schalten (vielleicht auch nur über einen unidirektionalen Befehl). Ich denke grade an eine Dunstabzugshaube, die via 433MHz-Signal geschaltet werden kann. Von der kenne ich den Status nicht ohne weiteres, kann sie aber auch von FHEM aus via Signalduino schalten (manchmal findet man Problemlösungen für Anwendungsfälle, die einem noch gar nicht bekannt waren 8) ; da muß wohl ein innr mal testweise umziehen ;D ; ist aber ein HUEDevice). Die Dunstabzugshaube ist also ein solches "virtuelles" Device.
Verstehe das Beispiel nicht ganz ABER - Ich würde im Template das "nicht schalten" bevorzugen das ist schwieriger als das schalten. Ich musste das erstmal so umbiegen das es nicht klickbar ist in Konstellation mit den ganzen Icons usw. Könnte ich sogar schon komplett liefern....

ZitatDie Idee, templates nach zwei konkreten Anwendungsfällen zu benennen, finde ich gut, wäre klasse, wenn man das umgesetzt bekäme, ggf. auch mit mehreren Schwellwerten (ist aber vermutlich zu schwierig, da der Knitterschutz vermutlich nicht konstant eine Mindestleistung abfordert?).
Mit nur einem Wert geht das so wie es ist. Mit zwei Werten ist es etwas schwieriger und brauche ich aktuell auch nicht, da der Start-Schwellwert niedriger ist als der Schwellwert zum Ende hin. Da habe ich zumindest Glück gehabt. Beispiel Knitterschutz ist so gemeint:
Start: 40W und dann die ganze Zeit höher
Ende: Immer z.B. über 30W aber auch mal höher.
Also wäre man sonst unter 30 und somit die Maschine in der Theorie fertig. Nicht aber zwangsläufig, da der ganze Vorgang noch nicht beendet ist. Hoffe man versteht es so.

Ist eben sehr Geräteabhängig.

Die Fragen die ich nun habe, für ein sauberes Template:
Schwellwerte als Reading über setreading oder userReading oder direkt in ReadingList? Ich mache es selber über Readings die ich anlege (einmalig pro Gerät)
Icon gar nicht klickbar, für das Template, ok? (Ist wie oben schon gesagt, wohl einfacher, da man das ja auch einfach anpassen kann)
Wie in dem Bild zu sehen ist bei mir Standy = Relay an aber Slave aus. Wenn Slave an, wird auch gleich der aktuelle Verbrauch angezeigt.

Nachgelagert lasse ich mir via notify folgendes senden:
- Wie lange lief die Maschine
- Wie viel Watt hat sie verbraucht
- Was hat das ganze ca. gekostet (anhand meines Strompreises)

Lässt sich im Template ja nicht direkt mit einbauen, macht wenig Sinn in meinen Augen.
Man könnte aber z.B. über userReadings (so wie ich das auch habe) direkt einen Wert setzen für die Zeit und für den Verbauch + Kosten. Dann könnte ein User einfach diese Werte für sein notify nutzen, da ja alles schon da ist.

Das hier wäre dann ein Beispiel für die Berechnung für eine Runde waschen...Gleiches ginge für den Rest auch....
total_temp:running:.true { ReadingsNum("$name","total",0) },
gang:running:.false { ReadingsNum("$name","total",0) - ReadingsNum("$name","total_temp",0) }





EDIT:
Nach ein wenig überlegen würde ich das vermutlich so machen.....

1. Readinglist erweitern, wie von reibuehl beschrieben (leicht angepasst wegen meiner Umgebung):
shellies/shellyplug-s-040C7E/relay/0/power:.* { my $compare = $EVTPART0<ReadingsVal($NAME,"swerta",0) ? "false":"true";; ReadingsVal($NAME,"running","true") eq $compare ? undef: {running => $compare} }

2. userReadings setzen. Ich kenne das nur so, ggf. geht es besser?
total_temp:running:.true { ReadingsNum("$name","total",0) },
gang:running:.false { ReadingsNum("$name","total",0) - ReadingsNum("$name","total_temp",0) },
price:running:.false {sprintf("%.2f",ReadingsVal("$name","gang",0)*ReadingsVal($name,"spreis","true"))},
time:running:.false {strftime("%H:%M", localtime(ReadingsAge("$name","total_temp",0)-3600))}

Berechnet alles was man braucht. Zeit des Waschgangs, Kosten, Verbrauch in kWh.

3. devStateIcon setzen. Hier gehe ich davon aus, dass es NICHT klickbar sein soll und das wenn die Maschine im Standby ist, ist das Icon normal blau. Sollte die Maschine laufen, wird es grün und der aktuelle Verbrauch wird mit angezeigt. Das ganze reagiert in meiner Umgebung auf das Reading running.
{ my $amp = ReadingsVal($name,"online","false") eq "false" ? "rot" : ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen";; my $pic = ReadingsVal($name,"running","") eq "true"?'scene_laundry_room_fem@green':'scene_laundry_room_fem';; my $text = ReadingsVal($name,"running","") eq "true"?"Waschmaschine läuft - Aktuell: ".ReadingsVal($name,"power","")." W":'Standby';; 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\"></a>".FW_makeImage($pic)." $text </div>" }

So wären alle Daten für ein notify o.ä. im Gerät vorhanden.
Ich hätte am liebsten einen Bereich in dem man die variablen Daten (Schwellwert, Strompreis), direkt sieht und anpassen kann. Ggf. sowas wie ein set DEVICE Strompreis xxx oder set DEVICE Schwellwert xxx. Das wäre dann aber schon ein wirklich fertiges Script. Mehr fällt mir dazu nicht ein.

4. setList erweitern um:
  x_schwellwert {fhem("setreading MQTT2_shellyplug_s_040C7E swerta $EVTPART1");}
  x_strompreis {fhem("setreading MQTT2_shellyplug_s_040C7E spreis $EVTPART1");}


Das wäre für alle Shelly User (würde auch bei Tasmota u co gehen ;)) ein großer Gewinn. So könnte man in wenigen Sekunden haben, was mich Wochen gekostet hat. Allerdings konnte ich zu dem Zeitpunkt auch noch null FHEM.

Noch ein List, wie es sein könnte... Ich habe natürlich noch nicht gewaschen aber das wird so laufen. 100% kann ich das sagen nach dem nächsten mal waschen. Und es ist ein Beispiel, wie es bei mir aussieht. Ist natürlich leicht anpassbar. Ggf. sollten wir auch selbst erschaffene Readings "x_Reading" benamen. So weiß man direkt was wirklich vom Gerät kommt und was nicht.


Internals:
   CFGFN      ./FHEM/Tasmota.cfg
   CID        shellyplug_s_040C7E
   DEF        shellyplug_s_040C7E
   DEVICETOPIC MQTT2_shellyplug_s_040C7E
   FUUID      5d4c47d9-f33f-fcb4-c859-f484bf00612f2b75
   IODev      MQTT2_FHEM_Server
   LASTInputDev MQTT2_FHEM_Server
   MQTT2_FHEM_Server_MSGCNT 16220
   MQTT2_FHEM_Server_TIME 2019-09-26 14:42:50
   MSGCNT     16220
   NAME       MQTT2_shellyplug_s_040C7E
   NR         173
   STATE      on
   TYPE       MQTT2_DEVICE
   OLDREADINGS:
   READINGS:
     2019-08-13 17:34:03   aname           Die Waschmaschine
     2019-09-25 16:13:03   fw_ver          20190821-095311/v1.5.2@4148d2b7
     2019-09-26 13:52:19   gang            0
     2019-09-25 16:13:03   id              shellyplug-s-040C7E
     2019-09-25 16:13:03   ip              192.168.xxx.xxx
     2019-09-26 09:45:46   loadState       off
     2019-09-25 16:13:03   mac             4C11AE040C7E
     2019-09-25 16:13:03   new_fw          false
     2019-09-25 16:13:03   online          true
     2019-09-26 14:42:50   overtemperature 0
     2019-09-26 14:42:49   power           0
     2019-09-26 13:52:19   price           0.00
     2019-09-26 14:42:49   relay0          on
     2019-09-26 13:52:19   running         false
     2019-09-26 14:24:29   spreis          0,29
     2019-09-26 14:42:49   state           on
     2019-09-26 14:31:51   swerta          4
     2019-09-26 14:42:49   temperature     28.37
     2019-09-26 14:42:49   temperature_f   83.07
     2019-09-26 14:42:49   total           6.90
     2019-09-26 13:51:52   total_temp      6.90
Attributes:
   IODev      MQTT2_FHEM_Server
   alias      Keller Waschmaschine
   devStateIcon { my $amp = ReadingsVal($name,"online","false") eq "false" ? "rot" : ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen";; my $pic = ReadingsVal($name,"running","") eq "true"?'scene_laundry_room_fem@green':'scene_laundry_room_fem';; my $text = ReadingsVal($name,"running","") eq "true"?"Waschmaschine läuft - Aktuell: ".ReadingsVal($name,"power","")." W":'Standby';; 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\"></a>".FW_makeImage($pic)." $text </div>" }
   event-on-change-reading .*
   genericDeviceType switch
   group      Strom
   model      A_10a_shellyplug
   readingList shellies/shellyplug-s-040C7E/relay/0:.* state
  shellies/shellyplug-s-040C7E/relay/0:.* relay0
  shellies/shellyplug-s-040C7E/input/0:.* input0
  shellies/shellyplug-s-040C7E/online:.* online
  shellies/shellyplug-s-040C7E/announce:.* { json2nameValue($EVENT) }
  shellies/announce:.* { $EVENT =~ m,..id...shellyplug-s-040C7E...mac.*, ? json2nameValue($EVENT) : undef }
  shellies/shellyplug-s-040C7E/relay/0/power:.* {'power' => $EVENT > 1 ? $EVENT : '0'}
  shellies/shellyplug-s-040C7E/temperature:.* temperature
  shellies/shellyplug-s-040C7E/overtemperature:.* overtemperature
  shellies/shellyplug-s-040C7E/relay/0/energy:.* {'total' => sprintf("%.2f",$EVENT/60/1000)}
  shellies/shellyplug-s-040C7E/temperature_f:.* temperature_f
  shellies/shellyplug-s-040C7E/relay/0/power:.* { my $compare = $EVTPART0<ReadingsVal($NAME,"swerta",0) ? "false":"true";; ReadingsVal($NAME,"running","true") eq $compare ? undef: {running => $compare} }
   room       FHEM / Info,Keller,MQTT
   setList    off:noArg shellies/shellyplug-s-040C7E/relay/0/command off
  on:noArg shellies/shellyplug-s-040C7E/relay/0/command on
  x_update:noArg shellies/shellyplug-s-040C7E/command update_fw
  x_mqttcom shellies/shellyplug-s-040C7E/command $EVTPART1
  x_schwellwert {fhem("setreading MQTT2_shellyplug_s_040C7E swerta $EVTPART1");}
  x_strompreis {fhem("setreading MQTT2_shellyplug_s_040C7E spreis $EVTPART1");}
   userReadings total_temp:running:.true { ReadingsNum("$name","total",0) },
gang:running:.false { ReadingsNum("$name","total",0) - ReadingsNum("$name","total_temp",0) },
price:running:.false {sprintf("%.2f",ReadingsVal("$name","gang",0)*ReadingsVal($name,"spreis",0))},
time:running:.false {strftime("%H:%M", localtime(ReadingsAge("$name","total_temp",0)-3600))}
   webCmd     :



Was sagt Ihr dazu?

Beta-User

Boa, ganz schön viele Fragen...

Also:
- Klicken und optionales Schalten eines _anderen_ Devices fände ich klasse. Den zugehörigen Devicenamen bitte in ein userAttr.
- Den Wert für $limit gleich in die readingList zu schreiben, fände ich ausreichend. Aber auch hier wäre alternativ eventuell der Weg über ein userAttr etwas transparenter?
- Diese nachgelagertern Sachen finde ich ganz nett, bin aber noch unentschieden, ob wir das in ein template gießen sollten, oder ob es nicht im Wiki besser aufgehoben wäre; das macht ja jeder irgendwie anders (aber ein funktionierendes Beispiel ist auf alle Fälle ein Gewinn!). Aber wenn via template, würde ich dazu neigen, für die Preisgeschichte kein Reading am Device zu nehmen, sondern den Strompreis aus einem anderen Device (ausnahmsweise ein Dummy...!) holen, wobei ich dafür fix den Namen "Strompreis" nehmen würde, und einen halbwegs sinnvollen Wert als default-Wert in die ReadingsVal-Abfrage reinbauen? (Das hat den Vorteil, dass man es systemweit nur einmalig setzen müßte, was dann die Brücke zu Tasmota noch mehr vereinfachen könnte...)

Aber es dürfen gerne auch andere ihre Meinung dazu sagen; ich habe sowas derzeit selbst nicht im Einsatz, und werde nur das mit dem "Fremd-Slave-Device" schalten nur bei Gelegenheit mal in das devStateIcon des innr-HUEDevice-Dingens einbauen wollen (so die Funkstrecke da hinreicht, wo der Einsatzort wäre... Da gibt es aber weitere Problemchen: ist jetzt das Licht an, oder (auch, nur) der Ventilator?!? Auf welcher Stufe?).

Wie auch immer:

ZitatDas wäre für alle Shelly User (würde auch bei Tasmota u co gehen (https://forum.fhem.de/Smileys/default/wink.gif)) ein großer Gewinn. So könnte man in wenigen Sekunden haben, was mich Wochen gekostet hat. Allerdings konnte ich zu dem Zeitpunkt auch noch null FHEM.
Das ist genau das Ziel der template-Geschichte: Best practice sharen (oder was, was dem möglichst nahe kommt). Deswegen "nerve" ich manchmal auch ein wenig, wenn mir die Dinge noch nicht optimal vorkommen :P .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

87insane

#474
Markiert mich wenn es weiter geht. Hab eine komplette (in meinen Augen) lösung angeboten. Ich danke für die Inspiration.

Was das globale Dummy Device angeht, kann das ja jeder machen wie er mag. Auf ein Template bezogen wäre das ein Beispiel, wenn man das nur dafür nutzt. Ich selber mache keine Jahres Verbrauchs-Werte oder so. Immer nur diese zwischenwerte um det dame des hauses zu sagen was es kostet wenn man sinnlos wäscht und trocknet :-P

Habe das bei mir nun auch so am laufen wie oben geschrieben.

Was das schalten angeht, komme ich da noch immer nicht mit. Das Beispiel mit 433mhz (vermutlich ohne Rück Kanal) ist für mich nicht nachvollziehbar. Bin froh das ich bis auf das Pool Thermometer nix mehr mit 433mhz habe.
Ich wüsste nicht was ich schalten soll im Bezug auf die Trockner / waschmaschinen Debatte.

Ps: dann tu es für mich :) kann ja zusätzlich ins Wiki. Aber ob man es daraus kopiert oder ob man das direkt anbietet. Dann doch lieber beides und im Wiki mit guter Beschreibung.

Bin gespannt wo wir landen :)

Ach ja EDIT:
Den ReadingsVal Wert vom Strompreis würde ich am besten total hoch setzen. So fällt ein fehlendes Reading bzw. ein Fehler eher auf. (Eine Idee, die sogar von dir ist ;))

Zitat- Den Wert für $limit gleich in die readingList zu schreiben, fände ich ausreichend. Aber auch hier wäre alternativ eventuell der Weg über ein userAttr etwas transparenter?
Hmmm... Hier finde ich sowohl deine Lösungen gut aber auch meine. Ich denke von der Systemlast her, würde sich vermutlich, soweit ich die Module im Überblick habe, nichts groß unterschiedlich sein. Hier wäre echt ne andere Meinung sehr gut! Weil laufen tuen die alle. Ich finde es bei meinem Vorschlag gut, dass der Benutzer direkt die Konfig dafür setzen kann. Im Ursprung würde ich hier auch direkt zu große oder viel zu kleine Werte schreiben. Die Readingnamen bei mir im Beispiel, sind mal eben hin geklatscht. So würde ich die auch nicht lassen. Hatte nur leider nicht so viel Zeit und habe schnell runter getippt.

Beta-User

Mahlzeit.

Habe eben mal eine Zwischenversion ins svn geschubst mit der kWh-Berechnung und dem loadState (mit $limit direkt, mit Absicht hier bei einer halbwegs realistischen Marke).

In die "extended version" muß ich mich auch erst mal noch eindenken, hatte aber noch ein paar andere Dinge, die ich sowieso ändern mußte, so habe ich das jetzt für den "basic" mal auf die Schnelle in dem Rutsch mit erledigt, dann haben andere Mitdiskutanten auch die Chance, mit einem "konsolidierten Stand" zu starten.

Das mit dem 433-er Gedöns ist mir auch nicht recht, aber da ist das halt von Hause aus so verbaut - discussion ends here, damit muß/kann ich leben (wie du bei dem Poolthermometer)...

Für Trockner/WM ist das klar, dass Schalten keinen Sinn macht, für eine Dunstabzugshaube ist eine Zwangstrennung vom Strom sogar in bestimmten Fällen Pflicht (aber nicht über das Web-Interface, sondern unabhängig davon) und für mich wäre es evtl hilfreich im Sinne von "alles aus" (das klappt nur leider nicht mit dem Zigbee-Ding, muß mir dafür was anderes überlegen...).
Von daher bin ich schon sehr geneigt, das WM/Trockner-Ding zu überarbeiten und mit aufzunehmen (das ist ja unbestritten eine gute Sache). Dauert aber eben, so ist mir die Konfiguration zu speziell, und ich würde hier für die Preisangabe tatsächlich die Dummy-Lösung gut finden (weil es dann für alle templates "auf einen Rutsch" im Wiki erklärt werden kann, ganz egal, ob shelly, zigbee2mqtt, tasmota...).
Muß mich dazu aber mal mit Perl-Funktionen zu addToUserAttrList auseinandersetzen (oder wie die Funktion auch immer heißt), ist nicht ganz trivial.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

87insane

Hey - hatte aufgrund einer Hochzeit verschwitzt zu antworten...

Hab mir die Templates der Shellys nochmal angesehen. Der Online-Status bzw. Firmware Update Button (gelber Kreis) geht bei allen. Bei mir habe ich diesen nur bei Split Geräten weg gelassen. Also nur im ersten Channel aktiv. Channel 2, 3... Bekommen bei mir nur grün oder aber rot.

shellies/DEVNAME/relay/0/power:.* { my $limit = 100;; my $compare = $EVTPART0<$limit ? "off":"on";; ReadingsVal($NAME,"loadState","on") eq $compare ? undef: {loadState => $compare} }\
Da du hier kein
x_schwellwert {fhem("setreading MQTT2_shellyplug_s_040C7E swerta $EVTPART1");}
oder so haben wolltest, würde ich aber auch die Definition von $limit weg lassen. Dann kann man es auch direkt hinter $EVTPART0 schreiben.

Wie aufwändig ist das eigentlich für FHEM bzw. die HW dahinter, einen durchgehenden loadState (wie es hier genannt wurde) zu überwachen? Immerhin überwacht die Geschichte bei jeder POWER Änderung. Gibt es für sowas eine Art Faust-Regel?

433Mhz - Ja leider... Aber das Ding ist nun auch kaputt und ich glaube ich bastel mal selber was. Hab mittlerweile genug HW-Schrott.

WM und Trockner... Ich lese hier, wie immer weiter mit und bin gespannt.

Beta-User

Dann mal willkommen zurück.

Was ich jetzt konkret in den Shelly-templates zum Online-Status tun soll, habe ich noch nicht so ganz verstanden. Im Moment müßtete es so sein, dass der jeweils nur im ersten Kanal angezeigt wird; wenn man den Status in allen Kanälen zeigen will, verstehe ich den Unterschied nicht, dann gleich "alles" (was ich aber eigentlich auch nicht sooo toll/schlicht too much finde; dann soll sich der user anders informieren lassen, wenn ein Device immer mal wieder ausfällt).
Aber wenn mehr sowas hinreichend deutlich zum Ausdruck bringen, dass sie sowas sinnvoll finden: von mir aus...

Dann habe ich das jetzt mal versucht zu konsolidieren (mit einem zentralen Strompreisdummy, es macht m.E. Sinn, so einen Wert zentral bereitzustellen; das kann übrigens auch ein readingsProxy sein), ist selbstredend nicht getestet ;D ::) :P :

name:shelly1_w_energy_meassuring_washer_example
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*shellies.*
order:A_10b1
desc:Example how to configure a single relay Shelly device offering energy meassuring like Shelly 1PM or Shelly Plug S to visualise the state of a machine behind the plug. Icons will not allow to turn the machine off.
par:DEVNAME;Shelly1 name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,shellies/([^/]*)/, ? $1 : undef }
set DEVICE attrTemplate shelly1_w_energy_meassuring
attr DEVICE devStateIcon { my $amp = ReadingsVal($name,"online","false") eq "false" ? "rot" : ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen";; my $pic = ReadingsVal($name,"loadState","") eq "on"?'scene_laundry_room_fem@green':'scene_laundry_room_fem';; my $text = ReadingsVal($name,"loadState","") eq "on"?"Waschmaschine läuft - Aktuell: ".ReadingsVal($name,"power","")." W":'Standby';; 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 ".FW_makeImage($pic)." $text </div>" }
attr DEVICE userReadings total_temp:loadState:.on { ReadingsNum("$name","total",0) },gang:loadState:.off { ReadingsNum("$name","total",0) - ReadingsNum("$name","total_temp",0) },price:loadState:.off {sprintf("%.2f",ReadingsNum("$name","gang",1)*ReadingsNum("kWh_Price","state",0.30))},time:loadState:.off {strftime("%H:%M", localtime(ReadingsAge("$name","total_temp",0)-3600))}
attr DEVICE comment Adopt $limit in readingList to your needs to get appropriate loadState changes; using a seperate device named kWh_Price indicating actual energy price in state will lead to realistic price results.
attr DEVICE model shelly1_w_energy_meassuring_washer_example


Das mit $limit habe ich belassen, das ist m.E. für "Einsteiger" einfacher zu durchschauen, wenn es vorne steht und nicht irgendwo dazwischen; es gibt dann auch einen comment dazu im Basistemplate, das hatte noch gefehlt.

Was die Last durch den Vergleich angeht, glaube ich nicht, dass das eine größere Belastung ist, das sind ja nur wenige Anweisungen, und das "Überwachen" ist ja keine "loop", sondern geschieht Event-basiert. Werden schon nicht sooo viele Werte sein, die insgesamt so verarbeitet werden.

Feedback: gerne
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

87insane

Ne ne...missverstanden.

Ich brauche das nicht in allen channeln. So wie es ist, ist gut. Es fehlt nur noch überall die Farbe gelb der Ampel ;)

Gesendet von meinem LG-H850 mit Tapatalk


Beta-User

Also im template shelly1 das hier ergänzen, oder?
attr DEVICE devStateIcon {my $onl = ReadingsVal($name,"online","false") eq "true"?"10px-kreis-gruen":"10px-kreis-rot";; my $light = ReadingsVal($name,"state","off");; "<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>"}
(damit es an alle einkanaligen und den ersten Kanal per default vererbt wird)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors