Autor Thema: Bewässerungssteuerung - Vorstellung und Ideensammlung  (Gelesen 5752 mal)

Offline funclass

  • Jr. Member
  • **
  • Beiträge: 97
Bewässerungssteuerung - Vorstellung und Ideensammlung
« am: 29 Oktober 2016, 22:22:41 »
Da ich schon mit einigen Leuten zu meiner Umsetzung einer Bewässerungssteuerung gesprochen habe und diese immer auf reges Interesse stieß, möchte ich die Lösung hier vorstellen. Ich habe mal drüber nachgedacht das ganze in ein Modul zu "gießen", hierfür fehlen mir jedoch weiterführende Perl-Kenntnisse und die nötige Zeit. Für Anregungen, Fragen, neue Ideen und auch Kritik bin ich offen.

Allgemeines, Voraussetzungen und Anforderungen:

  • Steuerung der Bewässerung anhand der vergangenen/aktuellen Wetterlage, keine Berücksichtigung der Vorhersage (nach meiner Erfahrung zu unzuverlässig) -> Info vor nächster Bewässerung ermöglicht manuelles Eingreifen
  • Wetterdaten von eigener Wetterstation oder (wie in meinem Fall) aus online verfügbaren Wetterdiensten, die Wetterstation welche über wunderground.com verfügbar ist liegt ca. 300m von mir entfernt
  • innerhalb eines frei einstellbaren Zeitraums muss eine Mindestmenge an Niederschlag gemessen/kummuliert werden, ansonsten startet der Bewässerungsvorgang, ggf. mit verringerter Intensität
  • Bewässerungsautomatik lässt sich zentral (de-)aktivieren -> laufender Bewässerungsvorgang wird beim Deaktivieren unterbrochen
  • die Intensität/Dauer der Bewässerung kann manuell verändert werden, hängt im Automatikmodus jedoch vom gemessenen Niederschlag ab
  • einzelne Bewässerungskreise können unterschiedliche Durchflussmengen haben und daher unterschiedliche Bewässerungsdauern erfordern
  • der Startzeitpunkt der automatischen Bewässerung lässt sich frei einstellen
  • es ist Nachvollziehbar welcher Bewässerungskreis im Automatikmodus grad aktiv ist
  • ein einzelner Bewässerungskreis lässt sich manuell aktivieren inkl. Auswahl der Intensität
  • Aktoren zum Schalten der Magnetventile können beliebige Schalter sein, set-extensions erleichtern erheblich die Arbeit da on-for-timer für die Bewässerungsdauer genutzt werden kann
  • einzelne Aktivitäten werden als Info per Pushover versendet


noch nicht umgesetzte Ideen:

  • einsetzender Niederschlag unterbricht einen laufenden Bewässerungsvorgang sofort
  • ein kompletter Bewässerungszyklus lässt sich per Knopfdruck sofort mit wählbarer Intensität starten
  • einzelne Bewässerungskreise lassen sich deaktivieren und werden im Automatikmodus "übersprungen"
  • automatische Erkennung aller definierten Bewässerungskreise/-aktoren z.B. anhand von userreadings inkl. einfacher Vorgabe der Einschaltreihenfolge
  • das Ganze in ein Modul implementieren

Im Folgenden möchte ich die einzelnen Teile etwas genauer erläutern und meinen Quellcode zur Verfügung stellen...
« Letzte Änderung: 30 Oktober 2016, 13:20:28 von funclass »
Gefällt mir Gefällt mir x 2 Liste anzeigen

Offline funclass

  • Jr. Member
  • **
  • Beiträge: 97
Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
« Antwort #1 am: 29 Oktober 2016, 22:57:29 »
"Hauptschalter"

Zentrales (de-)aktivieren der Bewässerungsautomatik.

