[Gelöst] Buttons in der Zeile DeviceOverview - Befehl mit Leerzeichen

Begonnen von Gisbert, 22 November 2018, 15:02:47

Vorheriges Thema - Nächstes Thema

Gisbert

Hallo,

ich habe ein MQTT-Device, bei dem ich in der Zeile DeviceOverview gerne Bedienknöpfe haben will, die einen Befehl ausführen.
Im MQTT-Device gibt es den folgenden Befehl:
set RollladenSchlafzimmer Event mit eigentlich willkürlichen Argumenten, aber im Rollladenaktor habe ich Hoch, Runter, Luecke, Stop hinterlegt.
Führe ich den Befehl "set RollladenSchlafzimmer Event Hoch" in der Zeile DeviceOverview oder in der Fhem-Kommandozeile aus, so fährt der Rollladen hoch.
Ich möchte also z.B. in der Zeile DeviceOverview einen Knopf "Hoch"haben, der den Befehl "set RollladenSchlafzimmer Event Hoch" ausführt.

Geht so etwas, und wenn ja wie?

attr RollladenSchlafzimmer webCmd Hoch:Runter:Lücke:Stop
liefert zwar Knöpfe, die aber keine Argumente haben und auch keinen Befehl auslösen.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

hexenmeister

#1
Etwa wie im angehängten Bild?
Dazu könnte ich ein Beispiel liefern.

defmod DG_SZ_Rollo_All dummy
attr DG_SZ_Rollo_All alias DG SZ Rollläden All
attr DG_SZ_Rollo_All devStateIcon 100:fts_window_roof_shutter_0@gray closed:fts_window_roof_shutter_0@gray 0*:fts_window_roof_shutter_100@#FF5722 1\d(.\d)*:fts_window_roof_shutter_90@#FF5722 2\d(.\d)*:fts_window_roof_shutter_80@#FF5722 3\d(.\d)*:fts_window_roof_shutter_70@#FF5722 4\d(.\d)*:fts_window_roof_shutter_60@#FF5722 5\d(.\d)*:fts_window_roof_shutter_50@#FF5722 6\d(.\d)*:fts_window_roof_shutter_40@#FF5722 7\d(.\d)*:fts_window_roof_shutter_30@#FF5722 8\d(.\d)*:fts_window_roof_shutter_20@#FF5722 9\d(.\d)*:fts_window_roof_shutter_10@#FF5722 open:fts_window_roof_shutter_10@#FF5722 open_ack:fts_window_roof_shutter_10@#FF5722 .*:hourglass@#FF5722
attr DG_SZ_Rollo_All eventMap {usr=>{'oeffnen'=>'on','schliessen'=>'off','dunkel'=>'20','schatten'=>'80','halb'=>'60'},\
fw=>{'schliessen'=>'schliessen:noArg','dunkel'=>'dunkel:noArg','schatten'=>'schatten:noArg','halb'=>'halb:noArg','oeffnen'=>'oeffnen:noArg','stop'=>'stop:noArg'}}
attr DG_SZ_Rollo_All group Beschattung SZ
attr DG_SZ_Rollo_All icon fts_window_roof_shutter
attr DG_SZ_Rollo_All mqttPublish position|select:topic=/ha/dg/sz/rollo/all/set\
state:topic=/ha/dg/sz/rollo/all/set\

attr DG_SZ_Rollo_All mqttSubscribe position|select:topic=/ha/dg/sz/rollo/all/position\
state:topic=/ha/dg/sz/rollo/all/state\

attr DG_SZ_Rollo_All readingList position select
attr DG_SZ_Rollo_All room Schlafzimmer DG,DG
attr DG_SZ_Rollo_All setList stop:noArg select:iconRadio,use4icon@000000,stop,rc_STOP@808080,00,fts_window_roof_shutter_100@808080,15,fts_window_roof_shutter_90@808080,50,fts_window_roof_shutter_50@808080,70,fts_window_roof_shutter_30@808080,100,fts_window_roof_shutter_0@808080 \
position:slider,0,1,100
attr DG_SZ_Rollo_All sortby 20sz_10
attr DG_SZ_Rollo_All stateFormat position
attr DG_SZ_Rollo_All webCmd select:position
attr DG_SZ_Rollo_All widgetOverride setList:textField-long


Allerdings wird hier MQTT_GENERIC_BRIDGE eingesetzt und eigenerstellte Icons. Aber als Vorlage sollte was taugen.

Edit: Die Icons bei Rollläden sind ja doch Standarticons...

Gisbert

Hallo hexenmeister,

dein Beispiel ist für mich zu komplex.
Das Reading setList habe ich nicht, da ich kein Dummy-Device sondern ein MQTT_DEVICE habe.

Ich glaube aber, dass ich näher an der Lösung dran bin, allerdings fehlt jetzt noch folgendes.
Definitiert ist folgendes (nur Auszug):
defmod RollladenSchlafzimmerGisbert MQTT_DEVICE
attr RollladenSchlafzimmerGisbert publishSet_Event Hoch Runter Luecke Stop cmnd/RollladenSchlafzimmerGisbert/Event
attr RollladenSchlafzimmerGisbert webCmd Hochfahren:Stop:Luecke:Runterfahren

Damit bekomme ich 4 Buttons, die in webCmd definiert sind.

Wenn ich einen Button (Hochfahren) drücke, poppt folgende Fehlermeldung auf:
Unknown argument Hochfahren, choose one of Event:Hoch,Runter,Luecke,Stop
D.h. hier stehen die Ausdrücke, die bei publishset_Event definiert wurden.

