(Gelöst) Dummy State und Notify

Begonnen von Rolfg, 14 August 2017, 21:34:30

Vorheriges Thema - Nächstes Thema

Rolfg

Hallo zusammen,

ich habe ein Problem mit einem Notify. Ich möchte damit einen Futterautomat am Teich steuern. Momentan habe ich dazu drei at Befehle die auf den State von einem Dummy reagieren. Dieser Dummy hat als State die Jareszeiten nach einem Beispiel von Fhem Wiki. In dem Notify sollen eigentlich 3 at's definiert werden. Habe es erst mal nur mit einem probiert. Das Notify sieht folgendermaßen aus:


dy_Season:state:.* {if(ReadingsVal('dy_Season' , 'state', '') eq 'Sommer') {fhem("define Futter1 at 20:45:00 set SteckdoseKoiFutter on-for-timer 3")}}



Leider funktioniert es nicht.

Das at funtioniert einwandfrei:


*08:00:00 {if (ReadingsVal('dy_Season' , 'state', '') eq 'Sommer') {fhem ("set SteckdoseKoiFutter on-for-timer 3") }}


Leider steht auch nichts in der Logfile. Und im Netz habe ich auch nix gefunden zu Notify und Dummy State. Vielleicht kann mir ja jemand auf die Sprünge helfen.

Danke und Gruß Rolf

DeeSPe

Gib Deinem notify noch ein Attribut "addStateEvent 1".

Gruß
Dan

EDIT: Statt
ReadingsVal('dy_Season' , 'state', '')
kannst Du hier auch
$EVTPART1
schreiben.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

amenomade

Ausserdem würde "defmod" statt "define" nutzen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Rolfg

Hallo,
danke für eure Antworten. Habe das Atribut gesetzt und define durch defmod ersetzt. Wie ich das $EVTPART1 richtig einsetzte ist mir noch nicht ganz schlüssig, sorry. Leider funktioniert es trotzdem nicht.

Danke und Gruß Rolf

DeeSPe

#4
Ich wäre mir ziemlich sicher das Folgendes funktioniert:
define n_dy_Season_state notify dy_Season:state:.* {fhem "defmod Futter1 at 20:45:00 set SteckdoseKoiFutter on-for-timer 3" if($EVTPART1 eq "Sommer")}
attr n_dy_Season_state addStateEvent 1


Gruß
Dan

EDIT: Habe es gerade mit folgendem Dummy getestet und es funktioniert:
defmod dy_Season dummy
attr dy_Season setList Frühling Sommer Herbst Winter
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

amenomade

Ich finde DOIF in solchen Fälle intuitiver und mächtiger, aber es stimmt schon, dass man mit DOIF bestimmte Lernzeit investieren muss...

define Futter1 DOIF ([20:45] and [dy_Season] eq "Sommer") (set SteckdoseKoiFutter on-for-timer 3)

In einem 2. Schritt könnte man sogar das morgigen Schalten mit integrieren, und in einem 3. Schritt auf dem Dummy verzichten, und ein Reading des DOIFs nutzen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Rolfg

Hallo,

also der code von Dan funktioniert bei mir leider nicht. Mich verwunder das if am Ende, habe ich bisher noch nicht gesehen. So habe ich es probiert:

dy_Season:state:.* {fhem "defmod Futter1 at 22:24:00 set SteckdoseKoiFutter on-for-timer 3" if($EVTPART1 eq "Sommer")}

Leider ohne Erfolg. Das mit dem Doif habe ich auch schon überlegt. Habe auch schon welche am laufen. Eigentlich soll wenn Sommer ist um 8.00 dann +3,5std. und + 7std. gefüttert werden. Im Herbst dann um 10.00 und 14.00 oder so. Bisher hatte ich drei at's. Wollte es halt gerne mit einem bzw. dann 2 Notify lösen. Der Dummy soll auch noch über die Wassertemperatur gesteuert werden. Aber eins nach dem anderen. Scheinbar hängt es noch woanders. Mir kommt es so vor als würde das Notify den State nicht lesen obwohl es unten in den Abhäingkeiten richtig steht.

Danke und Gruß Rolf

DeeSPe

Zitat von: Rolfg am 14 August 2017, 22:33:58
Hallo,

also der code von Dan funktioniert bei mir leider nicht. Mich verwunder das if am Ende, habe ich bisher noch nicht gesehen. So habe ich es probiert:

dy_Season:state:.* {fhem "defmod Futter1 at 22:24:00 set SteckdoseKoiFutter on-for-timer 3" if($EVTPART1 eq "Sommer")}

Leider ohne Erfolg. Das mit dem Doif habe ich auch schon überlegt. Habe auch schon welche am laufen. Eigentlich soll wenn Sommer ist um 8.00 dann +3,5std. und + 7std. gefüttert werden. Im Herbst dann um 10.00 und 14.00 oder so. Bisher hatte ich drei at's. Wollte es halt gerne mit einem bzw. dann 2 Notify lösen. Der Dummy soll auch noch über die Wassertemperatur gesteuert werden. Aber eins nach dem anderen. Scheinbar hängt es noch woanders. Mir kommt es so vor als würde das Notify den State nicht lesen obwohl es unten in den Abhäingkeiten richtig steht.

