Neues Modul zur Bewässerungssteuerung

Begonnen von Tobias, 03 April 2014, 15:57:09

Vorheriges Thema - Nächstes Thema

Tobias

Ausgehend von meiner schnell zusammengefrickelten Bewässerungssteuerung (-> Wiki) bin ich jetzt endlich mal hergegangen und alles in ein Modul gefasst.
ZurZeit teste ich mit einem DummySensor und einem FS20 Schaltaktor

Was schon geht:
* An/Aus/AutomaticMode/Toggle
* Reaktion auf externe Änderung des Schaltaktors
* Interner Timer (siehe Define)
* Definieren einer SprinkleControl Instanz mit Angabe einer Maximalen Anzahl von parallelen Bewässerungsvorgängen und Einordnen neuer Bewässerungsvorgänge in eine übergeordneten Queue wenn Maximum erreicht. Problem: mein Brunnen schafft nur einen Regner gleichzeitig! Habe aber 12 Bewässerungsventile ;)

ToDo2: Angabe von Prioritäten. Zb. soll die Waschmaschine (die auch am Brunnen hängt) einen bereits laufenden Beregnungsvorgang unterbrechen können wenn Max aus 1) erreicht ist. Anschließend soll der unterbrochene Beregnungsvorgang fortgesetzt werden.

Ich wäre über Rückmeldungen Dankbar.


define BF_Dummy dummy
attr BF_Dummy room FS20
attr BF_Dummy stateFormat VWC_A%
setreading BF_Dummy VWC_A 10

define FS20_a53101 FS20 a531 01
attr FS20_a53101 room FS20

define FS20_a53102 FS20 a531 02
attr FS20_a53101 room FS20

define FS20_a53103 FS20 a531 03
attr FS20_a53101 room FS20

define SprinkleControl SprinkleControl
attr SprinkleControl SprinkleControl_MaxParallel 2
attr SprinkleControl room FS20

define MySprinkle1 Sprinkle FS20_a53101 BF_Dummy:VWC_A +00:01:30
attr MySprinkle1 SprinkleControl SprinkleControl
attr MySprinkle1 Sprinkle_DefaultCmd Auto
attr MySprinkle1 Sprinkle_OnTimeSec 30
attr MySprinkle1 Sprinkle_SensorThreshold 54
attr MySprinkle1 devStateIcon An:sani_sprinkling Aus:general_aus Auto:time_automatic disabled:remotecontrol/black_btn_POWEROFF2
attr MySprinkle1 disable 0
attr MySprinkle1 room FS20
attr MySprinkle1 webCmd Auto:An:Aus:Toggle:Disable

define MySprinkle2 Sprinkle FS20_a53102 BF_Dummy:VWC_A +00:00:30
attr MySprinkle2 SprinkleControl SprinkleControl
attr MySprinkle2 Sprinkle_DefaultCmd Auto
attr MySprinkle2 Sprinkle_OnTimeSec 5
attr MySprinkle2 Sprinkle_SensorThreshold 54
attr MySprinkle2 devStateIcon An:sani_sprinkling Aus:general_aus Auto:time_automatic disabled:remotecontrol/black_btn_POWEROFF2
attr MySprinkle2 disable 0
attr MySprinkle2 room FS20
attr MySprinkle2 webCmd Auto:An:Aus:Toggle:Disable

define MySprinkle3 Sprinkle FS20_a53103 BF_Dummy:VWC_A +00:00:15
attr MySprinkle3 SprinkleControl SprinkleControl
attr MySprinkle3 Sprinkle_DefaultCmd Auto
attr MySprinkle3 Sprinkle_OnTimeSec 5
attr MySprinkle3 Sprinkle_SensorThreshold 54
attr MySprinkle3 devStateIcon An:sani_sprinkling Aus:general_aus Auto:time_automatic disabled:remotecontrol/black_btn_POWEROFF2
attr MySprinkle3 disable 0
attr MySprinkle3 room FS20
attr MySprinkle3 webCmd Auto:An:Aus:Toggle:Disable


Nach dem Definieren solltest ihr das Attribut Sprinkle_Threshold auf einen bei Euch sinnvollen Wert setzen, zb: 50 ist schon voreingestellt. Das ist die Schaltschwelle zum Sensorwert
Bei ersten Klick auf "Auto" wird der AutoMode aktiviert. Ein nochmaliger Klick startet sofort den AutoMode, also je nach Schaltschwelle wird der Aktor bedient oder nicht.

