Boiler nur 1 mal am Tag Schalten bei Anwesenheit

Begonnen von kinghill, 21 April 2018, 09:31:06

Vorheriges Thema - Nächstes Thema

kinghill

Hallo,

ich würde gerne meinen Boiler nur 1x am Tag für eine bestimmte Zeit Schalten lassen.
Das ganze sollte durch die Anwesenheit meiner Gtags getrickert werden.

Anforderung:

kommt eine Person Heim, wird der Boiler  für x Minuten geschalten.
geht die Person nochmal kurzfristig weg, wird der Baoiler bei 2ter Heimkehr am Tag nicht nochmal geschalten.
Kommt eine weitere Person nach Hause bleibt der Boiler aus, da er ja schon 1 mal an diesem Tag geschalten wurde.

Sprich der Boiler darf nur 1 mal am Tag geschalten werden.
Ist das irgendwie möglich? Ich wäre über Beispiele sehr dankbar. Komme mit der suche im Netz einfach nicht weiter.

Vielen Dank!

Wuehler

Mach dir einen dummy oder userreding, dass du jede Nacht auf true setzt und wenn der boiler einmal angeschmissen wurde auf false.
Bei jedem Heimkommen prüfst du ob das true ist und machst nur dann den boiler an.

CoolTux

#2
So eine ähnliche Anforderung gab es vor einiger Zeit schon mal.
Es wurde einfach abgefragt ob das Device am aktuellen Tag schon einmal geschalten wurde. Thema Reading Timestamp.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Moin,

und wer DOIF Fan ist, da geht das auch von "Haus" aus.
defmod di_GutenMorgen DOIF ([05:51-11:00] and [LichtBWaSw_02:"on"]) (set Sonos_Bad GroupMute 0)

Schaltet genau einmal in dem Zeitraum [05:51-11:00] egal wie oft LichtBWaSw_02 auf on geht (die zweite Bedingung wahr wird). Es ist auch egal wie man die zweite Bedingung gestaltet: als Event oder Vergleich.

Ich habe da am Anfang lange gebraucht um zu verstehen, dass das einfach so ist. Ich hatte es viel komplizierter gestrickt  ;D
Deswegen fällt mir bei einer solchen Anforderung immer sofort dieses DOIF ein.  ;)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux

#4
Notify


fhem("set Boiler on-for-timer 1200") if( $today ne (split(' ', ReadingsTimestamp('Boiler','state',0)))[0] );
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

kinghill

#5
Hallo,

erst mal vielen Dank für die Antworten.
Ich habe jetzt ein wenig rum Probiert. Komme aber leider nicht zum richtigen Ergebnis:
on-for-timer habe ich ans laufen bekommen.

aber wenn ich folgende Config nutze bekomme ich eine Hash Meldung. Was hat das zu bedeuten? Bzw was mache ich da damit?

define Bad_Boiler_on notify Boiler_Einschalten.on {\
   fhem("set Bad_Boiler on-for-timer 60") if( $today ne (split(' ', ReadingsTimestamp('Bad_Boiler','state',0)))[0] )};;{\
   }

018-04-22 13:24:37 MQTT_DEVICE Bad_Boiler on
2018.04.22 13:24:37 3 : Bad_Boiler_on return value: HASH(0x1a92a10)

Ottos Variante funktioniert leider nur bedingt. Bei erneutem Schalten meines Dummy Switches schält auch der Boiler erneut ein. Die Funktion 1 X am Tag scheint da nicht zu funktionieren.

Danke

CoolTux

Das kann ich unmöglich lesen. Es fehlen die Codetags beim Code. Das ist das Raute Symbol hier beim Forumeditor. Außerdem was sollen die ganzen doppelkomma und Back Slash, das ist nicht das was ich dir gegeben habe.
Erstelle ein notify in FHEMWEB und bearbeite es darüber. Dort fügst du dann meinen Code an der richtigen Stelle ein.

Was sagst ein

{ $today }

In der FHEMWEB Kommandozeile oben eingeben?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

kinghill

Habe das ganze jetzt über das web if angelegt:

