Sensor als UserReading in einen Actor eingebaut -> Verzögerung

Begonnen von grappa24, 23 Juli 2022, 16:45:34

Vorheriges Thema - Nächstes Thema

grappa24

Ich hab einen HMS Sensor (ug_garagentor) und einen Shelly1 als Aktor (ug_garagentor_oeffner).
Ziel war ein Icon zu haben, was sowohl als Aktor fungiert als auch den Zustand anzeigt.

Den Sensor hab ich als UserReading in den Aktor eingebaut: attr ug garagentor_oeffner userReadings ug_garagentor_sensor {if(ReadingsVal("ug_garagentor","switch_detect","") eq "off") {return "geschlossen"} else {return "offen"}}
attr ug_garagentor_oeffner stateFormat ug_garagentor_sensor
attr devStateIcon .*offen:garage_offen:on .*geschlossen:garage_geschlossen:on


Frage: Während der Sensor selbst "sofort" den Statuswechsel anzeigt reagiert das "devStateIcon" mit einer Verzögerung von 3-4 Sekunden. Kann man diese Verzögerung eliminieren?

P.S. Der shelly läuft im Auto-Modus und schaltet sich jeweils bei "on" nach 2 Sekunden ab, d.h. ich starte den Öffnen- bzw. Schließen-Vorgang jeweils mit 2 Sekunden Power auf meinen Garagenantrieb
FHEM 6.1, 2 x RasPi 3B+, Debian Buster; KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200
Rollo-/Lichtsteuerung/-szenarien, T-Sensoren, Fensterkontakte, Heizungssteuerung, HEOS, Sprachsteuerung mit Alexa-FHEM, Netatmo, Nuki, ...

MadMax-FHEM

#1
Das userReadings bei DeviceA wird nur aktualisiert, wenn ein passender Event bei DeviceA kommt!

(du hast keinen Trigger, daher aktualisiert JEDES Event bei DeviceA aber eben nur Events bei DeviceA)

D.h. du machst etwas bzw. beim Sensor (DeviceB) "passiert" etwas.

Dann kommt irgendwann (glücklicherweise) ein Event bei DeviceA und das userReadings wird aktualisiert mit dem Wert aus DeviceB.

D.h. dass es "nur" 2-3 Sekunden Verzögerung sind ist reiner Zufall (oder es passiert halt auch immer nach 2-3 Sekunden in DeviceA etwas), es könnten auch Tage oder Wochen sein ;)
(je nachdem wie viele Events in DeviceA kommen)

Besser wäre ein notify, das eben auf DeviceB lauscht und dann sofort den Wert bei DeviceA setzt: setreading DeviceA Reading Wert

(oder, aber "böse": ein userReadings MIT TRIGGER! bei DeviceB, das dann ein: sleep 0.1; setreading DeviceA Reading Wert; ausführt. Der sleep, weil setreading in einem userReadings verhindert/verzögert wird/würde, zumindest meine Erfahrung)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

#2
Hi,

btw: der Code ist komplett fake  >:( bitte echte Copy & Paste posten
Zitatattr ug garagentor_oeffner
attr ug_garagentor_oeffner
attr devStateIcon

Warum kommt es bei Dir zur Verzögerung? Weil dein Device das userReadings triggert aber nicht das Device welches abgefragt wird. Dein shelly triggert ev. alle 3-4 Sekunden, das wird eine Art polling :)

ja: Wirkungsrichtung umkehren (nicht getestet und nochmal geändert: Danke Joachim):
attr ug_garagentor userReadings ug_garagentor_sensor:switch_detect.* { fhem("setreading ug_garagentor_oeffner ug_garagentor_sensor {(ReadingsVal($name,'switch_detect','') eq 'off'?'geschlossen':'offen')} ") }
Ich glaube das geht ohne sleep - böse ist das eigentlich nicht.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

...hatten wir dafür nicht irgendwo einen "speziellen" readingsProxy?...

Ansonsten sind userReadings ohne trigger (na ja)....
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

MadMax-FHEM

Ist setreading nicht ein fhem-Befehl?

Müsste dann nicht {fhem("setreading...")}  ?

Oder die geschweifte Klammer vor setreading weg?
Wobei ich dann wieder nicht weiß ob man fhem und Perl "innerhalb" von setreading mischen kann... 8)

EDIT: und fehlt nicht beim setreading der Readingname? setreading Devicename Readingname Wert

So geht es auf jeden Fall:


transferStaus:switch_detect.* {my $value=ReadingsVal($name,"switch_detect","n.a.") eq "off" ? "geschlossen":"offen";fhem("sleep 0.1; setreading ug_garagentor_oeffner switch_detect $value");return "done"}

(wobei das mit dem Fragezeichenoperator nicht getestet ist, den Rest habe ich so mal bei mir)

Dann steht auf der Seite des Sensors im "neuen" transferStatus "done" wenn immer eine Aktualisierung passiert ist und im anderen Device ug_garagentor_oeffner der übertragene Status...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

grappa24

#5
Ihr seid schon Spitze, vielen Dank.

Mit dem "transferStatus" klappt es jetzt ohne Verzögerung ;D

Schönes Wochenende
Dieter

P.S. D. h. aber auch, dass ich mir mein userReading attr ug_garagentor_oeffner userReadings ug_garagentor_sensor {if(ReadingsVal("ug_garagentor","switch_detect","") eq "off") {return "geschlossen"} else {return "offen"}}

sparen kann, weil dessen Rolle jetzt vom switch_detect im ug_garagentor_oeffner übernommen wird?
FHEM 6.1, 2 x RasPi 3B+, Debian Buster; KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200
Rollo-/Lichtsteuerung/-szenarien, T-Sensoren, Fensterkontakte, Heizungssteuerung, HEOS, Sprachsteuerung mit Alexa-FHEM, Netatmo, Nuki, ...

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

grappa24

Zitat von: MadMax-FHEM am 23 Juli 2022, 17:07:06


transferStaus:switch_detect.* {my $value=ReadingsVal($name,"switch_detect","n.a.") eq "off" ? "geschlossen":"offen";fhem("sleep 0.1; setreading ug_garagentor_oeffner switch_detect $value");return "done"}

Das ist ja ein UserReading mit Trigger, soweit verstanden. Was passiert denn aber, wenn im System noch andere Devices mit Reading "switch_detect" sind?
FHEM 6.1, 2 x RasPi 3B+, Debian Buster; KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200
Rollo-/Lichtsteuerung/-szenarien, T-Sensoren, Fensterkontakte, Heizungssteuerung, HEOS, Sprachsteuerung mit Alexa-FHEM, Netatmo, Nuki, ...

Otto123

userReadings werden nur vom eigenem Device getriggert. mit der Angabe des Readings wird aber nur bei Änderung dieses Readings getriggert.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

MadMax-FHEM

Jep, so wie hier schon geschrieben: https://forum.fhem.de/index.php/topic,128492.msg1228989.html#msg1228989

notify lauscht global, ein userReadings nur lokal bei Events des Devices wo es dranhängt...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)