define Beregnung dummy
attr Beregnung alias Bewässerung
attr Beregnung devStateIcon on:10px-kreis-gruen off:10px-kreis-rot
attr Beregnung eventMap on:on off:off
attr Beregnung group Bewässerung
attr Beregnung icon humidity
attr Beregnung room Außen
attr Beregnung sortby 0
attr Beregnung userReadings Automatik_Aktiv,Aktiver_Regner,Tage,Menge
attr Beregnung webCmd on:off

Die Userreadings haben folgende Bedeutung:
Automatik_Aktiv: automatischer Bewässerungszyklus läuft gerade
Aktiver_Regner: gibt an, welcher Bewässerungskreis gerade aktiv ist -> beim manuellen Setzen außerhalb des Automatikzykluses wird der einzelne, gewählte Bewässerungskreis mit der eingestellten Intensität gestartet
Tage: Anzahl der Tage seit der letzten Bewässerung bzw. seit Erreichen der gewünschten Niederschlagsmenge
Menge: Niederschlagsmenge im Zeitraum der o.g. Tage

Ich habe für meinen Anwendungsfall festgelegt, dass 10 Liter/qm die optimale Bewässerungsmenge ist. Das heißt, jeder Kreis soll bei voller Intensität (100%) diese Menge ausbringen. Sofern innerhalb von 5 Tagen mind. 10 Liter/qm an Niederschlag gemessen werden, so wird nicht bewässert sondern beide Zähler zurückgesetzt. Ist die Menge nach 5 Tagen geringer, so wird die Intensität gewählt um 10 Liter/qm zu "komplettieren" und der Bewässerungszyklus gestartet. Die minimale Intensität beträgt jedoch 35%. Nach erfolgreicher Bewässerung wird die Bewässerte Menge auf den aktuellen Wert im Reading Menge aufaddiert. Hierdurch wird der Tageszähler am Ende des Tages zurückgesetzt. Voraussetzung für das Starten der Bewässerung ist natürlich immer der aktivierte "Hauptschalter".

Beispiele:
  • Tage = 2
    Menge = 3
    Bewässerungszyklus startet nicht, da der vorgegebene Zeitraum von 5 Tagen noch nicht abgelaufen ist.
  • Tage = 6
    Menge = 0
    Bewässerungszyklus startet zur gewünschten Zeit mit 100%
  • Tage = 6
    Menge = 3
    Bewässerungszyklus startet zur gewünschten Zeit mit 70%
  • Tage = 6
    Menge = 9
    Bewässerungszyklus startet zur gewünschten Zeit mit 35% ->Mindestintensität
  • Tage = 6
    Menge = 12
    Bewässerungszyklus startet nicht, da gewünschte Niederschlagsmenge bereits erreicht (z.B. bei starkem Regen in den frühen Morgenstunden). Beide Zähler werden am Ende des Tages zurückgesetzt.

Offline funclass

  • Jr. Member
  • **
  • Beiträge: 97
Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
« Antwort #2 am: 29 Oktober 2016, 23:02:01 »
Intensität

Zur Einstellung der Bewässerungsmenge (Intensität) wird ein Dummy genutzt welcher sich einfach per Slider im Bereich zwischen 0 und 100% verstellen lässt.

define Beregnungsmenge dummy
attr Beregnungsmenge alias Intensität
attr Beregnungsmenge group Bewässerung
attr Beregnungsmenge icon weather_rain_gauge
attr Beregnungsmenge room Außen
attr Beregnungsmenge setList state:slider,0,1,100
attr Beregnungsmenge sortby 1
attr Beregnungsmenge stateFormat state%</br>GR: Getrieberegner min</br>SR: Spruehregner min
attr Beregnungsmenge userReadings Getrieberegner {60/100*ReadingsVal("Beregnungsmenge","state",100)}, Spruehregner {20/100*ReadingsVal("Beregnungsmenge","state",100)}, Last
attr Beregnungsmenge webCmd state

