Bewässerungssteuerung: Unterschied zwischen den Versionen

Aus FHEMWiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
Diese Seite beschreibt, wie man intelligent seine Bewässerung steuern kann wenn man zb. Bodenfeuchtesensoren installiert hat.
Diese Seite beschreibt, wie man intelligent seine Bewässerung steuern kann wenn man zb. Bodenfeuchtesensoren installiert hat.
Es wird von folgenden Komponenten ausgegangen:
Es wird von folgenden Komponenten ausgegangen:


* Gardena Magnetventile, angesprochen über einen FS20-Aktor (zb. S8M)
* Gardena Magnetventile, angesprochen über einen FS20-Aktor (zb. S8M)
* <nowiki> Bodenfeuchtesensoren, zb. FS20 BF oder andere (zb. an einem [[AVR-NET-IO]]) </nowiki>
* Bodenfeuchtesensoren, zb. FS20 BF oder andere (zb. an einem [[AVR-NET-IO]])


1. Als erstes werden die Bewässerungsventile in FHEM definiert, zb.:
==allgemeine Einstellungen==
===Anlegen der Bodenfeuchtesensoren===
Für einen FS20 Sensor: FS20BF
define Bodenfeuchtesensor FS20 34f2 00
attr Bodenfeuchtesensor room Bewässerung


  <nowiki>define Bewaesserung_Ventil1 FS20 2305 51
Für eine 1wire Version: einen analogen Sensor (zb. Vegetronix), angeschlossen an einen 4fach A/D Converter DS2450
attr Bewaesserung_Ventil1 model fs20st
  define Bodenfeuchte OWAD DS2450 50310C000000 60
attr Bewaesserung_Ventil1 room Bewässerung</nowiki>
attr Bodenfeuchte AFunction VA*33.9
2. Anlegen der Bodenfeuchtesensoren
attr Bodenfeuchte AUnit percent|%
attr Bodenfeuchte BFunction VB*33.9
attr Bodenfeuchte BUnit percent|%
attr Bodenfeuchte CFunction VC*33.9
attr Bodenfeuchte CUnit percent|%
attr Bodenfeuchte event-on-change-reading state
attr Bodenfeuchte model DS2450
attr Bodenfeuchte room Bewässerung


<nowiki>define Bodenfeuchtesensor FS20 34f2 00
attr Bodenfeuchtesensor room Bewässerung</nowiki>
Alternativ auch andere, siehe [[AVR-NET-IO]]
Alternativ auch andere, siehe [[AVR-NET-IO]]


3. Zuweisung eines Sensors einem oder mehrerer Bewässerungsventile
===zentrale Schaltvariable===
 
Erstellung einer Schaltvariable um im Frontend die Bewässerung zentral zu steuern
<nowiki>attr Bewaesserung_Ventil1 sensor Bodenfeuchtesensor</nowiki>
4. Erstellung einer Schaltvariable um im Frontend die Bewässerung zentral zu steuern


* Auto =&gt; Je nach Angabe des Bodenfeuchtesensors wird bewässert oder nicht
* Auto =&gt; Je nach Angabe des Bodenfeuchtesensors wird bewässert oder nicht
* On =&gt; Es wird immer bewässert
* On =&gt; Es wird immer bewässert
* Off =&gt; Es wird nicht bewässert
* Off =&gt; Es wird nicht bewässert
<nowiki>define Bewaesserung_Active dummy
attr Bewaesserung_Active room Bewässerung
attr Bewaesserung_Active setList Auto On Off
attr Bewaesserung_Active webCmd Auto:On:Off</nowiki>


