readingsproxy vs Präsenzmelder

Begonnen von Weisnich, 05 April 2017, 23:17:16

Vorheriges Thema - Nächstes Thema

Weisnich

Hallo Leute,

ich habe einen Präsenzmelder definiert

define P_EG_Flur KNX 2/1/0:dpt1.001:ausgang 2/1/4:dpt3:zwangsfuehrung 2/1/15:dpt1.001:praesenz 2/1/17:dpt9.004:helligkeit
attr P_EG_Flur IODev KNX
attr P_EG_Flur eventMap /value -50 zwangsfuehrung:AUS/value -100 zwangsfuehrung:AUTO/value -25 zwangsfuehrung:EIN
attr P_EG_Flur room Präsenz
attr P_EG_Flur sortby 101
attr P_EG_Flur stateRegex /getg1:/ausgang:/ /setg2:/zwangsfuehrung:/ /getg3:/praesenz:/ /getg4:/helligkeit:/
attr P_EG_Flur webCmd :


der 4 Busadressen hat:
1. Ausgang, lesen, 1bit=on/off
2. Zwangsführung, 2bit=AUTO, AUS, EIN
3. Präsenz, lesen, 1bit=on/off
3. Helligkeit, lesen, 8bit Einheit Lux

Jetzt möchte ich ihn kompakt bedienen und daher muss ein readingsproxy her:

#PRÄSENZ: rp_P_EG_Flur_Praesenz
define rp_P_EG_Flur_Praesenz readingsProxy P_EG_Flur:praesenz-get
attr rp_P_EG_Flur_Praesenz devStateIcon off:10px-kreis-rot on:10px-kreis-gruen
attr rp_P_EG_Flur_Praesenz group 02_Präsenz
attr rp_P_EG_Flur_Praesenz room Präsenz
attr rp_P_EG_Flur_Praesenz sortby 103


Damit erhalte ich eine Anzeige mit rotem Punkt wenn keine Präsenz detektiert wird und grün, wenn der Sensor etwas sieht.

Aber ich möchte natürlich auch den Ausgang bedienen, indem ich die Zwangsführung schalte und nun fangen meine Probleme an.

Erst einmal die Stati AUTO, AUS, EIN definieren, also

attr rp_P_EG_Flur_Praesenz setList state:AUTO,AUS,EIN
attr rp_P_EG_Flur_Praesenz webCmd state


Damit der Proxy seinen Wert nicht beim Seitenupdate verliert noch ein

attr rp_P_EG_Flur_Praesenz valueFn {$LASTCMD}


Sieht so aus, wie es soll, macht aber nichts, denn nun muss ich an g3 meines KNX-Devices P_EG_Flur noch den command schicken, konkret soll ausgegeben werden:
AUTO -> set P_EG_Flur value -100 g3
AUS -> set P_EG_Flur value -50 g3
EIN -> set P_EG_Flur value -25 g3
(Wird bei Eingabe auch korrekt umgesetzt.)

Auf meiner Suche nach einer Lösung bin ich bisher nicht sehr weit gekommen. Meistens werden nur 2 Stati übergeben (und dann noch an das gleiche Reading) z.B.:

attr proxy setFn {($CMD eq "on")?"off":"on"}


oder sogar an ein anderes Reading, was umgeschrieben auf meinen Fall lauten müsste:

attr rp_P_EG_Flur_Praesenz setFn { fhem('"set P_EG_Flur value '. ($CMD eq 'AUTO' ?'-100':'-50') .' g3"') }


aber der Teil ($CMD eq 'AUTO' ?'-100':'-50') natürlich für meine Anwendung völliger Unsinn ist.

Hat hier jemand eine Hilfe, wie ich hier weiter kommen kann?


Gruß und Dank,
Weisnich

JoeALLb

Hm, hast Du mal DOIF statt readingsproxy angeschaut?
Ich nutze das in meiner Umgebung dafür, kann auch setstate und devstateicon und
im Hintergrund kann ich mit Skripten das steuern, was ich benötige...

FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Weisnich

#2
Hallo JoeALLb,

Zitat von: JoeALLb am 06 April 2017, 09:21:03
Hm, hast Du mal DOIF statt readingsproxy angeschaut?
Ich benutze DOIF ziemlich häufig. Allerdings eher für die Logik, oder wie mein Lieblingsvlogger sagt, für "the brains-of-the-operation".

Zitat von: JoeALLb am 06 April 2017, 09:21:03
Ich nutze das in meiner Umgebung dafür, kann auch setstate und devstateicon und...
Es ist möglich, dass ich jetzt ein Riesenbrett vor dem Kopf habe.
DOIF ist nach meinem Verständnis eigentlich eine Logik, die auf ein Device + Event triggert und dann irgendwelche Befehle ausführt. Als state führt es den Zustand, also initialize, cmd_1 etc.
Ich kann mir vorstellen, einen Dummy zu erzeugen, der den Input (AUTO/AUS/EIN) und einen weiteren Dummy der die Anzeige (Präsenz AUS/EIN) darstellt und dazu zwei DOIFs, die 1. den Input auf KNX umsetzen und 2. die Anzeige steuern.

Das ist aber alles andere als elegant. Auslesen kann das readingsProxy von Natur aus und besitzt nicht nur state (des Readings=Präsenz) sondern auch cmd (für Zwangsführung AUTO/AN/AUS). Wenn ich das Teil jetzt nur dazu bringen könnte 3 verschiedene Werte auf den Bus zu schreiben...

Zitat von: JoeALLb am 06 April 2017, 09:21:03
...im Hintergrund kann ich mit Skripten das steuern, was ich benötige...
Ich bin hier gelandet als Häuslebauer mit einem eibPC von Enertex mit dem ich extrem unglücklich bin, weil er sehr unflexibel ist und die Visu völlig veraltet ist. Ich bin kein leider Perl-Experte aber auch jetzt schon begeistert, was FHEM aus einem 30-Euro Pi rausholen kann. Leider bedeutet das, dass ich mit den FHEM Bordmitteln leben muss.


Gruß,
Weisnich



Weisnich

#3
Hello Leute,

Neuer Versuch.

Ich möchte ein Readingsproxy, das genau so aussieht, wie im Anhang gezeigt.
P_EG_Flur ist mein Präsenzmelder, der 4 Gruppenadressen enthält. Der Readingsproxy liest praesenz-get und soll passiv bleiben.

define rp_P_EG_Flur_Praesenz readingsProxy P_EG_Flur:praesenz-get
attr rp_P_EG_Flur_Praesenz alias EG Flur Präsenz
attr rp_P_EG_Flur_Praesenz devStateIcon .*off:people_sensor@#ff0000 .*on:people_sensor@#00ff00 .*:unknown
attr rp_P_EG_Flur_Praesenz event-on-change-reading state
attr rp_P_EG_Flur_Praesenz group 02_Präsenz
attr rp_P_EG_Flur_Praesenz icon people_sensor@#98fb98
attr rp_P_EG_Flur_Praesenz room Präsenz
attr rp_P_EG_Flur_Praesenz setFn AUTO,AUS,EIN
attr rp_P_EG_Flur_Praesenz setList setFN:AUTO,AUS,EIN
attr rp_P_EG_Flur_Praesenz verbose 0
attr rp_P_EG_Flur_Praesenz webCmd setFN


Das mit dem setFN ist von mir nicht verstanden.

Eigentlich will ich mit meinem Dropdown-webCmd nur eine Reading ändern, dass ich mit einem DOIF auswerten kann (gesteuert werden soll nicht die Präsenz, die das Proxy liest, sondern über eine Zwangssteuerung das Licht, also eine andere Gruppenadresse).

Kann mir jemand dazu einen Tipp geben?


Gruß und Dank,
Weisnich