NEWS
Test Adapter Sprinkle Control 0.1.4 Latest
-
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?
-
Hallo
Bin gerade Am Einstellen und Testen.
Da ist mir aufgefallen das zwischen Aktueller Bodenfeuchte (Zigbee Sensor) und in sprinkle-control die Werte nicht übereinstimmen.
werden die Werte nicht laufend aktualisiert?MFG
Matthias -
@flaterick
Hallo, unter Bodenfeuchtesensor hast du ja deinen Sensor eingetragen. Von diesem werden die Werte abonniert und bei jeder Änderung unter sprinklecontrol.0.sprinkle.*.actualSoilMoisture eingetragen. Ich kann dies zwar nicht mit einem Sensor testen, aber die Werte werden definitiv bei Wertänderung übernommen.
Meine Testkonfiguration:
analoger Sensor mit aktueller Version: sprinklecontrol 0.2.13
MfG Dirk Peter -
So hab etwas Getestet, und festgestellt das Zigbee etwas braucht um korrekte werte zu liefern. Da sich das Netzwerk mit der Zeit aufbaut.
Noch dazu kommt das bei deinen Werten der Korrektur Faktor schon mit einberechnet ist, was ich nicht bedacht habe.Danke für den Tollen Adapter
MFG Matthias -
@flaterick Danke für die Rückantwort und schön das er dir gefällt.
MfG Dirk Peter -
Guten Tag,
Ich habe mich jetzt auch endlich mal mit diesem Adapter beschäftigt und es sieht gar nicht so schlecht mit meiner Konfig aus.
Es sind soweit verfügbar alle Daten für die Berechnungen eingetragen und ich habe heute morgen auch schon meine erste Meldung erhalten.
Allerdings habe ich noch ein Problem.
Ich habe drei Kreise zur Bewässerung. in einem der Beete ist von GARDENA ein Sensor für Bodenfeuchte, und die Werte scheinen auch soweit korrekt zu sein.
Allerdings habe ich auch noch ein Gewächshaus, das bei Regen natürlich kein Wasser abbekommt. Allerdings habe ich nur noch einen Sensor für Temperatur und LUFTFEUCHTIGKEIT. Kann ich damit in irgendeiner Form die Bewässerung für das Zelt auslösen lassen?Mit freundlichen Grüßen
Marc -
@fenriswolf
Hallo,
in der Konfiguration unter Bewässerungskreis gibt es den Punkt Sensor im Gewächshaus. Mit diesem werden die Regenvorhersagewerte und der Niederschlagswert deaktiviert, wenn vorhanden.
Ansonsten kannst du ja die Bewässerung an festen Tagen auswählen, wenn du keine Wetterstation bzw. einen 2. Bodenfeuchtesensor besitzt.
MfG Dirk Peter -
Guten Tag, ich bin gerade dabei, den Adapter zu konfigurieren und erhalte bereits Benachrichtigungen über Telegram.
Insgesamt besteht mein System aus 8 Kreisen, wobei der Kreis 1 eine Tropfbewässerung ist, die momentan alle 2 Tage für zwei Minuten eingeschaltet wird. Der Adapter bietet mir jedoch nicht die Möglichkeit, die Ventile für weniger als 5 Minuten einzuschalten. Gibt es dafür einen Grund bzw. könnte man das anpassen?
-
@bastian-rüggen
Hallo Bastian,
gib einfach 2 für 2 Minuten in der Konfiguration des Adapters ein. Das Feld wird zwar rot, da alles unter 5 Minuten unüblich ist, aber es funktioniert.
MfG Dirk Peter -
@dirk-peter ah ok ich bin davon ausgegangen das das es nicht funktioniert!