Bewässerungssteuerung: Unterschied zwischen den Versionen
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. | ||
__INHALTSVERZEICHNIS__ | |||
Es wird von folgenden Komponenten ausgegangen: | Es wird von folgenden Komponenten ausgegangen: | ||
Zeile 6: | Zeile 8: | ||
* Bodenfeuchtesensoren, zb. FS20 BF oder andere (zb. an einem [[AVR-NET-IO]]) | * Bodenfeuchtesensoren, zb. FS20 BF oder andere (zb. an einem [[AVR-NET-IO]]) | ||
=allgemeine Einstellungen= | |||
==Anlegen zusätzlicher Attribute== | |||
Es müssen folgende neue globale Attribute angelegt werden: | |||
* schwellwert | |||
* sensor | |||
==Anlegen der Bodenfeuchtesensoren== | |||
Für einen FS20 Sensor: FS20BF | Für einen FS20 Sensor: FS20BF | ||
define Bodenfeuchtesensor FS20 34f2 00 | define Bodenfeuchtesensor FS20 34f2 00 | ||
Zeile 26: | Zeile 33: | ||
Alternativ auch andere, siehe [[AVR-NET-IO]] | Alternativ auch andere, siehe [[AVR-NET-IO]] | ||
==zentrale Schaltvariable== | |||
Erstellung einer Schaltvariable um im Frontend die Bewässerung zentral zu steuern | Erstellung einer Schaltvariable um im Frontend die Bewässerung zentral zu steuern | ||
Zeile 38: | Zeile 45: | ||
attr Bewaesserung_Active webCmd Auto:On:Off | attr Bewaesserung_Active webCmd Auto:On:Off | ||
=Steuerung mittels 1wire= | |||
wird die Bewässerungssteuerung mittels 1Wire betrieben, so verfügt 1 Device (i.d.R DS2406/DS2408/DS1413) über 2 oder 8 Ports. Wie diese einerseits komfortabel per FHEM-Weboberfläche zu steuern als auch eine automatisierte Steuerung zu realisieren ist soll dieser Abschnitt aufzeigen. | |||
==Anlegen des Schalt-Devices== | |||
An folgendem Device hängen die physischen Bewässerungsventile. Dieses muss natürlich an die eigenen Gegebenheiten angepasst werden :) | |||
define Schalter_links OWSWITCH DS2408 F4D210000000 | |||
attr Schalter_links event-on-change-reading A,B,C,D,E,F,G,H | |||
attr Schalter_links model DS2408 | |||
attr Schalter_links room OWX | |||
==Anlegen der DummyDevices== | |||
Über diese "Schalter" werden die einzelnen Bewässerungsstränge gesteuert. | |||
define Bewaesserung_Tomaten dummy | |||
attr Bewaesserung_Tomaten alias Bewässerung Tomaten | |||
attr Bewaesserung_Tomaten eventMap /on-for-timer 30:Anschalten/off:Ausschalten/ | |||
attr Bewaesserung_Tomaten group Bewässerung | |||
attr Bewaesserung_Tomaten room OWX | |||
attr Bewaesserung_Tomaten schwellwert 58 | |||
attr Bewaesserung_Tomaten sensor Schalter_links:A Bodenfeuchte:A | |||
attr Bewaesserung_Tomaten webCmd Anschalten:Ausschalten | |||
Auf der Weboberfläche erscheinen die Schalter "Anschalten" und Ausschalten". Diese werden mittels eventmap auf "on-for-timer 30" und "off" intern umgesetzt und später an den 1wireBaustein weitergegeben. | |||
Über das Attribut "sensor" wird eine Zuordnung zum tatsächlichen 1wireDevice als auch zum dazugehörigen Sensor vorgenommen und wird folgendermaßen definiert: | |||
attr Bewaesserung_Tomaten sensor Device[:Port] [Bodenfeuchtesensor[:Port]] | |||
Im Beispiel ist das 1wireDevice ein DS2408 und heißt "Schalter_links" und die Bewässerung der Tomaten hängt am Port A. Der zugehörige Bodenfeuchtesensor in den Tomaten hängt an einem DS2450 mit dem Namen "Bodenfeuchte" ebenfalls am Port A. | |||
Über den Schwellwert wird eingestellt, ab welcher Bodenfeuchte tatsächlich bewässert werden soll. | |||
==Anlegen des Notify´s für die DummySchalter== | |||
Folgendes Notify reagiert auf die Events der Dummyschalter. Es wird hier im Beispiel das Event "Anschalten" auf "on-for-timer 30" umgesetzt sowie das Sensor- und schwellwertattribut abgerufen. Das Sensorattribut wird in den Device- und Sensorabschnitt zergliedert. Anschließend wird mit den so ermittelten Parametern die zentrale Bewässerungsprozedur aufgerufen. | |||
<nowiki>define Bewaesserung_Macro notify Bewaesserung.* {\ | |||
my $device=$NAME;;\ | |||
my @a = (undef, $EVENT);;\ | |||
@a = ReplaceEventMap($device, \@a, 0);;\ | |||
shift @a;;\ | |||
my $status = join(" ", @a);;\ | |||
my @temp = split(" ", AttrVal($device, "sensor", " "));;\ | |||
my $schwellwert = AttrVal($device, "schwellwert", "");;\ | |||
\ | |||
Log 5, "Prozeduraufruf: Bewaesserung($temp[0],$temp[1],$schwellwert,$status)";;\ | |||
Bewaesserung($temp[0],$temp[1],$schwellwert,$status, $device);;\ | |||
} | |||
attr Bewaesserung_Macro group Bewässerung | |||
attr Bewaesserung_Macro room OWX </nowiki> | |||
==zentrale Bewässerungsprozedur== | |||
Die zentrale Prozedur wird als UTIL Datei im FHEM Verzeichnis gespeichert. Hier wird die Entscheidung getroffen, ob bewässert werden soll oder nicht. Es wird die aktuelle Bodenfeuchte im Zusammenhang mit dem Schwellwert ausgewertet sowie die globale Einstellung "Auto"/"On"/"Off"<br> | |||
[[File:99_Utils_Bewaesserung.pm|99_Utils_Bewaesserung.pm]] | |||
=Steuerung mittels FS20/einzelner Devices= | |||
Falls für jedes Magnetventil ein eigenes Device existiert | Falls für jedes Magnetventil ein eigenes Device existiert. Zb. bei Nutzung von eines SM8/SM4/FS20ST | ||
== | ==Bewässerungsventile definieren== | ||
Als erstes werden die Bewässerungsventile in FHEM definiert, zb.: | Als erstes werden die Bewässerungsventile in FHEM definiert, zb.: | ||
define Bewaesserung_Ventil1 FS20 2305 51 | define Bewaesserung_Ventil1 FS20 2305 51 | ||
Zeile 48: | Zeile 103: | ||
attr Bewaesserung_Ventil1 room Bewässerung | 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" | Hier der Fall eines FS20BF Bodenfeuchtesensors. Dieser übermittelt nur im state ein "on" oder "off" | ||
attr Bewaesserung_Ventil1 sensor Bodenfeuchtesensor | attr Bewaesserung_Ventil1 sensor Bodenfeuchtesensor | ||
Zeile 56: | Zeile 111: | ||
==zentrale Prozedur zur Bewässerung== | |||
Jetzt wird die zentrale Prozedur zur Steuerung angelegt: | Jetzt wird die zentrale Prozedur zur Steuerung angelegt: | ||
Zeile 100: | Zeile 155: | ||
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, 14:00 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 zusätzlicher Attribute
Es müssen folgende neue globale Attribute angelegt werden:
- schwellwert
- sensor
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 1wire
wird die Bewässerungssteuerung mittels 1Wire betrieben, so verfügt 1 Device (i.d.R DS2406/DS2408/DS1413) über 2 oder 8 Ports. Wie diese einerseits komfortabel per FHEM-Weboberfläche zu steuern als auch eine automatisierte Steuerung zu realisieren ist soll dieser Abschnitt aufzeigen.
Anlegen des Schalt-Devices
An folgendem Device hängen die physischen Bewässerungsventile. Dieses muss natürlich an die eigenen Gegebenheiten angepasst werden :)
define Schalter_links OWSWITCH DS2408 F4D210000000 attr Schalter_links event-on-change-reading A,B,C,D,E,F,G,H attr Schalter_links model DS2408 attr Schalter_links room OWX
Anlegen der DummyDevices
Über diese "Schalter" werden die einzelnen Bewässerungsstränge gesteuert.
define Bewaesserung_Tomaten dummy attr Bewaesserung_Tomaten alias Bewässerung Tomaten attr Bewaesserung_Tomaten eventMap /on-for-timer 30:Anschalten/off:Ausschalten/ attr Bewaesserung_Tomaten group Bewässerung attr Bewaesserung_Tomaten room OWX attr Bewaesserung_Tomaten schwellwert 58 attr Bewaesserung_Tomaten sensor Schalter_links:A Bodenfeuchte:A attr Bewaesserung_Tomaten webCmd Anschalten:Ausschalten
Auf der Weboberfläche erscheinen die Schalter "Anschalten" und Ausschalten". Diese werden mittels eventmap auf "on-for-timer 30" und "off" intern umgesetzt und später an den 1wireBaustein weitergegeben. Über das Attribut "sensor" wird eine Zuordnung zum tatsächlichen 1wireDevice als auch zum dazugehörigen Sensor vorgenommen und wird folgendermaßen definiert:
attr Bewaesserung_Tomaten sensor Device[:Port] [Bodenfeuchtesensor[:Port]]
Im Beispiel ist das 1wireDevice ein DS2408 und heißt "Schalter_links" und die Bewässerung der Tomaten hängt am Port A. Der zugehörige Bodenfeuchtesensor in den Tomaten hängt an einem DS2450 mit dem Namen "Bodenfeuchte" ebenfalls am Port A. Über den Schwellwert wird eingestellt, ab welcher Bodenfeuchte tatsächlich bewässert werden soll.
Anlegen des Notify´s für die DummySchalter
Folgendes Notify reagiert auf die Events der Dummyschalter. Es wird hier im Beispiel das Event "Anschalten" auf "on-for-timer 30" umgesetzt sowie das Sensor- und schwellwertattribut abgerufen. Das Sensorattribut wird in den Device- und Sensorabschnitt zergliedert. Anschließend wird mit den so ermittelten Parametern die zentrale Bewässerungsprozedur aufgerufen.
define Bewaesserung_Macro notify Bewaesserung.* {\ my $device=$NAME;;\ my @a = (undef, $EVENT);;\ @a = ReplaceEventMap($device, \@a, 0);;\ shift @a;;\ my $status = join(" ", @a);;\ my @temp = split(" ", AttrVal($device, "sensor", " "));;\ my $schwellwert = AttrVal($device, "schwellwert", "");;\ \ Log 5, "Prozeduraufruf: Bewaesserung($temp[0],$temp[1],$schwellwert,$status)";;\ Bewaesserung($temp[0],$temp[1],$schwellwert,$status, $device);;\ } attr Bewaesserung_Macro group Bewässerung attr Bewaesserung_Macro room OWX
zentrale Bewässerungsprozedur
Die zentrale Prozedur wird als UTIL Datei im FHEM Verzeichnis gespeichert. Hier wird die Entscheidung getroffen, ob bewässert werden soll oder nicht. Es wird die aktuelle Bodenfeuchte im Zusammenhang mit dem Schwellwert ausgewertet sowie die globale Einstellung "Auto"/"On"/"Off"
99_Utils_Bewaesserung.pm
Steuerung mittels FS20/einzelner Devices
Falls für jedes Magnetventil ein eigenes Device existiert. Zb. bei Nutzung von eines SM8/SM4/FS20ST
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"