STATE eines threestatesensors als Variable einlesen

Begonnen von monek, 28 August 2016, 22:48:50

Vorheriges Thema - Nächstes Thema

monek

Hallo Zusammen,

nachdem ich hier heute seit einigen Stunden unterwegs bin (auch im Wiki und generell mit Hilfe von Google) ist es mir immer noch nicht gelungen, den STATE meines threestatesensors in eine Variable zu bekommen.

Setup:
Ein Raspi auf dem die frisch upgedatete Version von fhem läuft.
Eingebunden sind neben einem mp3-Gong und einem Taster unter anderem 2 threeStateSensor von Homematic.

Das einbinden der Sensoren mit einer Anzeige auf einem Floorplan war nicht all zu schwierig, dank des Forums hier.

Nun möchte ich diese Sensoren nutzen, um eine kleine Alarmanlage zu bauen.
Dazu soll mit einem Tastenfeld die Anlage scharf geschaltet werden.
Dazu läuft das notify des Tasters auf ein neues notify: "n_Tuerstatus"
Dort soll jetzt mithilfe eines "IF-ELSE" die Überprüfung stattfinden, ob die Türen geschlossen sind - ansonsten soll natürlich nicht scharfgeschaltet werden.

(Tuer_hinten|Tuer_vorne) {
my $tuerhinten = state("Tuer_hinten");
my $tuervorne = state("Tuer_vorne");
if ($tuerhinten eq "closed" && $tuervorne eq "closed") {
fhem "set Flur_LED led greenL"
} else {
fhem "set Flur_LED led redL"
}
}

gebe ich "get Tuer_hinten param state" ein, bekomme ich als Rückmeldung "closed", genau so wie auch bei der Abfrage des State von Tuer_vorne.
Mit dieser Variable passiert allerdings nichts.
Angesprochen wird die Variable von dem Taster_Weg, der das notify "n_Taster_Weg" aktiviert:

Taster_Weg set n_Tuerstatus active


Wenn ich den Taster drücke, wird im notify  "n_Tuerstatus"auch der state "Active" mit der aktuellen Urzeit gesetzt, aber nichts passiert.
Wenn ich über das notify "n_Taster_Weg" den Gong direkt anspreche, funktioniert auch dieser.
Ich schaffe es aber nicht, eine Statusüberprüfung der beiden Sensoren der Türen einzubauen.

Ich hoffe, ich habe mich halbwegs verständlich ausgedrückt und mir kann jemand helfen.
Viele Grüße
monek

Hans Franz

Ich habe das mit den zwei notifies zwar nicht verstanden (ist auch noch zu warm hier ;) ), aber mit:
my $tuerhinten = Value("Tuer_hinten");
solltest du weiterkommen.

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

justme1968

#2
den wert eines reading bekommst du mir ReadingsVal(<device>,<reading>,<default>). den wert eines internals bekommt du mit InternalVal(<device>,<internal>,<default>). der wert von STATE bekommst du mit Value(<device>).


anonsten:
- achtung: state und STATE sind nicht das gleiche.

. wenn du in einem notify bist kommst du mit $EVENT, $EVNTPARTX und $NAME an die daten die zum auslösenden event gehören.

- wenn du mehrere gleiche devices zu einem gesamt status zusammen fassen willst schau dir structure an.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

monek

Vielen Dank für so schnelle Antworten.

Also ich habe state wie auch STATE ausprobiert, ohne eine Wirkung.
Value hat bei mir auch keinen Erfolg gezeigt.
Wobei ich bei dem Sensor bei
"get Tuer_hinten Value" auch nur die Ausgabe "Unknown argument Value" bekomme und bei "get Tuer_hinten param Value" ein "undefined".

Gehe ich recht in der Annahme, dass "state" ein Reading ist, während "STATE" das Internal ist?
Die Eingaben "ReadingsVal" ind "InternalVal" lösen bei mir immer nur "unknown command" aus :(

justme1968

und wo genau hast du das eingegeben? wenn du es direkt auf der kommandozeile verwendest musst du erst in den perl kontext:{ReadinsgVal(...)}
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

monek

#5
Da hast du mich natürlich erwischt.
Gebe ich es in {} ein, bekomme ich "closed" zurück.
Bin ich in meinem notify:

(Tuer_hinten|Tuer_vorne) {
my $tuerhinten = ReadingsVal("Tuer_hinten","state","");
my $tuervorne = ReadingsVal("Tuer_vorne","state","");
if ($tuerhinten eq "closed" && $tuervorne eq "closed") {
fhem "set Flur_LED led greenL"
} else {
fhem "set Flur_LED led redL"
}
}

passiert einfach nur nichts :(
Vielleicht habe ich heute einfach ein paar Stunden zuviel davor gesessen...


EDIT:
Es liegt tatsächlich an dem mittlerweile warmen Brei in meinem Kopf.
"(Tuer_hinten|Tuer_vorne)"
ist natürlich ein toller Aufruf, wenn ich es von meinem von meinem "Taster_Weg" aufrufen möchte.
Danke für die Hinweise.

Kann ich das Notify auch anstatt von dem Taster von einem vorherigen notify "anstoßen" bzw. ausführen?

justme1968

mit trigger. siehe commandref.

oder einfach das reading mit setteading setzen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

FHEMAN

Wenn Dein Notify ohne Weiteres auf "Taster_Weg" lauscht, könntest Du mittels
trigger Taster_Weg
Dein Notify anderweitig feuern lassen.
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

monek

Vielen Dank für eure Hilfe.
Ja, ich weiß, die CommandRef ist unser Freund, aber manchmal weiß ich einfach gar nicht, wonach ich speziell suchen soll.
Und dann nach einer Stunde Forumssuche, einer Stunde Google und einer weitern selbst rumtesten gebe ich dann irgendwann auf und Frage direkt nach...

Immerhin läuft es jetzt wie geplant, vielen Dank, dann kann ich auch beruhigt ins Bett gehen ;)