Dummy mit Set-Befehlen als Text auf ein reading

Begonnen von bismosa, 17 Oktober 2024, 20:09:24

Vorheriges Thema - Nächstes Thema

bismosa

Hallo!
Sorry, ein schlauerer Titel ist mir nicht eingefallen.
Kurze Problembeschreibung:
Ich nutze 2x FHEM auf einem System. Einmal nur um mittels Arduino und Firmata 1-Wire Geräte auszulesen und ein paar GPIO zu steuern.
Da dies blockierend erfolgt (mit mehreren 1-Wire Bussen), nutze ich hier eine weitere FHEM Instanz.
Derzeit noch auf zwei unterschiedlichen Testsystemen.

1.) Master:
Empfängt die Sensordaten mittels FHEM2FHEM. Soll auch GPIO mittels FRM_OUT schalten (sowohl über das Web-Interface als auch über Skripte).

2.) Slave:
Hier hängt der Arduino dran.

Auf dem Master habe ich sowohl das FHEM2FHEM device eingerichtet als auch ein dummy, das die Daten von dem FRM_OUT Device übernimmt.

Nun möchte ich FHEM2FHEM Bidirektional nutzen. Und zwar klappt dies auch mit nur einem Dummy:
defmod Firmata_OWPower2 dummy
attr Firmata_OWPower2 devStateIcon 1.on:on:button+off 1.off:off:button+on
attr Firmata_OWPower2 readingList button
attr Firmata_OWPower2 setList button:on,off
attr Firmata_OWPower2 stateFormat 1:value
attr Firmata_OWPower2 userReadings button1:button.* {my $state=ReadingsVal("$NAME", "button", "");; fhem("set OWX cmd set Firmata_OWPower2 $state");;return "executed"}
attr Firmata_OWPower2 webCmd button

setstate Firmata_OWPower2 1:on
setstate Firmata_OWPower2 2024-10-17 19:59:31 button on
setstate Firmata_OWPower2 2024-10-17 19:59:31 button1 executed
setstate Firmata_OWPower2 2024-10-17 19:59:31 value on

Durch das setzen des userReadings wird der Befehl brav an die andere Instanz weiter geleitet. Der eigentliche Status wird über das Reading "value" angezeigt.

Nun mein eigentliches Problem:
Ich würde gerne die on/off Befehle nicht über den Dropdown, sondern wie im Standard mittels anklickbarem Text (Link) on und off schalten. Ich finde das gerade am Handy angenehmer zu bedienen.
Habt ihr eine Idee, wie man das umsetzen kann?

BTW: Wo finde ich eigentlich eine Beschreibung, das man das mit dem devStateIcon so machen kann? Ich habe dies nur in einem anderen Beitrag zufällig gefunden.

Gruß
Bismosa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

Gisbert

ZitatNun mein eigentliches Problem:
Ich würde gerne die on/off Befehle nicht über den Dropdown, sondern wie im Standard mittels anklickbarem Text (Link) on und off schalten. Ich finde das gerade am Handy angenehmer zu bedienen.
Habt ihr eine Idee, wie man das umsetzen kann?

Hallo bismosa,

das sollte mit dem Attribut webCmd funktionieren. Anstatt Text kann man auch schaltbare Symbole mit cmdIcon definieren. Falls noch keine Funktionen für die Texte in webCmd hinterlegt sind, kann eventMap dafür nützlich sein.

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

Gisbert

Hallo bismosa,

noch ein Beispiel und ein Bild:

