Problem mit notify bei FHEM Neustart

Begonnen von fhainz, 06 Dezember 2013, 15:31:42

Vorheriges Thema - Nächstes Thema

fhainz

Hallo!

Mit diesem Script senke ich die Heizung ab wenn das Fenster nicht geschlossen ist.

define szFensterOffen notify szFensterkontakt {\
  my $letzteTemp = ReadingsVal("szHeizungDesiredTemp","state","0");;\
  if(Value("szFensterkontakt") ne "closed"){\
    fhem("set szLetzteTemp $letzteTemp");;\
    fhem("define szHeizungSetSollTempVerzoegert at +00:00:05 set szHeizungDesiredTemp 12");;\
  }\
  else{\
    my $letzteTemp = ReadingsVal("szLetzteTemp","state","18");;\
    fhem("set szHeizungDesiredTemp $letzteTemp");;\
  }\
}
attr szFensterOffen alias Schlafzimmer Fenster offen
attr szFensterOffen group Heizung
attr szFensterOffen room Notifys


Wenn ich nun die fhem.cfg speichere wird die SollTemp immer auf 12° gestellt.
Ich nutze einen HM-Sec-RHS Drehgriff-Kontakt, einen FHT 8V und das neue PID20 Mod

Kann mit jemand sagen warum bzw wie ich das beheben kann?

Grüße

UliM

Hi,
welchen STATE hat denn szFensterkontakt nach dem save?
Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

fhainz

2013-12-07_09:53:23 szFensterkontakt Activity: unknown

Ich denke mittlerweile, ich sollte mein notify ändern damit es nicht so oft aufgerufen wird. Oder hast du vielleicht einen besseren Vorschlag?

Grüße

fhainz

Ich hab mein notify jetzt abgeändert das es nur auf offen, geschlossen, gekippt reagiert. Nun klappt es problemlos.

Falls es jemand braucht:
define szFensterOffen notify (szFensterkontakt:closed|szFensterkontakt:open|szFensterkontakt|tilted) {\
  my $letzteTemp = ReadingsVal("szHeizungDesiredTemp","state","0");;\
  if(Value("szFensterkontakt") ne "closed"){\
    fhem("set szLetzteTemp $letzteTemp");;\
    fhem("define szHeizungSetSollTempVerzoegert at +00:00:05 set szHeizungDesiredTemp 12");;\
  }\
  else{\
    my $letzteTemp = ReadingsVal("szLetzteTemp","state","18");;\
    fhem("set szHeizungDesiredTemp $letzteTemp");;\
  }\
}

fhainz

Es klappt doch nicht problemlos :(

Wenn das Fenster offen ist und der Fensterkontakt
2013-12-08_12:28:35 szFensterkontakt Activity: alive
meldet, wird das notify nochmals aufgerufen und die letzteTemp wird auf 12 gesetzt sodass beim schließen des Fensters auch szHeizungDesiredTemp auf 12 gesetzt wird.

Wo liegt mein Fehler? Das notify wird doch nur durch closed, open und tilted aufgerufen oder?

justme1968

mal ins blaue gedacht was mir einfällt:

- je nach sensor (und einstellung) bekommst du zwei events wenn du von closed nach tilted und umgekehrt gehst.

- ich bin mir ziemlich sicher das Value() im notify noch den alten wert hat und erst danach aktualisiert wird. entweder $EVENT verwenden oder ReadingsVal von state.

- die notify definition schaut komisch aus. es sollte so sein: <device>:open|tilted|closed

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

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

fhainz

Zitat von: justme1968 am 08 Dezember 2013, 13:06:43- die notify definition schaut komisch aus. es sollte so sein: <device>:open|tilted|closed
Das hab ich mal geändert. Mal schaun wann das nächste Activity: alive oder Activity: unknown kommt

Zitat von: justme1968 am 08 Dezember 2013, 13:06:43entweder $EVENT verwenden oder ReadingsVal von state.
Versteh ich nicht was du meinst. Könntest du mir das näher erklären?


Grüße

justme1968

Value fragt nicht das readings state ab sondern den internal value STATE.

das ist zwar oft gleich aber erstens nicht immer und zweitens wird es zu unterschiedlichen zeigen gesetzt. also erst nach dem das reading aktualisiert wurde.

ich kann gerade nicht nachschauen ob das dein problem ist. aber wenn du $EVENT verwendest oder ReadingsVal("szFensterkontakt","state","") bist du auf der sicheren seite. du bekommst im notify das auslösende event in der variablen $EVENT übergeben.

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

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

fhainz

OK danke für die Erklärung. Wo meinst du sollte ich $EVENT bzw ReadingsVal() verwenden? Im notify Aufruf?

BTW: Es war anscheinend die eigenartige Schreibweise des notifys ;) Ich war mir nicht sicher was die richtige Schreibweise ist und diese hab ich irgendwo im forum gefunden ;) aber mit szFensterkontakt:closed|open|tilted klappte nun wirklich ;)

Hier nochmal das komplette Script, falls es jemand benötigt.
define szFensterOffen notify szFensterkontakt:closed|open|tilted {\
  my $letzteTemp = ReadingsVal("szHeizungDesiredTemp","state","0");;\
  if(Value("szFensterkontakt") ne "closed"){\
    fhem("set szLetzteTemp $letzteTemp");;\
    fhem("define szHeizungSetSollTempVerzoegert at +00:00:05 set szHeizungDesiredTemp 12");;\
  }\
  else{\
    my $letzteTemp = ReadingsVal("szLetzteTemp","state","17");;\
    fhem("set szHeizungDesiredTemp $letzteTemp");;\
  }\
}


Grüße

justme1968

statt Value("szFensterkontakt").

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

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

fhainz

Aaah alles klar. Nun hab ich's verstanden, danke! ;)