mit DOIF den State von ThreeStateSensoren richtig erkennen - Hilfe

Begonnen von MarcAD, 24 Januar 2015, 17:21:33

Vorheriges Thema - Nächstes Thema

MarcAD

Hallo zusammen,

versuche jetzt schon zwei Tage lang meine Jalousien zu automatisieren, verzweifele langsam... >:(

Das eigentlich einfache Verhindern, dass die Rollanden bei geöffneter Tür nicht runter fahren kann doch nicht so schwer sein. Ich habe die Workarounds aus der Konfigref etc. durch. Klingt eigentlich auch alles plausible, aber...
Als ThreeStateSensor nutze ich die HM-Sec-RHS. Ich habe das Gefühl, dass ich die Stati-Reading irgendwie nicht richtig erfasse, aber wie sonst? Hab verschiedene Var. lt. ConfigRef durch...

Kann man bitte jemand einen Blick auf mein DOIF werfen?

define JalAutomatik at ([06:00|7]) (set JalousienAlle 100%)
DOELSEIF ([07:30|8]) (set JalousienAlle 100%)
DOELSEIF ([19:30] and [WZ_Tuerkontakt] eq closed and [Kue_Tuerkontakt] eq closed) (set JalousienAlle 0%)
DOELSEIF ([19:30] and [WZ_Tuerkontakt] eq open and [Kue_Tuerkontakt] eq open) (set JalousienFenster 0%)
DOELSEIF ([19:30] and [WZ_Tuerkontakt] eq open and [Kue_Tuerkontakt] eq closed) (set JalousienFenster, Kue_Jal_Tuer 0%)
DOELSEIF ([19:30] and [WZ_Tuerkontakt] eq closed and [Kue_Tuerkontakt] eq open) (set JalousienFenster, WZ_Jal_Tuer 0%)


Ich habe heute auch mal ganz einfach nur den State des Türsensors auf closed verglichen und wollte einen Aktor schalten. Selbst das ging schon nicht. Die Readings kann ich aber alle sauber im Fhem sehen, sie ändern sich auch ordnungsgemäß.
Mache ich vllt. grundlegend etwas falsch? BTW: Gibt es ein Dok, oder Link wo die Fhem-Programmabarbeitung beschrieben ist? Ich glaube mir fehlt da noch etwas Verständnis, wann welche Routine abgearbeitet wird etc. Wie wird z. B. auf diese Zeitfunktionen reagiert, Fhem kann ja schlecht permanent drauf pollen...??? :o

Danke im Voraus!

Ergänzung: Schnipsel aus dem Log:
2015.01.24 17:30:00 2: JalousieMorgensAbends: internal does not exist: [WZ_Tuerkontakt:STATE]
2015.01.24 17:30:00 2: JalousieMorgensAbends: internal does not exist: [WZ_Tuerkontakt:STATE]
2015.01.24 17:30:00 2: JalousieMorgensAbends: internal does not exist: [WZ_Tuerkontakt:STATE]
2015.01.24 17:30:00 2: JalousieMorgensAbends: internal does not exist: [WZ_Tuerkontakt:STATE]

Damian

Zitat von: MarcAD am 24 Januar 2015, 17:21:33
Hallo zusammen,

versuche jetzt schon zwei Tage lang meine Jalousien zu automatisieren, verzweifele langsam... >:(

Das eigentlich einfache Verhindern, dass die Rollanden bei geöffneter Tür nicht runter fahren kann doch nicht so schwer sein. Ich habe die Workarounds aus der Konfigref etc. durch. Klingt eigentlich auch alles plausible, aber...
Als ThreeStateSensor nutze ich die HM-Sec-RHS. Ich habe das Gefühl, dass ich die Stati-Reading irgendwie nicht richtig erfasse, aber wie sonst? Hab verschiedene Var. lt. ConfigRef durch...

Kann man bitte jemand einen Blick auf mein DOIF werfen?

define JalAutomatik at ([06:00|7]) (set JalousienAlle 100%)
DOELSEIF ([07:30|8]) (set JalousienAlle 100%)
DOELSEIF ([19:30] and [WZ_Tuerkontakt] eq closed and [Kue_Tuerkontakt] eq closed) (set JalousienAlle 0%)
DOELSEIF ([19:30] and [WZ_Tuerkontakt] eq open and [Kue_Tuerkontakt] eq open) (set JalousienFenster 0%)
DOELSEIF ([19:30] and [WZ_Tuerkontakt] eq open and [Kue_Tuerkontakt] eq closed) (set JalousienFenster, Kue_Jal_Tuer 0%)
DOELSEIF ([19:30] and [WZ_Tuerkontakt] eq closed and [Kue_Tuerkontakt] eq open) (set JalousienFenster, WZ_Jal_Tuer 0%)


Ich habe heute auch mal ganz einfach nur den State des Türsensors auf closed verglichen und wollte einen Aktor schalten. Selbst das ging schon nicht. Die Readings kann ich aber alle sauber im Fhem sehen, sie ändern sich auch ordnungsgemäß.
Mache ich vllt. grundlegend etwas falsch? BTW: Gibt es ein Dok, oder Link wo die Fhem-Programmabarbeitung beschrieben ist? Ich glaube mir fehlt da noch etwas Verständnis, wann welche Routine abgearbeitet wird etc. Wie wird z. B. auf diese Zeitfunktionen reagiert, Fhem kann ja schlecht permanent drauf pollen...??? :o

Danke im Voraus!

Ergänzung: Schnipsel aus dem Log:
2015.01.24 17:30:00 2: JalousieMorgensAbends: internal does not exist: [WZ_Tuerkontakt:STATE]
2015.01.24 17:30:00 2: JalousieMorgensAbends: internal does not exist: [WZ_Tuerkontakt:STATE]
2015.01.24 17:30:00 2: JalousieMorgensAbends: internal does not exist: [WZ_Tuerkontakt:STATE]
2015.01.24 17:30:00 2: JalousieMorgensAbends: internal does not exist: [WZ_Tuerkontakt:STATE]

1. lt. Fehlermeldung hat WZ_Tuerkontakt keinen STATUS als Internal
2. Vergleiche mit Zeichenketten in Anführungszeichen setzen, also ... eq "closed"..
3. Komma ist ein Trennzeichen bei DOIF also: (set JalousienFenster 0%, set WZ_Jal_Tuer 0%)

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

MarcAD

Danke für die Antwort.

Dass er das anmeckert, dass kein State vorhanden ist, versteh ich nur nicht weil siehe Bild -> sowohl im Internal, als auch im Reading ist ein State vorhanden. Beide kkann ich doch lesne, oder?I
ich habs auch schon mit :state und :STATE probiert, aber neeee.
Auch die Anführungszeichen für closed und open helfen nicht weiter.

Aber es gibt auch noch die Meldung:
ERROR: WZ_Tuerkontakt has no TYPE     wat bedeutet denn das? In der Internalliste steht er doch drin.

Damian

Zitat von: MarcAD am 24 Januar 2015, 18:52:29
Danke für die Antwort.

Dass er das anmeckert, dass kein State vorhanden ist, versteh ich nur nicht weil siehe Bild -> sowohl im Internal, als auch im Reading ist ein State vorhanden. Beide kkann ich doch lesne, oder?I
ich habs auch schon mit :state und :STATE probiert, aber neeee.
Auch die Anführungszeichen für closed und open helfen nicht weiter.

Aber es gibt auch noch die Meldung:
ERROR: WZ_Tuerkontakt has no TYPE     wat bedeutet denn das? In der Internalliste steht er doch drin.

has no TYPE kommt nicht von DOIF, das hatten wir aber heute schon. Ich habe keine Ahnung, was da los ist.

Du kannst ja die Sache versuchen einzugrenzen, erst mal probieren, ob das geht:

define di_test DOIF ([+00:00:30] or [WZ_Tuerkontakt])(set bla bla)

Dann schauen wir mal weiter.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Brockmann

Zitat von: MarcAD am 24 Januar 2015, 17:21:33
Kann man bitte jemand einen Blick auf mein DOIF werfen?

define JalAutomatik at ([06:00|7]) (set JalousienAlle 100%)
DOELSEIF ([07:30|8]) (set JalousienAlle 100%)
...

Was soll denn das für Code sein? Ein DOIF ist es jedenfalls nicht.
Man erkennt es daran, dass das Zauberwort "DOIF" fehlt.  ;)

MarcAD

Zitat von: Brockmann am 24 Januar 2015, 20:06:23
Was soll denn das für Code sein? Ein DOIF ist es jedenfalls nicht.
Man erkennt es daran, dass das Zauberwort "DOIF" fehlt.  ;)