Danke und Gruß Rolf

Hast Du denn auch mal von einer anderen Jahreszeit auf Sommer gestellt?

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

amenomade

Vielleicht liegt dein Problem beim Trigger "dy_Season:state:.*"
Was kommt für Event im Eventmonitor?

Am besten erstellt man ein notify auf Basis Eventmonitor: ganze Zeile markieren, dann auf dem Knopf "Create Device" notify auswählen. Somit hat man schon ein Pattern für den Trigger vom notify.

M.A. wird dein notify nur einmal funktionieren: wenn dy_Season sich ändert... was nicht jeden Tag passiert. Dann müsste man mindestens das "at" so definieren, dass er jeden Tag um 22:24 schaltet. Das hast Du aber vielleicht im Moment nur so, um zu testen.

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

DeeSPe

Zitat von: Rolfg am 14 August 2017, 22:33:58
Eigentlich soll wenn Sommer ist um 8.00 dann +3,5std. und + 7std. gefüttert werden. Im Herbst dann um 10.00 und 14.00 oder so.

Das könnte man easy so abbilden und endlos erweitern:
defmod n_dy_Season_state notify dy_Season:state:.* {\
  if($EVTPART1 eq "Sommer") {\
    fhem "defmod Futter1 at *08:00:00 set SteckdoseKoiFutter on-for-timer 3";;\
    fhem "defmod Futter2 at *11:30:00 set SteckdoseKoiFutter on-for-timer 3";;\
    fhem "defmod Futter3 at *18:30:00 set SteckdoseKoiFutter on-for-timer 3";;\
  } elsif($EVTPART1 eq "Herbst") {\
    fhem "defmod Futter1 at *10:00:00 set SteckdoseKoiFutter on-for-timer 3";;\
    fhem "defmod Futter2 at *14:00:00 set SteckdoseKoiFutter on-for-timer 3";;\
    fhem "delete Futter3";;\
  }\
}
attr n_dy_Season_state addStateEvent 1


Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

amenomade

Also, Zusammenfassung von DeeSPe und mir:

- entweder schaltest Du nur einmal bei Jahreszeitwechsel und definierst Du ein wiederkehrendes "at".

- oder Du schaltest jeden Tag, und definierst dann ein einmaliges "at" für den Tag.

Zum Testen musst Du dann aber immer dein notify triggern. Entweder indem Du die Jahreszeit echt (manuell) ändern, oder indem Du manuell "trigger dy_Season Sommer" ins Kommandofeld eingibst.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Rolfg

Hallo,

also nachdem ich jetzt von Sommer auf Herbst und wieder zurück geschaltet habe hat es funktioniert. Um 22.44 die Kois füttern garnicht gut. Das mit dem state ändern habe ich mir schon fast gedacht das das nur einmal geht. Dann bleit mir wohl doch nur die at's weil ja das sommer mehrere Wochen unberührt stehen bleibt. Oder aber ein zweites notify was mit defmod die ersten beiden at's verändert und das dritte müsste ich dann löschen. Die at's müssten dann mit * angelegt werden für jeden tag. Muß dann mal probieren die drei at's in dem Notify zu programmieren.

Danke und Gruß Rolf

DeeSPe

Zitat von: Rolfg am 14 August 2017, 22:52:33Oder aber ein zweites notify was mit defmod die ersten beiden at's verändert und das dritte müsste ich dann löschen. Die at's müssten dann mit * angelegt werden für jeden tag. Muß dann mal probieren die drei at's in dem Notify zu programmieren.

Siehe #9.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Rolfg

Hallo Dan,

habe ich gar nicht gesehen. Ihr seit zu schnell für mich. Genauso habe ich mir das vorgestellt. Mich hatte dann das if am Ende irritiert. Werde ich morgen mal ausprobieren. Denke aber das das so funktioniert. Vielen vielen Dank an euch beide. Werde aber jetzt zu Bett gehen.

Danke und Gruß Rolf

Frank_Huber

Zitat von: amenomade am 14 August 2017, 22:21:48
Ich finde DOIF in solchen Fälle intuitiver und mächtiger, aber es stimmt schon, dass man mit DOIF bestimmte Lernzeit investieren muss...

define Futter1 DOIF ([20:45] and [dy_Season] eq "Sommer") (set SteckdoseKoiFutter on-for-timer 3)

In einem 2. Schritt könnte man sogar das morgigen Schalten mit integrieren, und in einem 3. Schritt auf dem Dummy verzichten, und ein Reading des DOIFs nutzen.


Würde mich amenomade's Vorshlag anschließen, So wäre es dann erweitert auf mehrere Zeiten und Jahreszeiten:
define Futter1 DOIF (([08:00] or [11:30] or [15:00]) and [dy_Season] eq "Sommer") (set SteckdoseKoiFutter on-for-timer 3)
DOELSEIF (([10:00] or [14:00]) and [dy_Season] eq "Winter") (set SteckdoseKoiFutter on-for-timer 3)
attr Futter1 do always