Bodenfeuchte RASEN - mit Diffenrenz-Temp. Sensor u. dem Fühler von Eugen

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

ecky78
Beiträge: 164
Registriert: 03.06.2016, 21:55
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 51 Mal
Danksagung erhalten: 8 Mal

Re: Bodenfeuchte RASEN - mit Diffenrenz-Temp. Sensor u. dem Fühler von Eugen

Beitrag von ecky78 » 30.12.2020, 12:40

Ich habe (allerdings erst gegen Ende der Saison) mal testweise eine einfache Temperaturkompensation zusammengezimmert, deren Koeffizient ich dann im Trial-and-Error Verfahren solange "tunen" wollte, bis es zu passen scheint. Also etwa so, daß der kompensierte Feuchtewert nachts nicht nennenswert fällt, trotz sinkender Bodentemperatur.

Das sieht derzeit so aus:

Code: Alles auswählen

! Temperaturkompensation der Bodenfeuchte im Rasen (Sensor1 - Schaukelturm)
!
! **********************************************************************
! **   Annahmen: 2% pro °C Unterschied, Referenztemperatur = 20.0°C   **
! **   k_faktor muß empirisch angepaßt werden, bis feuch_korr nachts  **
! **   (sinkende Bodentemperatur!) nicht mehr deutlich fällt          **
! **                                                                  **
! **********************************************************************

var    debug      = 0;

var    Rohdaten   = dom.GetObject("BidCos-RF.PEQ1887817:1.TEMPERATURE").Value();        ! Rohdaten Feuchte
var    bodentemp  = dom.GetObject("BidCos-RF.PEQ1887817:2.TEMPERATURE").Value();        ! Rohdaten Bodentemperatur
var    feuch_roh  = dom.GetObject("CUxD.CUX9000009:1.MEAN").Value();                    ! CUxD-gemittelter, unkompensierter Feuchtewert
var    feuch_korr = 0.0;
var    k_faktor   = 2.4;                                                                ! "empirischer" Kompensationsfaktor pro Kelvin

var    hysterese  = 0.35;
string SV1var     = 0;                                                                  ! String für Anzeige
var    Mittel_k   = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Garten.Bodenfeuchte.Rasen1_kompensiert").Value();
object SV1        = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Garten.Bodenfeuchte.Rasen1");
object log        = dom.GetObject(ID_SYSTEM_VARIABLES).Get("System.Programme_Log");


feuch_korr = ((1.0 + (k_faktor * (20.0 - bodentemp))/100) * feuch_roh).Round(1);


