NEWS
Test Adapter Sprinkle Control 0.2.x mit neuen Funktionen
-
@gyle Hallo,
Du hast recht! actualSoilMoisture wird bei fixDay (Bewässerung an festen Tagen) nicht aktualisiert. Die Bewässerung erfolgt aber trotzdem!
Steht auf der To-do-Liste! Komme aber momentan nicht dazu! Muss erst meine privaten Projekte zu Ende führen.
MfG Dirk Peter -
Hallo Zusammen,
wir hatten jetzt drei Tage in Folge 11mm regen die durch sprinkle control erkannt worden sind (beregnung verzögert). Allerdings verblieb jeden Tag die Bodenfeuchte bei 1% und jetzt an Tag 4 ohne Regenforecast wird dann fleißig bewässert obwohl es eigentlich nicht sein muss.
Ist das Verhalten so normal?
Bin grad im Urlaub und kann die Settings nicht nachschauen. -
@createch2 Hallo,
ohne deine Konfiguration kann man da wenig zu sagen! Die Verzögerung findet über den Adapter "das Wetter" statt, aber nur für den aktuellen Tag. Soll deine Bewässerung für längere Zeit aussetzen, so geht das nur unter Bodenfeuchtesensoren (beste und teuerste Wahl) oder der Berechnung der Verdunstung. Ich glaube diese Variante hast du gewählt. Hier kannst du unter den Ventilen unter dem Punkt "maximale Bodenfeuchtigkeit nach dem Regen in (%)" einstellen wie feucht dein Boden werden kann, oder bessergesagt wie lange nach einem Starkregen nicht bewässert wird.
Das deine Bodenfeuchte aber bei 1% liegt ist sehr ungewöhnlich! Ich würde mal sprinklecontrol.0.evaporation.ETpToday aufzeichnen und schauen ob dort der Regen richtig erkannt wird. Es sollte so aussehen:
MfG Dirk Peter -
@dirk-peter
Tatsächlich habe ich die Bodenfeuchte über die Verdunstung berechnen lassen.
Soweit ich mich erinnere ist die Bodenfeuchte nach Bewässerung auf 120% gestellt.
Die 1% sind das Ergebniss einer manuell ausgesetzten Bewässerung für 1 Woche in der es permanent geregnet hat.Ist es also so dass der hinzugefügte Regen nicht mit einberechnet wird?
-
@createch2 Hallo,
der Regen wird über den Regensensor ermittelt. Du kannst es am Diagramm erkennen, wo am Tag die Kurve nach unten springt.
Es scheint das du entweder keinen Regensensor angegeben hast, oder du nur die aktuellen Regenwerte übermittelst. Du brauchst aber hier einen Zähler [Jahresregenmenge], wie bei HomeMatic üblich.
MfG Dirk Peter -
@dirk-peter hallo zusammen, bin nun endlich nach 2 monaten bauzeit und 300m Pipeline fertiggeworden mit meinem Bewässerungsprojekt.
Als Steuerung habe ich das smart irrigation set mit 1 sensor von Gardena, alles andere ist übrigens auch von Gardena.
4 mal MicroDrip mit verschiedenen Sprühern und Tropfern
3 mal OSG 140 ViereckregnerInsgesamt habe ich 6 Ventile verbaut, 1 Zisterne mit 9000 Liter die durch das Dach meines Hauses befüllt wird (wenns regnet, blockly ist geschrieben für den Literzuwachs in der Zisterne, da in der Zisterne leider nur 6 Schwimmer verbaut sind die einfach ja oder nein bringen, die Steuerung ist 25 Jahre alt da war noch nicht ans Smart Home zu denken, daher meine Berechnung)
In der Zisterne ist eine Schmutzwasserpumpe von EInhell seit 25 Jahren, mit 16000 Liter bei 1 1/2 Zoll ausgang ohne Gegendruck, sie bringt mir ca. 2500 Liter in der Stunde, wurde gemessen, dies wird dann auch berechnet, somit kann ich den Zisternenstand ausrechnen.)
Von der Zisterne geht es in ein Regenfass (hier sind Sensoren verbaut für Max und Min Stand) mit 310 Liter Fassungsvermögen, hier ist meine Gardena INox Tauchdruckpumpe verbaut, die auch mit dem micro drip system klarkommt, hier taktet sie.
Pumpe bringt 2000 Liter im meinen 6 Ventil Kreis, so nun bin ich auf SprinkleControl gestoßen, den Adapter finde ich super @dirk-peter, doch leider bekomme ich im smartgarden adapter immer einen "bad-request"
Folgendes Blockly habe ich geschrieben um den Eingang vom Sprinkle Conrol zum smartgarden System zu migrieren.
<block xmlns="https://developers.google.com/blockly/xml" type="on_ext" id="]@p]bzXzt^a53,$/9qeg" x="63" y="64"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="+XkK4yBCp+YJUgUBcwm}"> <field name="oid">sprinklecontrol.0.sprinkle.Terrasse.runningTime</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="SNQu)hyW`uo%8EXE?FBC"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id=":(h*Wt98yu$T0(Y%sH(V"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="r_4!In@!CYKe3gfR/vqt"> <field name="ATTR">val</field> <field name="OID">sprinklecontrol.0.sprinkle.Terrasse.sprinklerState</field> </block> </value> <value name="B"> <block type="logic_boolean" id="n*Q%AjpbWwM+27;3*nk1"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="-12bMrbl5[?^!~k_3O5v"> <field name="VAR" id="r/ORZ)F8UgBp=(5T||xk">minuten</field> <value name="VALUE"> <block type="text_getSubstring" id="0(V6e|8;PLHwNLiZ`REl"> <mutation at1="true" at2="true"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">FROM_START</field> <value name="STRING"> <block type="on_source" id="tG}R)X.!P;N3qd]QhiF9"> <field name="ATTR">state.val</field> </block> </value> <value name="AT1"> <block type="math_number" id="8AILEP9m3tVh+N1hF80w"> <field name="NUM">1</field> </block> </value> <value name="AT2"> <block type="math_number" id="30{Wjx+,#-ZcQyBxTllV"> <field name="NUM">2</field> </block> </value> </block> </value> <next> <block type="variables_set" id="-r;IQ!6=2!b!!npaIw[!"> <field name="VAR" id="$z!6v$(Uq,|pxb8C43Ox">sekunden</field> <value name="VALUE"> <block type="text_getSubstring" id="@yV2pIt`(IdvRq~/qPS|"> <mutation at1="true" at2="true"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">FROM_START</field> <value name="STRING"> <block type="on_source" id="w5$XfS4$@fX9GZ:rvUP]"> <field name="ATTR">state.val</field> </block> </value> <value name="AT1"> <block type="math_number" id="DR!Td}-~,TVbol]]ym%^"> <field name="NUM">4</field> </block> </value> <value name="AT2"> <block type="math_number" id="gp3p*O8L|Rs5?C=2XJ$p"> <field name="NUM">5</field> </block> </value> </block> </value> <next> <block type="debug" id="gW8rJmPa=U4+KFRBR0aI"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="ZnY@kLD,F?+2`1J5p^}G"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="As)%mY-lhbDp%`a++EJk"> <field name="VAR" id="r/ORZ)F8UgBp=(5T||xk">minuten</field> </block> </value> <next> <block type="debug" id="EYE.F/$Ah]W|0S(=!M!g"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="XikVk9ns+:$@g@476-/F"> <field name="VAR" id="$z!6v$(Uq,|pxb8C43Ox">sekunden</field> </block> </value> <next> <block type="variables_set" id="|}|;,.JPz?nZv#f3abLS"> <field name="VAR" id="r/ORZ)F8UgBp=(5T||xk">minuten</field> <value name="VALUE"> <block type="convert_tonumber" id="pQm}GQac67%%JZj:KUjp"> <value name="VALUE"> <block type="variables_get" id="Ig6~K|q/vJgJWTp6:v}y"> <field name="VAR" id="r/ORZ)F8UgBp=(5T||xk">minuten</field> </block> </value> </block> </value> <next> <block type="variables_set" id="m)CVTohxlP$tW.A628jT"> <field name="VAR" id="$z!6v$(Uq,|pxb8C43Ox">sekunden</field> <value name="VALUE"> <block type="convert_tonumber" id="{H}e}{r1QK?#ob(d:G[%"> <value name="VALUE"> <block type="variables_get" id="os@hAr5jP[$K:?k)E*[9"> <field name="VAR" id="$z!6v$(Uq,|pxb8C43Ox">sekunden</field> </block> </value> </block> </value> <next> <block type="variables_set" id="H(kPjT3|_Tess*9,Qm]r"> <field name="VAR" id="tC|E*X0/D+]X}o#6L*:O">ventil2_zeit</field> <value name="VALUE"> <block type="math_arithmetic" id="~qKz~e}LW27.rO,^?Wr5"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="pZERVBG44/!DlJPsSJmv"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="5%nQoT1a/{f+X9enKr|q"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="]1yPdE_rsv(NKDcIZYHV"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="SJ46AO411$EnJFfk^D7h"> <field name="VAR" id="r/ORZ)F8UgBp=(5T||xk">minuten</field> </block> </value> <value name="B"> <shadow type="math_number" id="`|1KMKzt%::Y;KgO`H9q"> <field name="NUM">60</field> </shadow> </value> </block> </value> <value name="B"> <shadow type="math_number" id="sn7e4%Q(Z1wyU{V{Gx]["> <field name="NUM">1</field> </shadow> <block type="variables_get" id="k|D.jvgJzWB4G@ij#m]j"> <field name="VAR" id="$z!6v$(Uq,|pxb8C43Ox">sekunden</field> </block> </value> </block> </value> <next> <block type="debug" id="B40ij{vB6~t31m!1Jz`%"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="{-C*9T:q4#iPMAR/YB}y"> <field name="VAR" id="tC|E*X0/D+]X}o#6L*:O">ventil2_zeit</field> </block> </value> <next> <block type="variables_set" id="N4fR6V%e5VC$V[-[8_xf"> <field name="VAR" id="tC|E*X0/D+]X}o#6L*:O">ventil2_zeit</field> <value name="VALUE"> <block type="text_join" id="5|x%8gS?19[o.pcRB~zD"> <mutation items="1"></mutation> <value name="ADD0"> <block type="variables_get" id="N?LRX,pZN[@@*ENaqz?n"> <field name="VAR" id="tC|E*X0/D+]X}o#6L*:O">ventil2_zeit</field> </block> </value> </block> </value> <next> <block type="debug" id="h:YYHK7wa#6)$7{3V~FB"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="%%G31K.MZdU+]bh)4yB^"> <field name="VAR" id="tC|E*X0/D+]X}o#6L*:O">ventil2_zeit</field> </block> </value> <next> <block type="control" id="[erh!7o]m+pM2]i+l).U"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">smartgarden.0.LOCATION_19bcd7f5-2D3b37-2D4d2a-2D86ff-2De71cdd35ac42.DEVICE_2cd797c9-2Da14d-2D4279-2D8b2e-2Da95d510f32dd.SERVICE_VALVE_2cd797c9-2Da14d-2D4279-2D8b2e-2Da95d510f32dd-3A2.duration_value</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="]@H#1%Q=[=4p{^+sV[f("> <field name="VAR" id="tC|E*X0/D+]X}o#6L*:O">ventil2_zeit</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> <statement name="ELSE"> <block type="control" id="WaPHg.r11US,lf=xMU(("> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">smartgarden.0.LOCATION_19bcd7f5-2D3b37-2D4d2a-2D86ff-2De71cdd35ac42.DEVICE_2cd797c9-2Da14d-2D4279-2D8b2e-2Da95d510f32dd.SERVICE_VALVE_2cd797c9-2Da14d-2D4279-2D8b2e-2Da95d510f32dd-3A2.duration_value</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="_rXQ?ZHJc}I]bx$b8xk,"> <field name="TEXT">STOP_UNTIL_NEXT_TASK</field> </block> </value> </block> </statement> </block> </statement> </block>
Logeinträge nach Start
2023-08-11 15:50:00.257 - info: sprinklecontrol.0 (3133018) State value to set for "smartgarden.0.LOCATION_19bcd7f5-2D3b37-2D4d2a-2D86ff-2De71cdd35ac42.DEVICE_2cd797c9-2Da14d-2D4279-2D8b2e-2Da95d510f32dd.SERVICE_VALVE_2cd797c9-2Da14d-2D4279-2D8b2e-2Da95d510f32dd-3A2.duration_value" has to be type "string" but received type "boolean" 2023-08-11 15:50:00.259 - debug: sprinklecontrol.0 (3133018) state sprinklecontrol.0.control.parallelOfMax changed: 1 : 2 (ack = true) 2023-08-11 15:50:00.259 - debug: sprinklecontrol.0 (3133018) state sprinklecontrol.0.control.restFlow changed: 1700 (2000 Grundwasser) (ack = true) 2023-08-11 15:50:00.260 - info: sprinklecontrol.0 (3133018) Set Valve (calculation) ID: Terrasse, value: true, duration: 00:00 2023-08-11 15:50:00.503 - error: smartgarden.0 (1888) Error: request returned 400 Bad Request 2023-08-11 15:50:01.259 - info: sprinklecontrol.0 (3133018) State value to set for "smartgarden.0.LOCATION_19bcd7f5-2D3b37-2D4d2a-2D86ff-2De71cdd35ac42.DEVICE_2cd797c9-2Da14d-2D4279-2D8b2e-2Da95d510f32dd.SERVICE_VALVE_2cd797c9-2Da14d-2D4279-2D8b2e-2Da95d510f32dd-3A2.duration_value" has to be type "string" but received type "boolean" 2023-08-11 15:50:01.261 - debug: sprinklecontrol.0 (3133018) state sprinklecontrol.0.sprinkle.Terrasse.runningTime changed: 0 (ack = true) 2023-08-11 15:50:01.262 - debug: sprinklecontrol.0 (3133018) state sprinklecontrol.0.control.parallelOfMax changed: 0 : 2 (ack = true) 2023-08-11 15:50:01.263 - debug: sprinklecontrol.0 (3133018) state sprinklecontrol.0.control.restFlow changed: 2000 (2000 Grundwasser) (ack = true) 2023-08-11 15:50:01.263 - info: sprinklecontrol.0 (3133018) Set (calculation) ID: Terrasse, value: false 2023-08-11 15:50:01.459 - error: smartgarden.0 (1888) Error: request returned 400 Bad Request
Kann mir hier vielleicht jemand helfen? Danke
-
@babl
Kannst du mir deine Konfiguration zeigen!
Es ist eigenartig das deine Bewässerungszeit mit 0 s (duration: 00:00) angegeben ist.
MfG Dirk Peter -
@dirk-peter hi und guten morgen, das glaube ich ist nicht das problem, ich habe das unter objekte dann händisch beendet, darum duration 0sekunden, mein problem liegt eher mit dem smartgarden zusammen und dem bad request, im sprinkle control müsste ich halt die intervall bewässerungsdauer auf 0 setzen da es sonst nur probleme mit dem break und smartgarden gibt, aber mir wäre schon geholfen wenn ich ohne den bad request mal ein ventil vom smartgarden starten könnte, ich würde gerne den sprinkle control weiterverwenden, da das mit der verdunstung genial ist und ich nicht weitere sensoren erstmal kaufen müßte.
-
Alles Gut, ich habe den Fehler selber gefunden, da ich in Sprinkle Control die Datenpunkte des Smartgardenadapters angegeben habe wollte natürlich der Sprinklecontrol immer ein true oder false schreiben was ja nicht geht, habe mir einen eigenen Datenpunkt als Boolean angelegt und lasse nun diesen schalten, und für jedes der 6 Ventile ein Blockly daß dann den smartgarden Befehl unterstützt, dann funktioniert es ohne Fehler.
-
@dirk-peter, das einzige was mir aufgefallen ist und wo ich eine Warnung bekomme ist das zu schnelle Schalten der Ventile über Smartgarden. Könntest du vielleicht die Schaltzeit der Ventile höher setzen so ca. 10 - 20 sekunden, (also 10000ms - 20000ms) wer weniger benötigt kann ja weniger einstellen. Ansonsten läuft dein Adapter toll, danke dafür.
-
-
@dirk-peter ja, das weiß ich, aber die 1000ms sind zu wenig, darum habe ich ja oben geschrieben ob man nicht die Zeit verlängern könnte, wenn nicht auch kein problem dann mach ich es über blockly.
Kann man vielleicht auch noch einen Punkt hinzufügen, der die gesamte Laufzeit der einzelnen Ventile und die Durchflussmenge abbilden kann, so hat man ja nur die letzte Woche und diese Woche wie ich gesehen habe.
-
@dirk-peter sagte in Test Adapter Sprinkle Control 0.2.x mit neuen Funktionen:
@createch2 Hallo,
der Regen wird über den Regensensor ermittelt. Du kannst es am Diagramm erkennen, wo am Tag die Kurve nach unten springt.
Es scheint das du entweder keinen Regensensor angegeben hast, oder du nur die aktuellen Regenwerte übermittelst. Du brauchst aber hier einen Zähler [Jahresregenmenge], wie bei HomeMatic üblich.
MfG Dirk PeterIch hab tatsächlich keinen Regensensor.
Kann ich nicht den Wert auch von das wetter beziehen? -
@createch2 sagte in Test Adapter Sprinkle Control 0.2.x mit neuen Funktionen:
Kann ich nicht den Wert auch von das wetter beziehen?
gelöscht
-
@dirk-peter
So wie es aussieht wird bei mir die Bodenfeuchte nicht korrekt berechnet. Auch nicht wenn ich einen eigenen Niederschlagszähler angebe.
Die Bodenfeuchte nimmt kontinuierlich ab, sollte aber nach dieser derzeitigen Beregnung 120% sein.
Mein Niederschlagszähler ist so gestrickt daß er einmal täglich (23:30 Uhr) um den Tagesniederschlag erhöht wird.Hat noch jemand eine Idee was ich falsch mache?
-
@createch2 Da kann ich leider nichts zu sagen! Ich kenne dein Skript nicht, nicht die Werte die übergeben wurden und auch nicht mögliche Logeinträge von sprinklecontrol. Ich kann dir nur sagen, das der Niederschlagszähler seit Jahren funktioniert und zwar mit HomeMatic wo ich es auch testen kann.
Also sei mir nicht böse, wenn ich hierzu keine Antwort habe.
MfG Dirk Peter -
Danke dir. Es hat sich mittlerweile auch erledigt. Nach ein zwei Tagen Nichtbeachtung funktioniert es plötzlich. Ich vermute daß erst die Berechnung von "evaporation today" richtig abgeschlossen sein muss damit das Ergebnis stimmt. Ein Zwischenzeitliches verstellen des Niederschlagswertes reicht nicht bzw triggert keine neuberechnung.
-
@createch2 Hallo,
Bei einer Änderung über 20 mm wird der Wert nur intern gespeichert,
es findet aber keine Anwendung statt! Das gleiche passiert wenn der Wert kleiner wird. Es erfolgt aber eine Debug-ausgabe
Ansonsten wird der Regen sofort in actualSoilMoisture und in ETpToday wiedergegeben. -
@dirk-peter Hallo,
Ist es möglich das die states umgedreht werden da ich die Ventile direkt mit den GPIO ansteuern will.... und hier habe ich true für AUS und false für EIN.......
-
@woduwolle Hallo, dies ist leider nicht möglich, aber für solche Fälle gibt es ja den Alias-Manager.
MfG Dirk Peter