doif Wert von 2 HM Neigungssensoren an dummy

Begonnen von Hoggle, 28 Mai 2017, 12:19:24

Vorheriges Thema - Nächstes Thema

Hoggle

Hallo.
Ich hab an mein Garagentor 2 HM Neigungssensoren HM-Sec-TiS montiert. Sie liefern auch einwandfrei die Werte open und closed.
Also, nur wenn beide Sensoren open melden, ist das Tor hoch gefahren und wenn beide closed melden, dann ist das Tor unten.
jetzt hab ich mir ein dummy definiert, wo ich den Status open, closed und später noch "undefiniert" rein schreiben lassen möchte.
Also doif erstellt, aber irgendwie bekomme ich den Status nicht geändert.

Hier mal das list vom doif:

Internals:
   CFGFN
   DEF        ([Garage_open] eq "open" && [Garage_close] eq "open") (set Garagentor open) DOELSEIF ([Garage_open] eq "closed" && [Garage_close] eq "close") (set Garagentor closed)
   NAME       di.garage
   NR         12780
   NTFY_ORDER 50-di.garage
   STATE      initialized
   TYPE       DOIF
   Readings:
     2017-05-28 11:59:04   Device          Garage_open
     2017-05-28 11:56:31   cmd             0
     2017-05-28 11:59:04   e_Garage_open_STATE closed
     2017-05-28 11:56:31   state           initialized
   Condition:
     0          InternalDoIf($hash,'Garage_open','STATE') eq "open" && InternalDoIf($hash,'Garage_close','STATE') eq "open"
     1          InternalDoIf($hash,'Garage_open','STATE') eq "closed" && InternalDoIf($hash,'Garage_close','STATE') eq "close"
   Devices:
     0           Garage_open Garage_close
     1           Garage_open Garage_close
     all         Garage_open Garage_close
   Do:
     0:
       0          set Garagentor open
     1:
       0          set Garagentor closed
     2:
   Helper:
     event      battery: ok,contact: closed (to broadcast),closed,trigger_cnt: 24
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev Garage_open
     triggerEvents:
       battery: ok
       contact: closed (to broadcast)
       closed
       trigger_cnt: 24
     triggerEventsState:
       battery: ok
       contact: closed (to broadcast)
       state: closed
       trigger_cnt: 24
   Internals:
     0           Garage_open:STATE Garage_close:STATE
     1           Garage_open:STATE Garage_close:STATE
     all         Garage_open:STATE Garage_close:STATE
   Itimer:
   Readings:
   Regexp:
     0:
     1:
     All:
   State:
     State:
   Trigger:
Attributes:
   do         always
   room       scripts


In den readings des doif habe ich ein reading "e_Garage_open_STATE", wo der richtige Status steht.

Wahrscheinlich nee Kleinigkeit, daher die Frage, wie ich das hin bekomme, hier im Anfängerforum ;)

Kann man den Status auch in den State des doif bekommen? Dann könnte ich mir den Dummy doch sparen. Bei mir steht immer initialized.

Update: Habe set zu setstate geändert, da ich den ja ändern möchte, aber hat nichts geholfen (close noch in closed geändert)

Ellert

Das Reading e_... wird erstellt, wenn DOIF ein passendes Ereignis empfängt. Sieht so aus, als wäre das nicht passiert. Das DOIF steht noch auf initialized, also ist noch keine Bedingung wahr geworden, das hängt von den Sensoren ab. Melden die überhaupt beide gleichzeitig die gleiche Position?

ZitatKann man den Status auch in den State des doif bekommen?
Ja, mit dem Attribut cmdState.

Hoggle

Hallo.
Mhh, müssen denn beide Sensoren gleichzeitig den Status melden oder reicht es nicht, das beide den gleichen Status zu einer Zeit haben?
Das Tor fährt ja hoch, also kommt zuerst der obere Sensor in den State open und erst wenn das Tor komplett oben ist der 2.
Beim schließen des Tores alles rückwerts.

Ellert

Zitatdas beide den gleichen Status zu einer Zeit haben?
Beide müssen, wenn ein Trigger vorhanden ist den gleichen Zustand haben. Es hat sich nur ein Sensor gemeldet, welchen Zustand der andere hatte ist nicht erkennbar.

Hoggle