if ((dom.GetObject("Garten.Bodenfeuchte.Rasen1_kompensiert").Value().Round(1) - feuch_korr).Abs() > hysterese) {
  dom.GetObject("Garten.Bodenfeuchte.Rasen1_kompensiert").State(feuch_korr);
  if (debug) {dom.GetObject("System.Programme_Log").State("Bodenfeuchte Rasen1: "#feuch_korr.ToString(0)#"% temperaturkompensiert, Rohdaten "#feuch_roh.ToString(0)#"% bei "#bodentemp.ToString(0)#"°C");
             WriteLine("SV geschrieben");
             }
  }

WriteLine(".\n");


if (Mittel_k >= 88) {SV1var = "sehr naß";}              ! 0 - sehr naß
if (Mittel_k <  88) {SV1var = "naß";}                   ! 1 - naß
if (Mittel_k <  65) {SV1var = "feucht";}                ! 2 - feucht          delta 23
if (Mittel_k <  45) {SV1var = "Ok";}                    ! 3 - OK              delta 20
if (Mittel_k <  30) {SV1var = "etwas trocken";}         ! 4 - etwas trocken   delta 15
if (Mittel_k <  20) {SV1var = "trocken";}               ! 5 - trocken         delta 10
if (Mittel_k <  12) {SV1var = "furztrocken!";}          ! 6 - furztrocken!    delta  8

SV1var = SV1var +" ("#Mittel_k.ToString(0)#"%)";


if (debug) {
  WriteLine("Rohdaten:                      "#Rohdaten.ToString(1)#"°C");
  WriteLine("entspr. rel. Feuchte:          "#feuch_roh.ToString(0)#"%");
  WriteLine("entspr. rel. Feuchte (t-komp): "#Mittel_k.ToString(0)#"%");
  WriteLine("SV1var:                        "#SV1var);
  
  if (SV1.Value() != SV1var) {log.State("Bodenfeuchte: SV Garten.Bodenfeuchte.Rasen1 neu geschrieben");
                              log.State("Bodenfeuchte: "#feuch_roh.ToString(0)#"% ("#Rohdaten.ToString(1)#"°C)");
                              }
  }
if (SV1.Value() != SV1var) {SV1.State(SV1var);}

WriteLine("\nfertig");
Die Rohdaten des Feuchtefühlers lasse ich noch per CUxD mitteln, daher der Datenpunkt CUxD.CUX9000009:1.MEAN.

Unterm Strich funktioniert das immerhin schon soweit, daß ich jetzt noch keinen Fehlalarm wegen angeblich zu trockenem Boden hatte, da die Werte nach oben korrigiert (oder besser: "verändert") werden.
Grüße,
Ecky

Chemieka
Beiträge: 649
Registriert: 03.01.2017, 17:39
Hat sich bedankt: 4 Mal
Danksagung erhalten: 9 Mal

Re: Bodenfeuchte RASEN - mit Diffenrenz-Temp. Sensor u. dem Fühler von Eugen

Beitrag von Chemieka » 30.12.2020, 14:44

Super genau an sowas hab ich gedacht. Klasse Leistung.
Ehm kannst du mir als kleiner Laie sagen wie ich das Skript am besten einbaue und welche Variablen ich anlegen müsste?
Nett von dir. :P
Zuletzt geändert von Chemieka am 30.12.2020, 16:31, insgesamt 1-mal geändert.
PI3+ mit RaspberryMatic; PI4 mit IOBroker; Samsung Tab A mit Mediola Visualisierung; Harmony Hub; Philips Hue; Drei IP Cams; Zwei Leseköpfe an den Stromzählern; Reedkontakt (Arduino) am Wasserzähler; Drucksensor (Arduino); CUL433 für Intertechno und Somfy RTS; Nuki Bridge

Gluehwurm
Beiträge: 12434
Registriert: 19.03.2014, 00:37
System: in Planung
Hat sich bedankt: 105 Mal
Danksagung erhalten: 380 Mal

Re: Bodenfeuchte RASEN - mit Diffenrenz-Temp. Sensor u. dem Fühler von Eugen

Beitrag von Gluehwurm » 30.12.2020, 15:52

Chemieka hat geschrieben:
30.12.2020, 14:44
als kleiner Leihe
Bist Du Leiharbeiter oder ein Laie ?? :shock:

Gruß
Bruno

Chemieka
Beiträge: 649
Registriert: 03.01.2017, 17:39
Hat sich bedankt: 4 Mal
Danksagung erhalten: 9 Mal

Re: Bodenfeuchte RASEN - mit Diffenrenz-Temp. Sensor u. dem Fühler von Eugen

Beitrag von Chemieka » 30.12.2020, 16:21

Das kann man nicht direkt an einem Buchstaben fest machen. :D
PI3+ mit RaspberryMatic; PI4 mit IOBroker; Samsung Tab A mit Mediola Visualisierung; Harmony Hub; Philips Hue; Drei IP Cams; Zwei Leseköpfe an den Stromzählern; Reedkontakt (Arduino) am Wasserzähler; Drucksensor (Arduino); CUL433 für Intertechno und Somfy RTS; Nuki Bridge

Xel66
Beiträge: 14148
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: Bodenfeuchte RASEN - mit Diffenrenz-Temp. Sensor u. dem Fühler von Eugen

Beitrag von Xel66 » 31.12.2020, 00:18

Chemieka hat geschrieben:
30.12.2020, 16:21
... an einem Buchstaben...
Zweie sinds, zweie! ;-)

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Chemieka
Beiträge: 649
Registriert: 03.01.2017, 17:39
Hat sich bedankt: 4 Mal
Danksagung erhalten: 9 Mal

Re: Bodenfeuchte RASEN - mit Diffenrenz-Temp. Sensor u. dem Fühler von Eugen

Beitrag von Chemieka » 31.12.2020, 11:57

Danke für den Hinweis. :roll: Hilfe fachlicher Natur wäre mir freilich nützlicher.
PI3+ mit RaspberryMatic; PI4 mit IOBroker; Samsung Tab A mit Mediola Visualisierung; Harmony Hub; Philips Hue; Drei IP Cams; Zwei Leseköpfe an den Stromzählern; Reedkontakt (Arduino) am Wasserzähler; Drucksensor (Arduino); CUL433 für Intertechno und Somfy RTS; Nuki Bridge

Benutzeravatar
NilsG
Beiträge: 1692
Registriert: 09.08.2013, 23:44
System: CCU
Hat sich bedankt: 383 Mal
Danksagung erhalten: 30 Mal
Kontaktdaten:

Re: Bodenfeuchte RASEN - mit Diffenrenz-Temp. Sensor u. dem Fühler von Eugen

Beitrag von NilsG » 31.12.2020, 14:28

Moin Ecky!

Das ist doch mal cool 😎
Was fragst Du da von CuxD ab?
Bzw. wie erstellst Du den in CuxD?

Danke!

Nils
Grüße und DANKE! 🍻

Nils

-----------------------------------------
CCU3 + 2x LAN-Gateway

ecky78
Beiträge: 164
Registriert: 03.06.2016, 21:55
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 51 Mal
Danksagung erhalten: 8 Mal

Re: Bodenfeuchte RASEN - mit Diffenrenz-Temp. Sensor u. dem Fühler von Eugen

Beitrag von ecky78 » 05.01.2021, 11:53

Ah, sorry - bin nicht dazu gekommen, nochmal reinzuschauen. FROHES NEUES allerseits übrigens ;-)

Ich hab ein CUxD-Transformdevice angelegt, das mir zum Einen die Temperaturwerte des Sensors in Prozent Bodenfeuchte umwandelt und zum Anderen ein paar Statistikfunktionen bietet, von denen ich den gleitenden Mittelwert (Datenpunkt MEAN) weiterverwende.
shot1.JPG
Zuletzt geändert von ecky78 am 05.01.2021, 12:24, insgesamt 2-mal geändert.
Grüße,
Ecky

ecky78
Beiträge: 164
Registriert: 03.06.2016, 21:55
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 51 Mal
Danksagung erhalten: 8 Mal

Re: Bodenfeuchte RASEN - mit Diffenrenz-Temp. Sensor u. dem Fühler von Eugen

Beitrag von ecky78 » 05.01.2021, 12:22

Chemieka hat geschrieben:
30.12.2020, 14:44
Ehm kannst du mir als kleiner Laie sagen wie ich das Skript am besten einbaue und welche Variablen ich anlegen müsste?
Hallo Chemieka,
Das Programm dazu ist an und für sich ganz einfach: Es wird 3x täglich ausgelöst und führt dann direkt das Skript aus. Zu Beginn hatte ich es sogar jedes Mal gestartet, wenn der Sensor neue Werte geliefert hat, aber das ist gar nicht nötig. Man könnte seine Ausführung auch auf die Sommermonate beschränken oder an die Außentemperatur knüpfen ... dann müßte man diese Bedingungen im WENN-Teil mit UND ergänzen.
shot2.JPG

Das Skript enthält auch noch ziemlich viel unnötiges Zeugs, das ich u.a. zum Debuggen eingebaut habe. Im Grunde läßt es sich auf diesen Stand zusammenstreichen:

Code: Alles auswählen

! Temperaturkompensation der Bodenfeuchte im Rasen

var    bodentemp  = dom.GetObject("BidCos-RF.PEQ1887817:2.TEMPERATURE").Value();        ! Rohdaten Bodentemperatur
var    feuch_roh  = dom.GetObject("CUxD.CUX9000009:1.MEAN").Value();                    ! CUxD-gemittelter, unkompensierter Feuchtewert
var    feuch_korr = 0.0;
var    k_faktor   = 2.4;                                                                ! "empirischer" Kompensationsfaktor pro Kelvin
var    hysterese  = 0.35;
string SV1var     = 0;                                                                  ! String für Anzeige
var    Mittel_k   = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Garten.Bodenfeuchte.Rasen1_kompensiert").Value();
object SV1        = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Garten.Bodenfeuchte.Rasen1");


feuch_korr = ((1.0 + (k_faktor * (20.0 - bodentemp))/100) * feuch_roh).Round(1);


if ((dom.GetObject("Garten.Bodenfeuchte.Rasen1_kompensiert").Value().Round(1) - feuch_korr).Abs() > hysterese) {
  dom.GetObject("Garten.Bodenfeuchte.Rasen1_kompensiert").State(feuch_korr);
   }


if (Mittel_k >= 88) {SV1var = "sehr naß";}              ! 0 - sehr naß
if (Mittel_k <  88) {SV1var = "naß";}                   ! 1 - naß
if (Mittel_k <  65) {SV1var = "feucht";}                ! 2 - feucht          delta 23
if (Mittel_k <  45) {SV1var = "Ok";}                    ! 3 - OK              delta 20
if (Mittel_k <  30) {SV1var = "etwas trocken";}         ! 4 - etwas trocken   delta 15
if (Mittel_k <  20) {SV1var = "trocken";}               ! 5 - trocken         delta 10
if (Mittel_k <  12) {SV1var = "furztrocken!";}          ! 6 - furztrocken!    delta  8

SV1var = SV1var +" ("#Mittel_k.ToString(0)#"%)";

if (SV1.Value() != SV1var) {SV1.State(SV1var);}

Als Systemvariablen braucht diese Kurzversion noch Garten.Bodenfeuchte.Rasen1_kompensiert (Typ Zahl) und Garten.Bodenfeuchte.Rasen1 (Typ String, falls man sich die Info irgendwo "in Worten" anzeigen lassen möchte).

Der Wert für den Kompensationsfaktor scheint mir wie oben gesagt als Startwert ganz gut zu passen, variiert aber wahrscheinlich mit dem Bodentyp, d.h. den muß man für sich selbst noch anpassen.

Der Wert für die Hysterese bestimmt, wann tatsächlich die Systemvariable "Garten.Bodenfeuchte.Rasen1_kompensiert" neu beschrieben wird - kleinere Änderungen im Wert (die es trotz der Mittelung durch CUxD immer noch gibt, z.B. weil die Bodentemperatur nicht auch gemittelt verwendet wird) werden so erstmal ignoriert. Hintergrund ist, daß jede Änderung der "Garten.Bodenfeuchte.Rasen1_kompensiert" bei mir ein weiteres Programm triggert, was dann unnötigerweise durchlaufen würde, obwohl sich im Rasen nicht wirklich viel verändert hat.
Grüße,
Ecky

ecky78
Beiträge: 164
Registriert: 03.06.2016, 21:55
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 51 Mal
Danksagung erhalten: 8 Mal

Re: Bodenfeuchte RASEN - mit Diffenrenz-Temp. Sensor u. dem Fühler von Eugen

Beitrag von ecky78 » 06.01.2021, 12:24

Ah, und hier:

var bodentemp = dom.GetObject("BidCos-RF.PEQ1887817:2.TEMPERATURE").Value();
var feuch_roh = dom.GetObject("CUxD.CUX9000009:1.MEAN").Value();


müssen natürlich die eigenen Sensoradressen eingesetzt werden. Man kann, wenn man auf die CUxD-Mittelung verzichten will, bei feuch_roh auch den 1. Kanal des Sensors direkt eintragen, also dann so:

Code: Alles auswählen

var bodentemp = dom.GetObject("BidCos-RF.<Sensor-Seriennummer>:2.TEMPERATURE").Value();
var feuch_roh = dom.GetObject("BidCos-RF.<Sensor-Seriennummer>:1.TEMPERATURE").Value();
Grüße,
Ecky

Antworten

Zurück zu „Projektvorstellungen“