NEWS
EZOGateway; Watermonitoring
-
Hallo,
vorab, ich bin ein absoluter Noob und baue eigentlich nur nach Tutorials die Sachen.
Jetzt komme ich an einen Punkt, bei dem noch keiner dies im Internet verewigt hat.
Für die Poolsteuerung würde ich gerne alle Werte auslesen, diese wären unter anderem:- Redox Wert
- PH Wert
- Wasser Temperatur
- Solar Temperatur (Eingang, Ausgang)
Es gibt das EZOGateway, welches alle Funktionen umsetzen kann (Bei den Temperatursensoren muss ich noch schauen wie man mehr als einen angebunden bekommt, aber soll wohl gehen)). Jetzt kommt das Problem oder eher der Wunsch:
Die ganze Geschichte ist draußen weiter entfernt. Somit kann es nur über WIFI laufen.Ich habe mich natürlich auch etwas belesen, bekomme aber keinen Zusammenhang der einzelnen Elemente oder eher bin ich mir unsicher und da bräuchte ich etwas Unterstützung.
Das EZOGateway hat eine integrierte REST-API. Da es noch keinen Adapter für EZO gibt, bleibt nur über Umwege zum Ziel zu kommen.
Da es ein IOT Board ist, könnte man das über den SIMPLE-API Adapter einbinden, ist der Gedankengang richtig?Links:
-
@JohnnyBahama said in EZOGateway; Watermonitoring:
EZOGateway
hallo
sag, weißt du bekommt man die hardware irgendwo her? -
@JohnnyBahama sagte:
über den SIMPLE-API Adapter einbinden, ist der Gedankengang richtig?
Die Simple-API des ioBrokers erlaubt den Zugriff auf ioBroker-Datenpunkte über das Netzwerk von außen. Auf die Daten des EZOGateways sollte man per request() (Javascript-Adapter) zugreifen können.
const url = 'http://<IP address>/api/fetch'; // IP-Adresse eintragen ! const idTemp = '0_userdata.0.EZO.Temperatur'; const idPH = '0_userdata.0.EZO.PH-Wert'; const idRedox = '0_userdata.0.EZO.Redox-Potential'; schedule('* * * * *', function() { // jede Minute request(url, function(error, response, result) { let obj = JSON.parse(result); setState(idTemp, obj['1'].Value, true); setState(idPH, obj['2'].Value, true); setState(idRedox, obj['3'].Value, true); }); });
-
Die von @paul53 aufgezeigte Lösung funktioniert hervorragend. Nicht an den Messwerten stören lassen, hab am Testgerät keine Elektroden angeschlossen:
Zu beachten ist nur, dass im EzoGateway der Cyclic Updater aktiviert wird, andernfalls würden die Messwerte nur per Trigger aktualisiert werden:
Grüße Elias
-
Was genau brauchst du denn? Für die einzelnen Komponenten auf Basis des Whiteboxes Tentacle T3 sind im Wiki Bezugsquellen genannt: https://github.com/100prznt/EzoGateway/wiki/Stückliste
Die Hardwarelösung (Platine) ist so leider noch nicht verfügbar.
Grüße Elias
-
@100prznt danke für den input, aber wie komm ich dann zu den ganzen hardware-sachen? gibts die zu kaufen?
-
@homecineplexx sagte in EZOGateway; Watermonitoring:
[...] wie komm ich dann zu den ganzen hardware-sachen? gibts die zu kaufen?
Ja, für den Aufbau mit dem Whitebox Carrieer "Tentacle T3", wie hier auf dem Foto:
Die EZO Module (pH, ORP, RTD) und auch das Tentacle T3 (die fertig aufgebaute Trägerplatine) kannst du direkt bei Whitbox Labs bestellen: https://www.whiteboxes.ch/shop/ oder bei EXP-Tech, siehe Stückliste.
Grüße Elias
-
Danke Elias dass du hier auch nochmal aktiv bist. Ich hatte im Poolforum auch schon mal nachgefragt und genau die Elemente wären es, die ich mir auch zulegen würde.
Da es zu funktionieren scheint, werde ich mir das mal zulegen.Alternativ ohne IObroker wäre das Ph-803 Messgerät, welches Steckdosen schaltet für die Befüllung. Wäre dann nur ein Regelkreis ohne smart.
-
@paul53 Danke fürs feedback
-
@paul53 sagte in EZOGateway; Watermonitoring:
@JohnnyBahama sagte:
über den SIMPLE-API Adapter einbinden, ist der Gedankengang richtig?
Die Simple-API des ioBrokers erlaubt den Zugriff auf ioBroker-Datenpunkte über das Netzwerk von außen. Auf die Daten des EZOGateways sollte man per request() (Javascript-Adapter) zugreifen können.
const url = 'http://<IP address>/api/fetch'; // IP-Adresse eintragen ! const idTemp = '0_userdata.0.EZO.Temperatur'; const idPH = '0_userdata.0.EZO.PH-Wert'; const idRedox = '0_userdata.0.EZO.Redox-Potential'; schedule('* * * * *', function() { // jede Minute request(url, function(error, response, result) { let obj = JSON.parse(result); setState(idTemp, obj['1'].Value, true); setState(idPH, obj['2'].Value, true); setState(idRedox, obj['3'].Value, true); }); });
Ich versuche das gerade einzubinden, aber irgendwie klappt das nicht so. Mit IP Adresse ist sicherlich die vom EZO gemeint. Nur egal ob mit oder ohne port, ich komme zu keiner Verbindung.
Mit Port kommt folgende Meldung: Request error: Error: connect EHOSTUNREACH
Ohne Port fügt er selbstständig den Port 80 hinzu, was dann zur gleichen Meldung führt.
Zusätzlich wirft er noch das aus: Error in request callback: SyntaxError: Unexpected token u in JSON at position 0
Muss ich in zeile 6 noch etwas eintragen? Was muss gemacht werden für std intervall?
Die Objekte werden auch nicht angelegt, denke mal das passiert erst,sobald der erste Wert kommt oder?Momentan sind noch keine Sensoren angeschlossen, um Fehler zu vermeiden.
-
@JohnnyBahama sagte:
Unexpected token u in JSON at position 0
Weil nichts in result geliefert wird. Mach eine zusätzliche Abfrage:
request(url, function(error, response, result) { if(!error && result) { let obj = JSON.parse(result); setState(idTemp, obj['1'].Value, true); setState(idPH, obj['2'].Value, true); setState(idRedox, obj['3'].Value, true); } });
@JohnnyBahama sagte in EZOGateway; Watermonitoring:
Die Objekte werden auch nicht angelegt, denke mal das passiert erst,sobald der erste Wert kommt oder?
Die Datenpunkte müssen manuell im Tab "Objekte" angelegt werden.
-
@paul53
Ist das so richtig?
Objekte sind jetzt unter 0_userdata.0 angelegt.
Das Skript von dir mit in das erste kopieren oder in ein eigenes?
Bin nicht so bewandert in der Prgrammiersprache. Habe es momentan zusammen.const url = 'http://192.******.61:591/api/fetch'; // <-IP-Adresse vom EZO const idTemp = '0_userdata.0.EZO.Temperatur'; const idPH = '0_userdata.0.EZO.PH-Wert'; const idRedox = '0_userdata.0.EZO.Redox-Potential'; schedule('* * * * *', function() { // jede Minute request(url, function(error, response, result) { let obj = JSON.parse(result); setState(idTemp, obj['1'].Value, true); setState(idPH, obj['2'].Value, true); setState(idRedox, obj['3'].Value, true); }); }); request(url, function(error, response, result) { if(!error && result) { let obj = JSON.parse(result); setState(idTemp, obj['1'].Value, true); setState(idPH, obj['2'].Value, true); setState(idRedox, obj['3'].Value, true); } });
Neue Meldung: Error in request callback: TypeError: Cannot read property 'Value' of undefined
-
const url = 'http://192.******.61:591/api/fetch'; // <-IP-Adresse vom EZO const idTemp = '0_userdata.0.EZO.Temperatur'; const idPH = '0_userdata.0.EZO.PH-Wert'; const idRedox = '0_userdata.0.EZO.Redox-Potential'; schedule('* * * * *', function() { // jede Minute request(url, function(error, response, result) { if(!error && result) { let obj = JSON.parse(result); setState(idTemp, obj['1'].Value, true); setState(idPH, obj['2'].Value, true); setState(idRedox, obj['3'].Value, true); } }); });
-
@JohnnyBahama Läuft das EzoGateway ordnungsgemäß? Einfach mal die URL direkt im Browser aufrufen. Da sollten dir die Messwerte schon mal im JSON Format angezeigt werden, so zum Beispiel:
URL: http://<IP EzoGateway>:<Port EzoGateway>/api/fetch
{ "1": { "Name": "Temperature", "Timestamp": "2020-08-28T12:38:37.2146236+02:00", "Value": -1025.858, "Unit": "Celsius", "Symbol": "\u00b0C" }, "2": { "Name": "PH value", "Timestamp": "2020-08-28T12:38:37.2146236+02:00", "Value": 3.938, "Unit": "", "Symbol": "" }, "3": { "Name": "Redox potential", "Timestamp": "2020-08-28T12:38:37.2146236+02:00", "Value": -373.2, "Unit": "Millivolt", "Symbol": "mV" } }
Damit die Messwerte automatisch aktualisiert werden muss der Cyclic Updater in den Settings aktiviert werden. Oder man muss zyklisch den ACQ Befehl auslösen.
-
@100prznt Nein. Wenn ich die Url eingebe dann bekomme ich folgendes:
{ "reason": "No measurement data acquired." }
Wenn die Daten von dem Live View genommen werden, dann geht es nicht. Oberfläche ist da, es werden aber keine Werte angezeigt. Detaillierte Probleme mit dem EzoGateway habe ich dir im Pool Forum geschrieben.
Den Cycle Updater habe ich aktiviert. By the way, der Intervall ist in sek oder? -
@JohnnyBahama Es gab in der Tat ein Problem bei der Hardwareinitialisierung, welches genau dann aufgetreten ist, wenn nicht alle EZO Module bestückt waren, bzw. die Reihenfolge hier nicht gepasst hat. Diesen Fehler habe ich gerade behoben, installiere dazu bitte das Release 0.4.26-beta.
Der Intervall des Cyclic Updaters wird in Sekunden angegeben, korrekt.
Grüße Elias
-
@100prznt sagte in EZOGateway; Watermonitoring:
@JohnnyBahama Es gab in der Tat ein Problem bei der Hardwareinitialisierung, welches genau dann aufgetreten ist, wenn nicht alle EZO Module bestückt waren, bzw. die Reihenfolge hier nicht gepasst hat. Diesen Fehler habe ich gerade behoben, installiere dazu bitte das Release 0.4.26-beta.
Der Intervall des Cyclic Updaters wird in Sekunden angegeben, korrekt.
Grüße Elias
Ich nähere mich dem Ziel. Im EZOGateway funktioniert soweit alles mit dem Script von @paul53 kommen auch Werte an. Bei PH ist alles super, nur bei REDOX geht der Wert nicht höher als 100. Wie kann ich das ändern?
-
@JohnnyBahama sagte:
Wert nicht höher als 100. Wie kann ich das ändern?
common.max des Datenpunktes ?
-
@paul53 sagte in EZOGateway; Watermonitoring:
@JohnnyBahama sagte:
Wert nicht höher als 100. Wie kann ich das ändern?
common.max des Datenpunktes ?
Danke. Hab ich irgendwie übersehen den Punkt.
Somit funktioniert alles wie gewollt und ich kann es weiter verarbeiten.Danke auch an @100prznt für die letzte Woche mit all den "Problemen" die ich hatte und das du dir die Zeit genommen hast, dass so umzustricken, dass es unter anderen Umständen läuft.
-
Macht ihr mittlerweile etwas mit den ermittelten Daten z.B. Dosieranlage ansteuern. Gruß