Die Userreadings haben folgende Bedeutung:
Getrieberegner: Dauer für Beregnungskreise mit Getrieberegnern (GR) um die gewünschte Menge auszubringen
Last: Merker für manuelle Einstellung der Intensität
Spruehregner: Dauer für Beregnungskreise mit Sprühregnern (SR) um die gewünschte Menge auszubringen

Im Hintergrund berechnet der Dummy die jeweilige Bewässerungsdauer für einzelne Bewässerungskreise. In meinem Fall gibt es 2 unterschiedliche Varianten:
  • Bewässerungskreise mit Getrieberegnern benötigen 60min um die gewünschte Menge (bei mir 10L/qm) auszubringen
  • Bewässerungskreise mit Sprühregnern benötigen 20min um die gewünschte Menge auszubringen

Die (Maximal-)Dauer lässt sich individuell anpassen und hängt natürlich von den eingesetzten Regnern und den örtlichen Gegebenheiten wie z.B. dem Wasserdruck ab. Es lassen sich auch noch weitere Varianten ergänzen. Im Bewässerungszyklus muss dann auf die entsprechenden Werte zurückgegriffen werden um die gewünschte Dauer zu Bewässern.
Da die Intensität im Automatikzyklus von der Niederschlagsmenge abhängt und automatisch bestimmt wird, existiert noch ein "Merker" welcher die manuell gewählte Einstellung speichert um diese nach dem Bewässerungszyklus wiederherzustellen. Um sofort die Bewässerungsdauer für die einzelnen Kreise ablesen zu können wurde das Stateformat neben der Prozentangabe um die beiden Userreadings ergänzt.
« Letzte Änderung: 30 Oktober 2016, 12:13:14 von funclass »

Offline funclass

  • Jr. Member
  • **
  • Beiträge: 97
Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
« Antwort #3 am: 29 Oktober 2016, 23:06:12 »
Niederschlagszähler

Täglich kurz vor Mitternacht wird die kumulierte Niederschlagsmenge des Tages auf die, der letzten Tage aufaddiert. Ist die Menge größer als der gewünschte Wert (bei mir 10L), dann wird der Zähler, als auch die Anzahl der Tage zurückgesetzt. Ein automatischer Bewässerungszyklus erhöht ebenfalls den Zähler, wodurch dieser ebenfalls am Abend wieder zurückgestellt wird. Die Niederschlagsdaten entnehme ich einer öffentlichen Wetterstation von wunderground.com, natürlich können auch andere öffentliche oder eigene Wetterstationen als Quelle dienen.

define Niederschlag_schreiben at *23:59:30 {\
my $aktuell = ReadingsVal('Beregnung', 'Menge', '0');;\
my $niederschlag = ReadingsVal('wu_conditions', 'current_observation_precip_today_metric', '0') + $aktuell;;\
my $tage = ReadingsVal('Beregnung', 'Tage', '0') + 1;;\
# wenn Niederschlagsmenge >= 10, dann Werte zurücksetzen\
{if ($niederschlag >= 10) {\
$niederschlag = 0;;\
$tage = 1;;\
}}\
fhem "setReading Beregnung Menge $niederschlag";;\
fhem "setReading Beregnung Tage $tage";;\
}
attr Niederschlag_schreiben group Bewässerung
attr Niederschlag_schreiben icon weather_rain_meter
attr Niederschlag_schreiben room Außen
« Letzte Änderung: 30 Oktober 2016, 12:22:37 von funclass »

Offline funclass

  • Jr. Member
  • **
  • Beiträge: 97
Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
« Antwort #4 am: 29 Oktober 2016, 23:09:30 »
Bewässerungskreissteuerung