Aber wenn man noch mal genau schaut findet man auch die Rechtschreibfehler :o
Wenn das Gerät Garage_closed heisst, dann kann das doif in der Form von oben, da ich dort ja Garage_close schrieb, nicht triggern :(
okay, liegt vielleicht an den Nachwirkungen vom Pokalfinale oder an der Gewitterluft ???

Trotzdem danke.
Zum Abschluss nur mein list, welches funktioniert, da auch ich immer wieder gerne wissen möchte, wie eine "Geschichte" ausgegangen ist:

Internals:
   DEF        ([Garage_open] eq "open" && [Garage_closed] eq "open") (setstate Garagentor open) DOELSEIF ([Garage_open] eq "closed" && [Garage_closed] eq "closed") (setstate Garagentor closed)
   NAME       di.garage
   NR         285
   NTFY_ORDER 50-di.garage
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-05-28 12:53:34   Device          Garage_open
     2017-05-28 12:53:34   cmd             1
     2017-05-28 12:53:34   cmd_event       Garage_open
     2017-05-28 12:53:34   cmd_nr          1
     2017-05-28 12:53:17   e_Garage_closed_STATE open
     2017-05-28 12:53:34   e_Garage_open_STATE open
     2017-05-28 12:53:34   state           cmd_1
   Condition:
     0          InternalDoIf($hash,'Garage_open','STATE') eq "open" && InternalDoIf($hash,'Garage_closed','STATE') eq "open"
     1          InternalDoIf($hash,'Garage_open','STATE') eq "closed" && InternalDoIf($hash,'Garage_closed','STATE') eq "closed"
   Devices:
     0           Garage_open Garage_closed
     1           Garage_open Garage_closed
     all         Garage_open Garage_closed
   Do:
     0:
       0          setstate Garagentor open
     1:
       0          setstate Garagentor closed
     2:
   Helper:
     event      battery: ok,contact: open (to broadcast),open,trigger_cnt: 27
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Garage_open
     timerevent battery: ok,contact: open (to broadcast),open,trigger_cnt: 27
     triggerDev Garage_open
     timerevents:
       battery: ok
       contact: open (to broadcast)
       open
       trigger_cnt: 27
     timereventsState:
       battery: ok
       contact: open (to broadcast)
       state: open
       trigger_cnt: 27
     triggerEvents:
       battery: ok
       contact: open (to broadcast)
       open
       trigger_cnt: 27
     triggerEventsState:
       battery: ok
       contact: open (to broadcast)
       state: open
       trigger_cnt: 27
   Internals:
     0           Garage_open:STATE Garage_closed:STATE
     1           Garage_open:STATE Garage_closed:STATE
     all         Garage_open:STATE Garage_closed:STATE
   Itimer:
   Readings:
   Regexp:
     0:
     1:
     All:
   State:
     State:
   Trigger:
Attributes:
   do         always

Hoggle

Doch noch mal ich.
in dem Dummy Garagentor, wo doif "rein schreibt" gibt es ein Internal STATE (der wird aktualisiert) und ein Reading state (bleibt immer in dem letzten manuell geschalteten Zustand)
Ich hab das gemerkt, nachdem ich ein log-file erstellt hatte und mich wunderte, das ich keine Werte da rein geschrieben bekam.
Auch das ist wahrscheinlich wieder so eine Anfängerfrage, wo die Profis die Augen verdrehen, oder?
Kann man mir da noch helfen, oder bin ich doch ein hoffnungsloser Fall? :-\

Damian

Zitat von: Hoggle am 28 Mai 2017, 18:52:56
Doch noch mal ich.
in dem Dummy Garagentor, wo doif "rein schreibt" gibt es ein Internal STATE (der wird aktualisiert) und ein Reading state (bleibt immer in dem letzten manuell geschalteten Zustand)
Ich hab das gemerkt, nachdem ich ein log-file erstellt hatte und mich wunderte, das ich keine Werte da rein geschrieben bekam.
Auch das ist wahrscheinlich wieder so eine Anfängerfrage, wo die Profis die Augen verdrehen, oder?
Kann man mir da noch helfen, oder bin ich doch ein hoffnungsloser Fall? :-\

statt setstate set verwenden :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

@Hoggle:
Zitat von: Ellert am 28 Mai 2017, 12:46:09Ja, mit dem Attribut cmdState.
Warum hast du diesen Weg nicht weiter verfolgt?

Hoggle

Zitat von: Per am 29 Mai 2017, 10:42:16
@Hoggle:Warum hast du diesen Weg nicht weiter verfolgt?
Hallo.
Wie sehr viele von uns, bin auch ich "nur" ein Teilzeit-fhem-Nutzer.
Aber das mit cmdstate habe ich schon mal eingerichtet.
Der State vom doif zeigt jetzt open oder closed.
jetzt muss ich mir noch mal anschauen, wie ich mein Garagentor schalten kann und wie ich erkenne, ob ein Auto in der Garage steht.
Für das Tor gibt es ja ne schaltbare Steckdose mit externem Schaltkontakt (Oder so ähnlich), aber ich überlege noch, wie ich erkennen kann, ob ein Auto in der Garage steht. Meine Frau lässt das schon mal gerne draussen stehen, weil sie ja "vielleicht" noch weg will.
Als Anwesentheitsmelder kann man ja irgend einen Sender (HM, oder zwave) ins Auto werfen und prüfen, ob der Sender erreichbar ist, aber das bringt ja nix, wenn das Auto 5m weiter vor der Garage steht.
MitLichtschranken fange ich erst garnicht an, meine Frau meint ja eh schon, ich wolle sie überwachen. Das so etwas mit "spieltrieb" zu tun hat.... ach egal. Ist hier auch das falsche Forum.

Also, dioif tut was es soll. Ich muss nur noch mal ein wenig beobachten. Ich habe noch teilweise gleiche States im log, also 2x hintereinander ein closed oder opend. Muss ich mal weiter testen. Vielen Lieben Dank für eure Hilfe.

(Wenn ihr nen Tip für die Position des Autos meiner Frau habt, immer gerne :-*)

Brockmann

Zitat von: Hoggle am 30 Mai 2017, 22:44:24
(Wenn ihr nen Tip für die Position des Autos meiner Frau habt, immer gerne :-*)
Alternativ zur Lichtschranke könntest Du an der Decke einen Ultraschall-Abstandmesser installieren.
Der liefert recht genaue Werte und man kann damit auch unterscheiden, ob ein Auto oder vielleicht nur eine Tasche oder eine Schubkarre in der Garage steht (im Gegensatz zur Lichtschranke).
Wenn Du den an der richtigen Stelle platzierst, kannst Du auch relativ sicher feststellen, ob das Auto an der >richtigen< Stelle in der Garage steht, bevor Du das Tor automatisch schliesst.
Sicher, warum sollte man ein Auto nur halb in die Garage fahren? Aber manchmal geht es eben mit dem Teufel zu...

Per

Zitat von: Hoggle am 30 Mai 2017, 22:44:24Für das Tor gibt es ja ne schaltbare Steckdose mit externem Schaltkontakt
Naja, nicht wirklich. Zumal du ja hoch und runter fahren musst.

Wenn du Angst hast, dass das Tor runterfährt, obwohl was dazwischen steht, solltest du dennoch nicht auf eine Lichtschranke und/oder Kontaktleiste verzichten. Sonst ist der WAF ruckzuck im Keller und kommt so schnell nicht wieder raus.

Was ist eigentlich der Unterschied, ob das Auto drin oder draussen ist? So vom gewünschten Effekt her, nicht vom Platz in der Garage?

Hoggle

Zitat von: Per am 31 Mai 2017, 13:24:52
Naja, nicht wirklich. Zumal du ja hoch und runter fahren musst

Doch, das geht schon. Ich hab ein "Ein-Knopf-Motor". 1xdrücken, das Tor fährt runter, wieder drücken, stop, nochmals drücken, das Tor fährt hoch. sollte also funktionieren. Die Anleitung hab ich schon aus nem Buch von Prof. Peter Henning und das passende Material bekomme ich auch noch.
Das mit dem Distanzsensor ist aber eine Coole Idee.

Per

Zitat von: Hoggle am 31 Mai 2017, 16:40:29Doch, das geht schon. Ich hab ein "Ein-Knopf-Motor". 1xdrücken, das Tor fährt runter, wieder drücken, stop, nochmals drücken, das Tor fährt hoch.
Aber nicht über eine "Steckdose". Ein potentialfreier Kontakt wäre da das richtige. Und dann hoffen, dass sich FHEM nicht verzählt. Was, wenn jemand das Tor manuell bedient? :o

Zitat von: Hoggle am 31 Mai 2017, 16:40:29Das mit dem Distanzsensor ist aber eine Coole Idee.
Ja, ist es. Es gibt auch so Ultraschall-Einpark-Ampeln, vllt. kannst du damit den WAF hochtreiben und gleichzeitig "überwachen"?!