FHEM Forum

FHEM => Automatisierung => Thema gestartet von: miggun am 14 Februar 2019, 12:15:40

Titel: [gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: miggun am 14 Februar 2019, 12:15:40
Ich steh mal wieder ein wenig auf dem Schlauch.
Ich habe meine Zirkulationspumpe, die jeden Tag von 5:30 bis 22 Uhr jede halbe Stunde für 5 Minuten eingeschaltet wird. Also Standard.
Jetzt habe ich mir eine ganz simple Anwesenheitserkennung gebaut, die einfach nur erkennt, wurde heute ein Schalter betätigt und dann den Status auf Anwesend setzt. Das reicht für das was ich vorhabe....erst mal....
Jetzt versuche ich Anwesend on irgendwie mit der Steuerung der Zirkulationspumpe zu verknüpfen, aber das bekomme ich nicht hin.

defmod di_Zirkulationspumpe DOIF ([05:30-22:00,+:01]){if(Value('Anwesend' eq "on")}(set Zirkulationspumpe on-for-timer 10)
attr di_Zirkulationspumpe do always
attr di_Zirkulationspumpe room DOIF

Das geht nicht

defmod di_Zirkulationspumpe DOIF ([05:30-22:00,+:01] and [Anwesend on])(set Zirkulationspumpe on-for-timer 10)
attr di_Zirkulationspumpe do always
attr di_Zirkulationspumpe room DOIF

und das hier auch nicht. Tu mich ein wenig schwer, dass richtig aus den Dokumentationen umzusetzen.
Ich würde mich über Hilfe von Eurer Seite freuen.
Titel: Antw:Zirkulationspumpe nur bei Anwesenheit
Beitrag von: Neuhier am 14 Februar 2019, 12:25:10
Aus was besteht das Device "Anwesend" ?
Titel: Antw:Zirkulationspumpe nur bei Anwesenheit
Beitrag von: Jogi am 14 Februar 2019, 12:27:59
Probiere es doch mal damit:
([05:30-22:00] and [Anwesend] eq "on")(set Zirkulationspumpe on-for-timer 10)
Funktioniert natürlich nur, wenn "anwesend" ein Device mit dem state "on" ist.
Titel: Antw:Zirkulationspumpe nur bei Anwesenheit
Beitrag von: miggun am 14 Februar 2019, 12:30:00
Anwesend ist ein Dummy

Der wird einmal über ein notify angeschmissen, sobald irgendein Schalter betätigt wird und über einen at Befehl um 3 Uhr Nachts zurück gesetzt.


Habe es hin bekommen. Ist blöd, wenn man wie ich keine Ahnung vom Programmieren hat und tausend Varianten durch probieren durchtesten muss.
So klappt es:

defmod di_Zirkulationspumpe DOIF ([05:30-22:00,+:01] and [?Anwesend:state] eq "on")(set Zirkulationspumpe on-for-timer 10)
attr di_Zirkulationspumpe do always
attr di_Zirkulationspumpe room DOIF


Edit, wollte gerade Antworten, da kam noch der Tip von Jogi.... :)
Vielen, vielen Dank... Ihr seid Spitze.
Titel: Antw:Zirkulationspumpe nur bei Anwesenheit
Beitrag von: willib am 14 Februar 2019, 12:42:19
Jetzt schaltest du aber jede Minute für 10 Sekunden an. Das solltest du noch ändern.
Titel: Antw:Zirkulationspumpe nur bei Anwesenheit
Beitrag von: miggun am 14 Februar 2019, 13:02:55
Das war nur zum testen.
Ich wollte ja nicht immer ne halbe Stunde warten, um zu sehen, ob es funktioniert. :)
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: Byte09 am 14 Februar 2019, 17:59:11
Fast schon OT, aber trotzdem:

ich weiss ja nicht wie dein 'anwesenheitsverhalten' ist , aber ich würde dafür sorge tragen , das die pumpe auch bei längerer abwesenheit regelmässig läuft. Mir sind im 'VorFhemZeitalter' zwei Pumpen ( Namenhaft ) festgegangen , während einer jeweils 2-3 wöchigen abwesenheit , in der ich sie ( dämlicherweise ) ausgeschaltet hatte.