Das Aktivieren der einzelnen Bewässerungskreise erfolgt über ein einzelnes Userreading (Aktiver_Regner) im "Hauptschalter". Damit lässt sich relativ einfach ein einzelner Kreis aktivieren oder eine individuelle Reihenfolge realisieren. Der Zugriff auf die Aktoren, welche die Magnetventile ansteuern geschieht gekapselt durch dieses Notify. In meinem Fall hängen alle Magnetventile an einem Relaisblock, welcher durch einen Arduino Nano mit FIRMATA angesteuert wird. Durch set-extensions kann ich den on-for-timer Befehl nutzen und somit muss ich mich nur ums Einschalten und die Zeitvorgabe kümmern. Einen direkten, manuellen Zugriff vermeide ich, da hierbei die Intensität und andere Mechanismen nicht berücksichtigt würden. Direktes Bedienen der Aktoren nutze ich lediglich für Testzwecke oder z.B. beim Einwintern der Bewässerungsanlage.

Wird das Reading "Aktiver_Regner" auf einen Wert zwischen 1 und 4 gesetzt, wird der entsprechende Bewässerungskreis für die eingestellte Dauer im Dummy "Intensität" eingeschaltet und eine Infomeldung per Pushover versendet. Das Setzen kann durch den Automatikzyklus oder auch manuell geschehen.

Wird das Reading "Aktiver_Regner" auf 0 gesetzt, werden alle Aktoren ausgeschaltet.
+ Sofern der Automatikzyklus aktiv ist wird dieser beendet. Sollten noch Zeitgeber vorhanden sein, so werden diese gelöscht. Außerdem wird die bewässerte Menge auf den Zähler aufaddiert und die zuletzt eingestellte Intensität wiederhergestellt.

define notify_Beregnungskreis notify Beregnung:Aktiver_Regner:.* {\
# Prüfen welcher Beregnungskreis aktiviert werden soll...\
my $beregnungskreis = ReadingsVal('Beregnung', 'Aktiver_Regner', '0');;\
{if ($beregnungskreis eq '0') {\
# alles ausschalten und ggf. Zeitgeber löschen\
fhem ("set Relais01,Relais02,Relais03,Relais04 off");;\
{if (ReadingsVal('Beregnung', 'Automatik_Aktiv', '0') eq 'ja') {\
fhem ("setReading Beregnung Automatik_Aktiv nein");;\
fhem ("delete autoRegner.*");;\
fhem ("set pushmsg msg 'Beregnung' 'Automatikprogramm Rasenbewässerung beendet.' 'iPhone' -1 ''");;\
# Beregnungsmenge wieder zurücksetzen\
my $menge_aktuell = ReadingsVal('Beregnungsmenge', 'state', '0');;\
my $menge_last = ReadingsVal('Beregnungsmenge', 'Last', '0');;\
fhem ("set Beregnungsmenge $menge_last");;\
fhem ("setReading Beregnungsmenge Last $menge_aktuell");;\
# Tageszähler zurücksetzen\
my $menge = ReadingsVal('Beregnung', 'Menge', '0') + ($menge_aktuell / 10);;\
fhem ("setReading Beregnung Menge $menge_aktuell");;\
}}\
}}\
my $min_gr = ReadingsVal("Beregnungsmenge","Getrieberegner",'0');;\
my $sek_gr = $min_gr * 60 - 10;;\
my $min_sr = ReadingsVal("Beregnungsmenge","Spruehregner",'0');;\
my $sek_sr = $min_sr * 60 - 10;;\
\
{if ($beregnungskreis eq '1') {\
fhem ("set Relais01 on-for-timer $sek_gr");;\
fhem ("set pushmsg msg 'Beregnung' 'Regner Hinten für $min_gr Minuten eingeschaltet.' 'iPhone' -1 ''");;\
}}\
{if ($beregnungskreis eq '2') {\
fhem ("set Relais02 on-for-timer $sek_gr");;\
fhem ("set pushmsg msg 'Beregnung' 'Regner Terrasse für $min_gr Minuten eingeschaltet.' 'iPhone' -1 ''");;\
}}\
{if ($beregnungskreis eq '3') {\
fhem ("set Relais03 on-for-timer $sek_sr");;\
fhem ("set pushmsg msg 'Beregnung' 'Regner Vorn für $min_sr Minuten eingeschaltet.' 'iPhone' -1 ''");;\
}}\
{if ($beregnungskreis eq '4') {\
fhem ("set Relais04 on-for-timer $sek_sr");;\
fhem ("set pushmsg msg 'Beregnung' 'Regner Seite für $min_sr Minuten eingeschaltet.' 'iPhone' -1 ''");;\
}}\
}
attr notify_Beregnungskreis group Bewässerung
attr notify_Beregnungskreis icon control_arrow_rightward
attr notify_Beregnungskreis room Außen
« Letzte Änderung: 30 Oktober 2016, 13:03:19 von funclass »

