Meine Bewässerungssteuerung ist mittlerweile auch so weit, vorgestellt zu werden:
Man kann diverse Bewässerungskreise definieren, eine zyklishe Bewässerung programmieren und einen Regensensor einbinden.
Die komplette Installation erfolgt automatisch.
Beschreibung, Konfiguration und Installation findet Ihr unter …/wiki/IPSWatering
[Update 2011-06-23] - FS20 Unterstützung, Callback Methoden
[Update 2011-07-03] - kleiner Bugfix im Installations Script
[Update 2011-11-02] - Anpassung 2.5
[Update 2012-03-17] - Eingliederung in die IPSLibrary
Ich habe meine „Bewässerungssteuerung IPS“ nur über eine Funkschaltsteckdose und Gard*** Bewässerungscomp. und Wasserverteiler realisiert.
Das heisst das die Funksteckdosse ausgeschaltet wird wenn es genug geregnet hat, ansonsten ist sie an und der Bewässerungscomp. übernimmt die zeitlich Steuerung.
Worauf ich aber hinaus will ist das in dieser Kombination der Wasserverteiler immer zuverlässig lief und ich immer wusste zu welcher Zeit er in welcher Position ist.
Wenn es also evtl. doch eine möglichkeit geben würde den Wasserverteiler zu unterstützen würde ich mich freuen, denn Deine Steuerung ist einfach nur WOW !!!.
2.) Im File IPSWatering_Control.ips.php die FS20 Ansteuerung implementieren.
a.) in der bestehenden Funktion „IPSWatering_ActivateWatering“ den neuen DeviceType behandeln.
// ----------------------------------------------------------------------------------------------------------------------------
function IPSWatering_ActivateWatering($CycleId, $Value) {
$WaterConfig = get_WateringConfiguration();
$CircleName = IPS_GetName($CycleId);
$DeviceType = $WaterConfig[$CircleName][c_Property_Type];
$DevicePath = $WaterConfig[$CircleName][c_Property_Device];
switch($DeviceType) {
case c_Type_Homematic:
IPSWatering_ActivateWateringHomematic($DevicePath, $Value);
break;
case c_Type_FS20:
IPSWatering_ActivateWateringFS20($DevicePath, $Value);
break;
default:
IPSLogger_Err(__file__, "Unknown DeviceType '$DeviceType' for Watering of Circle '$CircleName'");
exit;
}
}
b.) die eingentliche Schaltfunktion „IPSWatering_ActivateWateringFS20“ implementieren
// ----------------------------------------------------------------------------------------------------------------------------
function IPSWatering_ActivateWateringFS20($DevicePath, $Value) {
$DeviceId = get_ObjectIDByPath($DevicePath);
IPSLogger_Dbg(__file__, "Set '$DevicePath.Status'=".($Value?'true':'false'));
if ($DeviceId===false){
IPSLogger_Wrn(__file__, "Device $DevicePath could NOT be found to activate Watering");
return;
}
FS20_SwitchMode($DeviceId, $Value);
}
nein die Bewässerungskreise kann ich nicht einzeln ansteuern :mad:
Und um so mehr ich darüber nachdenke, je mehr zweifel ich selber an der Sinnhaftigkeit einer implementierung des 6 Fach Verteilers.
Kannst Du, wenn Du Zeit und Lust hast mal beschreiben wie Du das bei Dir mit Homematic umgesetzt hast? Evtl. ist das ja was zum Basteln für den nächsten Winter.
Wow das ging ja schnelle… ich werde an diesem und am nächsten Wochenende meine Installation im Garten vorbereiten, sobald die verkabelt ist kann ich dir dann Feedback geben ob die so klappt…
Hallo Brownson,
als erstes „Respekt“ super Skript.
Ich habe einen HomeMatic Funk-Kombi-Sensor OC 3 und will die Informationen für meine Gartenbewässerung nutzen. Zum einen soll nicht gesprengt werden wenn es genug geregnet hat und zum anderen soll nicht gesprengt werden wenn es zu windig ist. Ich habe die Gardena Versenk-Viereckregner und die sind bei Wind alles andere außer Rasensprenger! :rolleyes:
Kann man diese Funktionen noch implementieren?
OK, ich lass mir das nochmals durch den Kopf gehen und implementiere eventuell einige „Callback“ Funktionen, mit denen man das alles in jedem Fall realisieren kann.
Die Lösung mit Callbacks wäre super, ich hätte da auch noch die Idee, Bodenfeuchtesensoren einzubinden. Das sollte damit dann auch problemlos möglich sein.
das Anlegen der Instanzen für die eigentliche Hardware muß immer manuell erledigt werden (betrifft auch Homematic, eine autom. Installation würde sehr viele und unterschiedliche Parameter benötigen. Mit diesem Modul verlinkt man nur mehr auf die fertigen Instanzen).
Für den Betrieb ist der IPSLogger nötig, ich werde das bei nächster Gelegenheit in der Doku noch korrigieren …
Am Wochenende werde ich wahrscheinlich wieder eine neue Version mit zusätzlicher Hardware Unterstützung und Callback Methoden posten …
[ul]
[li]FS20 wird nun direkt unterstützt, einfach als DeviceType c_Type_FS20 angeben
[/li][li]neue Callback Methode IPSWatering_ActivateWateringCustom, DeviceType muß auf c_Type_Custom gesetzt sein, dort kann man dann das Schalten der eigenen Hardware implementieren.
[/li][li]neue Callback Methoden IPSWatering_BeforeActivateWatering und IPSWatering_AfterActivateWatering, hier kann man die Logik eines Bodenfeuchtesensor implementieren oder auch die Wasserversorgung Ein- und Ausschalten
[/li][/ul]
Die neuen Funktionen befinden sich im File IPSWatering_Custom.ips.php, im Header jeder Funktion befindet sich auch eine detailierte Beschreibung der Parameter.
Werde auch das WIKI bei nächster Gelegenheit anpassen.
Mittlerweile habe ich alles hingebracht. - Danke! Das mit den CallBacks muss ich jetzt noch testen.
Ich hätte zum FS20-System noch eine kleine Codeänderung vorzuschlagen.
Da dies ja ein unidirktionales System ist, und die Gefahr besteht, dass bei nicht ankommenden Abschaltbefehelen aus dem Garten ein See wird, habe ich das Skript so geändert, dass die eingestellte Bewässerungsdauer gleich mit dem Einschaltbefehl an den FS20 Aktor mitübergeben wird. Sicherheitshalber wird dann trotzdem noch ein Ausschaltbefehl gesendet.
Hier der Code:
// ----------------------------------------------------------------------------------------------------------------------------
function IPSWatering_ActivateWateringFS20($DevicePath, $Value, $FS20CircleId) { // $FS20CircleId --> die ID des Bewässerungskreis wird mitübergeben
$DeviceId = get_ObjectIDByPath($DevicePath);
$FS20_Duration = GetValue(get_ControlId(c_Control_Duration, $FS20CircleId)); // Eingestellte Bewässungsdauer wird abgefragt
IPSLogger_Dbg(__file__, "Set '$DevicePath.Status'=".($Value?'true':'false'));
if ($DeviceId===false){
IPSLogger_Wrn(__file__, "Device $DevicePath could NOT be found to activate Watering");
return;
}
if ($Value==true)
{ $fs20dur_sek=($FS20_Duration*60); // Umwandlung in Sekunden
FS20_SwitchDuration($DeviceId, true, $fs20dur_sek); // statt SwitchMode wird hier mit SwitchDuration gleich die Einschaltdauer mitübergeben.
}
else
{FS20_SwitchMode ($DeviceId, false);} // Hier wird zusätzlich zum Timer wieder ausgeschaltet - sicher ist sicher
;
}
// ----------------------------------------------------------------------------------------------------------------------------
function IPSWatering_ActivateWatering($CycleId, $Value, $Mode) {
$WaterConfig = get_WateringConfiguration();
$CircleName = IPS_GetName($CycleId);
$DeviceType = $WaterConfig[$CircleName][c_Property_Type];
$DevicePath = $WaterConfig[$CircleName][c_Property_Device];
if (!IPSWatering_BeforeActivateWatering($CycleId, $Value, $Mode)) {
return false;
}
switch($DeviceType) {
case c_Type_Homematic:
IPSWatering_ActivateWateringHomematic($DevicePath, $Value);
break;
case c_Type_FS20:
IPSWatering_ActivateWateringFS20($DevicePath, $Value, $CycleId); // Hier muss die CycleId mitübergeben werden, um dann in der Funktion die Dauer abfragen zu können
break;
case c_Type_Custom:
IPSWatering_ActivateWateringCustom($CycleId, $DevicePath, $Value);
break;
default:
IPSLogger_Err(__file__, "Unknown DeviceType '$DeviceType' for Watering of Circle '$CircleName'");
exit;
}
IPSWatering_AfterActivateWatering($CycleId, $Value, $Mode);
return true;
}
Ich versuche seit gestern abend IPSWatering zu installieren, komme aber auf Grund eines Fehlers nicht weiter. Da ich mich mit PHP nicht auskenne, finde ich leider die Ursache nicht.
Die Warnings sind im angehängten Screenshot ersichtlich und kommen offensichtlich aus dem Installer. Was mache ich falsch?
Kannst du mir bitte helfen?