NEWS
Test Adapter Sprinkle Control 0.1.4 Latest
-
@dirk-peter klasse Adapter.
Lese mich gerade ein und werde es auf meinen Garen umsetzen.
Ich habe keine Wetterstation, aber plane zumindest einen Bodefeuchtesensor zu verwenden.
Wenn ich das jetzt richtig verstehe, dann bräuchte ich aber für jeden Kreis einen Sensor, richtig?
Bei 7 Kreisen wäre das der sensorische Overkill ;-).
Wie siehst Du denn den Betrieb mit nur einem Sensor? Grundsätzlich würde ich davon ausgehen, dass die Bodenfeuchte bei entsprechend gleicher Dauer überall im Garten gleich sein sollte... Auf 2-3 Minuten kommt es mir nicht an...
Grüße,
Thomas -
@csp Hallo, zu deinen Fragen
Wenn ich das jetzt richtig verstehe, dann bräuchte ich aber für jeden Kreis einen Sensor, richtig?
Nein: Du kannst den einen Sensor ja auch bei allen Kreisen eingeben
Wie siehst Du denn den Betrieb mit nur einem Sensor?
Die beste Variante ist ein Sensor pro Kreis, da die Bedingungen im Garten nicht überall gleich sind.
Um die eine Ecke pfeift der Wind; die eine Pflanze ist sehr durstig; im anderen Bereich scheint immer die Sonne und im nächsten überhaupt nichtDu kannst übrigens auch mit der Bewässerung zu festen Zeiten beginnen und dann Stück für Stück auf Bodenfeuchtesensoren umschwenken, oder aber das ganze doch über eine Wetterstation betreiben. Wie dir gerade so ist.
MfG Dirk Peter -
@dirk-peter said in Test Adapter Sprinkle Control 0.1.4 Latest:
Nein: Du kannst den einen Sensor ja auch bei allen Kreisen eingeben
Hmmm, also lass mich das mal gedanklich durchspielen:
Der Sensor 1 misst in Sektor 1.
Sektor 1 wird gesprengt für die eingestellten 10min.
Sensor 1 meldet, noch keine 100%, sondern sagen wir 80.
Sektor wird weiterhin gesprengt, um 100% erreichen nach 15min.
Ab jetzt ist Sensor 1 = 100%.
Jetzt wird eigentlich Sektor 2 gesprengt.
ABER: Sensor 1 meldet ja schon 100%.
Was passiert jetzt?
Setzt Sektor 2 aus, weil der Sensor schon 100% meldet?
Wird Sektor 2 mit den eingestellten 10min gesprengt?
Oder wird Sektor 2 mit denselben 15min gesprengt, wie vormals Sektor 1? (Wäre ideal, kann mir aber nicht vorstellen, dass es so implementiert ist)Oder: Ich liege komplett falsch?
Thomas -
@csp Wenn du für alle Kreise den gleichen Schwellwert angibst, so werden alle Kreise zur gleichen Zeit aktiviert und bewässern dann nacheinander für die eingegebene Zeit.
Ich würde dann aber mit festen Zeiten bewässern und dann Stück für Stück auf Bodenfeuchtesensoren umrüsten.
Ich arbeite jedenfalls mit einer Wetterstation und 7 Kreisen die ich dieses Jahr auf 10 erweitern werde.
MfG Dirk Peter -
@dirk-peter : Ich hab's noch nicht wirklich verstanden.
Meinst Du mit "aktiviert" = "für diesen Zyklus eingeschaltet, egal was die Bodenfeuchte X sagt, wenn der Kreis Y an der Reihe ist"?Ich hatte die Vorstellung, dass der Bodenfeuchte Sensor auch die Länge der Bewässerung anpasst, nicht nur den Start.
Wenn es lediglich der Start ist, dann würde das tatsächlich funktionieren. -
@csp
Voraussetzung: Alle Bewässerungskreise haben den gleichen Einschaltpunkt (Bodenfeuchte)
Wenn jetzt z.B. die Bewässerung um 8:00 Uhr startet und zu diesem Zeitpunkt der Einschaltpunkt unterschritten ist, so werden diese Kreise zur Bewässerung aktiviert.
Da deine Pumpe aber nicht alle Kreise zur gleichen Zeit bedienen kann, werden die aktivierten Kreise auf Grundlage ihres Wasserverbrauchs der in der Konfiguration angegeben ist, nacheinander bzw. parallel eingeschaltet.Ich hatte die Vorstellung, dass der Bodenfeuchte Sensor auch die Länge der Bewässerung anpasst, nicht nur den Start.
Die Bewässerung wird bei analogen Bodenfeuchtesensoren verlängert. Je weiter der Einschaltpunkt zum Zeitpunkt des Einschaltens unterschritten wird, desto länger ist die Bewässerung.
MfG Dirk Peter -
@dirk-peter said in Test Adapter Sprinkle Control 0.1.4 Latest:
Die Bewässerung wird bei analogen Bodenfeuchtesensoren verlängert. Je weiter der Einschaltpunkt zum Zeitpunkt des Einschaltens unterschritten wird, desto länger ist die Bewässerung.
Das würde dann aber nur bei Kreis 1 funktionieren, richtig? Alle folgenden Kreise sind zu ihrem Startzeitpunkt dann ja bereits auf 100% Bodenfeuchte und würden dann nur die "Standardzeit" abspulen, richtig?
edit: Ich glaube ich habe es kapiert. Während der Bewässerung wird gar nicht weiter die Bodenfeuchte für eine etwaige Verlängerung herangezogen, sondern lediglich VOR einer Bewässerung.
Macht Sinn und würde sich dann auf alle Kreise auswirken... -
edit: Ich glaube ich habe es kapiert. Während der Bewässerung wird gar nicht weiter die Bodenfeuchte für eine etwaige Verlängerung herangezogen, sondern lediglich VOR einer Bewässerung.
Macht Sinn und würde sich dann auf alle Kreise auswirken...Ja genau zum Start der Bewässerung wird die Verlängerung berechnet und nicht zum Start der einzelnen Kreise.
MfG Dirk Peter -
Hallo, welchen DP soll ich nehmen für den Helligkeitssensors?
Hat das DasWetter oder WU?ERLEDIGT
-
Ganz toller Adapter! Bewährt sich total bei mir.
Habe überall einen festen Startzeitpunkt, Mittags, damit ich die Pumpe über Solarenergie speisen kann.Besteht noch die Möglichkeit, einen manuellen Trigger einzubauen?
Per Telegram (de)aktiviere ich die Automatik, das klappt hervorragend.
Manchmal will ich aber gesondert das Sprengerprogramm abspulen, aber nicht zum Startzeitpunkt, sondern wenn ich es triggere (bzw. mein Strommesser wenn es Solarüberschuss gibt...). -
@solear Hallo,
wenn du unter runningTime eine Zahl eingibst z.B. 10 so startet dein Bewässerungskreis für 10 min. Dies würde auch bei autoOn == false geschehen!
Es ist für die Zukunft geplant ein break für alle einzelnen Kreise und den gesamten Adapter einzubauen.
In deinem Fall würde das Bedeuten z.B. morgens um 8:00 startet der Adapter und legt die Bewässerungszeiten fest. Wenn dann deine Solaranlage genug Energie liefert, so schaltest du das break auf true und die Bewässerung würde starten.
Momentan fehlt mir aber die Zeit dies zu integrieren da ich erstmal genügend andere Baustellen erledigen mus.
MfG Dirk Peter -
@dirk-peter
Hi,
Ich beziehe die DP der Sensoren für Wind, Temp, Feuchtigkeit, etc aus eigens dafür angelegten Aliasse. Der type ist state, common type ist number und die role je nachden welcher wert. Die Werte werden von meiner Froggit übernommen und die unit ist auch passend gesetzt trotzdem erhalte ich "sensorwindspeed wrong value: null, type: object" und für die Temp, hum, etc das gleiche.
Wie muss denn ein DP aussehen um richtig erkannt zu werden? Könntest du ein Beispiel zur Verfügung stellen?
Danke -
Hallo und danke für den tollen Adapter.
Ließe sich die Pumpensteuerung mit einem Zeit offset (in richtung früher) versehen ?Ich habe folgendes Problem:
Meine Ventile sind nur erreichbar wenn zwei Jalousien im Haus geöffnet sind, ansonsten ist die HmIP Funkstrecke zu sehr abgeschirmt.
Meine Idee wäre jetzt die Pumpensteuerung dazu zu missbrauchen um sicherzustellen daß diese beiden Jalousien geöffnet sind.
Wäre es möglich einen Offset einzubauen ?PS:
habs jetzt erstmal mit einer Szene für die Jalousien arrangert die sowohl als Bewässerungskreis an erster Stelle angelegt (für den Zeitvorlauf) und zusätzlich die gleiche Szene als "Pumpe" definiert. Ich hoffe daß dann die Jalousien offen bleiben. -
@mike-hellracer
angegebener Datenpunkt unter "Sensor für Temperatur in °C": hm-rpc.1.001818A992BB08.1.ACTUAL_TEMPERATURE
MfG Dirk Peter -
@dirk-peter
Danke, das hat geholfen. Habe die Definition der DPs jetzt vervollständigt und schon waren die Meldungen weg -
habe jetzt erst gesehen, daß es einen neuen thread dazu hier im forum gibt,
heute ist mir aufgefallen, daß die running time sofort geschrieben wird, das ist blöd, so wirft gardena einen fehler und es starten nur 2 kreise, ist es nicht möglich, dies gardena freundlich zu machen? Das heißt max 2 Ventile bei denen die Zeit geändert werden darf und wenn hier die Zeit abgelaufen ist wieder 2 Ventile usw.
So funktioniert der Adapter leider nicht für mich, da ich 6 Kreise besitze und jedesmal smartgarden meckert, ich wüßte momentan auch nicht wie man das ganze verzögern könnte. Hat hier jemand einen Lösungsansatz?
-
So, nach nochmaligem nachsehen fande ich heraus, daß @dirk-peter das ja wunderbar gelöst hat, mit den verschiedenen states beim sprinkler state. Deshalb habe ich mir nun ein Blockly geschrieben, das das ganze umwandelt zum Gardena irrigation Control.
Blockly als Bild:
Als Code:
<block xmlns="https://developers.google.com/blockly/xml" type="on_ext" id="BisjXqcU.ezUl42vT#nF" x="88" y="-335"> <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="uy^cN7JTjAdiPxCwS1E]"> <field name="oid">sprinklecontrol.0.sprinkle.Balkon.sprinklerState</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="`O4@0c^c5a,j;#v0Sv5)"> <mutation elseif="2"></mutation> <value name="IF0"> <block type="logic_compare" id="ub(k6y+xeixNB/B{$50v"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="pw=oo1@s`qn!ylyPxQh*"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="V+%~fMn3EEGT(PLjKo_J"> <field name="NUM">2</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="o5${0Sa3cW65U9,ROofY"> <field name="VAR" id="jF|c=s]XBLV%X6ni9+z;">wert1</field> <value name="VALUE"> <block type="get_value" id="ATJN.=g^J}6#]uq$JwR;"> <field name="ATTR">val</field> <field name="OID">sprinklecontrol.0.sprinkle.Balkon.runningTime</field> </block> </value> <next> <block type="variables_set" id="#Wj(;vYf0Y=j/;Zw3He6"> <field name="VAR" id="6($94.I?*`5*kG5!(68d">minuten1</field> <value name="VALUE"> <block type="convert_tonumber" id="7opa@1;Vlg@UN`VML6Jm"> <value name="VALUE"> <block type="text_getSubstring" id="o7u_ctTn]]x}j5wNHwF4"> <mutation at1="true" at2="true"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">FROM_START</field> <value name="STRING"> <block type="variables_get" id="hgUloRdL47]b-mF~!l}5"> <field name="VAR" id="jF|c=s]XBLV%X6ni9+z;">wert1</field> </block> </value> <value name="AT1"> <block type="math_number" id="ly!X~5Ied2?K1[n:?^KB"> <field name="NUM">1</field> </block> </value> <value name="AT2"> <block type="math_number" id=")ZewR6E5EhsRY$swSpEG"> <field name="NUM">2</field> </block> </value> </block> </value> </block> </value> <next> <block type="variables_set" id="2_9@Bi,},~wQ9d#T_.k/"> <field name="VAR" id="jee7i18|WoYXQbzpQ6fC">sekunden1</field> <value name="VALUE"> <block type="convert_tonumber" id="!IR]#1j@VSJ;3b;Oaf)R"> <value name="VALUE"> <block type="text_getSubstring" id="U]~axS[@Dl#~q|7T]8%x"> <mutation at1="true" at2="true"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">FROM_START</field> <value name="STRING"> <block type="variables_get" id="lFyY6TLXXYyj#c@]tRi:"> <field name="VAR" id="jF|c=s]XBLV%X6ni9+z;">wert1</field> </block> </value> <value name="AT1"> <block type="math_number" id="fuA/1Gj{W$cvl[/)#W4$"> <field name="NUM">4</field> </block> </value> <value name="AT2"> <block type="math_number" id="=`nZ1t%XSf[q;gz%{{]v"> <field name="NUM">5</field> </block> </value> </block> </value> </block> </value> <next> <block type="variables_set" id="Vj^Lk;Up4=yCMU0ga@Ac"> <field name="VAR" id="~]Hm+BsU1@)YEAtzxMkc">ventil1_zeit</field> <value name="VALUE"> <block type="text_join" id="fSofV{TDi^+@r$lV-gJg"> <mutation items="1"></mutation> <value name="ADD0"> <block type="math_arithmetic" id="9eTXPR#qGP;Op+~5KM?D"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="uFY@)Ea1d^Pf?2hJ%YOn"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="D`yRSAw*l|hT$VbDfi?E"> <field name="VAR" id="6($94.I?*`5*kG5!(68d">minuten1</field> </block> </value> <value name="B"> <shadow type="math_number" id="X-7awoneuwDMBV$x*0*A"> <field name="NUM">60</field> </shadow> </value> </block> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="tadyZcS(!(1t59XcRGJn"> <field name="VAR" id="jee7i18|WoYXQbzpQ6fC">sekunden1</field> </block> </value> </block> </value> </block> </value> <next> <block type="control" id="a}t:3h?46BT81;]at?^m"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></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-3A1.duration_value</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">5</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">TRUE</field> <value name="VALUE"> <block type="text_join" id="p55Y0P!bOI4P}JW:Gq[*"> <mutation items="1"></mutation> <value name="ADD0"> <block type="variables_get" id="dnG:Pze_vdIyH4ym2T)9"> <field name="VAR" id="~]Hm+BsU1@)YEAtzxMkc">ventil1_zeit</field> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_compare" id="@aHUtvs|1Jn`(B*QE0tw"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="2~c.Z)^y#4Gg:Kg:.,DO"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="_[,,-rqUqSnnBmV#)y(C"> <field name="NUM">0</field> </block> </value> </block> </value> <statement name="DO1"> <block type="control" id="i6*6/eVw(pQo[,tOAW7l"> <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-3A1.duration_value</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="`i3yk%5gm4y$]h!cU)?p"> <field name="TEXT">STOP_UNTIL_NEXT_TASK</field> </block> </value> </block> </statement> <value name="IF2"> <block type="logic_compare" id="(T_Gj2NEJ|6ef*j!e5Ix"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="!=Nl@ETALBIu`$y~EN=J"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="@]cXov1oYs~Xy[iB)5C3"> <field name="NUM">3</field> </block> </value> </block> </value> <statement name="DO2"> <block type="control" id="5L2C#Fqw!-ooaft~@CL{"> <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-3A1.duration_value</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="QHUQk]tSO1s?`Jb?pX/7"> <field name="TEXT">STOP_UNTIL_NEXT_TASK</field> </block> </value> </block> </statement> </block> </statement> </block>
Natürlich muss dann für jedes Ventil extra ein Block geschrieben werden, ich denke mal wenn die Profis hier rüberschauen dass sie extreme Verbesserungen finden um das Blockly kleiner und vielleicht für alle Ventile machen können, aber Hauptsache es läuft jetzt.
Abgebildet wird,
State 0= Off Sprinkler aus
State 1= wait Sprinkler wartet auf das Einschalten (wegen Pumpenleistung) Wieviel Ventile gleichzeitig bedient werden dürfen (bei Gardena sind es max 2)
State 3= Break Bewässerungsintervall es wird dann einfach auf OFF gestellt und wenn die Beregnerzeit wieder aktiviert wird wird wieder eingeschaltet es steht dann allerdings die Original Zeit drin aber das wird ja aqm ende des Zykluses mit OFF beendet.Ich hoffe ich habe einigen Gardena Besitzern damit helfen können.
-
ich bekomme folg. Fehler im log angezeigt:
woran kann das liegen?sprinklecontrol.0 2023-08-24 00:00:13.802 error console.log.info is not a function sprinklecontrol.0 2023-08-24 00:00:13.801 error TypeError: console.log.info is not a function at AdapterClass.<anonymous> (/opt/iobroker/node_modules/iobroker.sprinklecontrol/main.js:339:37) at AdapterClass.emit (node:events:513:28) at Immediate.<anonymous> (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/build/lib/adapter/adapter.js:8466:53) at process.processImmediate (node:internal/timers:476:21) sprinklecontrol.0 2023-08-24 00:00:13.797 error uncaught exception: console.log.info is not a function
-
@gyle
sieht auf den ersten Blick nach einem Programmfehler aus.
js kenntconsole.log
und ioBroker stellt u.a.adapter.log.info
zur Verfügung.Natürlich kann hier was spezielle implementiert sein - hab den code nicht analysiert.
Mach ein Issue im adapter Repo auf -
kann das eventuell sein, daß der durchfluss und die zeit bei manuellem betrieb (5 min einschalten über die Vis von Sigi) nicht berechnet wird?