FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: monek am 28 August 2016, 22:48:50

Titel: STATE eines threestatesensors als Variable einlesen
Beitrag von: monek am 28 August 2016, 22:48:50
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
Titel: Antw:STATE eines threestatesensors als Variable einlesen
Beitrag von: Hans Franz am 28 August 2016, 23:03:29
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
Titel: Antw:STATE eines threestatesensors als Variable einlesen
Beitrag von: justme1968 am 28 August 2016, 23:07:32
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
Titel: Antw:STATE eines threestatesensors als Variable einlesen
Beitrag von: monek am 28 August 2016, 23:19:49
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 :(
Titel: Antw:STATE eines threestatesensors als Variable einlesen
Beitrag von: justme1968 am 28 August 2016, 23:22:33
und wo genau hast du das eingegeben? wenn du es direkt auf der kommandozeile verwendest musst du erst in den perl kontext:{ReadinsgVal(...)}
Titel: Antw:STATE eines threestatesensors als Variable einlesen
Beitrag von: monek am 28 August 2016, 23:30:14
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?
Titel: Antw:STATE eines threestatesensors als Variable einlesen
Beitrag von: justme1968 am 29 August 2016, 01:04:32
mit trigger. siehe commandref.

oder einfach das reading mit setteading setzen.
Titel: Antw:STATE eines threestatesensors als Variable einlesen
Beitrag von: FHEMAN am 29 August 2016, 01:10:03
Wenn Dein Notify ohne Weiteres auf "Taster_Weg" lauscht, könntest Du mittels
trigger Taster_Weg
Dein Notify anderweitig feuern lassen.
Titel: Antw:STATE eines threestatesensors als Variable einlesen
Beitrag von: monek am 29 August 2016, 01:26:52
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 ;)