defmod RollladenWohnzimmerSued MQTT_DEVICE
attr RollladenWohnzimmerSued IODev MyBroker
attr RollladenWohnzimmerSued alias WZSüd
attr RollladenWohnzimmerSued autoSubscribeReadings +/RollladenWZSued/+
attr RollladenWohnzimmerSued cmdIcon DriveUp:fts_shutter_up@#2e5e87 Stop:fts_shutter_manual@grey DriveSlit:fts_shutter_shadding_stop@green DriveDown:fts_shutter_down@green
attr RollladenWohnzimmerSued comment Zum Neuseustart müssen die Rollladenschalter auf Null stehen;; andernfalls booten sie nicht neu.
attr RollladenWohnzimmerSued event-on-change-reading STATE,SENSOR,cmd,lastcmd,Laufzeit,Wifi_RSSI,LastActivity,POWER1,Up,Stop,Slit,Down,Zeitstempel
attr RollladenWohnzimmerSued eventMap /Event Slit:position 10/Event Up:DriveUp/Event Stop:Stop/Event Slit:DriveSlit/Event Down:DriveDown/
attr RollladenWohnzimmerSued genericDeviceType blind
attr RollladenWohnzimmerSued group Rollladen
attr RollladenWohnzimmerSued icon fts_shutter_automatic
attr RollladenWohnzimmerSued publishSet_Event Up Stop Slit Down cmnd/RollladenWZSued/Event
attr RollladenWohnzimmerSued rhasspyMapping SetOnOff:cmdOn=DriveUp,cmdOff=DriveDown\
SetNumeric:cmdStop=Stop,type=setTarget,cmd=pct
attr RollladenWohnzimmerSued rhasspyName rollladen südseite,rolladen südseite
attr RollladenWohnzimmerSued rhasspyRoom wohnzimmer
attr RollladenWohnzimmerSued rhasspySpecials numericValueMap:10='Event Slit'
attr RollladenWohnzimmerSued room Rollladen
attr RollladenWohnzimmerSued stateFormat <b><div style='color:#2e5e87'>cmd</div></b></br>\
lastcmd</br>\
IPaddress</br>\
uptime: Laufzeit</br>\
RSSI: Wifi_RSSI% (LastActivity)
attr RollladenWohnzimmerSued subscribeReading_Event cmnd/RollladenWZSued/Event
attr RollladenWohnzimmerSued subscribeReading_INFO1 tele/RollladenWZSued/INFO1
attr RollladenWohnzimmerSued subscribeReading_INFO2 tele/RollladenWZSued/INFO2
attr RollladenWohnzimmerSued subscribeReading_INFO3 tele/RollladenWZSued/INFO3
attr RollladenWohnzimmerSued subscribeReading_LWT tele/RollladenWZSued/LWT
attr RollladenWohnzimmerSued subscribeReading_POWER cmnd/RollladenWZSued/POWER
attr RollladenWohnzimmerSued subscribeReading_POWER1 stat/RollladenWZSued/POWER1
attr RollladenWohnzimmerSued subscribeReading_POWER2 stat/RollladenWZSued/POWER2
attr RollladenWohnzimmerSued subscribeReading_RESULT stat/RollladenWZSued/RESULT
attr RollladenWohnzimmerSued subscribeReading_SENSOR tele/RollladenWZSued/SENSOR
attr RollladenWohnzimmerSued subscribeReading_STATE tele/RollladenWZSued/STATE
attr RollladenWohnzimmerSued subscribeReading_UPTIME tele/RollladenWZSued/UPTIME
attr RollladenWohnzimmerSued subscribeReading_cmd stat/RollladenWZSued/cmd
attr RollladenWohnzimmerSued userReadings lastcmd {substr(ReadingsTimestamp($name,'cmd',''),0,16)}, \
Zeitstempel {substr(ReadingsTimestamp($name,'STATE',''),0,16)}, \
System.Info {round(formatUptime2sec(ReadingsVal($name,'Uptime',''))/60,0)}, \
Laufzeit {min2human(ReadingsVal($name,'System.Info',''))}, \
LastActivity {substr(ReadingsTimestamp($name,'STATE',''),11,5)}, \
IPaddress {"<a href='http://192.168.2.21' style='color: green;; text-decoration: underline;;' target='_blank' rel='noopener noreferrer'>http://192.168.2.21</a>"}
attr RollladenWohnzimmerSued webCmd DriveUp:Stop:DriveSlit:DriveDown

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

passibe

Mal eine Rückfrage dazu –
Zitat von: bismosa am 17 Oktober 2024, 20:09:24Ich finde das gerade am Handy angenehmer zu bedienen.
wieso kannst du am Handy nicht einfach mit dem devStateIcon schalten?
Wenn du da drauftippst, sollte das doch auch einfach umschalten.

Und:
Zitat von: bismosa am 17 Oktober 2024, 20:09:24Wo finde ich eigentlich eine Beschreibung, das man das mit dem devStateIcon so machen kann?
Das gibt es mE im Wiki und in der Commandref (runterscrollen zu devStateIcon). Ist das das, was du suchst?

bismosa

Hallo!

Danke für die Denkanstöße!

Manchmal hilft es ne Nacht über solche Probleme zu schlafen...
Das mit dem DevStateIcon habe ich nun verstanden. Hier war meine Frage auch nicht sehr präzise gestellt. Sorry.
Mir ging es darum, wo beschrieben und erklärt ist, wie man es mit mehren Icons löst. Also aus diesem Thread: https://forum.fhem.de/index.php?topic=97586.0
Ich hatte einfach nicht kapiert, warum 1. 2. 3. beim devStateIcon davor steht. Ich glaube aber nun, das liegt daran, das man kein : nehmen kann und deswegen einen punkt (Regex ein Zeichen) setzt.

Mein eigentliches Problem habe ich jetzt mit einem DOIF gelöst!
(OWX isst noch der DeviceName für mein FHEM2FHEM Device)
defmod Firmata_OWPower2 DOIF onoff{\
    if ([$SELF:"^on$"]){\
        fhem("set OWX cmd set Firmata_OWPower2 on");;    \
    }\
    if ([$SELF:"^off$"]){\
        fhem("set OWX cmd set Firmata_OWPower2 off");;    \
    }\
}\

attr Firmata_OWPower2 devStateIcon on:on:off off:off:on
attr Firmata_OWPower2 stateFormat value
attr Firmata_OWPower2 webCmd on:off

setstate Firmata_OWPower2 on
setstate Firmata_OWPower2 2024-10-18 09:44:28 block_onoff executed
setstate Firmata_OWPower2 2024-10-18 09:44:28 e_Firmata_OWPower2_events value: on
setstate Firmata_OWPower2 2024-10-18 09:44:19 mode enabled
setstate Firmata_OWPower2 2024-10-18 09:44:19 state initialized
setstate Firmata_OWPower2 2024-10-18 09:44:28 value on

So habe ich jetzt auch wieder alle Möglichkeiten. Sowohl das Icon als auch direkt on und off.
Wichtig ist nur das "^on$" sonst kommt es schnell zu einer Dauerschleife, wenn auch value auf "on" gesetzt wird.

Sehr praktisch, das es mit FHEM2FHEM auch mit einem DOIF problemlos funktioniert.

Nun muss ich mal schauen, wie praktikabel das in meiner Installation wird.
Es könnte u.U. auch praktisch sein statt FHEM2FHEM gleich auf MQTT2 zu setzen... ;)

Gruß
Bismosa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...