Offline funclass

  • Jr. Member
  • **
  • Beiträge: 97
Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
« Antwort #5 am: 29 Oktober 2016, 23:13:14 »
Bewässerung beenden / deaktivieren

Beschreibung folgt noch...

define notify_BeregnungAus notify Beregnung:off {\
# falls gerade automatikprozess aktiv ist, dann diesen unterbrechen und Zeitgeber löschen\
{if (ReadingsVal('Beregnung','Automatik_Aktiv','0') eq 'ja') {\
fhem ("setReading Beregnung Automatik_Aktiv nein");;\
fhem ("delete autoRegner.*");;\
fhem ("set pushmsg msg 'Beregnung' 'Automatikprogramm Rasenbewässerung unterbrochen.' 'iPhone' -1 ''");;\
# Beregnungsmenge wieder zurücksetzen\
my $menge_aktuell = ReadingsVal('Beregnungsmenge', 'state', '0');;\
my $menge_last = ReadingsVal('Beregnungsmenge', 'Last', '0');;\
fhem ("set Beregnungsmenge $menge_last");;\
fhem ("setReading Beregnungsmenge Last $menge_aktuell");;\
}}\
# falls ein Beregnungskreis aktiv ist, diesen ausschalten\
{if (ReadingsVal('Beregnung','Aktiver_Regner','0') > 0) {\
fhem ("setReading Beregnung Aktiver_Regner 0");;\
}}\
}
attr notify_BeregnungAus group Bewässerung
attr notify_BeregnungAus icon general_aus
attr notify_BeregnungAus room Außen

define notify_BeregnungskreisAus notify Relais01.value:.off|Relais02.value:.off|Relais03.value:.off|Relais04.value:.off {\
# Kennzeichen für Beregnungskreis nach Einzelbetrieb zurücksetzen\
{if (ReadingsVal('Beregnung', 'Automatik_Aktiv', '0') eq "nein") {\
fhem ("setReading Beregnung Aktiver_Regner 0");;\
}}\
}
attr notify_BeregnungskreisAus group Bewässerung
attr notify_BeregnungskreisAus icon general_aus
attr notify_BeregnungskreisAus room Außen

Offline funclass

  • Jr. Member
  • **
  • Beiträge: 97
Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
« Antwort #6 am: 29 Oktober 2016, 23:15:18 »
Hinweis für anstehende Bewässerung

Beschreibung folgt noch...

define BeregnungsHinweis at *19:55:00 {if (Value("Beregnung") eq "on") {\
## wenn Bewässerungsautomatik aktiviert\
my $liter_soll = 10;;\
my $tage_max = 4;;\
my $niederschlag = ReadingsVal('Beregnung', 'Menge', '0');;\
my $tage = ReadingsVal('Beregnung', 'Tage', '0');;\
## prüfen ob Niederschlag der letzten x Tage kleiner als x Liter\
{if (($tage > $tage_max) && ($niederschlag < $liter_soll)) {\
# dann Pushmeldung versenden\
fhem ("set pushmsg msg 'Beregnung' 'Morgen wird voraussichtlich der Rasen bewässert.'");;\
}}\
}}
attr BeregnungsHinweis icon message_attention
attr BeregnungsHinweis room Aktionen