Attribute SprinkleControl:
* SprinkleControl_MaxParallel => legt die maximale anzahl paralleler Threads fest

Attribute Sprinkle:
* SprinkleControl => optionale Angabe einer SprinkleControl Instanz
* Sprinkle_DefaultCmd => Bei Angabe eines Timers im Define wird dieses Command ausgeführt
* Sprinkle_OnTimeSec => Bei Angabe eines numerischen Wertes wird statt "ON" ein "on-for-timer x" ausgeführt
* Sprinkle_SensorThreshold => Schaltschwelle des SensorMesswertes
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Damian

Hallo Tobias,

gibt´s da nicht schon etwas für solche Zwecke?

define hygrostat THRESHOLD hym_sens:humidity dehydrator|set @ on|set @ off|1

mit

set hygrostat desired 60

wird die Feuchtigkeit zwischen 50 % und 60 % gehalten.

mit

set hygrostat deactivated und set hygrostat aktiv

lässt sich die Steuerung ein- und ausschalten.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Tobias

Hi Damian,
ja das kenne ich bzw hab es mir angeschaut. Sehr mächtig, habe es aber mit meinen Anforderungen nicht hinbekommen. Kann aber auch an der Treshold-Unerfahrenheit liegen.
Wenn ich mich nicht irre bist du der Modulautor?

Die obigen ToDos sind nicht ganz vollständig, es fehlt noch:
- Zeitsteuerung: Es soll nicht immer mit einem Trigger des Sensors bewässert werden sondern mit einem integrierten Timer, zb. morgens um 5Uhr. Zb. doof wenn der Rasenregner angeht wenn man gerade auf der Sonnenliege liegt ;)
- Angabe eines integrierten Masters der die gleichzeitigen Bewässerungen pro Pumpe (hier nur eine ;) ) überwacht. So ist es damit möglich, zb. maximal 2 gleichzeitige  Bewässerungsvorgänge laufen zu lassen. Möchte ein dritter dazukomen, so landet dieser in einer Queue und wird automatisch abgearbeitet sobald einer der aktiven beendet wird.
- Im FHEM-Web benötige ich die von mir abgebildeten Buttons: Auto, An, Aus, Toggle, Disable
Ist der Status <> Auto, so schaltet der erste Klick in den AutoMode, der zweite Klick triggert die Bewässerung an (je nach Sensorwert)

Die Obige VErsion ist der erste Entwurf. Wenn du meinst das das mit Threshold leistbar ist, immer her damit. Ich bin ein Freund davon keine doppelten Entwicklungen und damit unnötige Module zu haben.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Damian

Zitat von: Tobias am 04 April 2014, 08:13:01

Die obigen ToDos sind nicht ganz vollständig, es fehlt noch:
- Zeitsteuerung: Es soll nicht immer mit einem Trigger des Sensors bewässert werden sondern mit einem integrierten Timer, zb. morgens um 5Uhr. Zb. doof wenn der Rasenregner angeht wenn man gerade auf der Sonnenliege liegt ;)
- Angabe eines integrierten Masters der die gleichzeitigen Bewässerungen pro Pumpe (hier nur eine ;) ) überwacht. So ist es damit möglich, zb. maximal 2 gleichzeitige  Bewässerungsvorgänge laufen zu lassen. Möchte ein dritter dazukomen, so landet dieser in einer Queue und wird automatisch abgearbeitet sobald einer der aktiven beendet wird.
- Im FHEM-Web benötige ich die von mir abgebildeten Buttons: Auto, An, Aus, Toggle, Disable
Ist der Status <> Auto, so schaltet der erste Klick in den AutoMode, der zweite Klick triggert die Bewässerung an (je nach Sensorwert)

Hallo Tobias,

was mit THRESHOLD einfach machbar wäre:


-Zeitsteuerung läßt sich über zeitabhängige Feuchtigkeitsvorgabe realisieren:

define Watering WeekdayTimer hygrostat 15:00|60  20:00|0 set @ desired %

oder über aktivieren/deaktivieren

define Watering WeekdayTimer hygrostat 15:00|active  20:00|deactivated set @ %

Für jede Bewässerungsstelle mit einem eigenem Feuchtigkeitsmesser wird natürlich ein eigenes THRESHOLD-Modul definiert.

Wenn man mehrere Schalter pro Messstelle schalten will, dann müsste man die alle anführen:

define hygrostat THRESHOLD hym_sens:humidity dehydrator|set switch1,switch2 off|set switch1,switch2 on|1