5. Jetzt wird die zentrale Prozedur zur Steuerung angelegt:
define Bewaesserung_Active dummy
attr Bewaesserung_Active room Bewässerung
attr Bewaesserung_Active setList Auto On Off
attr Bewaesserung_Active webCmd Auto:On:Off
 
 
==Steuerung mittels FS20/einzelner Devices==
Falls für jedes Magnetventil ein eigenes Device existiert


  <nowiki>define BewNotify notify BewNotify {\
===1. Bewässerungsventile definieren===
my @@args = split(" ",'%EVENT');;\
Als erstes werden die Bewässerungsventile in FHEM definiert, zb.:
my $device = "%EVTPART0";;\
define Bewaesserung_Ventil1 FS20 2305 51
my $duration = "%EVTPART1";;\
attr Bewaesserung_Ventil1 model fs20st
my $sensor = AttrVal($device, "sensor", undef);;\
attr Bewaesserung_Ventil1 room Bewässerung
my $auto   = ReadingsVal("Bewaesserung_Active", "state", "Off");;\
 
my $sensorstate = "on";;\
===Zuweisung eines Sensors einem oder mehrerer Bewässerungsventile===
\
Hier der Fall eines FS20BF Bodenfeuchtesensors. Dieser übermittelt nur im state ein "on" oder "off"
if(($auto eq "Auto") || ($auto eq "On")) {\
attr Bewaesserung_Ventil1 sensor Bodenfeuchtesensor
if((defined ($sensor)) &amp;&amp; ($auto eq "Auto")) {\
 
  $sensorstate = ReadingsVal($sensor, "state", undef);;\
Im Falle der 1wire Version wird das Ventil 1 mit dem Bodenfeuchtesensor "gepaired" der am Port A des Sensors "Bodenfeuchte" hängt. Dieser übermittelt einen echten Dezimalwert.
  $sensorstate = ReadingsVal($sensor, "status", undef) if (!defined($sensorstate));;\
attr Bewaesserung_Ventil1 sensor Bodenfeuchte:A
  $sensorstate = "off" if (!defined($sensorstate));;\
 
} \
 
if($sensorstate eq "on") {\
===zentrale Prozedur zur Bewässerung===
  fhem "set $device on-for-timer $duration";;\
Jetzt wird die zentrale Prozedur zur Steuerung angelegt:
} elsif (ReadingsVal($device, "state", "") ne "off" ) {\
 
  fhem "set $device off";;\
  <nowiki>define BewNotify notify BewNotify {
}\
my @@args   = split(" ",'%EVENT');
  }\
my $device   = "%EVTPART0";
my $duration = "%EVTPART1";
my $sensor   = AttrVal($device, "sensor", undef);
my @@sArr    = split(":", $sensor)              if($sensor =~ m/:/);
my $auto     = ReadingsVal("Bewaesserung_Active", "state", "Off");
my $sensorstate = "on";
my $schwellwert = 0;
 
if(($auto eq "Auto") || ($auto eq "On")) {
  if((defined ($sensor)) && ($auto eq "Auto")) {
    if (defined($sArr[0])) {
      $sensorstate = ReadingsVal($sArr[0], $sArr[1], undef);
      $schwellwert = AttrVal($sArr[0], "schwellwert", undef);
      $schwellwert = AttrVal($sArr[0], $sArr[1]."Low", 0) if (!defined($schwellwert));
    } else {
      $schwellwert = AttrVal($sensor, "schwellwert", undef);
      $sensorstate = ReadingsVal($sensor, "state", undef)  if (!defined($sensorstate));
      $sensorstate = ReadingsVal($sensor, "status", undef) if (!defined($sensorstate));
    }
    $sensorstate = "off" if (!defined($sensorstate));
  }  
 
  if($sensorstate eq "on") {
      fhem "set $device on-for-timer $duration";
  } elsif ($sensorstate =~ m/^(\d+)/) {
    Log 5, "Sensorstate: $sensorstate";
   
    Log 5, "Schwellwert: $schwellwert";
    if ($schwellwert >= $sensorstate) { fhem "set $device on-for-timer $duration"; }
  } elsif (ReadingsVal($device, "state", "") ne "off" ) {
      fhem "set $device off";
  }
  }
}
}
attr BewNotify comment Prozedur um aufgrund Umweltzustände die Bewässerung freizugeben oder nicht. Bsp: BewNotify {Device} {Dauer in sek} {Schaltvariable}
attr BewNotify comment Prozedur um aufgrund Umweltzustände die Bewässerung freizugeben oder nicht. Bsp: BewNotify {Device} {Dauer in sek} {Schaltvariable}
attr BewNotify room Bewässerung</nowiki>
attr BewNotify room Bewässerung</nowiki>
Das geübte Auge wird feststellen, das für die Bodenfeuchtesensoren sowohl das Reading "state" als auch das Reading "status" abgefragt wird. Das liegt daran, das die FS20 BF ein Reading "state" haben, die analogen Bodenfeuchtesensoren über die ECMDDevice classdef-Definition ein "status" Reading (Das Reading "state" ist intern verwendet und darf nicht doppelt vergeben werden).
Das geübte Auge wird feststellen, das für die Bodenfeuchtesensoren sowohl das Reading "state" als auch das Reading "status" abgefragt wird. Das liegt daran, das die FS20 BF ein Reading "state" haben, die analogen Bodenfeuchtesensoren über die ECMDDevice classdef-Definition ein "status" Reading (Das Reading "state" ist intern verwendet und darf nicht doppelt vergeben werden).


===Zeitsteuerung===
6. Abschließend wird die Bewässerung in die Zeitsteuerung übergeben
6. Abschließend wird die Bewässerung in die Zeitsteuerung übergeben



Version vom 23. Mai 2013, 08:57 Uhr

Diese Seite beschreibt, wie man intelligent seine Bewässerung steuern kann wenn man zb. Bodenfeuchtesensoren installiert hat.

Es wird von folgenden Komponenten ausgegangen:

  • Gardena Magnetventile, angesprochen über einen FS20-Aktor (zb. S8M)
  • Bodenfeuchtesensoren, zb. FS20 BF oder andere (zb. an einem AVR-NET-IO)

allgemeine Einstellungen

Anlegen der Bodenfeuchtesensoren

Für einen FS20 Sensor: FS20BF

define Bodenfeuchtesensor FS20 34f2 00
attr Bodenfeuchtesensor room Bewässerung

Für eine 1wire Version: einen analogen Sensor (zb. Vegetronix), angeschlossen an einen 4fach A/D Converter DS2450