Offline funclass

  • Jr. Member
  • **
  • Beiträge: 97
Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
« Antwort #7 am: 29 Oktober 2016, 23:17:41 »
Bewässerungszyklus (automatisch) starten

Beschreibung folgt noch...

define bewaesserung_starten at *03:59:00 {if (Value("Beregnung") eq "on") {\
## wenn Bewässerungsautomatik aktiviert\
my $liter_soll = 10;;\
my $tage_max = 5;;\
my $niederschlag = ReadingsVal('Beregnung', 'Menge', '0');;\
my $tage = ReadingsVal('Beregnung', 'Tage', '0');;\
## prüfen ob Niederschlag der letzten x Tage kleiner als x Liter\
{if (($tage > $tage_max) && ($niederschlag < $liter_soll)) {\
## Beregnungsmenge einstellen (min. 35%)\
my $menge = int(100 - $niederschlag / $liter_soll * 100);;\
{if ($menge < 35) {\
$menge = 35;;\
}}\
my $menge_aktuell = ReadingsVal('Beregnungsmenge', 'state', '0');;\
# aktuellen Wert vor Änderung speichern\
fhem ("setReading Beregnungsmenge Last $menge_aktuell;;");;\
fhem ("set Beregnungsmenge $menge;;");;\
my $min_gr = ReadingsVal("Beregnungsmenge","Getrieberegner",'0');;\
my $sek_gr = $min_gr * 60 - 10;;\
my $min_sr = ReadingsVal("Beregnungsmenge","Spruehregner",'0');;\
my $sek_sr = $min_sr * 60 - 10;;\
## Logik zum Schalten der Beregnungskreise\
my $sek = 60;;\
my $zeit0 = myOffset($sek);;\
$sek = $sek + $sek_gr + 10;;\
my $zeit1 = myOffset($sek);;\
$sek = $sek + $sek_gr + 10;;\
my $zeit2 = myOffset($sek);;\
$sek = $sek + $sek_sr + 10;;\
my $zeit3 = myOffset($sek);;\
$sek = $sek + $sek_sr + 10;;\
my $zeit4 = myOffset($sek);;\
fhem ("setReading Beregnung Automatik_Aktiv ja;;");;\
fhem ("set pushmsg msg 'Beregnung' 'Automatikprogramm Rasenbewässerung startet in einer Minute mit $menge%.' 'iPhone' 0 ''");;\
fhem ("defmod autoRegner1 at +$zeit0 setReading Beregnung Aktiver_Regner 1");;\
fhem ("defmod autoRegner2 at +$zeit1 setReading Beregnung Aktiver_Regner 2");;\
fhem ("defmod autoRegner3 at +$zeit2 setReading Beregnung Aktiver_Regner 3");;\
fhem ("defmod autoRegner4 at +$zeit3 setReading Beregnung Aktiver_Regner 4");;\
fhem ("defmod autoRegnerEnde at +$zeit4 setReading Beregnung Aktiver_Regner 0");;\
fhem ("attr autoRegner.* room Außen;; attr autoRegner.* group Bewässerung;;");;\
}}\
}}
attr bewaesserung_starten cmdIcon execNow:audio_play
attr bewaesserung_starten group Bewässerung
attr bewaesserung_starten icon control_arrow_turn_right
attr bewaesserung_starten room Außen
attr bewaesserung_starten sortby 2
attr bewaesserung_starten webCmd execNow

Die Funktion myOffset muss in der Datei 99_myUtils.pm eingefügt werden. Diese dient dazu die Startzeitpunkte für die einzelnen Beregnungskreise korrekt zu formatieren.

