NEWS
AquaGuard
-
Hallo,
ich wollte Euch mal mein Projekt "AquaGuard" vorstellen, welches ich gerne zum ioBroker transferieren möchte. Derzeit läuft es über blynkk + Webserver.
Hintergrund (aktueller Stand):
Ich habe einen Arduino im Einsatz, welcher per I2C mehrere DS18B20 ausliest und das Licht der Aquarien steuert. Die Messwerte werden an blynkk und den Webserver gesendet. Blynkk nutze ich zur Remotekontrolle per Smartphone (Terminal). Dabei habe ich einige Spielereien implementiert
- rgb Gewittersimulation (rgb1 -> Gewitter an; rgb0 -> Gewitter aus)
alarm Zurücksetzen des Alarmstatus sundown Anzeige Zeitpunkt des Sonnenuntergangs sunup Anzeige Zeitpunkt des Sonnenaufgangs dht Anzeige der Luftfeuchte und Temperatur over LED-Overtime (Wie viel Stunden mehr soll das Aquarium nach Sonnenuntergang zusätzlich leuchten? over2 -> Overtime auf 2 Stunden zusätzlich stellen now Anzeige aktuelle Zeit date Anzeige aktuelles Datum status Sendet eine Statusmail send Sendet alle Temperaturwerte ans Webserver
Blynkk
!
WebServer
!
Ziel:
Eliminierung Webserver + blynkk und Anzeige/Eingabe aller möglichen Daten in VIS von ioBroker.
Umsetzung:
Das Senden der Daten per Arduino an ioBroker per simpleApi habe ich in folgender Form realisiert. Hier der Auszug zum Senden der Daten an ioBroker vom Arduino:
!
// send Data an ioBroker void Send_Data_ioBroker(String data) { // Aufruf ioBroker-Server Serial.println("Daten an ioBroker senden - Verbindung zum Server..."); if (clientTCP.connect(ServerioBroker, 8087) && data > "") { Serial.println("mit ioBroker verbunden..."); clientTCP.println("GET /set/javascript.0.AquaGuard.Aqua.1.ACTUAL_TEMPERTURE?value=" + data + " HTTP/1.1"); // http://192.168.x.xxx:8087/set/javascript.0.AquaGuard.Aqua.1.ACTUAL_TEMPERTURE?value=12.34 Serial.println("GET /set/javascript.0.AquaGuard.Aqua.1.ACTUAL_TEMPERTURE?value=" + data + " HTTP/1.1"); clientTCP.println(); } else { Serial.println("nicht mit ioBroker Server verbunden"); } clientTCP.stop(); } !
Ebenfalls funktioniert die Anzeige in VIS + Diagramm.
!
Nun hatte ich im Arduino per blynkk die Logik implementiert, das ich informiert werde, wenn die Temperatur außerhalb eines Toleranzbereiches sich befindet. Dabei ist bereits folgendes Skript entstanden:
! ```
instanz = 'javascript.0.'; ! var cronStr = "*/9 * * * *"; var logging = true; var aqualiste = ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15']; ! function check_Aqua() { var name; var text; var Optin; for(var i = 0; i<aqualiste.length; i++)/{/schleife/für/jedes/aquarium/lt./liste/name="instanz" +/'aquaguard.aqua.'/aqualiste[i];/var/idalarm="name" '.alarm';/if/(getstate(idalarm))/setstate(idalarm,false);/text="Temperatur-Alarm Min/Max wurde erkannt!!" ;/(sens_hasalarm(name,/aqualiste[i]))/setstate(idalarm,true);/optin="instanz" 'optin.dienste.aquaguard.temperture.push';/meldung_push(/'aquarium/'/aqualiste[i]/-/text,/'iobroker/alarm/aquaguard/aqualiste[i],/false,/);/wert:/getstate(name/'.actual_temperture').val;/event('<b="">Aquarium ' + aqualiste[i] + ': ' + text + ''); if (logging) log('Aquarium ' + aqualiste[i] + ' - ' + text); } // if (Sens_hasAlarm(name, aqualiste[i])) { else { if (logging) log('Aquarium ' + aqualiste[i] + ' - kein ' + text); } } // if (getState(idAlarm)) { } // for(var i = 0; i<aqualiste.length; i++)/{/schleife/für/jedes/aquarium/lt./liste/}/temperatur-sensor/prüfen/function/sens_hasalarm(name,/nummer)/var/value="getState(name" +/'.actual_temperture').val;/if/(getstate(name/'.min_temperture')/&&/getstate(name/'.max_temperture'))/mintemp="getState(name" '.min_temperture').val;/maxtemp="getState(name" '.max_temperture').val;/(logging)/log('min-temperatur/aqua/'/nummer/ist/mintemp);/log('max-temperatur/maxtemp);/check/low/alarm/(value/<="MinTemp)" return/true;/high="">= MaxTemp) return true; } else { log('Datenpunkt ' + name + '.MIN_TEMPERTURE nicht vorhanden'); } // no alarm return false; } ! function dpAnlegen() { // Datenpunkte anhand der Aqua-Liste anlegen lassen for(var i = 0; i<aqualiste.length; i++)/{/createstate('aquaguard.aqua.'/+/aqualiste[i]/'.alarm',/false,/{read:/true,/write:/type:/'boolean',/name:/'alarm/aquarium/'/aqualiste[i],/desc:/'true="Ein," false="Aus'," def:/states:/'false:aus;/true:ein'});/'.actual_temperture',/23,/'number',/'temperatur/aqua/'temperatur',/unit:'°c',/23});/'.min_temperture',/18,/'min./temperatur/temperatur',/18});/'.max_temperture',/26,/'max./26});/log('aquaguard.aqua.'/'.alarm/wurde/angelegt');/}/createstate('vis.aquaguard.zeigegraphnr',/0,/'aquaguard/vis',/'auswahl/auagraph/zur/anzeige/in/read:/true/});/createstate('optin.dienste.aquaguard.temperture.push',/'optin/aquaguard/niedrige/höhere/tempertur/melden',/'soll/eine/zu/gemeldet/werden?',/dpanlegen();/datenpunkte/anlegen/regelmässige/wiederholungen/-----------------------------------------------------------------------------/schedule(cronstr,/check_aqua);/main/function/main()/check_aqua();/start/skript:/settimeout(main,/500);/<e=""></aqualiste.length;></aqualiste.length;></aqualiste.length;>
! Funktioniert ebenfalls. Nicht elegant aber die Funktion ist entscheidend
! ~~[b]~~Folgende Punkte sind noch in Umsetzung (würde mich dabei über Hinweise freuen):[/b]
! ~~~~* - VIS Eingabemaske zum Update der Daten für Wasserwechsel pro Aquarium (Idee: pro Aquarium erstelle ich ein zusätzliches Boolean "Water", welches historisiert wird. Dabei soll nur eine Veränderung des Wertes auf true historisiert werden. Geht sowas überhaupt? Habt Ihr eventuell eine ähnliche Art realisiert?)- VIS Anzeige der letzten Werte/Ereignisse in einer Tabelle aller Aquarien (siehe Screenshots Webserver)
! ~~[b]~~Zusatzfrage:[/b] ist sowas überhaupt umsetzbar mit ioBroker (Ablösung Webserver) oder sollte ich lieber mit iframes arbeiten?
! Dies sollte erstmal als Zwischenstand dienen. Ich werde weitere Schritte/Erfolge hier posten.
! Danke für euer Interesse und eventuell auch Unterstützung.
! mfg
! Falk[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i] -
sehr schönes projekt !!!
sind die 15 seewasser(?) aquarien daheim ? …
-
sind die 15 seewasser(?) aquarien daheim ? … `
Ja daheim, aber alle "nur" Süßwasser -
Respekt! Nicht nur für die Arbeit, sondern auch wegen 15 Aquarien.
-
sauber, erinnert mich an meine zeit der barsche und diskusfische …
-
sauber, erinnert mich an meine zeit der barsche und diskusfische … ` In meinen Becken schwimmen/krabbeln aber nur Wirbellose
Respekt! Nicht nur für die Arbeit, sondern auch wegen 15 Aquarien. ` Danke Dir, habe es aber auch so weitestgehend automatisiert. Aquaguard als Kontrolle und Pumpen + Schläuche, damit man keine Eimer schleppen muss
Hat jemand vielleicht Ideen/Vorschläge zur Umsetzung so eines "Planers" für Wasserwechsel oder ist dafür ioBroker eher ungeeignet?
-
ich glaube den planer würde ich "frei" schreiben und dann die daten zur steuerung schieben, da kommt bei elv ein neuer usb-stick, ggf ist da was mit machbar
-
ich glaube den planer würde ich "frei" schreiben und dann die daten zur steuerung schieben, da kommt bei elv ein neuer usb-stick, ggf ist da was mit machbar ` Wie meinst Du "frei" schreiben? Besser belassen auf dem Webserver? Welchen Stick meinst Du von ELV?
-
diesen https://files.elv.com/Assets/Produkte/1 … usb_um.pdf - mehr in der nächsten ELV
mit frei schreibe meine ich das ich da da selber was zusammenprogrammieren würde .. oder wenn da schon was ist - erst einmal belassen.
-
diesen https://files.elv.com/Assets/Produkte/1 … usb_um.pdf - mehr in der nächsten ELV ` Link funktioniert leider nicht:(
-
-
besser ?
https://www.elv.de/controller.aspx?cid= … il2=825583 ` jetzt ja