DEF   
Boiler_Einschalten.on { fhem("set Bad_Boiler on-for-timer 60") if( $today ne (split(' ', ReadingsTimestamp('Bad_Boiler','state',0)))[0] );}
NAME
Bad_Boiler_on
NR
75
NTFY_ORDER
50-Bad_Boiler_on
REGEXP
Boiler_Einschalten.on
STATE
2018-04-22 15:32:47
TYPE
notify

Nun sehe ich Log nur das Schalten des Dummys, aber der Boiler wird nicht geschalten:

2018-04-22 15:35:41 dummy Boiler_Einschalten on.

{ $today } gibt das aktuelle Datum aus.



CoolTux

Zitat von: kinghill am 22 April 2018, 15:36:54
Habe das ganze jetzt über das web if angelegt:

DEF   
Boiler_Einschalten.on { fhem("set Bad_Boiler on-for-timer 60") if( $today ne (split(' ', ReadingsTimestamp('Bad_Boiler','state',0)))[0] );}
NAME
Bad_Boiler_on
NR
75
NTFY_ORDER
50-Bad_Boiler_on
REGEXP
Boiler_Einschalten.on
STATE
2018-04-22 15:32:47
TYPE
notify

Nun sehe ich Log nur das Schalten des Dummys, aber der Boiler wird nicht geschalten:

2018-04-22 15:35:41 dummy Boiler_Einschalten on.

{ $today } gibt das aktuelle Datum aus.

Verstehe ich nicht. Schaltest Du den Boiler nicht direkt? Also die Schaltsteckdose? Und bitte bitte Codetage. Ich kann das auf dem Handy sonst nicht lesen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

kinghill

Zitat von: CoolTux am 22 April 2018, 15:49:02
Verstehe ich nicht. Schaltest Du den Boiler nicht direkt? Also die Schaltsteckdose? Und bitte bitte Codetage. Ich kann das auf dem Handy sonst nicht lesen.

Ne ich habe das gerade noch über einen Dummy. Damit ich nich andauernd den Home Status wechseln muss. Und das Notify über den Schalter Trickern kann.

Aber glaube nicht das es daran liegt. Habe den Befehl auch schon direkt eingegeben. Der wird Kommentarlos angenommen. Woran sehe ich ob der Notify heute schon einmal geschalten wurde?
Vielleicht bin ich auch einfach nur zu doof oder habe einen Denkfehler.

CoolTux

Im STATE des Notify steht drin ob es heute schon einmal geschalten wurde.

Hast Du den Dummy denn auch on-for-timer beigebracht. Dazu muss man ein Attribut setzen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Zitat von: kinghill am 22 April 2018, 13:27:45
Ottos Variante funktioniert leider nur bedingt. Bei erneutem Schalten meines Dummy Switches schält auch der Boiler erneut ein. Die Funktion 1 X am Tag scheint da nicht zu funktionieren.
Naja man muss verstehen wann und warum genau einmal geschaltet wird. Ich frage den Event "on" ab. Der logische Zustand des DOIF darf sich  nur einmal ändern.
Wie sieht dein DOIF Versuch aus? Wenn ich es wüsste könnte ich helfen, ohne Info habe ich keine Chance.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Wuppi68

ich würde das ganze ganz anders angehen :-)

Man nehme in dem Schaltdevice ein zusätzliches Reading auf: z.B. Triggered

setreading <Schaltdevice> Triggered false

bei jedem Heimkommen dann schauen, ob schon getriggered wurde und dann Einschalten UND Triggered auf true setzen ...

und bei jedem Datumswechsel mit einem at einfach das Reading Triggered auf false setzen
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

CoolTux

Du hast schon mein Beispiel gesehen ?
Das sind gerade mal vier fünf Wörter. Noch einfacher geht es ja wohl kaum.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Wuppi68

Zitat von: CoolTux am 22 April 2018, 19:31:17
Du hast schon mein Beispiel gesehen ?
Das sind gerade mal vier fünf Wörter. Noch einfacher geht es ja wohl kaum.

