NEWS
Water Flow Sensor
-
Ich habe ein Aquarium wo nun Leitungswasser dosiert werden soll.
Das Ganze läuft über einen ESP8266 mit Tasmota geflashed.
Daran ist ein Water Flow Meter angeschlossen der in der Schlauch leitung vor dem Magnetventil sitzt. das das Wasser dosieren soll & die durchfluss Menge auf ml kalibriert werden soll und dann als Milliliter gezählt werden soll.
Die Minus Leitung vom Magnetventil läuft über einen Schwimmer. Der im Aquarium sitzt.
Nun hat der Water Flow Meter einen gemessenen Wert von 197 bei 1000 ml gepumt.
diesen hatte ich dann kalibriert mit 5,1 mal gerechnet. dieser Wert wird intern umgerechnet.
Soll aber im Datenpunkt Wasser_Counter abgelegt werden und nach einem Gepumpten vorgang wieder resettet werden und der Counter2 in Tasmota soll per exec auf null gesetzt werden.
Das Magnetventil ist Aqua_Control Power1 Der Schwimmer in Aqua_Float ist Power.
Nun wird leider der Wert nicht in die nötigen Datenpunkte geschrieben und auch nicht angezeigt. Ich hatte von @paul53 schon mal so eine Spitzen Steuerung nur war diese ein Javascript. Nun hätte ich das ganze gerne als Blockly. Nun auch nicht mehr Osmose für ein Meerwasser Becken sondern Leitungswasser für ein Süßwasser becken.
Wo ist mein denkfehler!? bzw. Kann man das überhaupt so machen wie ich das blockly erstellt hatte..... Scheinbar nicht denn es läuft nicht.
bei betätigung des Schwimmers wird zwar das Magnetventil geschaltet das wars dann aber auch.var Sensorwert; Sensorwert = getState('sonoff.0.Aqua_Float.SENSOR.COUNTER.C2').val; on({ id: [].concat(['sonoff.0.Aqua_Float.POWER']), change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Aqua_Control.0.Wasser.Wasser_Counter' /* Wasser_Counter */, (Sensorwert * 5.1), true); console.info((String(Sensorwert * 5.1) + ' ml')); }); on({ id: [].concat(['sonoff.0.Aqua_Float.POWER']), change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('sonoff.0.Aqua_Float.POWER').val == true) { setState('sonoff.0.Aqua_Control.POWER1' /* Aqua_Control POWER1 */, true); } if (getState('sonoff.0.Aqua_Float.POWER').val == false) { setState('sonoff.0.Aqua_Control.POWER1' /* Aqua_Control POWER1 */, false); setState('0_userdata.0.Aqua_Control.0.Wasser.Wasserzähler_Tag' /* Wasserzähler_Tag */, (getState('0_userdata.0.Aqua_Control.0.Wasser.Wasserzähler_Tag').val + Sensorwert), true); setState('0_userdata.0.Aqua_Control.0.Wasser.Wasserzähler_Jahr' /* Wasserzähler_Jahr */, (getState('0_userdata.0.Aqua_Control.0.Wasser.Wasserzähler_Jahr').val + getState('0_userdata.0.Aqua_Control.0.Wasser.Wasserzähler_Tag').val), true); exec('192.168.0.71/cm?cmnd=counter2 0'); schedule('{"time":{"exactTime":true,"start":"00:00"},"period":{"years":1,"yearDate":1,"yearMonth":1}}', async () => { setState('0_userdata.0.Aqua_Control.0.Wasser.Wasserzähler_Jahr' /* Wasserzähler_Jahr */, 0, true); }); schedule('{"time":{"exactTime":true,"start":"00:00"},"period":{"days":1}}', async () => { setState('0_userdata.0.Aqua_Control.0.Wasser.Wasserzähler_Tag' /* Wasserzähler_Tag */, 0, true); }); } });
-
so wird das wasser gezählt aber ob das so korrekt ist weß ich nicht.
var Sensorwert; Sensorwert = getState('sonoff.0.Aqua_Float.SENSOR.COUNTER.C2').val; on({ id: [].concat(['sonoff.0.Aqua_Float.POWER']), change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('sonoff.0.Aqua_Float.POWER').val == true) { setState('sonoff.0.Aqua_Control.POWER1' /* Aqua_Control POWER1 */, true); setState('0_userdata.0.Aqua_Control.0.Wasser.Wasser_Counter' /* Wasser_Counter */, (Sensorwert * 5.1), true); console.info((String(Sensorwert * 5.1) + ' ml')); } if (getState('sonoff.0.Aqua_Float.POWER').val == false) { setState('sonoff.0.Aqua_Control.POWER1' /* Aqua_Control POWER1 */, false); setState('0_userdata.0.Aqua_Control.0.Wasser.Wasserzähler_Tag' /* Wasserzähler_Tag */, (getState('0_userdata.0.Aqua_Control.0.Wasser.Wasserzähler_Tag').val + Sensorwert), true); setState('0_userdata.0.Aqua_Control.0.Wasser.Wasserzähler_Jahr' /* Wasserzähler_Jahr */, (getState('0_userdata.0.Aqua_Control.0.Wasser.Wasserzähler_Jahr').val + getState('0_userdata.0.Aqua_Control.0.Wasser.Wasserzähler_Tag').val), true); exec('192.168.0.71/cm?cmnd=counter2 0'); } }); schedule('{"time":{"exactTime":true,"start":"00:00"},"period":{"years":1,"yearDate":1,"yearMonth":1}}', async () => { setState('0_userdata.0.Aqua_Control.0.Wasser.Wasserzähler_Jahr' /* Wasserzähler_Jahr */, 0, true); }); schedule('{"time":{"exactTime":true,"start":"00:00"},"period":{"days":1}}', async () => { setState('0_userdata.0.Aqua_Control.0.Wasser.Wasserzähler_Tag' /* Wasserzähler_Tag */, 0, true); });
-
12345678
-
@aphofis sagte: Kann man das überhaupt so machen wie ich das blockly erstellt hatte...
Nein, Trigger (Zeitpläne) innerhalb eines Triggers funktionieren nicht.
Funktioniert dieser Vorschlag nicht? -
@paul53
Ja das funktioniert. Problem war, das http get konnte nicht laufen.
das Tasmota gerät ist doch Benutzer und Passwort geschützt. Habe jetzt den Reset so aufgebaut und der funktioniert.http://192.168.0.96/cm?user=benutzer&password=Passwort&cmnd=counter1%200
Nur wird der Schwimmer sporadisch nicht getriggert. Trotz das er im ESP als true angezeigt wird.
Demnach wird ab und an kein Wasser gepumpt. Kann man das nicht irgendwie abfragen, das der Schwimmer auf true false überprüft wird keine Ahnnung alle 20 sek. oder was halt Sinn macht.
Wenn dann false ist halt mache nichts. Wenn dann aber innerhalb der Prüfung true festgestellt wird dann trigger auslösen. -
@aphofis sagte: Nur wird der Schwimmer sporadisch nicht getriggert. Trotz das er im ESP als true angezeigt wird.
Wenn der Wert im ESP nicht an ioBroker übertragen wird, nützt auch kein Polling des Datenpunktes. Ändert sich der Datenpunktwert, wird auch getriggert.
Du müsstest im ESP prüfen, ob der gesendete Wert von ioBroker bestätigt wird und falls nicht, das Senden wiederholen. Vom ESP / Tasmota und vom Sonoff-Adapter habe ich keine Ahnung.
-
@paul53 ja lag am telemetrie Daten intervall
hatte das Gerät neu aufgesetzt und vergessen telemetrie einzustellen weil der counter nicht mehr normal puslt
hatte da irgend einen mist mit rule per konsole gesendet seid dem pulst er nicht mehr werte wie 2207 was dann 1 liter entspricht sondern zählt pro pump vorgang 1+1 oder bestands wert +1 wie ich das zurücksetzen kann weiss ich nicht hab schon std lang das netz durchsucht.
Telemetrie hab ich auf 15 sek gesetzt also werden die werte alle 15 sek an den MQTT (Sonoff) gesendet aktualisiert.