Ja da hast du Recht, das ist aber nur beim kopieren aus der DEF passiert, da ich den Eintrag im Forum dann um das define...at vervollständigt hab.
Im Originalen ist es tatsächlich ein DOIF, trotzdem Danke!


@Damian, ich habe deinen Test mal durchgeführt.
...([+00:01] or [WZ_Tuerkontakt]) (set WZ_Kugelleuchte on)

Ich musste die 00:00:30 schon ändern, da er beim Speichern "unknowen expression 30" gesagt hat.
Ich habe [WZ_Tuerkontakt] auch wieder in verschiedenen Varianten probiert, mit : usw.

Aber auch so lüppt es leider nicht. Es passiert einfach nichts.  >:(




Damian

Zitat von: MarcAD am 24 Januar 2015, 20:19:36
Ja da hast du Recht, das ist aber nur beim kopieren aus der DEF passiert, da ich den Eintrag im Forum dann um das define...at vervollständigt hab.
Im Originalen ist es tatsächlich ein DOIF, trotzdem Danke!


@Damian, ich habe deinen Test mal durchgeführt.
...([+00:01] or [WZ_Tuerkontakt]) (set WZ_Kugelleuchte on)

Ich musste die 00:00:30 schon ändern, da er beim Speichern "unknowen expression 30" gesagt hat.
Ich habe [WZ_Tuerkontakt] auch wieder in verschiedenen Varianten probiert, mit : usw.

Aber auch so lüppt es leider nicht. Es passiert einfach nichts.  >:(

Hast du die aktuelle Version von DOIF? Dass [+00:00:30] mit der aktuellen Version nicht funktioniert, kann ich mir nicht vorstellen. Wenn wir unterschiedliche Ausgangsvoraussetzungen haben, dann brauchen wir erst gar nicht weiter zu machen.

"lüppt nicht" ist keine Aussage, mit der ich etwas anfangen kann. Wurde das Modul ohne Fehlermeldung angelegt? Nach einer Minute spätestens musst du etwas im Log sehen.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

MarcAD

Zitat von: Damian am 24 Januar 2015, 20:35:04
Hast du die aktuelle Version von DOIF? Dass [+00:00:30] mit der aktuellen Version nicht funktioniert, kann ich mir nicht vorstellen.

Hi Damian,

ich habe jetzt mal ein Fhem-Update gemacht,aber das Problem besteht schon mal weiterhin, dass ich mit der Zeitangabe nicht arbeiten kann.
Eingabe:define di_test DOIF ([+00:00:30] or [WZ_Tuerkontakt]) (set WZ_Kugelleuchte on)
bzw. gleiches noch mal ohne Leerzeichen zwischen den Klammern...

Hier der Log von dem Test:

2015.01.25 12:26:55 1: define di_test di_test DOIF ([+00:00:30] or [WZ_Tuerkontakt]) (set WZ_Kugelleuchte on): di_test DOIF: unknown expression format: 30
2015.01.25 12:27:14 1: define di_test di_test DOIF ([+00:00:30] or [WZ_Tuerkontakt])(set WZ_Kugelleuchte on): di_test DOIF: unknown expression format: 30


Seltsam ist auch, dass er di_test doppelt eingetragen hat..., oder muss das so?

Danke und Gruß,
Marc

Damian

Zitat von: MarcAD am 25 Januar 2015, 12:53:59
Hi Damian,

ich habe jetzt mal ein Fhem-Update gemacht,aber das Problem besteht schon mal weiterhin, dass ich mit der Zeitangabe nicht arbeiten kann.
Eingabe:define di_test DOIF ([+00:00:30] or [WZ_Tuerkontakt]) (set WZ_Kugelleuchte on)
bzw. gleiches noch mal ohne Leerzeichen zwischen den Klammern...

Hier der Log von dem Test:

2015.01.25 12:26:55 1: define di_test di_test DOIF ([+00:00:30] or [WZ_Tuerkontakt]) (set WZ_Kugelleuchte on): di_test DOIF: unknown expression format: 30
2015.01.25 12:27:14 1: define di_test di_test DOIF ([+00:00:30] or [WZ_Tuerkontakt])(set WZ_Kugelleuchte on): di_test DOIF: unknown expression format: 30


Seltsam ist auch, dass er di_test doppelt eingetragen hat..., oder muss das so?

Danke und Gruß,
Marc

Da kann ich leider nicht weiterhelfen, bei mir funktioniert [+00:00:30] ohne irgendwelche Fehlermeldungen.

Ausgabe von list di_test:

Internals:
   DEF        ([+00:00:30])(set test_d on)
   NAME       di_test
   NR         351
   NTFY_ORDER 50-di_test
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-25 13:10:56   cmd_event       timer_1
     2015-01-25 13:10:56   cmd_nr          1
     2015-01-25 13:10:56   state           cmd_1
     2015-01-25 13:10:56   timer_1_c1      25.01.2015 13:11:26
   Condition:
     0          DOIF_time_once($hash->{timer}{0},$wday,"")
   Days:
   Devices:
   Do:
     0          set test_d on
   Helper:
     last_timer 1
     sleeptimer -1
   Internals:
   Readings:
   Realtime:
     0          13:11:26
   State:
   Time:
     0          +00:00:30
   Timecond:
     0          0
   Timer:
     0          0
   Timerfunc:
   Timers:
     0           0
Attributes:
   do         always
   initialize initialized


Modulversion: #     $Id: 98_DOIF.pm 7435 2015-01-04 20:40:24Z damian-s $

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

MarcAD

Hallo zusammen,

ich hatte ja erwähnt, dass ich die Readings des Drehgriffsensors zwar auslesen kann, aber keine Aktionen gestartet werden, wenn ich den Griff drehe, bzw. meine DOIF-Schleifen scheinbar keine Funktionen tätigen

Kann mir jemand die Frage beantworten, ob es sein kann, dass ich solche Probleme habe, weil ich anstatt des HMLan-Adapters den CUL nutze? --> Ich bin grade auf die "LazyConfig" aus dem Wiki-Artikel http://www.fhemwiki.de/wiki/HomeMatic#LazyConfig für HM gestoßen.
Oder hat das einen anderen Zusammenhang?

Ist es generell zu empfehlen den HMLan-Adapter zu nutzen? (AES geht ja mit dem CUL schließlich auch nicht)

Vielen Dank im Voraus!

Danke und Gruß,
Marc


Brockmann

Zitat von: MarcAD am 31 Januar 2015, 15:44:39
ich hatte ja erwähnt, dass ich die Readings des Drehgriffsensors zwar auslesen kann, aber keine Aktionen gestartet werden, wenn ich den Griff drehe, bzw. meine DOIF-Schleifen scheinbar keine Funktionen tätigen
Entscheidend ist, ob Änderungen an den Readings Events generieren (also im Event-Monitor zu sehen sind). Nur dann bekommt Dein DOIF etwas davon mit und kann darauf reagieren.
Ob Du HMLan oder CUL verwendest, ist DOIF völlig egal.

Zitat von: MarcAD am 31 Januar 2015, 15:44:39
Ist es generell zu empfehlen den HMLan-Adapter zu nutzen? (AES geht ja mit dem CUL schließlich auch nicht)
Das ist eine Geschmacks- bzw. Glaubensfrage. Ich kann dazu nur sagen, dass ich einen HMLan verwende und damit sehr zufrieden bin. AES ist ein wichtiger Hinweis, wenn man (jetzt oder später) auch sicherheitsrelevante Sachen machen möchte. Einige neuere Homematic-Geräte scheinen auch nur mit AES zu funktionieren (der neue optischen Fenstersensor?), da bleibt man mit CUL außen vor.

MarcAD

Hallo danke für deine Rückmeldung!

Der Eventmonitor ist ein sehr interessanter Hinweis, ich habe mich nämlich schon gewundert, dass er bei mir rein gar nichts anzeigt.
Ich scheine da noch eine Verständnislück zu haben. Was muss ich denn tun, damit der Eventmonitor etwas anzeigt, bzw. worauf reagiert er?

in der Commandref habe ich jetzt nicht so viel über Events gefunden. Wie gehe ich denn damit um?
Verstehe ich das richtig, dass ich dem Drehgriffsensor, der die states "auf", "zu", "gekippt" hat, irgendwie einen Event bei Änderung eines States ausspucken lassen muss? Wie stelle ich das an? ???

Danke und Gruß,
Marc

Brockmann

Zitat von: MarcAD am 02 Februar 2015, 17:11:49
Der Eventmonitor ist ein sehr interessanter Hinweis, ich habe mich nämlich schon gewundert, dass er bei mir rein gar nichts anzeigt.
Ich scheine da noch eine Verständnislück zu haben. Was muss ich denn tun, damit der Eventmonitor etwas anzeigt, bzw. worauf reagiert er?
Wenn Du den Eventmonitor aufrufst, zeigt der erstmal nichts an. Lass ihn offen, dann werden die auftretenden Events dort nach und nach angezeigt.
Wenn Geräte korrekt gepairt und definiert sind, erzeugen sie selbst bestimmte Events. Welche, das hängt vom Gerät ab und man kann in Grenzen auch steuern, welche Events nicht gemeldet werden sollen.
Standardmäßig werden bei einem Gerät aber erstmal alle Events gemeldet.

Nun habe ich keinen Drehgriffsensor, aber auch der sollte zumindest Statusänderungen als Event melden. Bei einem Fenster-/Türsensor sähe das im Eventmonitor beispielsweise so aus, wenn die Tür geöffnet wird:
2015-02-02 15:03:16 CUL_HM Haustuer_Sensor open

Also, mach mal (und lass) den Eventmonitor im Browser auf und betätige dann den Drehgriff. Dann sollte (mindestens) ein Event dieser Art angezeigt werden.

MarcAD

OK, ich sehe zumindest schon mal, dass sich da etwas tut.


2015-02-04 18:18:06 CUL_HM WZ_Terassentuer trigDst_170914: noConfig
2015-02-04 18:18:06 CUL_HM WZ_Terassentuer battery: ok
2015-02-04 18:18:06 CUL_HM WZ_Terassentuer open
2015-02-04 18:18:06 CUL_HM WZ_Terassentuer contact: open (to CUL_0)
2015-02-04 18:18:12 CUL_HM WZ_Terassentuer trigDst_170914: noConfig
2015-02-04 18:18:12 CUL_HM WZ_Terassentuer battery: ok
2015-02-04 18:18:12 CUL_HM WZ_Terassentuer tilted
2015-02-04 18:18:12 CUL_HM WZ_Terassentuer contact: tilted (to CUL_0)
2015-02-04 18:18:17 CUL_HM WZ_Terassentuer trigDst_170914: noConfig
2015-02-04 18:18:17 CUL_HM WZ_Terassentuer battery: ok
2015-02-04 18:18:17 CUL_HM WZ_Terassentuer closed
2015-02-04 18:18:17 CUL_HM WZ_Terassentuer contact: closed (to CUL_0)


Kann das noConfig etwas mit der fehlenden Funktionalität beim DOIF zu tun haben?
Es bedeutet ja soweit ich weiß, dass die Peeringlist unvollständig ist.
Aber womit soll ich den Sensor denn auch peeren, wenn ich ihn doch wie folgend in der DOIF verbauten möchte?
define JalousieMorgensAbends DOIF ([06:00|7]) (set JalousienAlle 100%)\
DOELSEIF ([07:30|8]) (set JalousienAlle 100%)\
DOELSEIF ([18:43] and [WZ_Tuerkontakt:state] eq "closed" and [Kue_Tuerkontakt:state] eq "closed") (set JalousienAlle 0%) \
DOELSEIF ([18:43] and [WZ_Tuerkontakt:state] eq "open" and [Kue_Tuerkontakt:state] eq "open") (set JalousienFenster 0%)\
DOELSEIF ([18:43] and [WZ_Tuerkontakt:state] eq "open" and [Kue_Tuerkontakt:state] eq "closed") (set JalousienFenster 0%, Kue_Jal_Tuer 0%)\
DOELSEIF ([18:43] and [WZ_Tuerkontakt:state] eq "closed" and [Kue_Tuerkontakt:state] eq "open") (set JalousienFenster 0%, WZ_Jal_Tuer 0%)
attr JalousieMorgensAbends room _Jalousien


Oder habe ich einen Denkfehler?

Danke und Gruß,
Marc

LuckyDay

Ich versteh eines nicht

im ELSEIF steht WZ_Tuerkontakt  und Event zeigste WZ_Terassentuer
genauso
im ELSEIF steht Kue_Tuerkontakt und Bild zeigt Kue_Terrassentuer