Ja klar ... ist in dem Kontext (für mich) auch super einfach und verständlich :-)

Aber nach einer gewissen Zeit bekomme ich bei solchem Code immer Alzheimer und habe normalerweise keinen Plan mehr was so ein Ding macht ;-)
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

kinghill

Hi Leute,

Die Anleitung von CoolTux funktioniert bestens.
Habe einfach bis 00:00 gewartet. Das notify wurde gestern wohl beim Testen schon geschalten.
Und da es nur 1 mal täglich schalten soll, hat es das eben nicht mehr getan :-)

Nochmal Vielen Dank für eure Hilfe!!!!!

kinghill

Zitat von: Otto123 am 22 April 2018, 18:33:26
Naja man muss verstehen wann und warum genau einmal geschaltet wird. Ich frage den Event "on" ab. Der logische Zustand des DOIF darf sich  nur einmal ändern.
Wie sieht dein DOIF Versuch aus? Wenn ich es wüsste könnte ich helfen, ohne Info habe ich keine Chance.

Gruß Otto

Das event wäre der home Status. Und da sich dieser jeh nach Anwesenheit mehrfach am Tag ändert, würde der status sich auch dementsprechend oft verändern.
Wie würdest du ein mehrfaches Schalten am Tag unterdrücken?

CoolTux seine Lösung funktioniert jetzt. Dennoch wäre ein 2ter Lösungsansatz auch schön :-)

Otto123

Du redest um den heißen Brei und hast es nicht probiert. Egal es funktioniert für Dich ;D und mein DOIF Beispiel funktioniert bei mir auch.

Auch wenn da offensichtlich nichts enthalten was Dir anzeigt, dass es nur einmal am Tag schaltet. Es ist eben von Hause aus so bei DOIF.
Es geht nicht darum ob sich der Status des Lichtschalters im Bad mehrfach am Tag ändert, es geht um den Bedingungsstatus des DOIF.
Ein DOIF führt einen Bedingungszweig nur einmal aus solange sich sein Zustand nicht ändert. Aber ich habe das schon erklärt.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

kinghill

#19
Zitat von: Otto123 am 23 April 2018, 09:16:57
Du redest um den heißen Brei und hast es nicht probiert. Egal es funktioniert für Dich ;D und mein DOIF Beispiel funktioniert bei mir auch.

Auch wenn da offensichtlich nichts enthalten was Dir anzeigt, dass es nur einmal am Tag schaltet. Es ist eben von Hause aus so bei DOIF.
Es geht nicht darum ob sich der Status des Lichtschalters im Bad mehrfach am Tag ändert, es geht um den Bedingungsstatus des DOIF.
Ein DOIF führt einen Bedingungszweig nur einmal aus solange sich sein Zustand nicht ändert. Aber ich habe das schon erklärt.

Gruß Otto

Ich hatte es so  Probiert:

#defmod Boiler_an_test DOIF ([07:00-22:00] and [Boiler_Einschalten:"on"]) (set Bad_Boiler on-for-timer 60)

Wobei Boiler_Einschalten der Dummy zum Test ist. Schalte ich diesen auf off, und wieder auf on wird auch wieder Bad_Boiler für 60 sek geschalten. Das wäre ja wie Homestatus: Home/Away oder nicht?
Mir geht's rein ums Verständnis. Bin noch nicht so lange in der Fhem Welt unterwegs. Kann dir gern auch noch mehr infos zu meinen configs zukommen lassen.

Was mir an der Lösung sehr gefällt, ist das zusätzlich auch noch ein Zeitraum (Zeit) mit eingebunden ist. Und das ja sehr vielseitig einsetzbar ist.

Danke nochmal. Mfg Frank

Otto123

Hallo Frank,

Du hast absolut Recht. Ich habe das gerade mal überprüft und bin erstaunt. Irgendwas hat sich geändert ...  :o
In meinem Fall war durch einen zweiten Fakt das ganze so, dass ich das "Fehlverhalten" nicht bemerkt habe.

Ich melde mich, falls ich herausfinde warum...

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

#21
Zitat von: Otto123 am 23 April 2018, 10:07:36
Hallo Frank,