gruss Byte09
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: miggun am 14 Februar 2019, 18:43:21
Ahhh, sehr guter Einwand. Bisher lief die über ne Zeitschaltuhr, da lief die ja immer.
Also muss ich noch was einbauen, dass die einmal am Tagfür 5min läuft.
Hm, und dann habe ich noch ein anderes Problem.
Die Pumpe fungiert bei mir auch als Ladepumpe.
Vorgelagert ist ein Multispeicher. Sobald der 10 Grad wärmer ist, soll die Zirkulationspumpe laufen, bis nur noch 7 Grad Differenz da ist.
Hatte das mit einem zweiten DOIF gemacht, aber die beiden DOIF's stören sich wohl gegenseitig.
Das Problem normale Zirkulationsfunktion ist on-for-timer, Ladefunktion nur on.
Jetzt habe ich keine Ahnung, wie ich die beiden DOIF's zusammen bekomme.


Raspberry Pi 3 B+
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: Damian am 14 Februar 2019, 20:40:01
Du kannst doch in einem separaten Zweig einmal pro Tag unabhängig von sonst was deine Pumpe für paar Minuten anwerfen.

Oder einfach in der Bedingung

or [16:00] dranhängen.
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: miggun am 14 Februar 2019, 20:58:57
Vielen Dank. :)
Also:

defmod di_Zirkulationspumpe DOIF (([05:30-22:00,+:01] and [?Anwesend:state] eq "on") or 16:00:00]) (set Zirkulationspumpe on-for-timer 10)
attr di_Zirkulationspumpe do always
attr di_Zirkulationspumpe room DOIF


Bekomme ich da denn auch das hier integriert?

defmod di_Speicherladung DOIF (([Waermepumpe_Temp:Temperature1]+10) <= [Multispeicher_Temp:Temperature2]) (set Zirkulationspumpe on) DOELSE (set Zirkulationspumpe off)
attr di_Speicherladung do always
attr di_Speicherladung room DOIF
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: Damian am 14 Februar 2019, 21:08:29
Zitat von: miggun am 14 Februar 2019, 20:58:57
Bekomme ich da denn auch das hier integriert?

defmod di_Speicherladung DOIF (([Waermepumpe_Temp:Temperature1]+10) <= [Multispeicher_Temp:Temperature2]) (set Zirkulationspumpe on) DOELSE (set Zirkulationspumpe off)
attr di_Speicherladung do always
attr di_Speicherladung room DOIF


do always solltest du hier weglassen.
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: miggun am 14 Februar 2019, 21:10:34
Ah, danke. Mache ich.
Stören sich die beiden DOIF's nicht, weil die ja beide die gleiche Pumpe ansprechen.

defmod di_Speicherladung DOIF (([Waermepumpe_Temp:Temperature1]+10) <= [Multispeicher_Temp:Temperature2]) (set Zirkulationspumpe on) DOELSE (set Zirkulationspumpe off)
attr di_Speicherladung room DOIF
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: Damian am 14 Februar 2019, 21:41:22
Zitat von: miggun am 14 Februar 2019, 21:10:34
Ah, danke. Mache ich.
Stören sich die beiden DOIF's nicht, weil die ja beide die gleiche Pumpe ansprechen.

defmod di_Speicherladung DOIF (([Waermepumpe_Temp:Temperature1]+10) <= [Multispeicher_Temp:Temperature2]) (set Zirkulationspumpe on) DOELSE (set Zirkulationspumpe off)
attr di_Speicherladung room DOIF


natürlich stören die sich, wenn der eine von dem anderen nichts weiß.
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: miggun am 14 Februar 2019, 22:07:31
Mist, ich habe es befürchtet. Dann übersteigt das jetzt gerade mal das bißchen Wissen, was ich habe.
Außer ich lasse jeweils ein Dummy mit setzen, was dann das entsprechende andere DOIF blockiert.
Also Speicherladung Dummy aktiv, Zirkulationspumpen DOIF wird nicht ausgeführt.
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: miggun am 20 Februar 2019, 14:18:14
Ich versuche es immer noch ohne Dummy hin zu bekommen. Leider unterbricht der letzte Befehl ( DOELSE (set Zirkulationspumpe off) ) den Befehl on-for-timer 300, ohne das die Zeit abgelaufen ist. Hat einer eine Idee, wie ich das verhindern kann?