sub myOffset($) {

my ($Sekunden) = @_;

my $Stunden = int($Sekunden / 3600);
   $Sekunden %= 3600;
 
my $Minuten = int($Sekunden / 60);
   $Sekunden %= 60;

return sprintf("%02d:%02d:%02d", $Stunden, $Minuten, $Sekunden)

}
« Letzte Änderung: 01 April 2017, 21:58:51 von funclass »

Offline Dersch

  • Full Member
  • ***
  • Beiträge: 225
Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
« Antwort #8 am: 01 November 2016, 14:42:10 »
Ich bin der von Facebook :) Freut mich, dass du dir hier die Mühe machst das aufzuschreiben! Ich hoffe es geht weiter und die Beteiligung wächst.

Offline jnewton957

  • Full Member
  • ***
  • Beiträge: 317
Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
« Antwort #9 am: 06 November 2016, 19:56:02 »
An den Thema Bewässerungssteuerung bin ich auch schon länger dran. Bisher auf Basis MySensors - aber so richtig zuverlässig habe ich das auf der Testbench nicht hinbekommen. Mal schalten die Relais - mal nicht. Ich habe Gardena 24V im Garten an 5 Strängen. Bisher eben langweilig über eine Gardena 6030 in der Garage

Deine Lösung ist super und ich würde mir gerne die Teile der "Hardware" gerne besorgen bzw. sehen, ob ich die da habe.

Kannst du etwas zur Hardware posten und insbesondere auch dein sketch und Anschluss des nanos beschreiben.

Ein Bild wäre auch super.

Danke
Jörg
FHEM5.8 auf Pi3
V 1.65 nanoCUL433 (IT)
nanoCUL JeeLink
V 1.66 nanoCUL868 (HM) (ESA2000WZ)
xELRO AB440, xDECT200, PCA301, xTFA30.3125, esp8266, HM, TabletUI, IR-Schreiblesekopf (Udo)

Offline funclass

  • Jr. Member
  • **
  • Beiträge: 97
Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
« Antwort #10 am: 06 November 2016, 20:15:18 »
Gern kann ich ein paar Fotos und ein Schaltbild posten. Muss ich die nächsten Tage mal vorbereiten.
Bewässerungsventile per Funk ohne Rückkanal schalten wäre mir zu unsicher. Genau genommen gibt FIRMATA auch eine echte Info zurück ob der Ausgang wirklich ein- bzw. ausgeschalten wurde, aber bei mir funktioniert diese Variante nach einer kleinen Modifikation seit über einem Jahr absolut zuverlässig.
Vorab schonmal kurz meine Hardware-Liste:
  • Arduino Nano per USB am Raspberry
  • 8-fach Relaisblock an den GPiOs des Nano
  • zwischen Nano und dem Relaisblock habe ich noch einen ULN2003 (Inverter IC) geschalten, da die Relais aktive-low sind. Hatte anfangs mit dem eingesetzten Sketch (Standard FIRMATA) und dem FHEM-Modul FRM viele fehlerhafte Schaltvorgänge. Mit dem IC konnte ich das Problem lösen. -> zum Thread
  • die Spannungsversorgung für die Magnetventile läuft über einen 24V Klingeltrafo
  • seit Sommer diesen Jahres ist das ganze in einem Aufputz Unterverteiler im HWR verbaut
  • auf der "Wasser-Seite" setzte ich Ventile und Regner von Rainbird ein, da Gardena mich nach dem Einbau ziemlich schnell enttäuscht hat (hab ich mittlerweile alles durch Rainbird ersetzt)
« Letzte Änderung: 06 November 2016, 20:31:04 von funclass »

Offline jnewton957

  • Full Member
  • ***
  • Beiträge: 317
Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
« Antwort #11 am: 08 November 2016, 17:39:33 »
Gern kann ich ein paar Fotos und ein Schaltbild posten. Muss ich die nächsten Tage mal vorbereiten.


Ja  das wäre schon wichti. Insbesondere sollte man auch sehen, wie der ULN2003 verkabelt ist.

