Die Ecke in unserem Garten sollte aufgehübscht werden. Da sind doch ein paar Hochbeete eine Gute Idee.
Die PV Module liefern zudem noch Strom für die Solarinsel. Die Verkleidung ist zum aktuellen Zeitpunkt noch nicht ganz fertig.
Als Wasserspeicher dient in IBC-Container (1000l). Der Container wird ebenfalls noch verkleidet.
Zum Einsatz kommen:
ESP mini: https://amzn.to/45fIAVH
Ultraschallsensor (Messung Füllstand): https://amzn.to/3KMA9c9
Bewässerungssystem: https://amzn.to/3KQ5IBI
Zigbee USB Stick: https://amzn.to/3sjIEVG
Kupplungen: https://amzn.to/3qFJbAS
Kabelschellen: https://amzn.to/3E3TXE1
Adapterkappe für IBC: https://amzn.to/3E66JBU
IBC Abdeckung: https://amzn.to/3YEO1uN
Pumpe: https://amzn.to/45AmmgH
Tuya Zigbee Ventil: klick
Tuya Zigbee Feuchtigkeitssensor: klick
Solarmodulhalterung: https://amzn.to/3LbQOGr
Y Kabel: https://amzn.to/3qFJhIK
Maschendraht: https://amzn.to/3qCx3R2
Unkrautfließ: https://amzn.to/3KNDtnt
Solarmodule: https://amzn.to/3KQoY25
So sieht es bisher bei mir im VIS aus.
So sieht das Blockly-Script zur Füllstandsmessung aus.
var voll, leer, prozent;
on({ id: [].concat(['sonoff.0.Regentonne1.SR04_Distance']), change: 'ne' }, async (obj) => {
let value = obj.state.val;
let oldValue = obj.oldState.val;
voll = 30;
leer = 101;
prozent = Math.round((leer - getState('sonoff.0.Regentonne1.SR04_Distance').val) * 10) / 10;
if (prozent < 0) {
prozent = 0;
}
if (prozent > 100) {
prozent = 100;
}
if (getState('sonoff.0.Regentonne1.SR04_Distance').val <= voll) {
console.log(('Minimaldistanz erreicht: ' + String(getState('sonoff.0.Regentonne1.SR04_Distance').val)));
prozent = 100;
}
setState('javascript.0.EigeneGeraete.Regentonne1_Fuellstand' /* Regentonne1_Fuellstand */, prozent);
setState('javascript.0.EigeneGeraete.Regentonne1_Liter' /* Regentonne1_Liter */, (Math.round(prozent * 10)));
});
Und hier das Script zu Bewässerung (Blockly)
Und hier als javascript:
var minimalFuellstand, minimumFeuchte, maximumFeuchte, Beet1, Beet3;
on({ id: [].concat(['sonoff.0.Garagentor.POWER']), change: 'ne' }, async (obj) => {
let value = obj.state.val;
let oldValue = obj.oldState.val;
if (getState('sonoff.0.Garagentor.POWER').val == true) {
setState('javascript.0.EigeneGeraete.Bewaesserung_anaus' /* Bewaesserung_anaus */, true);
} else {
setState('javascript.0.EigeneGeraete.Bewaesserung_anaus' /* Bewaesserung_anaus */, false);
}
});
schedule("* 20 * * *", async () => {
minimalFuellstand = 50;
minimumFeuchte = 50;
maximumFeuchte = 80;
Beet1 = getState('zigbee.0.a4c1387d21cccc5d.soil_moisture').val;
Beet3 = getState('zigbee.0.a4c138623a70a199.soil_moisture').val;
if (getState('javascript.0.EigeneGeraete.Regentonne1_Liter').val > minimalFuellstand) {
if (Beet1 < maximumFeuchte || Beet3 < maximumFeuchte) {
setState('sonoff.0.Garagentor.POWER' /* Garagentor POWER */, true);
} else {
setState('sonoff.0.Garagentor.POWER' /* Garagentor POWER */, false);
}
} else {
sendTo("telegram", "send", {
text: 'Füllstand Regentonne kritisch! Bewässerung nicht möglich!'
});
}
});