Du hast absolut Recht. Ich habe das gerade mal überprüft und bin erstaunt. Irgendwas hat sich geändert ...  :o
In meinem Fall war durch einen zweiten Fakt das ganze so, dass ich das "Fehlverhalten" nicht bemerkt habe.

Ich melde mich, falls ich herausfinde warum...

Gruß Otto

Die Lösung ist mal wieder einfacher, als man denkt, wenn man weiß, wie es funktioniert :)

Bei Eventangaben [Device:"event"] wird eine Bedingung ausgewertet, wenn irgend ein Event von Device kommt, das kann zum Zustandswechsel (hier cmd_2) führen, wenn etwas anderes als "event" kommt.

Mit der Angabe ["^Device$:event"] wird die Bedingung dagegen nur geprüft, wenn beides passt, sonst nicht, hierbei kann also kein Zustandswechsel stattfinden, wenn ein anders Event vom Device kommt.

defmod Boiler_an_test DOIF ([07:00-22:00] and ["^Boiler_Einschalten$:on"]) (set Bad_Boiler on-for-timer 60)

Hiermit wird der Zustand erst um 22:00 Uhr auf cmd_2 gehen, damit ist das Modul für cmd_1 für den nächsten Tag freigeschaltet :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

Ja Damian da hast Du Recht, und irgendwo zwischen hier und heute bin ich da mal stecken geblieben  ;)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

kinghill

#23
Zitat von: Damian am 23 April 2018, 10:43:40
Die Lösung ist mal wieder einfacher, als man denkt, wenn man weiß, wie es funktioniert :)

Bei Eventangaben [Device:"event"] wird eine Bedingung ausgewertet, wenn irgend ein Event von Device kommt, das kann zum Zustandswechsel (hier cmd_2) führen, wenn etwas anderes als "event" kommt.

Mit der Angabe ["^Device$:event"] wird die Bedingung dagegen nur geprüft, wenn beides passt, sonst nicht, hierbei kann also kein Zustandswechsel stattfinden, wenn ein anders Event vom Device kommt.

defmod Boiler_an_test DOIF ([07:00-22:00] and ["^Boiler_Einschalten$:on"]) (set Bad_Boiler on-for-timer 60)

Hiermit wird der Zustand erst um 22:00 Uhr auf cmd_2 gehen, damit ist das Modul für cmd_1 für den nächsten Tag freigeschaltet :)

Japp das ganze Funktioniert.

So nun habe ich noch eine Kleinigkeit dazu entdeckt. Und zwar hätte ich er gerne bei Anwesenheit über mehrere Tage. Sprich der Home Status bleibt über 2 Tage auf Home. Das der Boiler dann um 7 Uhr Morgens angeht. Das geht Sicherlich über einen extra Befehl, aber vielleicht geht das auch alles über ein Kommando?

Inzwischen schaut das ganze so aus:

Bad_Boiler_on DOIF ([07:00-20:00] and ["^HomeStatus$:1"]) (set Bad_Boiler on-for-timer 3600)


Thx

Damian

Zitat von: kinghill am 24 April 2018, 08:15:16
Japp das ganze Funktioniert.

So nun habe ich noch eine Kleinigkeit dazu entdeckt. Und zwar hätte ich er gerne bei Anwesenheit über mehrere Tage. Sprich der Home Status bleibt über 2 Tage auf Home. Das der Boiler dann um 7 Uhr Morgens angeht. Das geht Sicherlich über einen extra Befehl, aber vielleicht geht das auch alles über ein Kommando?

Inzwischen schaut das ganze so aus:

Bad_Boiler_on DOIF ([07:00-20:00] and ["^HomeStatus$:1"]) (set Bad_Boiler on-for-timer 3600)


Thx

Das ist wiederum eine Zustandsabfrage und keine Ereignisabfrage (diese wäre um 07:00 Uhr nicht wahr), dann eher:

Bad_Boiler_on DOIF ([07:00-20:00] and [HomeStatus] == 1) (set Bad_Boiler on-for-timer 3600)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF