Hallo,
ich versuche aktuell mein Schreibtischlampen Device "togglebar" zu machen.
Erstmal das Device:
Internals:
IODev MQTT
NAME esp01_Schreibtischlampe
NR 25
STATE An
TYPE MQTT_DEVICE
qos 0
retain 0
Readings:
2017-05-29 15:07:55 state rc,ON=1111100100
2017-05-29 15:07:55 status An
2017-05-29 15:07:55 transmission-state outgoing publish sent
Publishsets:
:
topic /esp01/cmd
values:
rc,OFF=1111100100
rc,ON=1111100100
Sets:
rc,OFF=1111100100
rc,ON=1111100100
subscribe:
subscribeExpr:
Attributes:
IODev MQTT
alias Schreibtischlampe
devStateIcon An:on Ous:off
eventMap rc,OFF=1111100100:Aus rc,ON=1111100100:An
group Licht
icon on
publishSet rc,OFF=1111100100 rc,ON=1111100100 /esp01/cmd
room Homeplus,MQTT,Zimmer
stateFormat state
uiDeviceType SWITCH
uiDeviceTypeParameter Eingeschaltet
uiDisplayName Schreibtischlampe
uiGet [[DEVICE:esp01_Schreibtischlampe:status|IF:"%1%"="An",1,0]]
uiSet set esp01_Schreibtischlampe [[IF:"%VALUE%"="1",An,Aus]]
uiShow 1
userReadings status { ReadingsVal("esp01_Schreibtischlampe","state",0) eq "rc,ON=1111100100" ? "An" : "Aus" }
webCmd An:Aus
Wenn ich nun eingebe "set esp01_Schreibtischlampe toggle" kommt "Unknown argument toggle, choose one of rc,OFF=1111100100 rc,ON=1111100100".
Wobei "set esp01_Schreibtischlampe [An/Aus]" funktioniert. Kann ich den toggle-Befehl irgendwie andere Anweisungen geben, oder wie genau arbeitet dieser?
Irgendwo meine ich gelesen zu haben, dass man "setList switch" in dem Device setzen soll. Das Attribut gibt es aber nicht bei MQTT-Devicen.
Ginge dies über ein MQTT-Device? Oder muss ich das über eine Dummy-Device machen? (Habe mir noch nie Dummys angeschaut, wird nachher mal Zeit)
Viele Grüße,
Cludch
Wo willst Du "togglen" können?
In FHEM Web => kannst mit dem attribute devStateIcon probieren
In FTUI => mit dem widget switch.
Zitat von: amenomade am 30 Mai 2017, 00:11:14
Wo willst Du "togglen" können?
Als Befehl, wie beschrieben.
Zitat von: amenomade am 30 Mai 2017, 00:11:14
In FHEM Web => kannst mit dem attribute devStateIcon probieren.
Ist gesetzt, wie zu sehen.
ZitatIst gesetzt, wie zu sehen.
Tja...Tschuldigung aber... zu sehen ist:
devStateIcon An:on Ous:off
Wäre vielleicht erstmal besser mit Aus statt Ous?
Aber ich meinte eher sowas in der Art:
devStateIcon An:on:Aus Aus:off:An
Damit könntest Du im FHEM Webfrontend auf das Icon klicken,
und somit schalten.
Als Befehl... ja gut, aber das Befehl rufst Du aus irgendwo auf, oder? Oder ist es nur "ich will unbedingt ohne Zweck /set esp01_Schreibtischlampe toggle/ ins Befhelfeld von FHEMweb eingeben können"?
Das Modul muß die SetExtensions unterstützen was es offensichtlich nicht tut.
Möglich wäre natürlich auch eine eigene toogle Implementierung im Modul, denke aber mal nicht das es sowas gibt.
Daher also auf Deviceebene als set Befehl nicht möglich.
Zitat von: CoolTux am 30 Mai 2017, 10:23:46
Daher also auf Deviceebene als set Befehl nicht möglich.
Was spricht gegen die Verwendung von eventMap mit entsprechendem notify?
Habe das gerade mal an einem dummy getestet. Statt toggle habe ich hier tgl verwendet da der dummy toggle bereits kennt und dann anders reagiert als erwartet:
defmod mqt1 dummy
attr mqt1 eventMap tgl:tgl
attr mqt1 setList on:noArg off:noArg
defmod n_mqt1 notify mqt1:state:.tgl {\
if (OldValue($NAME) eq "on")\
{\
fhem "set $NAME off";;\
}\
else\
{\
fhem "set $NAME on";;\
}\
}
attr n_mqt1 addStateEvent 1
Gruß
Dan
Man kann vielleicht auch eventMap anders schreiben. Ich kenne aber die MQTT Devices nicht, und kann nicht testen.
So was in der Art:
eventMap {usr=>{ '^toggle' => '".(ReadingsVal($NAME,"state","rc,ON=1111100100") eq "rc,ON=1111100100" ? "STATE Aus" : "STATE An")."','rc,OFF=1111100100' => 'STATE Aus','rc,ON=1111100100' => 'STATE An' }}
Ich weiss aber nicht, ob das echt schaltet?
Man kann sich auch an den Entwickler wenden und fragen ob er für einige deviceTypen nicht die SetExtensions implementieren möchte
uiDeviceType SWITCH
Es scheint ja Unterscheidungsmerkmale zu geben.
Zitat von: CoolTux am 30 Mai 2017, 11:18:56
Man kann sich auch an den Entwickler wenden und fragen ob er für einige deviceTypen nicht die SetExtensions implementieren möchte
uiDeviceType SWITCH
Es scheint ja Unterscheidungsmerkmale zu geben.
Das wäre sicher die beste Lösung.
Mein Beispiel sollte nur einen möglichen Workaround aufzeigen.
Gruß
Dan
Zitat von: amenomade am 30 Mai 2017, 10:17:11
Als Befehl... ja gut, aber das Befehl rufst Du aus irgendwo auf, oder? Oder ist es nur "ich will unbedingt ohne Zweck /set esp01_Schreibtischlampe toggle/ ins Befhelfeld von FHEMweb eingeben können"?
Der set-Befehl wird via TelegramBot aufgerufen.
Das mit dem devStateIcon habe ich gefixt, danke.
Zitat von: CoolTux am 30 Mai 2017, 11:18:56
Man kann sich auch an den Entwickler wenden und fragen ob er für einige deviceTypen nicht die SetExtensions implementieren möchte
uiDeviceType SWITCH
Es scheint ja Unterscheidungsmerkmale zu geben.
Vergessen zu erwähnen bzw. zu entfernen. Das ist von Homeplus und hat mit MQTT nichts zu tun.
Ich versuche mal eure Workarounds.
Vielen Dank!
Der set-Befehl wird via TelegramBot aufgerufen.
In TelegramBot kannst Du ruhig Perl aufrufen. Entweder direkt mit dofhem { }
(mit dofhem = Stichwort für Kommandos in Telegrambot) oder sogar mit Favoriten.
Das Perl kannst Du auch entweder direkt schreiben, oder in einer Funktion in 99_myUtils verlargern.
Und mit Perl, kein problem:
{ if (Value("esp01_Schreibtischlampe") eq "Aus") { fhem "set esp01_Schreibtischlampe An"} else { fhem "set esp01_Schreibtischlampe Aus"}}
oder sogar
{ if (ReadingsVal($NAME,"state","rc,OFF=1111100100") eq "rc,OFF=1111100100") { fhem "set esp01_Schreibtischlampe An"} else { fhem "set esp01_Schreibtischlampe Aus"}}
Zitat von: amenomade am 30 Mai 2017, 14:32:54
Der set-Befehl wird via TelegramBot aufgerufen.
In TelegramBot kannst Du ruhig Perl aufrufen. Entweder direkt mit dofhem { }
(mit dofhem = Stichwort für Kommandos in Telegrambot) oder sogar mit Favoriten.
Das Perl kannst Du auch entweder direkt schreiben, oder in einer Funktion in 99_myUtils verlargern.
Und mit Perl, kein problem:
{ if (Value("esp01_Schreibtischlampe") eq "Aus") { fhem "set esp01_Schreibtischlampe An"} else { fhem "set esp01_Schreibtischlampe Aus"}}
oder sogar
{ if (ReadingsVal($NAME,"state","rc,OFF=1111100100") eq "rc,OFF=1111100100") { fhem "set esp01_Schreibtischlampe An"} else { fhem "set esp01_Schreibtischlampe Aus"}}
Das ist cool, vielen Dank!
Der erste Code funktioniert bestens!