define Bodenfeuchte OWAD DS2450 50310C000000 60
attr Bodenfeuchte AFunction VA*33.9
attr Bodenfeuchte AUnit percent|%
attr Bodenfeuchte BFunction VB*33.9
attr Bodenfeuchte BUnit percent|%
attr Bodenfeuchte CFunction VC*33.9
attr Bodenfeuchte CUnit percent|%
attr Bodenfeuchte event-on-change-reading state
attr Bodenfeuchte model DS2450
attr Bodenfeuchte room Bewässerung

Alternativ auch andere, siehe AVR-NET-IO

zentrale Schaltvariable

Erstellung einer Schaltvariable um im Frontend die Bewässerung zentral zu steuern

  • Auto => Je nach Angabe des Bodenfeuchtesensors wird bewässert oder nicht
  • On => Es wird immer bewässert
  • Off => Es wird nicht bewässert
define Bewaesserung_Active dummy
attr Bewaesserung_Active room Bewässerung
attr Bewaesserung_Active setList Auto On Off
attr Bewaesserung_Active webCmd Auto:On:Off


Steuerung mittels FS20/einzelner Devices

Falls für jedes Magnetventil ein eigenes Device existiert

1. Bewässerungsventile definieren

Als erstes werden die Bewässerungsventile in FHEM definiert, zb.:

define Bewaesserung_Ventil1 FS20 2305 51
attr Bewaesserung_Ventil1 model fs20st
attr Bewaesserung_Ventil1 room Bewässerung

Zuweisung eines Sensors einem oder mehrerer Bewässerungsventile

Hier der Fall eines FS20BF Bodenfeuchtesensors. Dieser übermittelt nur im state ein "on" oder "off"

attr Bewaesserung_Ventil1 sensor Bodenfeuchtesensor

Im Falle der 1wire Version wird das Ventil 1 mit dem Bodenfeuchtesensor "gepaired" der am Port A des Sensors "Bodenfeuchte" hängt. Dieser übermittelt einen echten Dezimalwert.

attr Bewaesserung_Ventil1 sensor Bodenfeuchte:A


zentrale Prozedur zur Bewässerung

Jetzt wird die zentrale Prozedur zur Steuerung angelegt:

define BewNotify notify BewNotify {
 my @@args    = split(" ",'%EVENT');
 my $device   = "%EVTPART0";
 my $duration = "%EVTPART1";
 my $sensor   = AttrVal($device, "sensor", undef);
 my @@sArr    = split(":", $sensor)               if($sensor =~ m/:/);
 my $auto     = ReadingsVal("Bewaesserung_Active", "state", "Off");
 my $sensorstate = "on";
 my $schwellwert = 0;

 if(($auto eq "Auto") || ($auto eq "On")) {
   if((defined ($sensor)) && ($auto eq "Auto")) {
     if (defined($sArr[0])) { 
       $sensorstate = ReadingsVal($sArr[0], $sArr[1], undef); 
       $schwellwert = AttrVal($sArr[0], "schwellwert", undef);
       $schwellwert = AttrVal($sArr[0], $sArr[1]."Low", 0) if (!defined($schwellwert));
     } else {
       $schwellwert = AttrVal($sensor, "schwellwert", undef);
       $sensorstate = ReadingsVal($sensor, "state", undef)  if (!defined($sensorstate));
       $sensorstate = ReadingsVal($sensor, "status", undef) if (!defined($sensorstate));
     }
     $sensorstate = "off" if (!defined($sensorstate));
   } 
  
   if($sensorstate eq "on") {
      fhem "set $device on-for-timer $duration";
   } elsif ($sensorstate =~ m/^(\d+)/) {
     Log 5, "Sensorstate: $sensorstate";
     
     Log 5, "Schwellwert: $schwellwert";
     if ($schwellwert >= $sensorstate) { fhem "set $device on-for-timer $duration"; }
   } elsif (ReadingsVal($device, "state", "") ne "off" ) {
      fhem "set $device off";
   }
 }
}
attr BewNotify comment Prozedur um aufgrund Umweltzustände die Bewässerung freizugeben oder nicht. Bsp: BewNotify {Device} {Dauer in sek} {Schaltvariable}
attr BewNotify room Bewässerung

Das geübte Auge wird feststellen, das für die Bodenfeuchtesensoren sowohl das Reading "state" als auch das Reading "status" abgefragt wird. Das liegt daran, das die FS20 BF ein Reading "state" haben, die analogen Bodenfeuchtesensoren über die ECMDDevice classdef-Definition ein "status" Reading (Das Reading "state" ist intern verwendet und darf nicht doppelt vergeben werden).

Zeitsteuerung

6. Abschließend wird die Bewässerung in die Zeitsteuerung übergeben

define Timer_Ventil1 at *00:00:00 trigger BewNotify Bewaesserung_Ventil1 1920
attr Timer_Ventil1 room Bewässerung

Hiermit wird täglich um 0Uhr die Bewässerungsprozedur aufgerufen bei dem Ventil1 für 30min geöffnet wird. Abhängig natürlich von der Einstellung [Auto|On|Off] der Schaltariable "Bewaesserung_Active"