Hallo zusammen,
ich bin der neue, komme vermutlich jetzt öfter ;)
suche eine Möglichkeit, bei einem Shelly (in dem Fall Shelly 2.5 im relay mode) eine art "Kindersicherung" einzubauen, indem ich den Angeschlossenen Schalter "deaktiviere".
man kann mit
set <shellydevice> config btn_type detached 0
in der Befehlszeile von FHEM den Button Type für relay 0 umstellen - damit der angeschlossene Schalter keine Funktion mehr hat. Mit dem gleichen Befehl und edge statt detached entsprechend zurück auf den (bei mir) Regelbetrieb.
analog dazu gibt es das get
get <shellydevice> config btn_type 0
soweit gut.
jetzt würde ich, damit ich das ganze am besten per devStateIcon schalten kann das irgendwie als reading brauchen, auf welches ich zugreifen kann, und da scheitere ich als FHEM Anfänger aktuell ;)
hoffe ist soweit verständlich was ich vor habe.
Lg
Jens
Hi Jens,
ich habe mir mit einem schaltbaren Dummy + einem DOIF etwas ähnliches konfiguriert.
Die Poolpumpe (welche die Solarheizung + Umwälzung steuert) möchte ich mal nur 1 Stunde aber manchmal auch 5 Stunden laufen lassen.
FHEM regelt das und ich schalte den Dummy entsprechend.
Anstelle von "GetHttpFile("192.168.5.50:80", "/relay/1?turn=on&timer=3600"" musst du deine passende Syntax einstellen.
DOIF:
defmod PoolPumpeDOIF DOIF ([PoolPumpe1Std] eq "on")\
(set PoolPumpeDauer off)\
DOELSEIF\
([PoolPumpeDauer] eq "on")\
(set PoolPumpe1Std off)\
DOELSEIF\
([PoolPumpe1Std] eq "on")\
(set PoolPumpe1Std on-for-timer 3600)\
DOELSEIF\
([PoolPumpeDauer] eq "on")\
(set PoolPumpeDauer on-for-timer 18000)
attr PoolPumpeDOIF alias PoolPumpeDOIF
attr PoolPumpeDOIF do always
attr PoolPumpeDOIF room 0.0 Gesamt-> 0.9 Aussen
attr PoolPumpeDOIF wait 0:0:0:0
setstate PoolPumpeDOIF initialize
setstate PoolPumpeDOIF 2021-10-08 09:57:39 Device PoolPumpeDauer
setstate PoolPumpeDOIF 2021-10-08 09:57:38 e_PoolPumpe1Std_STATE off
setstate PoolPumpeDOIF 2021-10-08 09:57:39 e_PoolPumpeDauer_STATE off
setstate PoolPumpeDOIF 2021-10-08 10:43:47 mode enabled
setstate PoolPumpeDOIF 2021-10-08 10:43:47 state initialize
Notify hierzu:
defmod PoolPumpeDauer_notify notify PoolPumpeDauer:on { GetHttpFile("192.168.5.50:80", "/relay/1?turn=on&timer=18000") }
attr PoolPumpeDauer_notify alias PoolPumpeDauer_notify
attr PoolPumpeDauer_notify room 0.0 Gesamt-> 0.9 Aussen
setstate PoolPumpeDauer_notify active
setstate PoolPumpeDauer_notify 2022-02-11 14:40:14 state active
Notify zwei hierzu:
defmod PoolPumpeOff_notify notify PoolPumpeDauer:off { GetHttpFile("192.168.5.50:80", "/relay/1?turn=on&timer=3600")}
attr PoolPumpeOff_notify alias PoolPumpeOff_notify
attr PoolPumpeOff_notify disable 0
attr PoolPumpeOff_notify room 0.0 Gesamt-> 0.9 Aussen
setstate PoolPumpeOff_notify active
setstate PoolPumpeOff_notify 2022-02-11 14:40:14 state active
Dummy1:
defmod PoolPumpe1Std dummy
attr PoolPumpe1Std alias PoolPumpe1Std
attr PoolPumpe1Std genericDeviceType switch
attr PoolPumpe1Std room 0.0 Gesamt-> 0.9 Aussen,Homekit
attr PoolPumpe1Std setList on off
attr PoolPumpe1Std siriName PoolPumpe
attr PoolPumpe1Std useSetExtensions 1
setstate PoolPumpe1Std off
setstate PoolPumpe1Std 2021-10-08 09:57:38 state off
Dummy2:
defmod PoolPumpeDauer dummy
attr PoolPumpeDauer alias PoolPumpeDauer
attr PoolPumpeDauer genericDeviceType switch
attr PoolPumpeDauer room 0.0 Gesamt-> 0.9 Aussen,Homekit
attr PoolPumpeDauer setList on off
attr PoolPumpeDauer useSetExtensions 1
setstate PoolPumpeDauer off
setstate PoolPumpeDauer 2021-10-08 09:57:39 state off
Damit schalte ich den Timer des Shellys.
Das kannst du dir passend umschreiben auf deinen Anwendungsfall.
Schau dir die API des Shellys an - so kannst du ihn per http direkt ansteuern bzw. den Switch Mode ändern.
Viel Erfolg :-)
hi tik tak tok,
nun, das shelly module hat ja die Möglichkeit genau diesen btn Status abzufragen und zu setzen.
wenn ich das ganze jetzt irgendwie als reading bekomme, kann ich auf doif und vorallem dummy verzichten.
ich müsste nur "set <device> config btn_type detached 0" so hinbringen, das ich es als z.b. myBtnType mit wert edge oder detached abrufen und ändern kann.
ziel wäre halt ein zusätzliches statusIcon (z.b. schloss) mit dem ich zwischen edge und detached toggeln kann.
Poste doch mal ein list vom Shelly Device...
Gruß, Joachim
hi,
hier ein raw
defmod Teststellung2.5_noWebCmd Shelly 192.168.177.160
attr Teststellung2.5_noWebCmd devStateIcon 1.on:light_ceiling@yellow:off+0 1.off:light_ceiling_off:on+0 2.on:light_ceiling@yellow:off+1 2.off:light_ceiling_off:on+1 Schreibtisch:noIcon:toggle+0 Arbeitstisch:noIcon:toggle+1
attr Teststellung2.5_noWebCmd devStateStyle style="text-align:right;;;;font-weight:bold;;;;
attr Teststellung2.5_noWebCmd icon light_office@3399FF
attr Teststellung2.5_noWebCmd interval 30
attr Teststellung2.5_noWebCmd mode relay
attr Teststellung2.5_noWebCmd model shelly2.5
attr Teststellung2.5_noWebCmd room FITS,TestUmgebung
attr Teststellung2.5_noWebCmd stateFormat Schreibtisch\
1:relay_0\
<br>\
Arbeitstisch\
2:relay_1
attr Teststellung2.5_noWebCmd webCmd :
setstate Teststellung2.5_noWebCmd Schreibtisch\
1:off\
<br>\
Arbeitstisch\
2:off
setstate Teststellung2.5_noWebCmd 2022-02-25 22:38:44 cloud disabled
setstate Teststellung2.5_noWebCmd 2022-02-27 09:57:09 config btn_type=detached [channel 0]
setstate Teststellung2.5_noWebCmd 2022-02-27 10:36:29 energy_0 8.7
setstate Teststellung2.5_noWebCmd 2022-02-27 01:30:28 energy_1 9.2
setstate Teststellung2.5_noWebCmd 2022-02-25 22:38:44 firmware v1.11.8
setstate Teststellung2.5_noWebCmd 2022-02-27 14:12:17 inttemp 49.24
setstate Teststellung2.5_noWebCmd 2022-02-27 10:14:28 network <html>connected to <a href="http://192.168.177.160">192.168.177.160</a></html>
setstate Teststellung2.5_noWebCmd 2022-02-27 10:36:52 overpower_0 0
setstate Teststellung2.5_noWebCmd 2022-02-27 10:36:53 overpower_1 0
setstate Teststellung2.5_noWebCmd 2022-02-27 10:36:53 power_0 0
setstate Teststellung2.5_noWebCmd 2022-02-27 10:36:54 power_1 0
setstate Teststellung2.5_noWebCmd 2022-02-27 10:36:52 relay_0 off
setstate Teststellung2.5_noWebCmd 2022-02-27 10:36:53 relay_1 off
setstate Teststellung2.5_noWebCmd 2022-02-27 10:36:53 state OK
hoffe du meinst das ;)
Naja raw geht schon, da muss/kann man sich das ja "zusammenbasteln"...
Ansonsten war "list Devicename" gemeint ;)
Bin nur grad unterwegs, muss ich später schauen...
Gruß, Joachim
aha xD
ok auch das lässt sich regeln ;)
danke schonmal!
Internals:
DEF 192.168.177.160
DURATION 0
FUUID 62194c64-f33f-0d8f-9a0c-8c491614b5fc0f00
FVERSION 36_Shelly.pm:v3.4.0-s25465/2022-01-14
INTERVAL 30
NAME Teststellung2.5_noWebCmd
NR 63
SHELLYID shellyswitch25-40F5202E0ABD
STATE Schreibtisch
1:off
<br>
Arbeitstisch
2:off
TCPIP 192.168.177.160
TYPE Shelly
READINGS:
2022-02-25 22:38:44 cloud disabled
2022-02-27 09:57:09 config btn_type=detached [channel 0]
2022-02-27 10:36:29 energy_0 8.7
2022-02-27 14:16:04 energy_1 9.3
2022-02-25 22:38:44 firmware v1.11.8
2022-02-27 14:29:36 inttemp 49.24
2022-02-27 10:14:28 network <html>connected to <a href="http://192.168.177.160">192.168.177.160</a></html>
2022-02-27 14:14:54 overpower_0 0
2022-02-27 14:15:03 overpower_1 0
2022-02-27 10:36:53 power_0 0
2022-02-27 10:36:54 power_1 0
2022-02-27 14:14:54 relay_0 off
2022-02-27 14:15:03 relay_1 off
2022-02-27 14:15:03 state OK
Attributes:
devStateIcon 1.on:light_ceiling@yellow:off+0 1.off:light_ceiling_off:on+0 2.on:light_ceiling@yellow:off+1 2.off:light_ceiling_off:on+1 Schreibtisch:noIcon:toggle+0 Arbeitstisch:noIcon:toggle+1
devStateStyle style="text-align:right;;font-weight:bold;;
icon light_office@3399FF
interval 30
mode relay
model shelly2.5
room FITS,TestUmgebung
stateFormat Schreibtisch
1:relay_0
<br>
Arbeitstisch
2:relay_1
webCmd :
Du hast/hättest doch das Reading "config"?
Also ich habe ja den 2.5 auch mit dem Shelly-Modul, allerdings als "Shutter".
Ich habe etwas "rumprobiert" und folgendes funktioniert bei mir:
{my $Config=ReadingsVal("$name", "config", "n.a.");my $ShutterPos=ReadingsNum("$name", "pct", 100); my $icon="1..*:fts_shutter_100"; if($ShutterPos > 80){$icon="1..*:fts_shutter_10"}elsif($ShutterPos > 60){$icon="1..*:fts_shutter_30"}elsif($ShutterPos > 40){$icon="1..*:fts_shutter_50"}elsif($ShutterPos > 20){$icon="1..*:fts_shutter_80"}; $icon .= " 2.stopped:control_arrow_down:closed 2.moving_up:control_arrow_down 2.moving_down:control_arrow_down\@red 3..*:time_manual_mode:stop 4.moving_down:control_arrow_up 4.stopped:control_arrow_up:open 4.moving_up:control_arrow_up\@red"; if($Config =~ "detached"){$icon.=" 5..*:time_automatic:config+btn_type+edge+0"}else{$icon.=" 5..*:time_manual_mode:config+btn_type+detached+0"}; return $icon;}
Also devStateIcon und bei stateFormat folgendes:
1:pct
<br>
2:state
3:state
4:state
<br>
5:config
Ich schau mir an was du hast und versuche das mal anzupassen...
...oder du baust selbst entsprechend um.
Ich kann nicht genau testen, da sich mein Shutter wohl (etwas) anders verhält.
Allerdings konnte ich so auch "detached" umschalten...
Die Anzeige des Icons passt nicht, da sich bei mir das Reading "config" nicht ändert...
Wenn das bei dir auch so ist, dann müsste man etwas (mehr) "faken", um zu wissen welchen Zustand man hat und daher welches Icon angezeigt werden soll und welcher Befehl beim Klick darauf ausgeführt werden soll...
EDIT: sieht bei mir halt wie folgt aus. pct macht abhängig vom "Öffnungsgrad" eben ein passendes Icon (ohne "Click-Funktion") und dann neue Zeile (<br>) nebeneinander Pfeil hoch/runter und die "Hand" zum Stoppen. Entsprechend eingefärbte Pfeile, wenn gerade in Bewegung ist. Und neu ;) drunter noch mal eine Hand, wenn nicht "detached" ist mit der Umschaltung zu detached bei Klick. Das kann ich nicht testen, weil bei mir im Reading "config" nie detached etc. steht (bei dir ja wohl schon). Allerdings wurde der Shelly bei Klick auf "detached" umgestellt, scheint also zumindest zu funktionieren... 8)
Gruß, Joachim
Bei dir sollte doch folgendes gehen, devSateIcon:
{my $Config=ReadingsVal("$name", "config", "n.a.");my $icon="1.on:light_ceiling\@yellow:off+0 1.off:light_ceiling_off:on+0 2.on:light_ceiling\@yellow:off+1 2.off:light_ceiling_off:on+1 Schreibtisch:noIcon:toggle+0 Arbeitstisch:noIcon:toggle+1"; if($Config =~ "detached"){$icon.=" 3..*:time_automatic:config+btn_type+edge+0"}else{$icon.=" 3..*:time_manual_mode:config+btn_type+detached+0"}; return $icon;}
EDIT: korrigiert, @ "escaped" 8)
und stateFormat:
Schreibtisch
1:relay_0
<br>
Arbeitstisch
2:relay_1
<br>
3:config
Leider kann ich das nur bedingt testen...
Gruß, Joachim
moin,
also als relay ist der 2.5 halt letztlich wie 1er shellys - nur eben mit 2 Kanälen.
attr Teststellung2.5_noWebCmd devStateIcon: Global symbol "@yellow" requires explicit package name (did you forget to declare "my @yellow"?) at (eval 20513) line 1.
Global symbol "@yellow" requires explicit package name (did you forget to declare "my @yellow"?) at (eval 20513) line 1.
bekomm den error wenn ich versuche deinen devStateIcon code einzufügen.
das config reading ist halt nicht "verlässlich" weil da nur dann das drin steht, was ich vorher oben über set oder get gemacht habe, daher wäre halt ein "festes" reading für den button type für Kanal 0 und 1 sinnvoller aus meiner sicht oder? :)
lg jens
SORRY!
Hatte nur deinen "devStateIcon-Code" kopiert...
...in Perl eingebunden muss man "escapen", also statt @ ein \@
Gruß, Joachim
Zitat von: draddy am 27 Februar 2022, 17:33:56
das config reading ist halt nicht "verlässlich" weil da nur dann das drin steht, was ich vorher oben über set oder get gemacht habe, daher wäre halt ein "festes" reading für den button type für Kanal 0 und 1 sinnvoller aus meiner sicht oder? :)
Hallo Jens,
hm, also wenn nach einem get... das config Reading stimmt, dann müsste man nur ein get ... "nachschießen", da müsste ich aber erst selber ein wenig "experimentieren"...
...oder halt zusätzlich zum set config ... ein setreading absetzen und sich selbst ein Reading erzeugen, das dann aber auch nur richtig stimmt, wenn nur per devStateIcon umgestellt wird...
Evtl. noch ein userReadings, das halt (leider ausnamsweise auf "alles" triggert oder auf "vieles") dann ein get config ... ausführt.
Leider liefert das get config ... bei mir nichts "vernünftiges" (nehme an wegen shutter mode), kann also nicht wirklich testen, leider...
Gruß, Joachim
alles gut, dann maskiere ich gleich mal ..
zum config reading
wenn du im get auswahl mal auf registers gehst und get klickst bekommst du das hier
reset=1⟶factory reset
default_state=off|on|last|switch⟶state after power on
btn_type=momentary|toggle|edge|detached⟶type of local button
auto_on=<seconds>⟶timed on
auto_off=<seconds>⟶timed off
Set/Get these registers by calling set/get Teststellung2.5_noWebCmd config <registername> <value> [<channel>]
(also wenigstens bei mir)
wenn ich aber jetzt z.b. ein config default_state auslöse, ist das config reading halt
config default_state=last [channel 0]
am ende muss ich das ganze eben auch für beide channels machen können, wobei ich das dann hin bekommen sollte, wenn es einmal sauber für einen läuft.
weiters habe ich halt bewusst KEINEN devChannel gesetzt, weil es diesen bei mir nicht gibt, daher ja auch die andere config alles mit 0 und 1 immer was eben relay 0 und 1 entspricht ;)
defStateIcon
{my $Config=ReadingsVal("$name", "config", "n.a.");my $icon="1.on:light_ceiling\@yellow:off+0 1.off:light_ceiling_off:on+0 2.on:light_ceiling\@yellow:off+1 2.off:light_ceiling_off:on+1 Schreibtisch:noIcon:toggle+0 Arbeitstisch:noIcon:toggle+1"; if($Config =~ "detached"){$icon.=" 3..*:time_automatic:config+btn_type+edge+0"}else{$icon.=" 3..*:time_manual_mode:config+btn_type+detached+0"}; if($Config =~ "detached"){$icon.=" 4..*:time_automatic:config+btn_type+edge+1"}else{$icon.=" 4..*:time_manual_mode:config+btn_type+detached+1"}; return $icon;}
stateFormat:
Schreibtisch
3.config
1:relay_0
<br>
Arbeitstisch
4:config_1
2:relay_1
(habe jetzt einfach die configs nur ergänzt, also nicht über 3 1 4 2 wundern xD)
das schalten scheint zu gehen wenn ich das richtig sehe, allerdings immer nur das eine oder andere, weil eben die saubere zuordnung für relay 0 und 1 fehlt aktuell.
auch ändert sich das icon für beide, wenn ich den status ändere.
bis auf icons würde ich mir das am ende so vorstellen:
Ich merke schon: so viel hab ich mit dem Shelly Modul noch nicht "rumgespielt" ;)
Naja, bei mir kommt da einiges mehr und vieles/einiges anders...
EDIT:
reset=1⟶factory reset
default_state=stop|open|close|switch⟶state after power on
swap=true|false⟶swap open and close
input_mode=openclose|onebutton⟶two or one local button
btn_type=momentary|toggle|detached⟶type of local button
obstacle_mode=disabled|while_opening|while_closing|while_moving⟶when to watch
obstacle_action=stop|reverse⟶what to do
obstacle_power=<watt>⟶power threshold for detection
obstacle_delay=<seconds>⟶delay after motor start to watch
safety_mode=disabled|while_opening|while_closing|while_moving⟶safety mode=2nd button
safety_action=stop|pause|reverse⟶action when safety mode
safety_allowed_on_trigger=none|open|close|all⟶commands allowed in safety mode
Set/Get these registers by calling set/get Schaltaktor_WoZi_Rollo config <registername> <value> [<channel>]
Und ich habe ja in dem Sinne keine 2 Relais mehr...
Die sind ja vom Shelly selbst (so hoffe/denke ich) "verriegelt"...
Daher kann ich nur bedingt testen... :-\
Ich werde mal schauen, ob man ein setreading hinterher bekommt.
Das würde dann zumindest die Anzeige und das Schalten etc. passend machen.
ABER (wie ja bereits ausgeführt): halt nur "stimmig", wenn per fhem geschalten wird. Wenn direkt am Shelly rumkonfiguriert wird, dann stimmt der Status im Device nat. nicht (mehr)...
Kann aber etwas dauern...
Gruß, Joachim
hi Joachim,
ja, sind anders aus bei dir, und ja, im roller betrieb sollte er verriegeln, son rollo motor kann schlecht rauf und runter zur gleichen zeit xD
wurde aber, wenn ichs richtig gesehen hab, hier oder im shelly forum mehrfach getestet, und er lässt in keiner weise zu das rauf und runter gleichzeitig geschaltet wird :D
wiegesagt, für meine sache wären halt 2 readings "wichtig" - damit er den Typ von jedem relay kennt, das dieser nicht stimmen würde, wenn ich den status im shelly sofort ändere, halte ich für zu vernachlässigen ... selbst wenn ich das mal machen würde, würde nichts passieren was fhem nicht wieder regeln kann, im schlimmsten fall denkt fhem er ist im detach aber der schalter ist im edge ... dann zeigt er das falsche symbol, schaltet einmal "falsch" bzw. garnicht aber im nächsten anlauf ist er ja wieder syncron, UND von dieser schaltung hängen keine leben ab ;)
schonmal danke für deine hilfe.
versuche, wenn du was neues hast, schnellst möglich zu testen ;)
Also ich hab mal ein wenig rumgespielt... ;)
Gut ein reines "copy/paste" kann ich leider nicht liefern, versuche es aber... 8)
Es könnte wohl mit cmdalias klappen, hier mal die Theorie (getestet an einem dummy ;) ):
es muss ein cmdalias für relais0-detach und relais0-edge erstellt werden, gleiches dann für relais1.
Mal das Prinzip.
Ich versuche das mal, kann es aber nicht wirklich testen (da kommst du ;) ) RawDef:
defmod caRelais0Detach cmdalias set <shellydevice> config btn_type detached 0 AS set <shellydevice> config btn_type detached 0;; sleep 0.1;; setreading <shellydevice> relais_0_sw detached
defmod caRelais0Edge cmdalias set <shellydevice> config btn_type edge 0 AS set <shellydevice> config btn_type edge 0;; sleep 0.1;; setreading <shellydevice> relais_0_sw edge
Du könntest ja mal die beiden cmdalias anlegen, dann sollte eigentlich (so hoffe ich) beim Ausführen des set-Befehls dieser ausgeführt werden UND zusätzlich eben ein Reading im Device auftauchen, das eben den geschalteten Status anzeigen sollte...
Wenn das geht, dann muss man ja nur das devStateIcon und stateFormat auf dieses Reading umstellen.
Dann eben noch 2 cmdalias für das Relais1 sofern da nat. der set Befehl auch anders lautet, also (so "interpoliere" ich): set <shellydevice> config btn_type detached 1
Nette Idee, vielleicht etwas abgewandelt, so geht es leider nicht (hatte ich schon befürchtet):
2022.02.27 20:05:16 3: cmdalias caRelais0Detach called recursively, skipping execution
Gruß, Joachim
Ich hab evtl. eine Variante gefunden :)
Wir "erfinden" einfach ein neues Kommando für den Shelly!
defmod caRelais0Detach cmdalias set <shellydevice> detach AS set <shellydevice> config btn_type detached 0;; sleep 0.1;; setreading <shellydevice> relais_0_sw detached
defmod caRelais0Edge cmdalias set <shellydevice> edge AS set <shellydevice> config btn_type edge 0;; sleep 0.1;; setreading <shellydevice> relais_0_sw edge
Somit "versteht" der Shelly <shellydevice> dann eben auch:
set <shellydevice> detach/edge
D.h. noch gleiches für Relais1 und dann eben stateFormat mit den neuen Readings relais_0_sw bzw. relais_1_sw (Namen kannst du nat. anpassen ;) ) und eben im devStateIcon dann als "Befehl" detach/edge...
Evtl. reicht dir ja die Beschreibung...
Ansonsten versuche ich evtl. morgen mal die komplette Lösung zu posten...
Gruß, Joachim
Also ich hab das nun mal für mich für einen Kanal (hab ja nicht wirklich Kanäle ;) ) gebastelt.
Ich poste mal was ich habe, du musst halt evtl. anpassen...
Hier mal die cmdalias:
defmod caRelay0Detach cmdalias set Teststellung2.5_noWebCmd detach0 AS set Teststellung2.5_noWebCmd config btn_type detached 0;; sleep 0.1;; setreading Teststellung2.5_noWebCmd relay_0_sw detached
EDIT: korrigiert: detach -> detached ;)
defmod caRelay0Default cmdalias set Teststellung2.5_noWebCmd default0 AS set Teststellung2.5_noWebCmd config btn_type edge 0;; sleep 0.1;; setreading Teststellung2.5_noWebCmd relay_0_sw default
Dann stateFormat:
Schreibtisch\
1:relay_0\
<br>\
Arbeitstisch\
2:relay_1
<br>\
3:relay_0_sw
Und noch devStateIcon:
{my $icon="1.on:light_ceiling\@yellow:off+0 1.off:light_ceiling_off:on+0 2.on:light_ceiling\@yellow:off+1 2.off:light_ceiling_off:on+1 Schreibtisch:noIcon:toggle+0 Arbeitstisch:noIcon:toggle+1"; $icon.=" 3.detached:time_manual_mode\@red:default0 3.default:time_manual_mode\@green:detach0"; return $icon;}
EDIT:
Hmm, ich sehe grad, mit dieser Lösung braucht es ja gar kein Perl ;)
Sollte also so auch gehen:
1.on:light_ceiling@yellow:off+0 1.off:light_ceiling_off:on+0 2.on:light_ceiling@yellow:off+1 2.off:light_ceiling_off:on+1 Schreibtisch:noIcon:toggle+0 Arbeitstisch:noIcon:toggle+1 3.detached:time_manual_mode@red:default0 3.default:time_manual_mode@green:detach0
Ich hoffe ich hab meiner Rückanpassung auf deine Namen etc. nichts "verdröselt"...
...bei mir hat es zumindest prima funktioniert :)
Für Relais1 dann entsprechend...
EDIT: und hier hatte ich noch einen kleinen "Fehler" ;) Also ich habe ja nur einen Kanal wenn man so will... Hier brauchen wir ja 4 neue Befehle, daher "musste" ich aus set Device detach ein set Device detach0 machen. Für Relay 1 dann eben set Device detach1 ebenso dann auch im cmdalias...
EDIT: und weil ich dann schon mal weiter rumgebastelt habe, habe ich mal "trocken" alles zusammengestellt, hier also die beiden anderen cmdalias:
defmod caRelay1Detach cmdalias set Teststellung2.5_noWebCmd detach1 AS set Teststellung2.5_noWebCmd config btn_type detached 1;; sleep 0.1;; setreading Teststellung2.5_noWebCmd relay_1_sw detached
EDIT: korrigiert: detach -> detached ;)
defmod caRelay1Default cmdalias set Teststellung2.5_noWebCmd default1 AS set Teststellung2.5_noWebCmd config btn_type edge 1;; sleep 0.1;; setreading Teststellung2.5_noWebCmd relay_1_sw default
Und das stateFormat:
Schreibtisch\
1:relay_0\
<br>\
Arbeitstisch\
2:relay_1
<br>\
3:relay_0_sw
<br>\
4:relay_1_sw
Und nat. devStateIcon:
1.on:light_ceiling@yellow:off+0 1.off:light_ceiling_off:on+0 2.on:light_ceiling@yellow:off+1 2.off:light_ceiling_off:on+1 Schreibtisch:noIcon:toggle+0 Arbeitstisch:noIcon:toggle+1 3.detached:time_manual_mode@red:default0 3.default:time_manual_mode@green:detach0 4.detached:time_manual_mode@red:default1 4.default:time_manual_mode@green:detach1
EDIT: danke! Durch dich/diese "Übung" habe ich es nun für mich eingebaut :) Hatte "sowas" ja eh schon gesucht, um meine Schalter zu sperren, wenn das Fenster/Balkontüre auf ist. Allerdings weniger das Schalten durch "Knöpfe" in fhem sondern automatisch per Notify, wenn das Fenster auf/zu geht... Also danke für die Befehle, das andere hat mich mal dazu gebracht mir cmdalias anzuschauen ;)
EDIT: bei mir sieht es wie folgt aus. Rot und mit Hand, wenn deaktiviert und ansonsten mit Auto-Modus...
Gruß, Joachim
hi Joachim,
erstmal DANKE ;)
mach mich mal ans testen und versuche es zu verstehen :D
gebe dann nochmal Rückmeldung ;)
Lg
Jens
Zitat von: draddy am 27 Februar 2022, 22:49:35
hi Joachim,
erstmal DANKE ;)
mach mich mal ans testen und versuche es zu verstehen :D
gebe dann nochmal Rückmeldung ;)
Lg
Jens
Hallo Jens,
gerne und viel Erfolg!
(ich hoffe es klappt tatsächlich)
Ja, verstehen, da tue ich mich nat. leichter, weil ich habe es mir ja erarbeitet ;)
Aber eigentlich ganz einfach ;)
Miitels cmdalias "versteht" das Shelly-Device eben neue Kommandos:
set Device default0 -> schalte "normal-Modus" Relay 0
set Device detach0 -> schalte "detach-Modus" Relay 0
set Device default1 -> schalte "normal-Modus" Relay 1
set Device detach1 -> schalte "detach-Modus" Relay 1
Und hat dank cmdalias (bzw. dem dann tatsächlich ausgeführten Befehls mit dem setreading) auch 2 neue Readings mit jeweils 2 Werten:
relay_0_sw -> default/detached
relay_1_sw -> default/detached
U.U. muss man die Kommandos mal per WebCmd ausführen, also:
set Teststellung2.5_noWebCmd default0
set Teststellung2.5_noWebCmd default1
damit eben die Readings da sind auf das ja stateFormat und devStateIcon bauen...
Ich denke wenn du die beiden Befehle mal eingegeben hast (nach dem anlegen der cmdalias), dann wird es klarer so denke/hoffe ich.
Evtl. zum Verstehen eher folgende Befehle absetzen:
set Teststellung2.5_noWebCmd detach0
set Teststellung2.5_noWebCmd detach1
Aber aufpassen: die neuen Befehle stehen nat. (leider) nicht "am" Device Teststellung2.5_noWebCmd zur Verfügung (dort gibt es [nat.] nur was auch im Modul programmiert wurde)... Man kann es dort also nicht per DropDown etc. auswählen...
Sondern man kann/muss das eben in das FhemWeb-cmd eingeben...
Gruß, Joachim
Hi Joachim,
also, das Reading etc. klappt.
nur wird nicht geschaltet ^^
wenn also auf deteched steht, - und ich mit get <device> config btn_type abfrage, ist immer noch edge gesetzt - sprich der set klappt noch nicht.
habs, kleiner fehler grosse wirkung ;)
€dit: hatte die list noch angepasst ans Bild .. dabei die Lösung gelöscht ... also hier nochmal xD
FALSCH
set Teststellung2.5_noWebCmd detach0 AS set Teststellung2.5_noWebCmd config btn_type detach 0; sleep 0.1; setreading Teststellung2.5_noWebCmd relay_0_sw detached
RICHTIG
set Teststellung2.5_noWebCmd detach0 AS set Teststellung2.5_noWebCmd config btn_type detached 0; sleep 0.1; setreading Teststellung2.5_noWebCmd relay_0_sw detached
dir ist beim befehl an den shelly das "ed" runter gefallen, default (edge) hat geklappt, detach(ed) nicht ;)
hier noch list von der fertigen teststellung, sobald mein elektriker mir den shelly eingebaut hat, kann ich das (bis auf den namen) übernehmen und gut ;)
Internals:
DEF 192.168.177.160
DURATION 0
FUUID 62194c64-f33f-0d8f-9a0c-8c491614b5fc0f00
FVERSION 36_Shelly.pm:v3.4.0-s25465/2022-01-14
INTERVAL 30
NAME Teststellung2.5_noWebCmd
NR 63
SHELLYID shellyswitch25-40F5202E0ABD
STATE Schreibtisch
3:default
1:off
<br>
Arbeitstisch
4:detached
2:off
TCPIP 192.168.177.160
TYPE Shelly
OLDREADINGS:
READINGS:
2022-02-25 22:38:44 cloud disabled
2022-02-27 23:48:41 config btn_type=detached [channel 1]
2022-02-27 23:44:07 energy_0 9.3
2022-02-27 19:02:15 energy_1 9.7
2022-02-25 22:38:44 firmware v1.11.8
2022-02-27 23:50:38 inttemp 52.77
2022-02-27 10:14:28 network <html>connected to <a href="http://192.168.177.160">192.168.177.160</a></html>
2022-02-27 23:32:05 overpower_0 0
2022-02-27 19:59:27 overpower_1 0
2022-02-27 23:32:06 power_0 0
2022-02-27 23:27:02 power_1 0
2022-02-27 23:32:05 relay_0 off
2022-02-27 23:47:32 relay_0_sw default
2022-02-27 19:59:27 relay_1 off
2022-02-27 23:48:41 relay_1_sw detached
2022-02-27 23:40:37 state OK
Attributes:
devStateIcon Schreibtisch:noIcon:toggle+0 Arbeitstisch:noIcon:toggle+1
1.on:light_ceiling@yellow:off+0 1.off:light_ceiling_off:on+0
2.on:light_ceiling@yellow:off+1 2.off:light_ceiling_off:on+1
3.detached:secur_locked@red:default0 3.default:secur_open@green:detach0
4.detached:secur_locked@red:default1 4.default:secur_open@green:detach1
devStateStyle style="text-align:right;;font-weight:bold;;
icon light_office@3399FF
interval 30
mode relay
model shelly2.5
room FITS,TestUmgebung
stateFormat Schreibtisch
3:relay_0_sw
1:relay_0
<br>
Arbeitstisch
4:relay_1_sw
2:relay_1
webCmd :
und ein bildchen, wies ausschaut. OHNE webCmd :D
DANKE Joachim!
Eieiei, da ist dann wohl beim Anpassen von "mich" auf "dich" was schief gelaufen ;)
Hab's oben korrigiert...
Aber es läuft ja jetzt :)
Packst du noch ein [gelöst] o.ä. "vorne dran", danke.
Dann noch viel Spaß, Joachim
hoffe passt so, hab nix gefunden ums anders zu taggen ;)
Zitat von: draddy am 28 Februar 2022, 00:49:35
hoffe passt so, hab nix gefunden ums anders zu taggen ;)
Perfekt! :)
für mein Verständnis.
wenn ich das ganze jetzt auf ein anderes Shelly 2.5 übertragen will, änder ich bei den CMD Alias alles auf den Namen des anderen 2.5 ab UND muss dem ca auch nen anderen namen geben, oder? ;)
lg jens
Wenn du nur einen anderen Shelly statt dem jetzigen nehmen willst oder den jetzigen umbenennen willst/musst, dann musst du "nur" den Namen "im" cmdalias anpassen, der Name des cmdalias ist egal...
...wenn du einen WEITEREN Shelly haben willst, der genauso funktioniert, dann würde ich einfach rawdef der beiden cmdalias pro Kanal öffnen, den Namen des cmdalias UND den Namen des Shelly anpassen/ändern und dann "execute"...
D.h. pro Shelly, der sich so verhalten soll brauchst du eben pro Kanal zwei cmdalias.
Evtl. kann man auch mit RegEx aus den 2 cmdalias pro Kanal einen machen, evtl. sogar nur einen pro Shelly...
Aber cmdalias habe ich (vor hier) nocht nie verwendet ;)
Kurz:
jedes Device (auch cmdalias) braucht einen EIGENEN, EINDEUTIGEN Namen und für jeden Kanal gibt es eben 2 Befehle die "erfunden" werden müssen -> 2 cmdalias (2 Devices -> 2 Namen dafür)
"innerhalb" des cmdalias taucht nat. das Device auf, für das eben ein neues Kommando "erfunden" werden soll/muss...
Gruß, Joachim
alles klar, so hab ichs auch gemacht, dann sind wir aufm gleichen stand in dem punkt xD
Hallo ihr beiden,
hab mir rein aus Interesse wie man die 2 Readings erhalten könnte das erste Mal ein Device vom Typ Shelly definiert um hier mitzukommen.
Ich hab nur 1er Shellys, kann also auch nur bedingt testen. Wenn ich ein set <devicename> config btn_type detached 0
ausführe wird der gesetzte Wert immer zuverlässig in das Reading config geschrieben (wie ich euch/es verstehe ist das nicht der Rückgabewert vom Shelly). Bei Joachim ändert sich das Reading config nicht bei einer Änderung, bei Jens schon <= und da setz ich an weil es das gleiche Verhalten wie bei mir zu sein scheint.
Die zwei zusätzlichen setter braucht man doch nicht wirklich, es geht doch nur um die zwei Readings ?
Diese beiden userReadings ändern sich nur wenn "momentary|toggle|edge|detached" in dem Reading config gematched wird, diese Werte kommen laut euren und meinem "get config registers" nur bei dem "Befehl" btn_type vor.
attr Teststellung userReadings relay_0_sw:config:.* {my $confr =ReadingsVal($name,'config','none');;my @ar=split/ /,$confr;;my $ad= $ar[2];;chop $ad;;$ad == 0 && $confr =~ m,[\=](momentary|toggle|edge|detached), ? return $1 : return ;;},\
relay_1_sw:config:.* {my $confr =ReadingsVal($name,'config','none');;my @ar=split/ /,$confr;;my $ad= $ar[2];;chop $ad;;$ad == 1 && $confr =~ m,[\=](momentary|toggle|edge|detached), ? return $1 : return ;;}
Kann man sicherlich weiter verbessern, aber was haltet Ihr (OK, nur Jens, bei Joachim kommt ja nix bei config "zurück") davon es nur mit userReadings umzusetzen, hab ich vlt. noch was übersehen ?
Mich würden bei der jetzigen Lösung die zwei zusätzlichen Devices stören, nur um den Zustand zu erhalten und dann das ganze auch noch mehrfach bei x Shellys :o
Es ist eine mögliche Lösung wenn halt goar nix in das config-Reading "geschrieben" wird.
Gruß
Thomas
Hi Thomas,
müsste ich mal testen, vll. morgen.
die sache bei Joachim und dir ist, ihr habt jeweils nur ein Reading, auf dem modul dafür, das war eben beim 2.5er in relay config das Problem, ich brauch readings für 2 relays da die schalter ja sonst nicht wissen wer jetzt grade on oder off sein soll (wenigstens von den symbolen) darum ist Joachim auf die idee mit cmdalias gekommen.
nur müsste doch dann in den devStateCode auch noch das set btn_type detached | edge 0 | 1 rein oder?
weiters ist die frage, wann wird das reading ausgeführt? (bin noch nicht so ein FHEM crack - mach das erst seit kanpp 2 Wochen :D)
ich persönlich finde die sache mit den cmdalias gar nicht soo schlecht, die frage ist, könnte man das nicht optimieren / verallgemeinern damit man es quasi von jedem shelly der es benötigen würde aufrufem kann.
quasi
<cmdalias> edge 0
wobei der cmdalias natürlich in der lage sein muss, zu wissen von wem er gerufen wurde (DAS ist die frage obs geht, soo tief bin ich nicht drin)
dann kann der cmdalias die operation machen
set <caller> btn_type $1 $2 setreading <caller:relay_sw$2> edge
wobei $1 fürs erste und $2 für das 2. übergebene Parameter (edge und 0) stehen soll
damit wäre man mit relativ wenig code und einem modul quasi maximal flexible (wenn ich jetzt nichts übersehen habe bei meiner überlegung)
ist natürlich alles pseudocode ... muss mich da echt noch reinfuxen in fhem und perl wie / ob das möglich wäre.
lg
Jens
Hallo Thomas,
die Idee hatte ich auch schon aber wie du selber gemerkt hast ist das Verhalten bei uns wohl anders, bei mir auf jeden Fall...
Und da konnte ich nicht testen und einen (rein) "theoretischen" Vorschlag wollte ich nicht machen... Und auch nicht meinen Shelly umkonfigurieren... ;)
@Jens: der set... kommt bei Thomas Vorschlag ganz normal ins devStateIcon. Nur in stateFomat eben die userReadings...
@Jens: ja das wäre genau die "Optimierung" von der ich gesprochen hatte. Aber ich hab mich erst "durch dich" überhaupt mit cmdalias beschäftigt... ;) Was da sonst so alles geht/ginge: (noch) keine Ahnung...
Gruß, Joachim
here we go,
noch nicht 100% ABER!
1 cmdalias pro Shelly - sollte (theoretisch) auch für die Single bzw. Roller so klappen (DAS ist euer part zu testen ^^)
DEF vom cmdalias
set Teststellung2.5_noWebCmd mybType .* AS set $EVTPART0 config btn_type $EVTPART2 $EVTPART3; sleep 0.1; setreading $EVTPART0 $EVTPART1_$EVTPART3 $EVTPART2
Mein stateFormat
Schreibtisch
3:mybType_0
1:relay_0
<br>
Arbeitstisch
4:mybType_1
2:relay_1
und mein devStateIcon
Schreibtisch:noIcon:toggle+0 Arbeitstisch:noIcon:toggle+1
1.on:light_ceiling@yellow:off+0 1.off:light_ceiling_off:on+0
2.on:light_ceiling@yellow:off+1 2.off:light_ceiling_off:on+1
3.detached:secur_locked@red:mybType+edge+0 3.edge:secur_open@green:mybType+detached+0
4.detached:secur_locked@red:mybType+edge+1 4.edge:secur_open@green:mybType+detached+1
was ich nicht hinbekomme, ist der universal aufruf ... Daher muss (aktuell) der alias mit set <devicename> anfangen alles andere ist aber so aufgebaut, dass man das cmdalias kopiert, <devicename> austauscht, und es bereit für den nächsten shelly ist.
angesprochen wird er eben mit <befehl> <schaltermodus> <channel> also z.b. mybType edge 0
was ihr jetzt mal testen müsst ist, was passiert wenn ihr den mit mybType edge bzw detached ansprecht (also OHNE channel, weil es die bei euch ja nicht wirklich gibt) von der überlegung sollte das klappen, weil $EVTPART3 einfach nicht gibt ... einzig das stateFormat müsste dann auf "mybType_" geändert werden, ODER - man baut das ganze einfach ohne _ ... dann wäre es mybType0 | 1 oder eben ohne nummer - wäre vll. auch ne möglichkeit, aber dabei seit ihr deutlich fitter als ich, also sollte das für euch klar / easy sein ^^
lg Jens