Komplexe Abhängigkeiten muss man dann schon in eine Perl-Unterroutine auslagern, die man über das Modul beim Überschreiten bzw. Unterschreiten der Schwelle aufrufen lassen könnte.

Buttons gehen z. Zt. noch nicht (nur indirekt über Dummy)

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

betateilchen

Ich denke auch, eine Gartenbewässerung sollte durchaus mit bereits existierenden fhem-Modulen umsetzbar sein.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Tobias

ihr habt Recht. Habe mit Threshold nochmal angesehen und es ist alles mit vorhandenen Modulen umsetzbar. Allerdings sehr kompliziert und in mehreren Stufen. Das habe ich allerdings jetzt auch schon Mehr oder Weniger mit meiner MyUtils Prozedur.
Mit meinem Modul ist es IMHO einfacher. Alles zusammen gekapselt.
Zumindest aus jetziger Sicht wird mein Modul auch nicht öffentlich werden, maximal bis ins contrib. Es sei denn es gibt genug(!) Interessenten.

Danke für die Einschätzung...
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

betateilchen

Zitat von: Tobias am 04 April 2014, 17:34:38maximal bis ins contrib. Es sei denn es gibt genug(!) Interessenten.

Genau aus dem Grund ist auch mein ListenLive jetzt ins contrib gewandert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Tobias

Allerdings ob contrib oder nicht, eine ordentliche Doku gemäß commandref kommt ins Modul rein ;)

Gesendet von meinem ALCATEL ONE TOUCH 997D mit Tapatalk

Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Gerhard

Hallo Tobias,

schade, der Sommer ist nicht mehr weit!

Zwar wird mein Haus erst in September fertig, dann folgt Garten, und freute mich schon über einen Bwesserungsmodul!!!
Klar kann man es auch anders lösen, aber ein Modul ist viel eleganter und auch für Anfängern praktikabler.

Gerhard
FB6890LTE, cubietruck, orangePi, raspberry 2/3/4, HM/HMIP, shelly > 50, etc.

betateilchen

ja und? es wird doch höchstwahrscheinlich ein Modul geben...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Gerhard

ja klar, desswegen schade!

auf alle Fälle gehört Gartenbewässerung auch bei andere HomeAutomation Systeme zum Standard.

Gerhard
FB6890LTE, cubietruck, orangePi, raspberry 2/3/4, HM/HMIP, shelly > 50, etc.

Damian

#11
Zitat von: Gerhard am 04 April 2014, 21:11:56
ja klar, desswegen schade!

auf alle Fälle gehört Gartenbewässerung auch bei andere HomeAutomation Systeme zum Standard.

Gerhard

Ich weiß nicht wie komplex deine Steuerung werden soll, aber mit den zwei Zeilen:


define  TH_bewaesserung THRESHOLD Sensor:humidity HM_Schalter
define W_bewaesserung WeekdayTimer TH_bewaesserung 19:00|60  20:00|0 set @ desired %


hast du eine komplette Bewässerung.

Zusätzliche Bedingung, wie: nur bewässern, wenn die Sonne nicht scheint oder bewässern abhängig von Außentemperatur oder bewässern nach Wochenzeitschaltprogramm kannst du nach Belieben erweitern.

Gruß

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Gerhard

Hallo,

ganz klar, ich werde es auch so ähnlich lösen!, voralem THRESHOLD ist ein super Modul mit dem ich schon einiges gelöst habe, aber das muss man zuerst erkennen. Ich dachte eher an die Benutzer die fertige Lösungen suchen, einsetzen und nicht immer so fit sind wie die meisten hier.

Gerhard
FB6890LTE, cubietruck, orangePi, raspberry 2/3/4, HM/HMIP, shelly > 50, etc.

Tobias

Sag ich doch das es mit treshold lösbar ist. Aber das obige Beispiel hat selbst schon 2 definitions. Ist mir alles zu kompliziert fur die Aufgabe. Und dann noch meine "schoenen" Buttons in fhemweb und mein Problem das ich an der pumpe nur einen bewasserungsstrang gleichzeitig aktivieren darf. Und ich habe 12 davon die konkurrieren.

Gesendet von meinem ALCATEL ONE TOUCH 997D mit Tapatalk

Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Tobias

Modul oben aktualisiert.
ToDo's und aktuelle Features ebenfalls.
Btw: Bislang wäre alles ebenfalls mit ein oder mehreren Threshold-Instanzen möglich. Die neuen ToDos IMHO aber nicht mehr...
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter