NEWS
Distanz Sensor kalibrierung
-
Hey Leute, ich würde gerne einen Distanz Sensor per Blockly kalibrieren und ein Magnetventil steuern, wenn der wert über eine bestimmte höhe steigt.
Damit ich mit dem Sensor den Wasserstand in meinem Aquarium regulieren kann.
Ich hatte mir das so vorgestellt.
Ich habe drei Datenpunkte erstellt nach zahl und value
Wasserstand_soll ist 0 eingetragen
Wasserstand_ist wird aus dem sonoff distanz sensor wert genommen
Wasserstand_kalibriert soll dann alles was über 0 ist als cm angezeigt werden mit einer komma stelle und wenn es ins minus geht soll der wert auch angezeigt werden.
des weiteren soll das Magnetventil so sein das zb pro einschaltung nie mehr als 300 ml gepumpt werden darf. den wert für 300 ml in ms muss ich noch ermitteln, wenn das neue Magentventil da ist.
In Wasserstand_ist soll der Wert von dem Distanz Sensor aus dem Tasmota ESP8266 eingetragen werden dann soll Wasserstand_soll 0 sein
Dann der Wasserstand_kalibriert soll dann aus zb momentan hat der Sensor bis zur Wasseroberfläche 25,2 cm Wenn der Wert nun sagen wir auf 26,5 cm ansteigt, soll ein Magnetventil eingeschaltet werden und bei 25 bzw 0 cm abgeschaltet werden.
Sprich das Blockly soll den wert 25,2 cm als 0 cm annehmen.
wenn der Wert nun kalibriert 0 = Wasserstand OK zeigt, soll nichts passieren wenn zb der Wert um 3mm ansteigt, soll in Wasserstand_ist auch nur 0,3 cm angezeigt werden.
Doch wie man das per Blockly realisiert weiss ich nicht.
Vielleicht kann mir einer hier helfen.Das habe ich bis jetzt, doch ob das so korekt ist weiss ich nicht
var Wasserstand_ist, Wasserstand_kalibriert; Wasserstand_ist = parseFloat(getState('sonoff.0.Aqua_TEST_ESP.SENSOR.SR04.Distance').val); console.info((['Sensor Wert ist ',getState('sonoff.0.Aqua_TEST_ESP.SENSOR.SR04.Distance').val,' cm'].join(''))); Wasserstand_kalibriert = getState('sonoff.0.Aqua_TEST_ESP.SENSOR.SR04.Distance').val - 25.2; console.info((['Wasserstand kalibriert ',Math.round(getState('0_userdata.0.Aqua_Float.Wasserstand_kallibriert').val),' cm'].join(''))); schedule("*/5 * * * * *", async () => { setState('0_userdata.0.Aqua_Float.Wasserstand_kallibriert' /* Wasserstand_kallibriert */, Wasserstand_kalibriert, true); setState('0_userdata.0.Aqua_Float.Wasserstand_kallibriert' /* Wasserstand_kallibriert */, getState('0_userdata.0.Aqua_Float.Wasserstand_kallibriert').val, true); setState('0_userdata.0.Aqua_Float.Wasserstand_ist' /* Wasserstand_ist */, getState('sonoff.0.Aqua_TEST_ESP.SENSOR.SR04.Distance').val, true); setState('0_userdata.0.Aqua_Float.Wasserstand_kallibriert' /* Wasserstand_kallibriert */, Wasserstand_kalibriert, true); }); on({ id: [].concat(['0_userdata.0.Aqua_Float.Wasserstand_kallibriert']), change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Aqua_Float.Wasserstand_kallibriert').val <= parseFloat((-0.5))) { setState('0_userdata.0.Aqua_Float.Test_Gerät' /* Test Gerät */, true); } else if (getState('0_userdata.0.Aqua_Float.Wasserstand_kallibriert').val == parseFloat(0)) { setState('0_userdata.0.Aqua_Float.Test_Gerät' /* Test Gerät */, false); } });
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="Cyol{5:X7}HdPh4;T{?3">Wasserstand_ist</variable> <variable id="SUBAE.)jx_q/WpOLe[w-">Wasserstand kalibriert</variable> </variables> <block type="variables_set" id="D=pcC3YW!%2@aa8-@uz^" x="-1687" y="-1287"> <field name="VAR" id="Cyol{5:X7}HdPh4;T{?3">Wasserstand_ist</field> <value name="VALUE"> <block type="convert_tonumber" id="8TgRf/;4}0COa:0JVzU1"> <value name="VALUE"> <block type="get_value" id="(M3pR,W[q8@mLZK}N2Zw"> <field name="ATTR">val</field> <field name="OID">sonoff.0.Aqua_TEST_ESP.SENSOR.SR04.Distance</field> </block> </value> </block> </value> <next> <block type="debug" id="!iZ}H~;tYo)lKMO@P0:v"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="bfD6#6F5~@THlk)6hv2t"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="x]OysvfoiuAq07,c%Q3}"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="oDo}h[!,Vb^zNhdLda{J"> <field name="TEXT">Sensor Wert ist </field> </block> </value> <value name="ADD1"> <block type="get_value" id="@V!bf#Xz_jT|+3(~lw1^"> <field name="ATTR">val</field> <field name="OID">sonoff.0.Aqua_TEST_ESP.SENSOR.SR04.Distance</field> </block> </value> <value name="ADD2"> <block type="text" id="3aX/AQ(^.A!NK{.E[x|m"> <field name="TEXT"> cm</field> </block> </value> </block> </value> <next> <block type="variables_set" id="}@R?uwDvCiGGS=zhWZa4"> <field name="VAR" id="SUBAE.)jx_q/WpOLe[w-">Wasserstand kalibriert</field> <value name="VALUE"> <block type="math_arithmetic" id="VzZ$fGB$ImObsK2]tg5-"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="{uLHjU`0,#rX*t8}%Dc."> <field name="NUM">1</field> </shadow> <block type="get_value" id="-f@}Yjexve;t}WGh]hz2"> <field name="ATTR">val</field> <field name="OID">sonoff.0.Aqua_TEST_ESP.SENSOR.SR04.Distance</field> </block> </value> <value name="B"> <shadow type="math_number" id="hFYFYQUobi^W4HHQ0UbW"> <field name="NUM">25.2</field> </shadow> </value> </block> </value> <next> <block type="debug" id="H1xc=5@ZxC]LOpG7@S3,"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="bfD6#6F5~@THlk)6hv2t"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="O%Dm:S]F$*,Ktj(/YVTu"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="KDsV2[a7^X!n9mY5r49s"> <field name="TEXT">Wasserstand kalibriert </field> </block> </value> <value name="ADD1"> <block type="math_round" id="m12laWkiCo/d[7EEvJ#H"> <field name="OP">ROUND</field> <value name="NUM"> <shadow type="math_number" id="#lkGGE`c8B6q(I7(Pt3,"> <field name="NUM">3.1</field> </shadow> <block type="get_value" id="4J9%t*Uj.-$RaG`+cv*Q"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Aqua_Float.Wasserstand_kallibriert</field> </block> </value> </block> </value> <value name="ADD2"> <block type="text" id="j.@Q.L1+[}Co*4i,_%#A"> <field name="TEXT"> cm</field> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> <block type="schedule" id="#Chaxh~z^rRQZ3L|/,L[" x="-787" y="-1187"> <field name="SCHEDULE">*/5 * * * * *</field> <statement name="STATEMENT"> <block type="update" id="pdgFl43(9GQnO.AW*Mwr"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Aqua_Float.Wasserstand_kallibriert</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="?.:3!S([ue8jN^#^Jqh|"> <field name="VAR" id="SUBAE.)jx_q/WpOLe[w-">Wasserstand kalibriert</field> </block> </value> <next> <block type="update" id="!z9ez%uto5N}u18LQ-lb"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Aqua_Float.Wasserstand_kallibriert</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="get_value" id="!G]txIwQw]^^t^#`0k`)"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Aqua_Float.Wasserstand_kallibriert</field> </block> </value> <next> <block type="update" id="c{OxB_5Ij4q]5W}R+^Yo"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Aqua_Float.Wasserstand_ist</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="get_value" id="DAU)QXF/hB(/(D7mW+X*"> <field name="ATTR">val</field> <field name="OID">sonoff.0.Aqua_TEST_ESP.SENSOR.SR04.Distance</field> </block> </value> <next> <block type="update" id="^@cqVFtrS!~lc:+@AJ+?"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Aqua_Float.Wasserstand_kallibriert</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="Fsb^y+cNo.s=tU4Uwjk;"> <field name="VAR" id="SUBAE.)jx_q/WpOLe[w-">Wasserstand kalibriert</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> <next> <block type="on_ext" id="6;vSpIUPT34FHb|D_U`s"> <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="H2SZM/sP%Ft-~)Z5P0[S"> <field name="oid">0_userdata.0.Aqua_Float.Wasserstand_kallibriert</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="(]A@$b5^OOk0)#N0/6tk"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_compare" id="AH=3cX1iS7S~9:,D!858"> <field name="OP">LTE</field> <value name="A"> <block type="get_value" id="*s5.h!x=yfhRu,D:3B%l"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Aqua_Float.Wasserstand_kallibriert</field> </block> </value> <value name="B"> <block type="convert_tonumber" id="N7Thyg4L;O*8N?rDVI`E"> <value name="VALUE"> <block type="math_number" id="AhQT5a}A-]S)ub8)b+N0"> <field name="NUM">-0.5</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="=,9MfU1^-z7?(VpR?Bwm"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Aqua_Float.Test_Gerät</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="AOs2d*XWWt)zkj6q02cJ"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> <value name="IF1"> <block type="logic_compare" id="[?hcTgw,LpTbh.6OV#(_"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="Yyd%Q)JWAT9(Uyw(D2md"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Aqua_Float.Wasserstand_kallibriert</field> </block> </value> <value name="B"> <block type="convert_tonumber" id="Ay=}D)MW2xL4s#8TP){7"> <value name="VALUE"> <block type="math_number" id="uf?@AM%$J@K5dfJW+oC7"> <field name="NUM">0</field> </block> </value> </block> </value> </block> </value> <statement name="DO1"> <block type="control" id="-fYm/~tu$A~7|PPDDaa{"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Aqua_Float.Test_Gerät</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="KS;1KZM)PED,k8^Wda*U"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> </block> </statement> </block> </next> </block> </xml>
wenn der Wert kalibriert über 0,5 cm ist wird das Test Gerät auf true gesetzt und wenn der wert 0 ist wird das test Gerät auf false gesetzt.
Wie ich jetzt Wasserstand soll einbinden kann weiß ich nicht genau.
sprich wenn ich den wasserstand 1 cm absenken will und 1 cm in den Datenpunkt eintrage soll das magnetventil in dem momentanen fall von 25,2 cm = 0 cm auf 26,2 cm dann erhöht werden