Hier mein Code.

defmod di_Speicherladung DOIF (([Waermepumpe_Temp:Temperature1]+16) <= [Multispeicher_Temp:Temperature2]) (set Zirkulationspumpe on) DOELSEIF (([05:30-22:00,+:30] and\
[?Anwesend:state] eq "on" and [?Zirkulationspumpe:state] eq "off") or [16:00:00])(set Zirkulationspumpe on-for-timer 300) DOELSE (set Zirkulationspumpe off)
attr di_Speicherladung do always
attr di_Speicherladung room DOIF
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: Otto123 am 20 Februar 2019, 15:24:16
Aus DOELSE (set Zirkulationspumpe off)
mach sowasDOELSEIF([Zirkulationspumpe:ReadingWelchesAnzeigtObDiePumpeImOn-For-TimerIst] eq "WertDesReadingsDasDiePumpeNichtImOn-For-Timer-Ist") (set Zirkulationspumpe off)

Gruß Otto
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: miggun am 20 Februar 2019, 15:28:11
Klasse, danke probiere ich.
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: miggun am 20 Februar 2019, 16:39:24
Ich glaube, ich mache etwas bei den Redings falsch, oder? Es funktioniert nicht, was wahrscheinlich daran liegt, dass ich etwas falsch eingebe.

defmod di_Zirkulationspumpe DOIF (([Waermepumpe_Temp:Temperature1]+14) <= [Multispeicher_Temp:Temperature2]) (set Zirkulationspumpe on)\
DOELSEIF (([05:30-22:00,+:30] and [?Anwesend:state] eq "on" and [?Zirkulationspumpe:state] eq "off") or [16:00:00])(set Zirkulationspumpe on-for-timer 300)\
DOELSEIF([di_Zirkulationspumpe:state] eq "cmd_1") (set Zirkulationspumpe off)
attr di_Zirkulationspumpe do always
attr di_Zirkulationspumpe room DOIF
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: Jogi am 20 Februar 2019, 18:19:12
Zitat von: miggun am 20 Februar 2019, 14:18:14
Hat einer eine Idee, wie ich das verhindern kann?

Ich würde mit dem Attribut "wait" arbeiten und on-for-timer rausnehmen.
Gruß,
Jogi
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: miggun am 20 Februar 2019, 18:22:24
Ah, da muss ich mich gleich zu Hause  mal belesen, wie das funktioniert.
Danke.
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: miggun am 20 Februar 2019, 20:47:32
Ich habe es nicht hin bekommen.

Jetzt habe ich doch erst mal den unschönen Weg gewählt. :(

defmod di_Speicherladung DOIF (([Waermepumpe_Temp:Temperature1]+14) <= [Multispeicher_Temp:Temperature2]) (set Zirkulationspumpe on,set du_Speicherladung on)\
DOELSE (set Zirkulationspumpe off,set du_Speicherladung off)
attr di_Speicherladung room DOIF


defmod du_Speicherladung dummy
attr du_Speicherladung room Dummy


defmod di_Zirkulationspumpe DOIF ((([05:30-22:00,+:30] and [?Anwesend:state] eq "on") or [16:00:00]) and [du_Speicherladung:state] eq "off")(set Zirkulationspumpe on-for-timer 300)
attr di_Zirkulationspumpe do always
attr di_Zirkulationspumpe room DOIF
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: Otto123 am 20 Februar 2019, 21:08:28
Zitat von: miggun am 20 Februar 2019, 20:47:32
Ich habe es nicht hin bekommen.
Da wäre ja für die Mithilfe gut zu wissen was denn nicht geklappt hat. Ein list vom device ist auch wesentlich besser als die Definition.

Dein Versuch mit dem Reading ist aus meiner Sicht die falsche Stelle, Du fragst das eigene DOIF ab ob es im Zustand cmd_1 ist? Ich hätte gedacht es gibt am Gerät selbst etwas. Und wenn schon dieser Weg, dann wäre doch cmd_3 richtig oder?

Gruß Otto
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: miggun am 20 Februar 2019, 21:42:21
Im Device bekomme ich on-for-timer nicht raus. Das geht einfach nur auf on. Da bekam ich nichts raus.
den Befehl habe ich nicht ans laufen bekommen, wegen den ganzen Bedingungen.
Speicherladung Vorrang vor Zirkulation
Zirkulation nur wenn Anwesend, Speicherladung aus und wenn Abwesend, dann einmal am Tag um 16 Uhr für 5min.
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: Otto123 am 20 Februar 2019, 21:48:42
Mal bitte ein list Zirkulationspumpe https://forum.fhem.de/index.php/topic,71806.0.html

Gruß Otto
Titel: Antw:[gelöst] Zirkulationspumpe nur bei Anwesenheit
Beitrag von: miggun am 20 Februar 2019, 22:01:45
Internals:
   CFGFN     
   CID        shelly4pro_4BCB83
   DEF        shelly4pro_4BCB83
   DEVICETOPIC Zirkulationspumpe
   IODev      MQTT2_SERVER
   LASTInputDev MQTT2_SERVER
   MQTT2_SERVER_MSGCNT 163164
   MQTT2_SERVER_TIME 2019-02-20 22:01:04
   MSGCNT     163164
   NAME       Zirkulationspumpe
   NR         8719
   STATE      on
   TYPE       MQTT2_DEVICE
   READINGS:
     2019-02-20 22:01:04   1               on
     2019-02-20 22:01:04   2               on
     2019-02-20 22:01:04   3               off
     2019-02-20 16:42:22   announce_fw_ver 20190122-162215/v1.4.5@5cbc6229
     2019-02-20 16:42:22   announce_id     shelly4pro-4BCB83
     2019-02-20 16:42:22   announce_ip     192.168.1.34
     2019-02-20 16:42:22   announce_mac    D436394BCB83
     2019-02-20 16:42:22   announce_new_fw false
     2019-02-20 22:01:04   energy          0
     2019-02-20 16:42:22   online          true
     2019-02-20 22:01:04   power           0.00
     2019-02-20 22:01:03   shellies/shelly4pro-4BCB83/relay/0 off
     2019-02-20 21:59:32   state           on
   TIMED_OnOff:
     CMD        on-for-timer
     DURATION   300
     NEXTCMD    off
     START      1550696372
     START_FMT  2019-02-20 21:59:32
Attributes:
   IODev      MQTT2_SERVER
   getList    shelly4pro_4BCB83:shellies/shelly4pro-4BCB83/relay/1:.* state
   readingList shelly4pro_4BCB83:shellies/shelly4pro-4BCB83/online:.* online
shelly4pro_4BCB83:shellies/announce:.* { json2nameValue($EVENT, 'announce_', $JSONMAP) }
shelly4pro_4BCB83:shellies/shelly4pro-4BCB83/relay/0/power:.* power
shelly4pro_4BCB83:shellies/shelly4pro-4BCB83/relay/0:.* shellies/shelly4pro-4BCB83/relay/0
shelly4pro_4BCB83:shellies/shelly4pro-4BCB83/relay/1/power:.* power
shelly4pro_4BCB83:shellies/shelly4pro-4BCB83/relay/1:.* 1
shelly4pro_4BCB83:shellies/shelly4pro-4BCB83/relay/2/power:.* power
shelly4pro_4BCB83:shellies/shelly4pro-4BCB83/relay/2:.* 2
shelly4pro_4BCB83:shellies/shelly4pro-4BCB83/relay/3/power:.* power
shelly4pro_4BCB83:shellies/shelly4pro-4BCB83/relay/3:.* 3
shelly4pro_4BCB83:shellies/shelly4pro-4BCB83/relay/0/energy:.* energy
shelly4pro_4BCB83:shellies/shelly4pro-4BCB83/relay/1/energy:.* energy
shelly4pro_4BCB83:shellies/shelly4pro-4BCB83/relay/2/energy:.* energy
shelly4pro_4BCB83:shellies/shelly4pro-4BCB83/relay/2/energy:.* energy
shelly4pro_4BCB83:shellies/shelly4pro-4BCB83/relay/2/energy:.* energy
   room       10_Keller,11_Heizung,Homekit,MQTT2_DEVICE
   setList    off:noArg shellies/shelly4pro-4BCB83/relay/1/command off
on:noArg shellies/shelly4pro-4BCB83/relay/1/command on