Autor Thema: Poolpumpe  (Gelesen 1844 mal)

Offline Heiner

  • Full Member
  • ***
  • Beiträge: 199
Poolpumpe
« am: 23 August 2013, 09:47:49 »
Hi,

ich mochte die Poolpumpe automatsich schalten. Dabei gilt es zu beruecksichtigen das diese mindestens 5 Stunden am Tag laeuft (1), immer an ist, wenn der Poolrolladen auf ist(2), und moeglichst dann an ist wenn die Sonne scheint und Solare Energie produziert wird (3).

Nun ist die Frage wie geht das?

Man koennte (1)einfach mit
    define PoolpumpeMittagsAn at *13:00 set Poolpumpe on
    define PoolpumpeMittagsAus at *15:00 set Poolpumpe off
    define PoolpumpeAbendsAn at *17:00 set Poolpumpe on
    define PoolpumpeAbendsAus at *20:00 set Poolpumpe off
erledigen. Die Zeiten hab ich gewaehlt weil mittags die meisste Sonne Scheint und den freuhen Abend weil ich das meisstens schwimme.


Dann kann man noch sagen (2)
    if ($Poolrolladen){set Poolpumpe on}
    if ("$Poolrolladen" eq "off"){set Poolpumpe off}

Und (3) koennte man erledigen mit
    if ("$Wechselrichter.AC.Power" > 2000){set Poolpumpe on}
    if ("$Wechselrichter.AC.Power" < 2000){set Poolpumpe off}

Aber nun wuerde ja der eine Event den anderen ueberschreiben, das ist ja bedingt werwuenscht aber nicht komplett.
Es waere doof wenn eine Wolke kommt und (3) die Pumpe um 13:05 ausschaltet. Dann besteht das Risiko die minimum Zeit nicht zu erreichen.
Gleiches gilt wenn der Rolladen auf ist, dann MUSS die Pumpe laufen.

Wie kriege ich das geloesst?
Heiner
--------------------------------
fhem auf BananaPi
Busware CUL 868MHz, NanoCul 434MHz,fhemdruino, HM-CFG-USB
HM, THZ, Kostal, Somfy, FritzBox,Enigma

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15858
  • s/fhem\.cfg/configDB/g
Aw: Poolpumpe
« Antwort #1 am: 23 August 2013, 10:06:26 »
Mit nachdenken, systematischem Vorgehen und Dummies, in denen Du Dir ggf. Schaltzustände speicherst. Ausserdem wirst Du um eine gewisse Menge If() Abfragen nicht rumkommen, um die ganze Logik zu verknüpfen. (Eine Uhrzeit läßt sich z.B. problemlos abfragne, damit zwischen 13 und 15 Uhr kein Abschalten erfolgt)

Mach Dir am besten mal eine Entscheidungsmatrix, in der Du darstellst, wann geschaltete werden MUSS, wann geschaltet werden KANN und wann NICHT geschaltet werden DARF.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 14.06.2019

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19069
Aw: Poolpumpe
« Antwort #2 am: 23 August 2013, 10:19:47 »
genau. das diagramm ist der anfang. damit baust du dir eine routine die dir zurück gibt ob die pumpe jetzt laufen muesste. die routine rufst du alle x minuten auf und wenn sie meldet das die pumpe an sein muss schaltest du sie mit on-for-timer für 2 oder 3 mal x minuten an. am besten mit einem aktor der on-for-timer nativ unterstützt.

und das müsste fast ganz ohne dummys gehen. eventuell einen um die laufzeit aufzusummieren. aber die könnte man auch als reading in den pumpenaktor stecken.

gruss
  andre
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline mcfly71

  • Full Member
  • ***
  • Beiträge: 161
Aw: Poolpumpe
« Antwort #3 am: 23 August 2013, 13:04:12 »
Servus, genau so etwas habe ich mir schon gemacht:

Nicht verunsichern lassen:

REGELUNGHAUPTPUMPE ist der eigentliche Knopf, wo du per z.B. http deine Regelung an und aus machst
Wenn das an ist, dann geht die Intervall-Sache los....

1) SetzeNetio ist ein SET Befehl (Also in deinem Fall direkt set Steckdose an....)
2) ValueUndUndef testen auf den Wert und undefinierte Zustände (reicht auch ein Value () )
3) Hauptpumpe

config file:

define REGELUNGHAUPTPUMPE dummy
attr REGELUNGHAUPTPUMPE setList on off

define HAUPTPUMPE dummy <--- In deinem Fall hier die Steckdose oder was auch immer an gehen soll
attr HAUPTPUMPE room hidden
attr HAUPTPUMPE setList on off


define ZUSTANDHAUPTPUMPE notify REGELUNGHAUPTPUMPE {\
   HauptpumpenRegelung ( "REGELUNGHAUPTPUMPE/HAUPTPUMPE/true" );;\
}

99_myUtils.pm:
(sorry ich komme von c++ deswegen "unnatürliches" perl :-)

im myUtils_Initialize:

   # Regelung Hauptpumpe
   my $HauptpumpeUnterbrechungAlleSek;
   my $HauptpumpeUnterbrechungsDauerSek;
   
   $main::HauptpumpeUnterbrechungAlleSek= 1 * 60*60;
   $main::HauptpumpeUnterbrechungsDauerSek= 5 * 60;
   #
( Jede Stunde unterbrechen ( 1 !! * 60*60) für jeweils 5 Minuten ( 5 !! * 60)


Dann irgendwo folgende Fkt.:


sub HauptpumpenRegelung ($)
{
   # $UebergabeArray[0] = Dummy Variablenname der Regelung der Hauptpumpe
   # $UebergabeArray[1] = Dummy Variablenname der Hauptpumpe ansich
   # $UebergabeArray[2] = Initialisierung Durchfuehren

   my ($Uebergabe) = @_;
   
   my @UebergabeArray= split('/', $Uebergabe);

   
   # Den automatisierten Timer immer löschen
   RemoveInternalTimer( $UebergabeArray[0]."/".$UebergabeArray[1]."/false" );
   #
   
   if ( Value($UebergabeArray[0]) eq "off")
   {
      SetzeNETIO ( $UebergabeArray[1], "off" );
   }
   if ( Value($UebergabeArray[0]) eq "on")
   {
      if ( ValueAndUndef ( $UebergabeArray[1], "off" ) || ($UebergabeArray[2] eq "true") )
      {
         SetzeNETIO ( $UebergabeArray[1], "on" );
         InternalTimer ( gettimeofday()+$main::HauptpumpeUnterbrechungAlleSek, "HauptpumpenRegelung", $UebergabeArray[0]."/".$UebergabeArray[1]."/false", 1 );
      } else
      {
         SetzeNETIO ( $UebergabeArray[1], "off" );
         InternalTimer ( gettimeofday()+$main::HauptpumpeUnterbrechungsDauerSek, "HauptpumpenRegelung", $UebergabeArray[0]."/".$UebergabeArray[1]."/false", 1 );
      }
   }
   return;
}


Hoffe es hilft dir...

VG
mcfly
- HMLAN / Raspberry auf hmmode
- Homematic