Habe tatsächlich bis auf den IC alle Teile da und würde das gerne nachbauen.
Eigentlich kann ich das ja dann auch mit einem 1-er Relais auch für die Pumpe verwenden, die ja eben vorher Strom braucht.
Oder ich muss die über eine Funksteckdose schalten - mal sehen-

Danke für die Mühen.

Jörg

FHEM5.8 auf Pi3
V 1.65 nanoCUL433 (IT)
nanoCUL JeeLink
V 1.66 nanoCUL868 (HM) (ESA2000WZ)
xELRO AB440, xDECT200, PCA301, xTFA30.3125, esp8266, HM, TabletUI, IR-Schreiblesekopf (Udo)

Offline Dersch

  • Full Member
  • ***
  • Beiträge: 225
Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
« Antwort #12 am: 08 November 2016, 18:54:24 »
Warum hast du den Relaisblock nicht direkt an den GPIO des PI? Ich verstehe den Grund dafür nicht so richtig. Mit Ardunio habe ich mich noch gar nicht befasst. Aber ich verstehe es grob so, dass ich einen PI nehme wenn ich auch direkt ein Linux mit Anwendungen fahren möchte und einen Ardunio wenn ich nur einen günstigen Mikrocontroller für eine vordefinierte Aufgabe brauche. Aber einen Ardunio an einem Pi verstehe ich nicht ganz :D

Offline funclass

  • Jr. Member
  • **
  • Beiträge: 97
Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
« Antwort #13 am: 08 November 2016, 22:11:03 »
Grundsätzlich kann man den Relaisblock auch direkt an die GPIOs des Raspberry anklemmen. Eine triftige Begründung für meinen Nano habe ich nicht wirklich. Hatte mal überlegt diesen irgendwo "in der Ferne" zu platzieren und die GPIOs über 1wire anzusteuern. Hierfür fehlt mir jedoch bis heute die Muße. Ich nutze jedoch noch einen Pin des Nano um 1wire-Temperatursensoren auszulesen.
Kurz gesagt, ich fand´s irgendwie eleganter als direkt an den Pi anzuklemmen.

Offline jnewton957

  • Full Member
  • ***
  • Beiträge: 317
Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
« Antwort #14 am: 14 November 2016, 07:32:51 »
Warum hast du den Relaisblock nicht direkt an den GPIO des PI? Ich verstehe den Grund dafür nicht so richtig. Mit Ardunio habe ich mich noch gar nicht befasst. Aber ich verstehe es grob so, dass ich einen PI nehme wenn ich auch direkt ein Linux mit Anwendungen fahren möchte und einen Ardunio wenn ich nur einen günstigen Mikrocontroller für eine vordefinierte Aufgabe brauche. Aber einen Ardunio an einem Pi verstehe ich nicht ganz :D

Ich nehme die Arduinos letztlich aus Gründen der "Dezentralisierung". Da müssen Antennen (433,868,JeeLink,MySensors etc) für die ganzen Steckdosen und andere IoT Dinge her.

Im Falle der Bewässerungssteuerung brauche ich den Adruino, da ich die Steuerung in der Garage (wgen Verkabelung des Gartens) brauche. Also wird  auch hier wieder ein nano mit Funklösung benötigt.

@funclass: Bin gespannt audf den Schaltplan und Bilder. Gerade nochmals versucht zu googeln, wie man den ULN2003 an den Arduino anbringen könnte - nichts gefunden.
Ich hoffe daher auf ein paar mehr Details - DANKE

Jörg.
FHEM5.8 auf Pi3
V 1.65 nanoCUL433 (IT)
nanoCUL JeeLink
V 1.66 nanoCUL868 (HM) (ESA2000WZ)
xELRO AB440, xDECT200, PCA301, xTFA30.3125, esp8266, HM, TabletUI, IR-Schreiblesekopf (Udo)

 

decade-submarginal