Der Part publishset_Event funktioniert.
Hier werden 2 Pulldown-Menüs angezeigt, das 1. heißt "Event" und im 2. stehen "Hoch Runter Luecke Stop" untereinander, und die Befehle werden entsprechend abgesetzt und kommen am Rollladenaktor an.

Wie gehe ich hier vor: Unknown argument Hochfahren, choose one of Event:Hoch,Runter,Luecke,Stop ?

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

hexenmeister

Ok, bei 'Buttons' verstehen wir wohl verschiedenen Sachen. Ich denke dabei an Icons, bei Dir sind das wohl auch Texte (Links).

Ich habe geschrieben, dass mein Beispiel eine MQTT_GENERIC_BRIDGE verwendet, ist aber egal, da das Vorgehen bei den Icon davon unabhängig ist.

Damit das Befehl auch von dem eigentlichen Device erkannt wird, muss es natürlich in das konvertiert werden, was das Device auch versteht. Dafür ist eventMap da.

Bin gerade leider zu müde, mich in Dein Beispiel rein zu denken. Schau Dir Commandref und mein unten stehendes Beispiel an.

Hier ist ein (stark bereinigtes und auf das gefragte rediziertes) Beispiel mit Text-Links:
defmod ku_rollo CUL_HM 123123
...
attr ku_rollo eventMap on:hoch 80:schatten 60:halb off:runter stop:stop off:nacht
...
attr ku_rollo webCmd stop:runter:nacht:halb:schatten:hoch:pct

Gisbert

#4
Hallo hexenmeister,

webCmd habe ich probiert, in der "einfachen" Definition: Hoch:Hochfahren (auch umgekehrt), das führt aber nicht zum Erfolg; gleiches Popup wie oben beschrieben.

Der Befehl, der ausgeführt werden soll heißt nicht Hoch sondern Event Hoch:
set Device Event Hoch
Event und Hoch sind dabei von mir definierte Namen, die der Rollladenaktor so kennt.

Das Beispiel im commandref bei webCmd habe ich nicht verstanden.

Viele​ Grüße​ Gisbert​

Edit: Sollte ich den Titel ändern, statt Push-Button nur Button oder Schaltfläche?
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

hexenmeister

Du muss die Befehle verstehen, die Du anwendest. Daher schaue Dir Commandre noch mal genau an. Da steht alles drin.

Versuchen wir hier dennoch die Situation ein Einzelteile zu zerlegen:
"set Event Hoch" kommt daher, dass "publishSet_Event ..." eben so definiert ist. Der Name ist aber egal, was wirklich per MQTT gesendet wird, beeinflusst das nicht, muss aber natürlich in der Definition und im set-Befehl zusammen passen.

"Hochfahren" geht nicht, da in der Definition (publishSet_) kein "Hochfahren", sonder nur eben "Hoch", "Runter", "Luecke" und "Stop" definiert sind. Das wird dann auch gesendet und muss von dem Aktor "auf der anderer Seite" verstanden werden.

"webCmd" definiert, was angezeigt wird. Wenn das nicht dem entspricht, was auch im set-Befehl verwendet werden muss, muss das mit dem Attribut "eventMap" entsprechend umgesetzt werden. Etwa so "... Hoch:Hochfahren ...". Siehe mein Beispiel von vorhin.

Ich hoffe, damit wird der Zusammenhang klarer.

Den Titel kannst Du, denke ich, lassen, hier ist ja auch ein fertiges Beispiel auch für "Buttons". Aber der Bereich ist falsch, das hier hat nichts mit MQTT zu tun. Verschiebe den Beitrag in den Bereich "Anfängerfragen".

Gisbert

Hallo hexenmeister,

ich werde den Thread in den Anfängerbereich verschieben.

Das, was du beschreibst ist alles richtig, und war mir auch schon soweit bekannt.
Was ich jetzt mal probiert habe, ist die folgende Definition:
attr RollladenSchlafzimmerGisbert webCmd Event Hoch:Event Runter:Event Luecke:Event Stop
Immerhin bekomme ich jetzt Buttons, die aber "Event Hoch" usw. heißen.
Das sieht unschön aus.

Deshalb meine Frage. Wie bekomme ich aus dem "Event Hoch" ein einziges Wort, z.B. Hochfahren?

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

hexenmeister

 Dein webcmd war schon vorher richtig (jetzt nicht mehr). Schau dir eventMap an.

Gisbert

Zitat von: hexenmeister am 23 November 2018, 20:41:02
Dein webcmd war schon vorher richtig (jetzt nicht mehr). Schau dir eventMap an.

Hallo hexenmeister,

Danke für den Schubs. Jetzt hab ich's kapiert, und damit es möglicherweise jemand anderem hilft, hier noch die Definition (Auszug):
defmod RollladenSchlafzimmerGisbert MQTT_DEVICE
attr RollladenSchlafzimmerGisbert IODev MyBroker
attr RollladenSchlafzimmerGisbert autoSubscribeReadings +/RollladenSchlafzimmerGisbert/+
attr RollladenSchlafzimmerGisbert eventMap /Event Hoch:Hochfahren/Event Stop:Stop/Event Luecke:Lücke/Event Runter:Runterfahren/
attr RollladenSchlafzimmerGisbert publishSet_Event Hoch Runter Luecke Stop cmnd/RollladenSchlafzimmerGisbert/Event
attr RollladenSchlafzimmerGisbert subscribeReading_Event cmnd/RollladenSchlafzimmerGisbert/Event
attr RollladenSchlafzimmerGisbert webCmd Hochfahren:Stop:Lücke:Runterfahren


Mein Problem war, dass die Schaltbefehle jeweils ein Leerzeichen enthalten. Dafür muss man ein anderes Trennzeichen (als das Leerzeichen) festlegen.
Jetzt läuft's

Vielen Dank Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome