Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Praktische Anwendungen (Showcase)
  4. Füllstandsmessung per Pegelsonde.

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.5k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.8k

Füllstandsmessung per Pegelsonde.

Geplant Angeheftet Gesperrt Verschoben Praktische Anwendungen (Showcase)
604 Beiträge 63 Kommentatoren 203.0k Aufrufe 69 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • B BoBeRzE

    Ich hatte zwar früher in der Ausbildung auch elektronische Schaltungen aber das Wissen ist nur noch zu Bruchteilen vorhanden :face_with_rolling_eyes:

    Der Sonoff bietet drei GPOs inkl. VCC (3.3V) und GND. Betrieben wird der Sonoff mit mit 24V. Ob ich jetzt einen Temp-Sensor daran betreibe oder einen ADS1115 sollte doch keinen Unterschied machen. Das Einzige auf was geachtet werden muss ist, dass an den analogen Eingängen vom ADS1115 nicht mehr als 3.3V anliegen weil der ADS1115 selber nur mit 3.3V versorgt wird. Sicherlich wird intern irgendwann wieder alles auf die Masse vom 24V Netzteil geführt, sollten also das selbe Potential haben.

    Ich vermute das irgendwo eine Überspannung vorliegt. Deswegen hat es mir ja den Sonoff zerschossen.

    Am Eingang vom Sonoff kommen 24V an, dieser wandelt intern auf 3.3V für den ADS1115. Das Modul welches Strom zu Spannung (nachfolgend ItoU-Module) rechnet ist ebenfalls mit 24V (P1 - VCC) versorgt. Vom ItoU-Module P1 (+) geht es auf Plus von der Pegelsonde. Minus von der Pegelsonde geht auf Plus (P2 +) vom ItoU-Module. P2 (-) geht auf P1 (GND). P1 (VOUT) geht an A0 vom ADS1115.

    Hoffe man kann den Schaltungsverlauf etwas nachvollziehen.

    Danke

    EisbaeeerE Offline
    EisbaeeerE Offline
    Eisbaeeer
    Developer
    schrieb am zuletzt editiert von
    #223

    @BoBeRzE Nur eine Idee. Könnte es sein, dass du sekundärseitig (3.3V Seite) einen Kurzschluss produziert hast und damit den Spannungsregler über den Jordan geschossen hast?
    Wie ist denn die Belegung auf dem 3x3 Pfostenstecker auf dem Sonoff?
    Weitere Idee, Pins sind von oben gesehen, ist mir auch schon passiert, dass ich von unten die falschen verdrahtet habe (wäre auch wieder Masse auf 3.3V, dann Tot).
    Wenn du ein Labornetzteil hast, die 24V mit den Strombegrenzer einstellen, dass der nächste Sonoff beim Test nicht kaputt geht. Aber immer vorher nochmals alles kontrollieren. So wie mein Vorredner schon sagte, alle Punkte durchmessen, ohne gesteckte Module. Dann das Sonoff, nochmals messen. Dann den A/D Wandler, nochmals messen. Dann den Pegelwandler ...
    Stückweise voranarbeiten. Fehlersuche kann auch spaß machen ;-)
    Viel Erfolg beim Suchen!
    Grüße Eisbaeeer

    Kein support per PM. Bitte im Forum Fragen stellen!

    1 Antwort Letzte Antwort
    0
    • B Offline
      B Offline
      BoBeRzE
      schrieb am zuletzt editiert von BoBeRzE
      #224

      Danke für die Hinweise. Das mit dem "spiegelverkehrt" habe ich bedacht. Ich werde aber alle Punkte noch mal durchgehen wenn ich zuhause bin. Ein neues Modul ist schon bestellt und sollte die Woche kommen. Wäre schön wenn ich das nicht gleich wieder grille :clown_face:

      Ich melde mich.

      Mir fällt gerade ein wichtiges Detail ein... Der Aufbau vom "Strom zu Spannungs-Wandler" bzw. die daran angeschlossenen Pegelsonde passt aber wie ich beschrieben habe, oder? Habe diesen Part zuletzt verdrahtet und zwischendurch immer mal die Komponenten am Strom gehabt. Da lief noch alles. Nicht das in diesem Part der Fehler steckt.

      Vielen Dank

      EDIT1: Ein Netzteil mit Strombegrenzer habe ich leider nicht.
      EDIT2: Habe jetzt mal an folgenden Punkten Spannung gemessen:

      IMG_20200314_204139.jpg

      Für mich ist das soweit i.O.

      Kann jemand ggf. nochmal was zur Verkabelung von der Pegelsonde mit dem "Strom zu Spannungs-Modul" schreiben? Irgendwie glaube ich dass da der Fehler liegt...

      1 Antwort Letzte Antwort
      0
      • L Offline
        L Offline
        ltathome
        schrieb am zuletzt editiert von ltathome
        #225

        Soderle - morgen oder Sonntag - wenn das Wetter mitspielt, kalibriere ich das Teil mit voller Zisterne.

        Im Code ist das maximale Volumen hinterlegt - das wird bei maximalem analogen Wert erreicht - soweit klar.
        Zwei Fragen:

        1. Gemäß Spez. kann der Nano 5V am Analogen Eingang - ich würde das Poti für den maximalen Wert also auf "Knapp drunter" einstellen, wenn die Sonde bei voller Zisterne ganz unten ist. Der Analoge Maximalwert müsste doch dann recht dicht an 1023 sein und nicht rund 25% niedriger (wie im Code) oder?
        2. Im Code wird der Prozentsatz aus dem analogen Wert ermittelt, indem mit 0,132 multipliziert wird und dann auf 100 gekappt. Das erschliest sich mir nicht. Der Prozentsatz x ist doch:

        x = 100% / maximaler Analoger Wert * analoger Messwert

        oder habe ich einen denkfehler?

        Und wo bekomme ich die schöne Visualisierung aus dem Thread weiter oben her?

        Warum ist der maximale Wert nicht per se bei 1023?
        Das müsste doch der gewünschte wert für eine maximale Auflösung sein und dem maximalen
        EDIT: nachdem ich heute kalibriert hab und nur auf 1,4V kam, habe ich mir die Mühe gemacht und den ganzen Thread nochmal gelesen..
        Ich habs jetzt auch verstanden:

        1. den maximalen Wert erreicht man nur, wenn die Sonde auch die volle Nenntiefe versenkt ist - logisch - bei ner 5m Sonde und 2,50 max Tiefe (6,5cbm - Zisterne) passiert das nie.
        2. Die 5v-Story stehen ebenfalls im Thread weiter vorne - sowei auch das geklät - ich werde morgen nochmal mit beiden Jumpern gesteckt testen - dann müsste ich deutlich dichter an die 5V

        Nur das Thema Multiplikation mit 0,132 leuchtet mir immer noch nicht ein.

        1 Antwort Letzte Antwort
        0
        • B Offline
          B Offline
          BoBeRzE
          schrieb am zuletzt editiert von BoBeRzE
          #226

          Hallo Leute,

          ich wollte nochmal nachfragen ob mir jemand bei meinem Problem helfen kann. Einen neuen Sonoff SV habe ich schon liegen, will den aber nicht gleich wieder zerstören :anguished:

          Zur besseren Veranschaulichung habe ich euch mal die derzeitige Schaltung gezeichnet. Vielleicht kann da einer schneller den Fehler finden.

          pegelsonde_v2.png

          Vielen Dank

          BoBeRzE

          EDIT: Ich habe jetzt noch mal Schritt für Schritt alles aufgebaut und gemessen. Die oben gezeigte Schaltung funktioniert. Mein Problem ist also gelöst. Wer weiß wie ich mir da zwischendurch den Fehler eingefangen habe und den ersten Sonnoff gegrillt habe. Vielleicht kann jemand mit dem Schaltbild etwas anfangen.

          Vielen Dank

          1 Antwort Letzte Antwort
          0
          • opossumO Offline
            opossumO Offline
            opossum
            schrieb am zuletzt editiert von opossum
            #227

            Hallo,
            ich habe meine Pegelsonde jetzt in der Zisterne versenkt, die Platine in den Gartenschuppen eingebaut und mittels WLAN meldet die Baugruppe mir jetzt via MQTT den Inhalt. Streut halt ein wenig. Ich musste in meinem ESP8266 den vollen Wert für 5600 Liter bereits auf 254 stellen, so dass mir ESPEasy das korrekt umrechnet. Mit 1023 komme ich da natürlich jetzt auf einen Wert von ca. 22500 Liter. Aber der Wert wird sauber angezeigt, Sendeintervall auf 3600 Sekunden gestellt. Damit ergibt sich dann folgende Anzeige:

            7764da46-7135-4657-b5ad-a0eb7e31ff7d-image.png

            Ich musste am ESP8266 noch den Pin D0 auf Masse legen, um den Sleepmodus auszuschalten. Heute Nacht war der ESP8266 "eingeschlafen" und in Ermangelung der Verbindung zwischen D0 und RST nicht wieder aufzuwecken. Man kann das sicher auch automatisieren, aber da die Baugruppe eh mit 5V aus einem Netzteil versorgt wird, ist das bei mir egal.
            Hier noch ein Foto der Installation:
            IMG_20200412_121332.jpg

            https://schlepper-petersdorf.jimdofree.com/

            L 1 Antwort Letzte Antwort
            0
            • opossumO opossum

              Hallo,
              ich habe meine Pegelsonde jetzt in der Zisterne versenkt, die Platine in den Gartenschuppen eingebaut und mittels WLAN meldet die Baugruppe mir jetzt via MQTT den Inhalt. Streut halt ein wenig. Ich musste in meinem ESP8266 den vollen Wert für 5600 Liter bereits auf 254 stellen, so dass mir ESPEasy das korrekt umrechnet. Mit 1023 komme ich da natürlich jetzt auf einen Wert von ca. 22500 Liter. Aber der Wert wird sauber angezeigt, Sendeintervall auf 3600 Sekunden gestellt. Damit ergibt sich dann folgende Anzeige:

              7764da46-7135-4657-b5ad-a0eb7e31ff7d-image.png

              Ich musste am ESP8266 noch den Pin D0 auf Masse legen, um den Sleepmodus auszuschalten. Heute Nacht war der ESP8266 "eingeschlafen" und in Ermangelung der Verbindung zwischen D0 und RST nicht wieder aufzuwecken. Man kann das sicher auch automatisieren, aber da die Baugruppe eh mit 5V aus einem Netzteil versorgt wird, ist das bei mir egal.
              Hier noch ein Foto der Installation:
              IMG_20200412_121332.jpg

              L Offline
              L Offline
              ltathome
              schrieb am zuletzt editiert von ltathome
              #228

              @opossum Darf ich nochmal fragen, woher ich die "tolle Zisterne" haben könnte?

              Ich habe mein Teil jetzt seit ein paar Tagen auch "produktiv" - ich habe aber am Code noch deutlich umgebaut, da ich mir die Möglichkeit schaffen wollte, über ein Relais bei Erreichen eines Minimums oder Maximums zu schalten (< Minimal: Umschalten auf Hauswasser, Bei > maximal zurückschalten auf Zisterne. Zwei unterschiedliche Werte, weil das sonst erstens "flattert" und es keinen Sinn macht, selbst bei nur "minimal" über Minimum wieder zurückzuschalten. Und weil ich dann schon mal dran war, habe ich das sowohl über einen Taster, als auch per mqtt realisiert. Ich kann also per Taster (PIN D2) und mqtt das Relais (PIN D3) umschalten zwischen Automatik, Hauswasser und Zisterne. Die Schwellwerte lassen sich ebenfalls per mqtt setzen. Jetzt muss ich nur noch an der Hauswasserpumpe an das Umschaltventil ran um das ans Relais anzuschließen - die bisherige Schwimmerumschaltung klappt nicht sauber - und vor allem muss ich für manuelle Eingriffe jedesmal in den Keller..
              image0.jpeg image1.jpeg image2.jpeg

              /*------------------------------------------------------------------------------------------------------------------------------------------------------------------
                Program:      Füllstandsmessung mit Pegelsonde
              
                Description:  Dieses Programm misst die analolge Spannung an einem Port, welche von einem Drucksensor
                              0-5m Meßhöhe und 4-20mA Stromschnittstelle erzeugt wird.
                              Voraussetzung ist ein Meßwandler, welcher die 24V Versorgungsspannung an
                              den Drucksensor liefert und 0-3,3V analoge Spannung ausgibt.
                              Dienste:
                              DHCP, wenn vorhanden, sonst wird eine feste IP mit 192.168.1.21 vergeben.
              
                Hardware:     Arduino Nano ATmega 328P
                              W5100 Netzwerk shield
                              LCD Display I2C HD44780
              
              				Pin-Ports:
              				A0 = Analog IN
              				A4 = SDA
              				A5 = SCL
              
              
                Date:         20191013
                Modified:     Initial Version 1.0
                              - DHCP error routine
              
                              20191017
                              - Fixed uptime_d
              
                              20191019
                              Version 1.1
                              - Dichte Berechnung hinzugefügt
                              Version 1.2
                              - LCD wechselt jetzt alle 30 Sek. zwischen Uptime und Analog Messwert
              
                              20191024
                              - Fixed MQTT uptime_d char array
              
                              20191028
                              Version 1.3
                              - MQTT Port definierbar
                              - MQTT User Password authentication
              
              				20200110
              				Version 1.4
              				- Array für die Beruhigung des Messwertes eingefügt
              
                Author:       Eisbaeeer, https://github.com/Eisbaeeer
              
                Author:       Ethernet part: W.A. Smith, http://startingelectronics.com
                              progress bar -  CC BY-SA 3.0 :  skywodd, https://www.carnetdumaker.net/articles/faire-une-barre-de-progression-avec-arduino-et-liquidcrystal/
              
                LICENSE: 		MIT License
              
                -------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
              // Include some libraries
              #include <Ethernet.h>
              #include <SPI.h>
              
              #include <Wire.h>
              #include <hd44780.h>                       // main hd44780 header
              #include <hd44780ioClass/hd44780_I2Cexp.h> // i2c expander i/o class header
              hd44780_I2Cexp lcd; // declare lcd object: auto locate & auto config expander chip
              #include <Wire.h>
              #include <LiquidCrystal_I2C.h>
              
              #define twenty_x_four // 4x20 display
              
              #ifdef twenty_x_four
              const int LCD_COLS = 20;
              const int LCD_ROWS = 4;
              const int LCD_NB_COLUMNS = 20;
              #endif
              
              #ifdef sixteen_x_four
              const int LCD_COLS = 16;
              const int LCD_ROWS = 4;
              const int LCD_NB_COLUMNS = 16;
              #endif
              
              #include "progress.h"
              
              
              #define MODE_PIN 2
              #define MODE_ZISTERNE 0
              #define MODE_HAUSWASSER 1
              #define MODE_AUTO 2
              #define MODE_COUNT 10
              bool setmode = false;
              const char *modes[] = {"Zisterne", "Hauswasser", "Auto"};
              int mode_count = MODE_COUNT;
              int mode = MODE_AUTO;
              int old_mode = MODE_AUTO;
              int pin_stat;
              int old_stat;
              
              #define VALVE_PIN 3
              #define VALVE_ZISTERNE LOW
              #define VALVE_HAUSWASSER HIGH
              int valve = VALVE_ZISTERNE;
              int new_valve = VALVE_ZISTERNE;
              int reason = 0;
              const char *valves[] = {"Zisterne", "Hauswasser"};
              const char *reasons[] = {"manuelle Steuerung", "Automatik voll", "Automatik leer"};
              
              // ##############################################################################################################################
              // ---- HIER die Anpassungen vornehmen ----
              // ##############################################################################################################################
              // Hier die maximale Füllmenge des Behälters angeben. Dies gilt nur für symmetrische Behälter.
              const float max_liter = 6500;
              // Analoger Wert bei maximalem Füllstand (wird alle 30 Sekungen auf dem LCD angezeigt oder in der seriellen Konsole mit 9600 Baud.
              const int analog_max = 715;
              
              // Dichte der Flüssigkeit - Bei Heizöl bitte "1.086" eintragen, aber nur wenn die Kalibrierung mit Wasser erfolgt ist!
              // Bei Kalibrierung mit Wasser bitte "1.0" eintragen
              const float dichte = 1.0;
              
              // IP Adresse und Port des MQTT Servers
              const char *mqttserver = "iobroker.server.intern";
              const int mqttport = 1883;
              // Wenn der MQTT Server eine Authentifizierung verlangt, bitte folgende Zeile aktivieren und Benutzer / Passwort eintragen
              const char *mqttuser = "mqttiobroker";
              const char *mqttpass = "passwort";
              
              // IP Adresse, falls kein DHCP vorhanden ist. Diese Adresse wird nur verwendet, wenn der DHCP-Server nicht erreichbar ist.
              IPAddress ip(192, 168, 1, 21);
              
              // MAC-Addresse bitte anpassen! Sollte auf dem Netzwerkmodul stehen. Ansonsten eine generieren.
              byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x0A };
              
              char buf[40];
              
              // ##############################################################################################################################
              // AB hier nichts mehr ändern!
              // (Ausser ihr wisst, was ihr tut)
              // ##############################################################################################################################
              
              // #define USE_SERIAL  Serial
              
              // No more delay
              unsigned long startMillis;  // some global variables available anywhere in the program
              unsigned long hstartMillis;  // some global variables available anywhere in the program
              unsigned long currentMillis;
              const unsigned long sekunde = 1000;  // one seconds
              const unsigned long hsekunde = 500;  //Half second
              
              unsigned long pinMillis;
              unsigned long lastMillis = 0;
              
              int secs = 0, mins = 0, hours = 0, days = 0;
              char uptime[25];
              
              float percent;
              float liter;
              float limit_low = 500;
              float limit_high = 1000;
              boolean LCD_Page;
              
              // Analog IN
              int analogPin = A0;
              const int messungen = 60;     // Anzahl Messungen
              int myArray[messungen];       // Array für Messwerte
              float analog = 0.0;             // Durchschnittswert
              int pointer = 0;              // Pointer für Messung
              
              // MQTT global vars
              #include <PubSubClient.h>
              unsigned int send_interval = 10; // the sending interval of indications to the server, by default 10 seconds
              #define MQTT_KEEPALIVE 60;
              
              boolean mqttconnected = false;
              
              // MQTT definitions
              void MqttCallback(char *topic, byte *payload, unsigned int length);
              EthernetClient ethClient;
              PubSubClient mqttclient;
              // (mqttserver, mqttport, MqttCallback, ethClient);
              #define MQTT_ID "Zisterne"
              
              char pl[30];
              
              // Declare subs
              void Mqttpublish();
              
              void defaultEthernet(void) {
                  Ethernet.begin(mac, ip);  // initialize Ethernet device
              }
              
              void Uptime() {
                  secs++;
                  secs = secs % 60;
                  if (secs == 0) {
                      mins++;
                      mins = mins % 60;
                      if (mins == 0) {
                          hours++;
                          hours = hours % 24;
                          if (hours == 0) {
                              days++;
                              days = days % 10000;   // Nach 9999 Tagen zurück auf 0 (das sind 27 Jahre....)
                          }
                      }
                  }
                  sprintf(uptime, "%4dd %2dh %2dm", days, hours, mins);
                
                  if (secs == 0) {        // Every Minute
                      //USE_SERIAL.print(F("Uptime: "));
                      //USE_SERIAL.println(uptime);
                      // MQTT reconnect timeout
                      //Mqttpublish();
                  }
                  if (secs % send_interval == 0) { // Alle 30 Sekunden
                      LCD_Page = !LCD_Page;
                      Mqttpublish();
                      // MqttSub();
                  }
                  if (mins == 0 && secs == 0) {      // Jede Stunde
                      //USE_SERIAL.println(F("ONE HOUR"));
                  }
              }
              
              void ReadAnalog() {
                  // read the analog value and build floating middle
                  myArray[pointer++] = analogRead(analogPin);      // read the input pin
                  // myArray[pointer++] = 352;
              
                  pointer = pointer % messungen;
              
                  // Werte aufaddieren
                  for (int i = 0; i < messungen; i++) {
                      analog = analog + myArray[i];
                  }
                  // Summe durch Anzahl - geglättet
                  analog = analog / messungen;
              
                  percent = min(100 * analog / analog_max, 100);
              
                  float calc = max_liter / analog_max;    // calculate percent
                  calc = calc * dichte;                     // calculate dichte
                  liter = min(analog * calc, max_liter);    // calculate liter
              
                  /* //USE_SERIAL.print(F("Analog: "));
                  //USE_SERIAL.println(analog);
                  //USE_SERIAL.print(F("Prozent: "));
                  //USE_SERIAL.println(percent);
                  //USE_SERIAL.print(F("Liter: "));
                  //USE_SERIAL.println(liter);
                  */
              }
              
              void setup() {
                  // USE_SERIAL.begin(9600);       // for debugging
              
                  /*--------------------------------------------------------------
                     LCD init
                    --------------------------------------------------------------*/
                  lcd.init();
                  int status;
                  status = lcd.begin(LCD_COLS, LCD_ROWS);
                  if (status) { // non zero status means it was unsuccesful
                      status = -status; // convert negative status value to positive number
                      // begin() failed so blink error code using the onboard LED if possible
                      hd44780::fatalError(status); // does not return
                  }
                
                  // initalization was successful, the backlight should be on now
                  // Print a message to the LCD
                  lcd.print("Zisterne");
                  lcd.setCursor(0, 1);
                  lcd.print("Version 1.4");
                  lcd.setCursor(0, 3);
                  lcd.print("github/Eisbaeeer");
                  delay(2000);
                
                  setup_progressbar();
                
                  /*--------------------------------------------------------------
                     Milliseconds start
                    --------------------------------------------------------------*/
                  startMillis = millis();  //initial start time
                
                  /*--------------------------------------------------------------
                     Ethernet init
                    --------------------------------------------------------------*/
                  if (Ethernet.begin(mac) == 0) {
                      //USE_SERIAL.println(F("Failed config using DHCP"));
                      // DHCP not working, switch to static IP
                      defaultEthernet();
                      if (Ethernet.hardwareStatus() == EthernetNoHardware) {
                          //USE_SERIAL.println(F("Eth shield not found"));
                      } else if (Ethernet.linkStatus() == LinkOFF) {
                          //USE_SERIAL.println(F("Eth cable not conn"));
                      }
                  }
              
                  // USE_SERIAL.print(F("IP: "));
                  // USE_SERIAL.println(Ethernet.localIP());
              
                
                  // start MQTT client
                  MqttConnect(mqttuser, mqttpass);  
                
                  /*-------------------------------------------------------------------
                   * Setup Pins for Valve and mode-setting
                   */
                  pinMode(MODE_PIN, INPUT_PULLUP);
                  pinMode(VALVE_PIN, OUTPUT);
                
                  pin_stat = old_stat = digitalRead(MODE_PIN);
              }
              
              void MqttConnect(char *user, char* pass) {
              
                  mqttclient.setClient(ethClient);
                  mqttclient.setServer(mqttserver, mqttport);
                  mqttclient.setCallback(MqttCallback);
                  
                  mqttconnected = mqttclient.connect(MQTT_ID, user, pass);
                  if (mqttconnected) {
                      // USE_SERIAL.println("Connected to Mqtt-Server");
                      mqttclient.subscribe("Zisterne/cmd/Mode");
                      mqttclient.subscribe("Zisterne/cmd/Limit");
                      // USE_SERIAL.println("subscribing to Zisterne/cmd/Mode");
                  }
              }
              
              void MqttCallback(char *topic, byte *payload, unsigned int length) {
                  char *payloadvalue;
                  char *payloadkey;
              
                  payload[length] = '\0';
                  payloadkey = (char *)&payload[0];
              
                  // USE_SERIAL.println(payloadstring);
                  if (strcmp(topic, "Zisterne/cmd/Mode") == 0) {
                      if (strcmp(payloadkey, "0") == 0 || strcmp(payloadkey, "Zisterne") == 0) {
                          mode = MODE_ZISTERNE;
                      } else if (strcmp(payloadkey, "1") == 0 || strcmp(payloadkey, "Hauswasser") == 0) {
                          mode = MODE_HAUSWASSER;
                      } else if (strcmp(payloadkey, "2") == 0 || strcmp(payloadkey, "Auto") == 0) {
                          mode = MODE_AUTO;
                      }
                  } else if (strcmp(topic, "Zisterne/cmd/Limit") == 0) {
                      int eq = 0;
                      for (int i = 0; i < length; i++) {
                          if (payload[i] == '=') {
                              eq = i;
                              break;
                          }
                      }
                      if (eq > 0) {
                          payload[eq++] = 0;
                          payloadvalue = (char *)&payload[eq];
                          if (strcmp((char *)payload, "Low") == 0 || strcmp((char *)payload, "low") == 0) {
                              limit_low = atoi(payloadvalue);
                          }
                          if (strcmp((char *)payload, "High") == 0 || strcmp((char *)payload, "high") == 0) {
                              limit_high = atoi(payloadvalue);
                          }
                      }
                  }
              }
              
              void CheckEthernet() {
                  if (Ethernet.hardwareStatus() != EthernetNoHardware) {
                      /*--------------------------------------------------------------
                         check ehternet services
                        --------------------------------------------------------------*/
                      switch (Ethernet.maintain()) {
                          case 1:
                              //renewed fail
                              //USE_SERIAL.println(F("Error: renewed fail"));
                              break;
                  
                          case 2:
                              //renewed success
                              //USE_SERIAL.println(F("Renewed success"));
                              //print your local IP address:
                              //USE_SERIAL.print(F("My IP address: "));
                              //USE_SERIAL.println(Ethernet.localIP());
                              break;
                      
                          case 3:
                              //rebind fail
                              //USE_SERIAL.println(F("Error: rebind fail"));
                              break; 
                  
                          case 4:
                              //rebind success
                              //USE_SERIAL.println(F("Rebind success"));
                              //print your local IP address:
                              //USE_SERIAL.print(F("My IP address: "));
                              //USE_SERIAL.println(Ethernet.localIP());
                              break;
                      
                          default:
                              //nothing happened
                              break;
                      }    
                  }
              }
              
              void loop() {
                  /*--------------------------------------------------------------
                   remove delay (half second)
                   --------------------------------------------------------------*/
                  mqttclient.loop();
                
                  pin_stat = digitalRead(MODE_PIN);
                  pinMillis = millis();
                  if (pin_stat == LOW) {
                      if (pinMillis - lastMillis > 200) {
                          //USE_SERIAL.println("Impuls Low");
                          lastMillis = pinMillis;
                          mode_count = MODE_COUNT;
                          if (!setmode) {
                              setmode = true;
                              old_mode = mode;
                              //sprintf(buf, "Enter Settings-Mode %d (%s)", mode, modes[mode]);
                              //USE_SERIAL.println(buf);
                          } else {
                              mode--;
                              if (mode < 0) {
                                  mode = 2;
                              }
                              //sprintf(buf, "Mode change to %d (%s)", mode, modes[mode]);
                              //USE_SERIAL.println(buf);
                          }
                      }
                  }
              
                  /*--------------------------------------------------------------
                   remove delay (one second)
                   --------------------------------------------------------------*/
                  currentMillis = millis();  //get the current "time" (actually the number of milliseconds since the program started)
                  if (currentMillis - startMillis >= sekunde) { // Hier eine Sekunde warten
                      startMillis = currentMillis;
                      /******************************************************************************************
                         1 Sekunden Takt
                       *****************************************************************************************/
                      // Hier die Funktionen im Sekundentakt
                      // ###################################
              
                      CheckEthernet();
                      Uptime();
                      ReadAnalog();
                      
                      if (setmode) {
                          mode_count--;
                          if (mode_count <= 0) {
                              //sprintf(buf, "leaving Settings-Mode - change from %d to %d (%s)", old_mode, mode, modes[mode]);
                              //USE_SERIAL.println(buf);
                              old_mode = mode;
                              setmode = false;
                          }
                      }
                      if (!setmode) {
                          if (mode == MODE_ZISTERNE) {
                              new_valve = VALVE_ZISTERNE;
                              reason = 0;
                          } else if (mode == MODE_HAUSWASSER) {
                              new_valve = VALVE_HAUSWASSER;
                              reason = 0;
                          } else if (mode == MODE_AUTO) {
                              if (liter >= limit_high) {
                                  new_valve = VALVE_ZISTERNE;
                                  reason = 1;
                              }
                              if (liter <= limit_low) {
                                  new_valve = VALVE_HAUSWASSER;
                                  reason = 2;
                              }
                          }
                      }
                      /*-----------------------------------------------------------
                       * Wenn Ventil umzuschalten ist
                      */
                      if (new_valve != valve) {
                          valve = new_valve;
                          digitalWrite(VALVE_PIN, valve);
                          //sprintf(buf, "Set Valve to %s (%s)", valves[valve], reasons[reason]);
                          //USE_SERIAL.println(buf);
                      }
                  
                      // print out to LCD
              
                      if (!setmode) {
                          draw_progressbar(percent);
                      }
                      write_lcd();
                  }
              
              }
              /******************************************************************************************
                 Ende Loop
              * ****************************************************************************************
                 Beginn Unterprogramme
              ******************************************************************************************/
              
              void write_lcd(void) {
                  char LCDbuff[20];
              
                  if (!setmode) {
                  // Zeile 1
                      lcd.setCursor(6, 0);
                      dtostrf(liter, 4, 0, LCDbuff);
                      lcd.print(LCDbuff); lcd.print(" Liter");
              
              
              #ifdef sixteen_x_four
                      if ( LCD_Page == false ) {
                          // Zeile 3
                          lcd.setCursor(0, 2);
                          lcd.print("Uptime");
              
                          // Zeile 4
                          lcd.setCursor(0, 3);
                          lcd.print(uptime);
                      } else {
                          // Zeile 3
                          lcd.setCursor(0, 2);
                          lcd.print("Messwert Analog");
                      
                          // Zeile 4
                          lcd.setCursor(0, 3);
                          lcd.print(analogRead(analogPin));      
                      }
              #endif
              #ifdef twenty_x_four
                      // Zeile 3
                      lcd.setCursor(0, 2);
                      lcd.print("Uptime");
                    
                      // Zeile 3
                      lcd.setCursor(7, 2);
                      lcd.print(uptime);
                    
                      // Zeile 4
                      lcd.setCursor(0, 3);
                      if (mode == 2) {
                          lcd.print("Auto: ");
                      } else {
                          lcd.print("Manuell: ");
                      }
                      lcd.setCursor(10, 3);
                      lcd.print(valves[valve]);
                    
                      // Zeile 4
                      // lcd.setCursor(16, 3);
                      // lcd.print(analogRead(analogPin));
              #endif
                  } else {
                      lcd.clear();
                      lcd.setCursor(0, 0);
                      lcd.print("Ventilsteuerung     ");
                      lcd.setCursor(0, 1);
                      lcd.print("Bisher: ");
                      lcd.setCursor(10, 1);
                      lcd.print(modes[old_mode]);
                      lcd.print("       ");
                      lcd.setCursor(0, 2);
                      lcd.print("Neu: ");
                      lcd.setCursor(6, 2);
                      lcd.print(modes[mode]);
                      lcd.setCursor(0, 3);
                      lcd.print(mode_count);
                  }
              }
              
              void Mqttpublish(void) {
                  if (mqttclient.connected()) {
                      dtostrf(analog, 5, 2, buf);
                      mqttclient.publish("Zisterne/Analog", buf);
                      dtostrf(liter, 5, 0, buf);
                      mqttclient.publish("Zisterne/Liter", buf);
                      dtostrf(limit_low, 1, 0, buf);
                      mqttclient.publish("Zisterne/LiterLow", buf);
                      dtostrf(limit_high, 1, 0, buf);
                      mqttclient.publish("Zisterne/LiterHigh", buf);
                      dtostrf(percent, 5, 0, buf);
                      mqttclient.publish("Zisterne/Prozent", buf);
                      
                      if (mode == 2) {
                          mqttclient.publish("Zisterne/Modus", "Auto");
                      } else {
                          mqttclient.publish("Zisterne/Modus", "Manuell");          
                      }
                      dtostrf(mode, 1, 0, buf);
                      mqttclient.publish("Zisterne/Mode", buf);
                      dtostrf(valve, 1, 0, buf);
                      mqttclient.publish("Zisterne/Valve", buf);
                      mqttclient.publish("Zisterne/Ventil", valves[valve]);
              
                      // System
                      mqttclient.publish("Zisterne/Uptime", uptime);
                  } else {
                      MqttConnect(mqttuser, mqttpass);  
                  }
              }
              
              void draw_progressbar(byte percent) {
                
                  lcd.clear();
                  /* Affiche la nouvelle valeur sous forme numérique sur la première ligne */
                  lcd.setCursor(0, 0);
                  lcd.print(percent);
                  lcd.print(F(" %  "));
                  // N.B. Les deux espaces en fin de ligne permettent d'effacer les chiffres du pourcentage
                  // précédent quand on passe d'une valeur à deux ou trois chiffres à une valeur à deux ou un chiffres.
                
                  /* Déplace le curseur sur la seconde ligne */
                  lcd.setCursor(0, 1);
                
                  /* Map la plage (0 ~ 100) vers la plage (0 ~ LCD_NB_COLUMNS * 2 - 2) */
                  byte nb_columns = map(percent, 0, 100, 0, LCD_NB_COLUMNS * 2 - 2);
                  // Chaque caractère affiche 2 barres verticales, mais le premier et dernier caractère n'en affiche qu'une.
                
                  /* Dessine chaque caractère de la ligne */
                  for (byte i = 0; i < LCD_NB_COLUMNS; ++i) {
                      if (i == 0) { // Premiére case
                          /* Affiche le char de début en fonction du nombre de colonnes */
                          if (nb_columns > 0) {
                              lcd.write(1); // Char début 1 / 1
                              nb_columns -= 1;      
                          } else {
                              lcd.write((byte) 0); // Char début 0 / 1
                          }    
                      } else if (i == LCD_NB_COLUMNS - 1) { // Derniére case    
                          /* Affiche le char de fin en fonction du nombre de colonnes */
                          if (nb_columns > 0) {
                              lcd.write(6); // Char fin 1 / 1    
                          } else {
                              lcd.write(5); // Char fin 0 / 1
                          }  
                      } else { // Autres cases
                          /* Affiche le char adéquat en fonction du nombre de colonnes */
                          if (nb_columns >= 2) {
                              lcd.write(4); // Char div 2 / 2
                              nb_columns -= 2;
                          } else if (nb_columns == 1) {
                              lcd.write(3); // Char div 1 / 2
                              nb_columns -= 1;
                          } else {
                              lcd.write(2); // Char div 0 / 2
                          }
                      }
                  }
              }
              
              EisbaeeerE 1 Antwort Letzte Antwort
              0
              • opossumO Offline
                opossumO Offline
                opossum
                schrieb am zuletzt editiert von opossum
                #229

                Hallo, @ltathome ,

                habe meine View mal exportiert:

                {
                  "settings": {
                    "style": {
                      "background_class": "hq-background-h-gradient-black-3"
                    },
                    "theme": "dark-hive",
                    "sizex": "1920",
                    "sizey": "1080",
                    "gridSize": "",
                    "useBackground": false,
                    "snapType": null
                  },
                  "widgets": {
                    "e00001": {
                      "tpl": "tplHtml",
                      "data": {
                        "g_fixed": true,
                        "g_visibility": false,
                        "g_css_font_text": false,
                        "g_css_background": false,
                        "g_css_shadow_padding": false,
                        "g_css_border": false,
                        "g_gestures": false,
                        "g_signals": false,
                        "g_last_change": false,
                        "visibility-cond": "==",
                        "visibility-val": 1,
                        "visibility-groups-action": "hide",
                        "refreshInterval": "0",
                        "signals-cond-0": "==",
                        "signals-val-0": true,
                        "signals-icon-0": "/vis/signals/lowbattery.png",
                        "signals-icon-size-0": 0,
                        "signals-blink-0": false,
                        "signals-horz-0": 0,
                        "signals-vert-0": 0,
                        "signals-hide-edit-0": false,
                        "signals-cond-1": "==",
                        "signals-val-1": true,
                        "signals-icon-1": "/vis/signals/lowbattery.png",
                        "signals-icon-size-1": 0,
                        "signals-blink-1": false,
                        "signals-horz-1": 0,
                        "signals-vert-1": 0,
                        "signals-hide-edit-1": false,
                        "signals-cond-2": "==",
                        "signals-val-2": true,
                        "signals-icon-2": "/vis/signals/lowbattery.png",
                        "signals-icon-size-2": 0,
                        "signals-blink-2": false,
                        "signals-horz-2": 0,
                        "signals-vert-2": 0,
                        "signals-hide-edit-2": false,
                        "lc-type": "last-change",
                        "lc-is-interval": true,
                        "lc-is-moment": false,
                        "lc-format": "",
                        "lc-position-vert": "top",
                        "lc-position-horz": "right",
                        "lc-offset-vert": 0,
                        "lc-offset-horz": 0,
                        "lc-font-size": "12px",
                        "lc-font-family": "",
                        "lc-font-style": "",
                        "lc-bkg-color": "",
                        "lc-color": "",
                        "lc-border-width": "0",
                        "lc-border-style": "",
                        "lc-border-color": "",
                        "lc-border-radius": 10,
                        "lc-zindex": 0,
                        "html": "",
                        "views": [
                          "101_kalender",
                          "103_aussenlicht_bedienung",
                          "104_klima",
                          "105_batterien",
                          "106_rollos_bedienung",
                          "107_netzwerk_ccu_status",
                          "108_wetter_tag_1",
                          "109_tv_vu_plus",
                          "110_diagramm_kraftstoff",
                          "111_diagramm_heizung_arbeitszimmer",
                          "112_diagramm_heizung_wohnzimmer",
                          "113_diagramm_heizung_esszimmer",
                          "114_diagramm_heizung_kueche",
                          "115_diagramm_heizung_gaestebad",
                          "116_diagramm_heizung_flur_unten",
                          "117_diagramm_heizung_gaestezimmer",
                          "118_diagramm_heizung_schlafzimmer",
                          "119_diagramm_heizung_bad_oben",
                          "316_wetter_tag_2",
                          "317_wetter_tag_3",
                          "318_wetter_tag_4",
                          "319_wetter_tag_5"
                        ]
                      },
                      "style": {
                        "left": "1600px",
                        "top": "14px",
                        "width": "164px",
                        "height": "47px"
                      },
                      "widgetSet": "basic"
                    },
                    "e00002": {
                      "tpl": "tplContainerView",
                      "data": {
                        "g_fixed": false,
                        "g_visibility": false,
                        "g_css_font_text": false,
                        "g_css_background": true,
                        "g_css_shadow_padding": false,
                        "g_css_border": false,
                        "g_gestures": false,
                        "g_signals": false,
                        "g_last_change": false,
                        "visibility-cond": "==",
                        "visibility-val": 1,
                        "visibility-groups-action": "hide",
                        "signals-cond-0": "==",
                        "signals-val-0": true,
                        "signals-icon-0": "/vis/signals/lowbattery.png",
                        "signals-icon-size-0": 0,
                        "signals-blink-0": false,
                        "signals-horz-0": 0,
                        "signals-vert-0": 0,
                        "signals-hide-edit-0": false,
                        "signals-cond-1": "==",
                        "signals-val-1": true,
                        "signals-icon-1": "/vis/signals/lowbattery.png",
                        "signals-icon-size-1": 0,
                        "signals-blink-1": false,
                        "signals-horz-1": 0,
                        "signals-vert-1": 0,
                        "signals-hide-edit-1": false,
                        "signals-cond-2": "==",
                        "signals-val-2": true,
                        "signals-icon-2": "/vis/signals/lowbattery.png",
                        "signals-icon-size-2": 0,
                        "signals-blink-2": false,
                        "signals-horz-2": 0,
                        "signals-vert-2": 0,
                        "signals-hide-edit-2": false,
                        "lc-type": "last-change",
                        "lc-is-interval": true,
                        "lc-is-moment": false,
                        "lc-format": "",
                        "lc-position-vert": "top",
                        "lc-position-horz": "right",
                        "lc-offset-vert": 0,
                        "lc-offset-horz": 0,
                        "lc-font-size": "12px",
                        "lc-font-family": "",
                        "lc-font-style": "",
                        "lc-bkg-color": "",
                        "lc-color": "",
                        "lc-border-width": "0",
                        "lc-border-style": "",
                        "lc-border-color": "",
                        "lc-border-radius": 10,
                        "lc-zindex": 0,
                        "contains_view": "201_navigation"
                      },
                      "style": {
                        "left": "41px",
                        "top": "5px",
                        "width": "172px",
                        "height": "1000px",
                        "z-index": "50"
                      },
                      "widgetSet": "basic"
                    },
                    "e00003": {
                      "tpl": "tplHqOdometer",
                      "data": {
                        "oid": "mqtt.0.ESPEasy3_3.dummy.Inhalt",
                        "g_fixed": true,
                        "g_visibility": false,
                        "g_css_font_text": true,
                        "g_css_background": false,
                        "g_css_shadow_padding": false,
                        "g_css_border": false,
                        "g_gestures": false,
                        "g_signals": false,
                        "style": "car",
                        "format": "(ddddd),dd",
                        "factor": "1",
                        "leadingZeros": "true",
                        "signals-cond-0": "==",
                        "signals-val-0": true,
                        "signals-icon-0": "/vis/signals/lowbattery.png",
                        "signals-icon-size-0": 0,
                        "signals-blink-0": false,
                        "signals-horz-0": 0,
                        "signals-vert-0": 0,
                        "signals-hide-edit-0": false,
                        "signals-cond-1": "==",
                        "signals-val-1": true,
                        "signals-icon-1": "/vis/signals/lowbattery.png",
                        "signals-icon-size-1": 0,
                        "signals-blink-1": false,
                        "signals-horz-1": 0,
                        "signals-vert-1": 0,
                        "signals-hide-edit-1": false,
                        "signals-cond-2": "==",
                        "signals-val-2": true,
                        "signals-icon-2": "/vis/signals/lowbattery.png",
                        "signals-icon-size-2": 0,
                        "signals-blink-2": false,
                        "signals-horz-2": 0,
                        "signals-vert-2": 0,
                        "signals-hide-edit-2": false,
                        "name": "Liter",
                        "visibility-cond": "==",
                        "visibility-val": 1,
                        "visibility-groups-action": "hide",
                        "lc-type": "last-change",
                        "lc-is-interval": true,
                        "lc-is-moment": false,
                        "lc-format": "",
                        "lc-position-vert": "top",
                        "lc-position-horz": "right",
                        "lc-offset-vert": 0,
                        "lc-offset-horz": 0,
                        "lc-font-size": "12px",
                        "lc-font-family": "",
                        "lc-font-style": "",
                        "lc-bkg-color": "",
                        "lc-color": "",
                        "lc-border-width": "0",
                        "lc-border-style": "",
                        "lc-border-color": "",
                        "lc-border-radius": 10,
                        "lc-zindex": 0
                      },
                      "style": {
                        "left": "397px",
                        "top": "660px",
                        "width": "230px",
                        "height": "37px",
                        "z-index": "2"
                      },
                      "widgetSet": "hqwidgets"
                    },
                    "e00004": {
                      "tpl": "tplIFrame",
                      "data": {
                        "g_fixed": false,
                        "g_visibility": false,
                        "g_css_font_text": false,
                        "g_css_background": false,
                        "g_css_shadow_padding": false,
                        "g_css_border": false,
                        "g_gestures": false,
                        "g_signals": false,
                        "g_last_change": false,
                        "visibility-cond": "==",
                        "visibility-val": 1,
                        "visibility-groups-action": "hide",
                        "refreshInterval": "0",
                        "seamless": "true",
                        "signals-cond-0": "==",
                        "signals-val-0": true,
                        "signals-icon-0": "/vis/signals/lowbattery.png",
                        "signals-icon-size-0": 0,
                        "signals-blink-0": false,
                        "signals-horz-0": 0,
                        "signals-vert-0": 0,
                        "signals-hide-edit-0": false,
                        "signals-cond-1": "==",
                        "signals-val-1": true,
                        "signals-icon-1": "/vis/signals/lowbattery.png",
                        "signals-icon-size-1": 0,
                        "signals-blink-1": false,
                        "signals-horz-1": 0,
                        "signals-vert-1": 0,
                        "signals-hide-edit-1": false,
                        "signals-cond-2": "==",
                        "signals-val-2": true,
                        "signals-icon-2": "/vis/signals/lowbattery.png",
                        "signals-icon-size-2": 0,
                        "signals-blink-2": false,
                        "signals-horz-2": 0,
                        "signals-vert-2": 0,
                        "signals-hide-edit-2": false,
                        "lc-type": "last-change",
                        "lc-is-interval": true,
                        "lc-is-moment": false,
                        "lc-format": "",
                        "lc-position-vert": "top",
                        "lc-position-horz": "right",
                        "lc-offset-vert": 0,
                        "lc-offset-horz": 0,
                        "lc-font-size": "12px",
                        "lc-font-family": "",
                        "lc-font-style": "",
                        "lc-bkg-color": "",
                        "lc-color": "",
                        "lc-border-width": "0",
                        "lc-border-style": "",
                        "lc-border-color": "",
                        "lc-border-radius": 10,
                        "lc-zindex": 0,
                        "src": "http://192.168.1.100:8082/flot/index.html?timeType=relative&relativeEnd=now&range=1440&aggregateType=count&aggregateSpan=300&hoverDetail=false&useComma=false&zoom=false&noedit=true&animation=0&l%5B0%5D%5Bid%5D=mqtt.0.ESPEasy3_3.dummy.Inhalt&l%5B0%5D%5Binstance%5D=sql.0&l%5B0%5D%5Boffset%5D=0&l%5B0%5D%5Baggregate%5D=minmax&l%5B0%5D%5Bcolor%5D=%23FF0000&l%5B0%5D%5Bmin%5D=0&l%5B0%5D%5Bmax%5D=7000&l%5B0%5D%5Bthickness%5D=1&l%5B0%5D%5Bshadowsize%5D=2&l%5B0%5D%5Bunit%5D=Liter&l%5B0%5D%5Bname%5D=Inhalt+Zisterne&l%5B0%5D%5Byaxe%5D=left&l%5B0%5D%5Bpoints%5D=false&l%5B0%5D%5Bfill%5D=.1&l%5B0%5D%5BafterComma%5D=0&l%5B0%5D%5Bdashes%5D=false&l%5B0%5D%5BdashLength%5D=10&l%5B0%5D%5BspaceLength%5D=10&l%5B1%5D%5Bid%5D=mqtt.0.ESPEasy3_3.dummy.Prozent&l%5B1%5D%5Binstance%5D=sql.0&l%5B1%5D%5Boffset%5D=0&l%5B1%5D%5Baggregate%5D=minmax&l%5B1%5D%5Bcolor%5D=%2300FF00&l%5B1%5D%5Bmin%5D=0&l%5B1%5D%5Bmax%5D=120&l%5B1%5D%5Bthickness%5D=1&l%5B1%5D%5Bshadowsize%5D=2&l%5B1%5D%5Bfill%5D=.1&l%5B1%5D%5Bunit%5D=%25&l%5B1%5D%5Byaxe%5D=right&l%5B1%5D%5Bname%5D=Prozent&l%5B1%5D%5Bxaxe%5D=off&l%5B1%5D%5BafterComma%5D=2&l%5B1%5D%5Bdashes%5D=false&l%5B1%5D%5BdashLength%5D=10&l%5B1%5D%5BspaceLength%5D=10&live=10&noBorder=noborder&bg=%23303030&x_labels_color=%23ffffff&y_labels_color=%23ffffff&barLabels=topover&title=Zisterne-F%C3%BCllstand&titlePos=top%3A35%3Bleft%3A50&titleColor=%23ffffff&legend=nw&timeFormat=%25H%3A%25M&titleSize=18&m%5B0%5D%5Bl%5D=0&m%5B0%5D%5Bv%5D=1000&m%5B0%5D%5Bf%5D=1&m%5B0%5D%5Bc%5D=%23FF0000&m%5B0%5D%5Bt%5D=3&m%5B0%5D%5Bs%5D=3&m%5B0%5D%5Bd%5D=Achtung+F%C3%BCllmenge+kritisch&m%5B0%5D%5Bp%5D=l&m%5B0%5D%5Bpy%5D=0&m%5B0%5D%5Bfc%5D=%23ffffff&m%5B0%5D%5Bfs%5D=&m%5B0%5D%5Bvl%5D=0&start=2019-10-24&start_time=12%3A00&end=2019-10-25&end_time=20%3A00"
                      },
                      "style": {
                        "left": "729px",
                        "top": "207px",
                        "width": "1128px",
                        "height": "800px",
                        "z-index": "20"
                      },
                      "widgetSet": "basic"
                    },
                    "e00005": {
                      "tpl": "tplPlump_tank_simple",
                      "data": {
                        "oid": "mqtt.0.ESPEasy3_3.dummy.Inhalt",
                        "g_fixed": false,
                        "g_visibility": false,
                        "g_css_font_text": false,
                        "g_css_background": true,
                        "g_css_shadow_padding": false,
                        "g_css_border": false,
                        "g_gestures": false,
                        "g_signals": false,
                        "visibility-cond": "==",
                        "visibility-val": 1,
                        "visibility-groups-action": "hide",
                        "type": "level",
                        "level_min": "0",
                        "level_max": "6000",
                        "color": "#dbccb8",
                        "top_water": "#3535e9",
                        "bottom_water": "#7fadf0",
                        "filter_pattern": "/vis/widgets/plumb/img/prev_tank_simple.png",
                        "filter_size": "",
                        "filter_opa": "0",
                        "conTop_level": "100",
                        "conTop_color_off": "#C0C0C0",
                        "conTop_color_on": "#00ff00",
                        "conTop_size": "20",
                        "conTop_pos": "50",
                        "signals-cond-0": "==",
                        "signals-val-0": true,
                        "signals-icon-0": "/vis/signals/lowbattery.png",
                        "signals-icon-size-0": 0,
                        "signals-blink-0": false,
                        "signals-horz-0": 0,
                        "signals-vert-0": 0,
                        "signals-hide-edit-0": false,
                        "signals-cond-1": "==",
                        "signals-val-1": true,
                        "signals-icon-1": "/vis/signals/lowbattery.png",
                        "signals-icon-size-1": 0,
                        "signals-blink-1": false,
                        "signals-horz-1": 0,
                        "signals-vert-1": 0,
                        "signals-hide-edit-1": false,
                        "signals-cond-2": "==",
                        "signals-val-2": true,
                        "signals-icon-2": "/vis/signals/lowbattery.png",
                        "signals-icon-size-2": 0,
                        "signals-blink-2": false,
                        "signals-horz-2": 0,
                        "signals-vert-2": 0,
                        "signals-hide-edit-2": false,
                        "g_conBottom": false,
                        "conBottom_level": "1",
                        "conBottom_color_off": "#C0C0C0",
                        "conBottom_color_on": "#00ff00",
                        "conBottom_size": "20",
                        "conBottom_pos": "50",
                        "g_conLeft": false,
                        "conLeft_level": "50",
                        "conLeft_color_off": "#C0C0C0",
                        "conLeft_color_on": "#00ff00",
                        "conLeft_size": "20",
                        "conLeft_pos": "50",
                        "g_conRight": false,
                        "conRight_level": "50",
                        "conRight_color_off": "#C0C0C0",
                        "conRight_color_on": "#00ff00",
                        "conRight_size": "20",
                        "conRight_pos": "50",
                        "is_filter": false,
                        "conTop_show": true,
                        "lc-type": "last-change",
                        "lc-is-interval": true,
                        "lc-is-moment": false,
                        "lc-format": "",
                        "lc-position-vert": "top",
                        "lc-position-horz": "right",
                        "lc-offset-vert": 0,
                        "lc-offset-horz": 0,
                        "lc-font-size": "12px",
                        "lc-font-family": "",
                        "lc-font-style": "",
                        "lc-bkg-color": "",
                        "lc-color": "",
                        "lc-border-width": "0",
                        "lc-border-style": "",
                        "lc-border-color": "",
                        "lc-border-radius": 10,
                        "lc-zindex": 0
                      },
                      "style": {
                        "left": "332px",
                        "top": "358px",
                        "width": "312px",
                        "height": "294px",
                        "z-index": "30"
                      },
                      "widgetSet": "plumb"
                    },
                    "e00006": {
                      "tpl": "tplImage",
                      "data": {
                        "g_fixed": false,
                        "g_visibility": false,
                        "g_css_font_text": false,
                        "g_css_background": false,
                        "g_css_shadow_padding": false,
                        "g_css_border": false,
                        "g_gestures": false,
                        "g_signals": false,
                        "g_last_change": false,
                        "visibility-cond": "==",
                        "visibility-val": 1,
                        "visibility-groups-action": "hide",
                        "refreshInterval": "0",
                        "signals-cond-0": "==",
                        "signals-val-0": true,
                        "signals-icon-0": "/vis/signals/lowbattery.png",
                        "signals-icon-size-0": 0,
                        "signals-blink-0": false,
                        "signals-horz-0": 0,
                        "signals-vert-0": 0,
                        "signals-hide-edit-0": false,
                        "signals-cond-1": "==",
                        "signals-val-1": true,
                        "signals-icon-1": "/vis/signals/lowbattery.png",
                        "signals-icon-size-1": 0,
                        "signals-blink-1": false,
                        "signals-horz-1": 0,
                        "signals-vert-1": 0,
                        "signals-hide-edit-1": false,
                        "signals-cond-2": "==",
                        "signals-val-2": true,
                        "signals-icon-2": "/vis/signals/lowbattery.png",
                        "signals-icon-size-2": 0,
                        "signals-blink-2": false,
                        "signals-horz-2": 0,
                        "signals-vert-2": 0,
                        "signals-hide-edit-2": false,
                        "lc-type": "last-change",
                        "lc-is-interval": true,
                        "lc-is-moment": false,
                        "lc-format": "",
                        "lc-position-vert": "top",
                        "lc-position-horz": "right",
                        "lc-offset-vert": 0,
                        "lc-offset-horz": 0,
                        "lc-font-size": "12px",
                        "lc-font-family": "",
                        "lc-font-style": "",
                        "lc-bkg-color": "",
                        "lc-color": "",
                        "lc-border-width": "0",
                        "lc-border-style": "",
                        "lc-border-color": "",
                        "lc-border-radius": 10,
                        "lc-zindex": 0,
                        "src": "/vis.0/main/img/zisterne1.png"
                      },
                      "style": {
                        "left": "251px",
                        "top": "208px",
                        "width": "453px",
                        "height": "573px",
                        "z-index": "1"
                      },
                      "widgetSet": "basic"
                    },
                    "e00007": {
                      "tpl": "tplCGradialGauge",
                      "data": {
                        "g_fixed": false,
                        "g_visibility": false,
                        "g_css_font_text": false,
                        "g_css_background": false,
                        "g_css_shadow_padding": false,
                        "g_css_border": false,
                        "g_gestures": false,
                        "g_signals": false,
                        "g_last_change": false,
                        "visibility-cond": "==",
                        "visibility-val": 1,
                        "visibility-groups-action": "hide",
                        "factor": "1",
                        "valueOffset": "0",
                        "hCount": "10",
                        "minorTicks": "6",
                        "animation": "true",
                        "needle": "true",
                        "needleShadow": "true",
                        "needleType": "line",
                        "valueBox": "false",
                        "ticksAngle": "270",
                        "startAngle": "45",
                        "signals-cond-0": "==",
                        "signals-val-0": true,
                        "signals-icon-0": "/vis/signals/lowbattery.png",
                        "signals-icon-size-0": 0,
                        "signals-blink-0": false,
                        "signals-horz-0": 0,
                        "signals-vert-0": 0,
                        "signals-hide-edit-0": false,
                        "signals-cond-1": "==",
                        "signals-val-1": true,
                        "signals-icon-1": "/vis/signals/lowbattery.png",
                        "signals-icon-size-1": 0,
                        "signals-blink-1": false,
                        "signals-horz-1": 0,
                        "signals-vert-1": 0,
                        "signals-hide-edit-1": false,
                        "signals-cond-2": "==",
                        "signals-val-2": true,
                        "signals-icon-2": "/vis/signals/lowbattery.png",
                        "signals-icon-size-2": 0,
                        "signals-blink-2": false,
                        "signals-horz-2": 0,
                        "signals-vert-2": 0,
                        "signals-hide-edit-2": false,
                        "lc-type": "last-change",
                        "lc-is-interval": true,
                        "lc-is-moment": false,
                        "lc-format": "",
                        "lc-position-vert": "top",
                        "lc-position-horz": "right",
                        "lc-offset-vert": 0,
                        "lc-offset-horz": 0,
                        "lc-font-size": "12px",
                        "lc-font-family": "",
                        "lc-font-style": "",
                        "lc-bkg-color": "",
                        "lc-color": "",
                        "lc-border-width": "0",
                        "lc-border-style": "",
                        "lc-border-color": "",
                        "lc-border-radius": 10,
                        "lc-zindex": 0,
                        "oid": "mqtt.0.ESPEasy3_3.dummy.Inhalt",
                        "minValue": "0",
                        "maxValue": "7000",
                        "units": "Liter",
                        "title": "Zisterne",
                        "highlightsFrom1": "0",
                        "highlightsTo1": "600",
                        "highlightsColor1": "#56c1eb",
                        "highlightsFrom2": "600",
                        "highlightsTo2": "1200",
                        "highlightsColor2": "#b2e46c",
                        "highlightsFrom3": "1200",
                        "highlightsTo3": "1800",
                        "highlightsColor3": "#f59b7f",
                        "animationRule": "cycle",
                        "animationDuration": "400",
                        "animatedValue": true,
                        "animateOnInit": true,
                        "animationTarget": "needle",
                        "colorValueBoxBackground": "transparent",
                        "colorTitle": "transparent",
                        "colorBorderOuter": "transparent",
                        "colorBorderOuterEnd": "transparent",
                        "colorValueBoxRect": "transparent",
                        "colorValueBoxRectEnd": "transparent",
                        "colorValueBoxShadow": "",
                        "colorPlate": "transparent",
                        "colorPlateEnd": "",
                        "fontNumbers": "",
                        "fontUnits": "",
                        "fontValue": "",
                        "colorNeedleCircleOuter": "",
                        "colorNeedleCircleOuterEnd": "",
                        "colorNeedleCircleInner": "",
                        "colorNeedleCircleInnerEnd": "",
                        "needleCircleInner": false,
                        "needleCircleOuter": false,
                        "fontUnitsSize": "30",
                        "fontValueSize": "50px",
                        "fontTitleSize": "",
                        "fontNumbersStyle": "normal",
                        "fontUnitsStyle": "normal",
                        "fontValueStyle": "normal",
                        "fontNumbersWeight": "normal",
                        "fontNumbersSize": "",
                        "fontTitleStyle": "normal",
                        "fontUnitsWeight": "50px",
                        "fontTitleWeight": "",
                        "fontValueWeight": "50px",
                        "colorUnits": "#fcfffa",
                        "colorNumbers": "#fcfffa",
                        "majorTicksInt": "20",
                        "majorTicksDec": "20",
                        "strokeTicks": true,
                        "needleStart": "",
                        "needleEnd": "",
                        "needleWidth": "",
                        "colorNeedle": "#fcfffa",
                        "colorNeedleEnd": "#cb1010",
                        "colorMajorTicks": "",
                        "colorValueText": "#fcfffa",
                        "g_borders": true,
                        "borders": "true",
                        "borderOuterWidth": "",
                        "borderMiddleWidth": "",
                        "borderInnerWidth": "",
                        "borderShadowWidth": "",
                        "colorBorderShadow": "transparent",
                        "colorBorderInner": "transparent",
                        "colorBorderInnerEnd": "transparent",
                        "colorMinorTicks": "",
                        "colorValueTextShadow": "transparent",
                        "colorBorderMiddle": "transparent",
                        "colorBorderMiddleEnd": "transparent",
                        "highlightsFrom4": "1800",
                        "highlightsTo4": "2400",
                        "highlightsColor4": "#e84f4f",
                        "highlightsFrom5": "2400",
                        "highlightsTo5": "3000",
                        "highlightsColor5": "#5f0707",
                        "highlightsFrom6": "3000",
                        "highlightsTo6": "3600",
                        "highlightsFrom7": "3600",
                        "highlightsTo7": "4200",
                        "highlightsFrom8": "4200",
                        "highlightsTo8": "4800",
                        "highlightsFrom9": "4800",
                        "highlightsTo9": "5400",
                        "highlightsFrom10": "5400",
                        "highlightsTo10": "7000",
                        "highlightsColor10": "#7edc50",
                        "highlightsColor9": "#7edc50",
                        "highlightsColor8": "#7edc50",
                        "highlightsColor7": "#7edc50",
                        "highlightsColor6": "#99dc50"
                      },
                      "style": {
                        "left": "281px",
                        "top": "750px",
                        "width": "200px",
                        "height": "200px",
                        "z-index": "10"
                      },
                      "widgetSet": "canvas-gauges"
                    },
                    "e00008": {
                      "tpl": "tplCGradialGauge",
                      "data": {
                        "g_fixed": false,
                        "g_visibility": false,
                        "g_css_font_text": false,
                        "g_css_background": false,
                        "g_css_shadow_padding": false,
                        "g_css_border": false,
                        "g_gestures": false,
                        "g_signals": false,
                        "g_last_change": false,
                        "visibility-cond": "==",
                        "visibility-val": 1,
                        "visibility-groups-action": "hide",
                        "factor": "1",
                        "valueOffset": "0",
                        "hCount": "10",
                        "minorTicks": "6",
                        "animation": "true",
                        "needle": "true",
                        "needleShadow": "true",
                        "needleType": "line",
                        "valueBox": "false",
                        "ticksAngle": "270",
                        "startAngle": "45",
                        "signals-cond-0": "==",
                        "signals-val-0": true,
                        "signals-icon-0": "/vis/signals/lowbattery.png",
                        "signals-icon-size-0": 0,
                        "signals-blink-0": false,
                        "signals-horz-0": 0,
                        "signals-vert-0": 0,
                        "signals-hide-edit-0": false,
                        "signals-cond-1": "==",
                        "signals-val-1": true,
                        "signals-icon-1": "/vis/signals/lowbattery.png",
                        "signals-icon-size-1": 0,
                        "signals-blink-1": false,
                        "signals-horz-1": 0,
                        "signals-vert-1": 0,
                        "signals-hide-edit-1": false,
                        "signals-cond-2": "==",
                        "signals-val-2": true,
                        "signals-icon-2": "/vis/signals/lowbattery.png",
                        "signals-icon-size-2": 0,
                        "signals-blink-2": false,
                        "signals-horz-2": 0,
                        "signals-vert-2": 0,
                        "signals-hide-edit-2": false,
                        "lc-type": "last-change",
                        "lc-is-interval": true,
                        "lc-is-moment": false,
                        "lc-format": "",
                        "lc-position-vert": "top",
                        "lc-position-horz": "right",
                        "lc-offset-vert": 0,
                        "lc-offset-horz": 0,
                        "lc-font-size": "12px",
                        "lc-font-family": "",
                        "lc-font-style": "",
                        "lc-bkg-color": "",
                        "lc-color": "",
                        "lc-border-width": "0",
                        "lc-border-style": "",
                        "lc-border-color": "",
                        "lc-border-radius": 10,
                        "lc-zindex": 0,
                        "oid": "mqtt.0.ESPEasy3_3.dummy.Prozent",
                        "minValue": "0",
                        "maxValue": "130",
                        "units": "Prozent",
                        "title": "Zisterne",
                        "highlightsFrom1": "0",
                        "highlightsTo1": "10",
                        "highlightsColor1": "#56c1eb",
                        "highlightsFrom2": "10",
                        "highlightsTo2": "20",
                        "highlightsColor2": "#b2e46c",
                        "highlightsFrom3": "20",
                        "highlightsTo3": "30",
                        "highlightsColor3": "#f59b7f",
                        "animationRule": "cycle",
                        "animationDuration": "400",
                        "animatedValue": true,
                        "animateOnInit": true,
                        "animationTarget": "needle",
                        "colorValueBoxBackground": "transparent",
                        "colorTitle": "transparent",
                        "colorBorderOuter": "transparent",
                        "colorBorderOuterEnd": "transparent",
                        "colorValueBoxRect": "transparent",
                        "colorValueBoxRectEnd": "transparent",
                        "colorValueBoxShadow": "",
                        "colorPlate": "transparent",
                        "colorPlateEnd": "",
                        "fontNumbers": "",
                        "fontUnits": "",
                        "fontValue": "",
                        "colorNeedleCircleOuter": "",
                        "colorNeedleCircleOuterEnd": "",
                        "colorNeedleCircleInner": "",
                        "colorNeedleCircleInnerEnd": "",
                        "needleCircleInner": false,
                        "needleCircleOuter": false,
                        "fontUnitsSize": "30",
                        "fontValueSize": "50px",
                        "fontTitleSize": "",
                        "fontNumbersStyle": "normal",
                        "fontUnitsStyle": "normal",
                        "fontValueStyle": "normal",
                        "fontNumbersWeight": "normal",
                        "fontNumbersSize": "",
                        "fontTitleStyle": "normal",
                        "fontUnitsWeight": "50px",
                        "fontTitleWeight": "",
                        "fontValueWeight": "50px",
                        "colorUnits": "#fcfffa",
                        "colorNumbers": "#fcfffa",
                        "majorTicksInt": "20",
                        "majorTicksDec": "20",
                        "strokeTicks": true,
                        "needleStart": "",
                        "needleEnd": "",
                        "needleWidth": "",
                        "colorNeedle": "#fcfffa",
                        "colorNeedleEnd": "#cb1010",
                        "colorMajorTicks": "",
                        "colorValueText": "#fcfffa",
                        "g_borders": true,
                        "borders": "true",
                        "borderOuterWidth": "",
                        "borderMiddleWidth": "",
                        "borderInnerWidth": "",
                        "borderShadowWidth": "",
                        "colorBorderShadow": "transparent",
                        "colorBorderInner": "transparent",
                        "colorBorderInnerEnd": "transparent",
                        "colorMinorTicks": "",
                        "colorValueTextShadow": "transparent",
                        "colorBorderMiddle": "transparent",
                        "colorBorderMiddleEnd": "transparent",
                        "highlightsFrom4": "30",
                        "highlightsTo4": "40",
                        "highlightsColor4": "#e84f4f",
                        "highlightsFrom5": "40",
                        "highlightsTo5": "50",
                        "highlightsColor5": "#5f0707",
                        "highlightsFrom6": "50",
                        "highlightsTo6": "60",
                        "highlightsFrom7": "60",
                        "highlightsTo7": "70",
                        "highlightsFrom8": "70",
                        "highlightsTo8": "80",
                        "highlightsFrom9": "80",
                        "highlightsTo9": "90",
                        "highlightsFrom10": "90",
                        "highlightsTo10": "130",
                        "highlightsColor10": "#7edc50",
                        "highlightsColor9": "#7edc50",
                        "highlightsColor8": "#7edc50",
                        "highlightsColor7": "#7edc50",
                        "highlightsColor6": "#99dc50"
                      },
                      "style": {
                        "left": "496px",
                        "top": "750px",
                        "width": "200px",
                        "height": "200px",
                        "z-index": "18"
                      },
                      "widgetSet": "canvas-gauges"
                    },
                    "e00009": {
                      "tpl": "tplHqOdometer",
                      "data": {
                        "oid": "mqtt.0.ESPEasy3_3.dummy.Inhalt",
                        "g_fixed": true,
                        "g_visibility": false,
                        "g_css_font_text": true,
                        "g_css_background": false,
                        "g_css_shadow_padding": false,
                        "g_css_border": false,
                        "g_gestures": false,
                        "g_signals": false,
                        "style": "car",
                        "format": "(ddddd),dd",
                        "factor": "1",
                        "leadingZeros": "true",
                        "signals-cond-0": "==",
                        "signals-val-0": true,
                        "signals-icon-0": "/vis/signals/lowbattery.png",
                        "signals-icon-size-0": 0,
                        "signals-blink-0": false,
                        "signals-horz-0": 0,
                        "signals-vert-0": 0,
                        "signals-hide-edit-0": false,
                        "signals-cond-1": "==",
                        "signals-val-1": true,
                        "signals-icon-1": "/vis/signals/lowbattery.png",
                        "signals-icon-size-1": 0,
                        "signals-blink-1": false,
                        "signals-horz-1": 0,
                        "signals-vert-1": 0,
                        "signals-hide-edit-1": false,
                        "signals-cond-2": "==",
                        "signals-val-2": true,
                        "signals-icon-2": "/vis/signals/lowbattery.png",
                        "signals-icon-size-2": 0,
                        "signals-blink-2": false,
                        "signals-horz-2": 0,
                        "signals-vert-2": 0,
                        "signals-hide-edit-2": false,
                        "name": "Liter",
                        "visibility-cond": "==",
                        "visibility-val": 1,
                        "visibility-groups-action": "hide",
                        "lc-type": "last-change",
                        "lc-is-interval": true,
                        "lc-is-moment": false,
                        "lc-format": "",
                        "lc-position-vert": "top",
                        "lc-position-horz": "right",
                        "lc-offset-vert": 0,
                        "lc-offset-horz": 0,
                        "lc-font-size": "12px",
                        "lc-font-family": "",
                        "lc-font-style": "",
                        "lc-bkg-color": "",
                        "lc-color": "",
                        "lc-border-width": "0",
                        "lc-border-style": "",
                        "lc-border-color": "",
                        "lc-border-radius": 10,
                        "lc-zindex": 0,
                        "g_extended": true
                      },
                      "style": {
                        "left": "307.015625px",
                        "top": "961px",
                        "width": "162px",
                        "height": "37px",
                        "z-index": "2"
                      },
                      "widgetSet": "hqwidgets"
                    },
                    "e00010": {
                      "tpl": "tplHqOdometer",
                      "data": {
                        "oid": "mqtt.0.ESPEasy3_3.dummy.Prozent",
                        "g_fixed": true,
                        "g_visibility": false,
                        "g_css_font_text": true,
                        "g_css_background": false,
                        "g_css_shadow_padding": false,
                        "g_css_border": false,
                        "g_gestures": false,
                        "g_signals": false,
                        "style": "car",
                        "format": "(ddddd),dd",
                        "factor": "1",
                        "leadingZeros": "true",
                        "signals-cond-0": "==",
                        "signals-val-0": true,
                        "signals-icon-0": "/vis/signals/lowbattery.png",
                        "signals-icon-size-0": 0,
                        "signals-blink-0": false,
                        "signals-horz-0": 0,
                        "signals-vert-0": 0,
                        "signals-hide-edit-0": false,
                        "signals-cond-1": "==",
                        "signals-val-1": true,
                        "signals-icon-1": "/vis/signals/lowbattery.png",
                        "signals-icon-size-1": 0,
                        "signals-blink-1": false,
                        "signals-horz-1": 0,
                        "signals-vert-1": 0,
                        "signals-hide-edit-1": false,
                        "signals-cond-2": "==",
                        "signals-val-2": true,
                        "signals-icon-2": "/vis/signals/lowbattery.png",
                        "signals-icon-size-2": 0,
                        "signals-blink-2": false,
                        "signals-horz-2": 0,
                        "signals-vert-2": 0,
                        "signals-hide-edit-2": false,
                        "name": "Liter",
                        "visibility-cond": "==",
                        "visibility-val": 1,
                        "visibility-groups-action": "hide",
                        "lc-type": "last-change",
                        "lc-is-interval": true,
                        "lc-is-moment": false,
                        "lc-format": "",
                        "lc-position-vert": "top",
                        "lc-position-horz": "right",
                        "lc-offset-vert": 0,
                        "lc-offset-horz": 0,
                        "lc-font-size": "12px",
                        "lc-font-family": "",
                        "lc-font-style": "",
                        "lc-bkg-color": "",
                        "lc-color": "",
                        "lc-border-width": "0",
                        "lc-border-style": "",
                        "lc-border-color": "",
                        "lc-border-radius": 10,
                        "lc-zindex": 0,
                        "g_extended": true
                      },
                      "style": {
                        "left": "516px",
                        "top": "961px",
                        "width": "162px",
                        "height": "37px",
                        "z-index": "2"
                      },
                      "widgetSet": "hqwidgets"
                    },
                    "e00011": {
                      "tpl": "tplContainerView",
                      "data": {
                        "g_fixed": false,
                        "g_visibility": false,
                        "g_css_font_text": false,
                        "g_css_background": false,
                        "g_css_shadow_padding": false,
                        "g_css_border": false,
                        "g_gestures": false,
                        "g_signals": false,
                        "g_last_change": false,
                        "visibility-cond": "==",
                        "visibility-val": 1,
                        "visibility-groups-action": "hide",
                        "signals-cond-0": "==",
                        "signals-val-0": true,
                        "signals-icon-0": "/vis/signals/lowbattery.png",
                        "signals-icon-size-0": 0,
                        "signals-blink-0": false,
                        "signals-horz-0": 0,
                        "signals-vert-0": 0,
                        "signals-hide-edit-0": false,
                        "signals-cond-1": "==",
                        "signals-val-1": true,
                        "signals-icon-1": "/vis/signals/lowbattery.png",
                        "signals-icon-size-1": 0,
                        "signals-blink-1": false,
                        "signals-horz-1": 0,
                        "signals-vert-1": 0,
                        "signals-hide-edit-1": false,
                        "signals-cond-2": "==",
                        "signals-val-2": true,
                        "signals-icon-2": "/vis/signals/lowbattery.png",
                        "signals-icon-size-2": 0,
                        "signals-blink-2": false,
                        "signals-horz-2": 0,
                        "signals-vert-2": 0,
                        "signals-hide-edit-2": false,
                        "lc-type": "last-change",
                        "lc-is-interval": true,
                        "lc-is-moment": false,
                        "lc-format": "",
                        "lc-position-vert": "top",
                        "lc-position-horz": "right",
                        "lc-offset-vert": 0,
                        "lc-offset-horz": 0,
                        "lc-font-size": "12px",
                        "lc-font-family": "",
                        "lc-font-style": "",
                        "lc-bkg-color": "",
                        "lc-color": "",
                        "lc-border-width": "0",
                        "lc-border-style": "",
                        "lc-border-color": "",
                        "lc-border-radius": 10,
                        "lc-zindex": 0,
                        "contains_view": "348_ueberschrift"
                      },
                      "style": {
                        "left": "245px",
                        "top": "12px",
                        "width": "1350px",
                        "height": "180px",
                        "z-index": "20"
                      },
                      "widgetSet": "basic"
                    }
                  },
                  "name": "365_zisterne",
                  "filterList": []
                }
                

                Wenn noch etwas benötigt wird, einfach melden. Habe die Widgets für Navi und Überschrift nicht mitgeliefert. Wenn Du sie benötigst, dann bitte melden. Bei der Zisterne liegen zwei Widgets übereinander, bitte die Gruppen auflösen.

                https://schlepper-petersdorf.jimdofree.com/

                L F 2 Antworten Letzte Antwort
                0
                • opossumO opossum

                  Hallo, @ltathome ,

                  habe meine View mal exportiert:

                  {
                    "settings": {
                      "style": {
                        "background_class": "hq-background-h-gradient-black-3"
                      },
                      "theme": "dark-hive",
                      "sizex": "1920",
                      "sizey": "1080",
                      "gridSize": "",
                      "useBackground": false,
                      "snapType": null
                    },
                    "widgets": {
                      "e00001": {
                        "tpl": "tplHtml",
                        "data": {
                          "g_fixed": true,
                          "g_visibility": false,
                          "g_css_font_text": false,
                          "g_css_background": false,
                          "g_css_shadow_padding": false,
                          "g_css_border": false,
                          "g_gestures": false,
                          "g_signals": false,
                          "g_last_change": false,
                          "visibility-cond": "==",
                          "visibility-val": 1,
                          "visibility-groups-action": "hide",
                          "refreshInterval": "0",
                          "signals-cond-0": "==",
                          "signals-val-0": true,
                          "signals-icon-0": "/vis/signals/lowbattery.png",
                          "signals-icon-size-0": 0,
                          "signals-blink-0": false,
                          "signals-horz-0": 0,
                          "signals-vert-0": 0,
                          "signals-hide-edit-0": false,
                          "signals-cond-1": "==",
                          "signals-val-1": true,
                          "signals-icon-1": "/vis/signals/lowbattery.png",
                          "signals-icon-size-1": 0,
                          "signals-blink-1": false,
                          "signals-horz-1": 0,
                          "signals-vert-1": 0,
                          "signals-hide-edit-1": false,
                          "signals-cond-2": "==",
                          "signals-val-2": true,
                          "signals-icon-2": "/vis/signals/lowbattery.png",
                          "signals-icon-size-2": 0,
                          "signals-blink-2": false,
                          "signals-horz-2": 0,
                          "signals-vert-2": 0,
                          "signals-hide-edit-2": false,
                          "lc-type": "last-change",
                          "lc-is-interval": true,
                          "lc-is-moment": false,
                          "lc-format": "",
                          "lc-position-vert": "top",
                          "lc-position-horz": "right",
                          "lc-offset-vert": 0,
                          "lc-offset-horz": 0,
                          "lc-font-size": "12px",
                          "lc-font-family": "",
                          "lc-font-style": "",
                          "lc-bkg-color": "",
                          "lc-color": "",
                          "lc-border-width": "0",
                          "lc-border-style": "",
                          "lc-border-color": "",
                          "lc-border-radius": 10,
                          "lc-zindex": 0,
                          "html": "",
                          "views": [
                            "101_kalender",
                            "103_aussenlicht_bedienung",
                            "104_klima",
                            "105_batterien",
                            "106_rollos_bedienung",
                            "107_netzwerk_ccu_status",
                            "108_wetter_tag_1",
                            "109_tv_vu_plus",
                            "110_diagramm_kraftstoff",
                            "111_diagramm_heizung_arbeitszimmer",
                            "112_diagramm_heizung_wohnzimmer",
                            "113_diagramm_heizung_esszimmer",
                            "114_diagramm_heizung_kueche",
                            "115_diagramm_heizung_gaestebad",
                            "116_diagramm_heizung_flur_unten",
                            "117_diagramm_heizung_gaestezimmer",
                            "118_diagramm_heizung_schlafzimmer",
                            "119_diagramm_heizung_bad_oben",
                            "316_wetter_tag_2",
                            "317_wetter_tag_3",
                            "318_wetter_tag_4",
                            "319_wetter_tag_5"
                          ]
                        },
                        "style": {
                          "left": "1600px",
                          "top": "14px",
                          "width": "164px",
                          "height": "47px"
                        },
                        "widgetSet": "basic"
                      },
                      "e00002": {
                        "tpl": "tplContainerView",
                        "data": {
                          "g_fixed": false,
                          "g_visibility": false,
                          "g_css_font_text": false,
                          "g_css_background": true,
                          "g_css_shadow_padding": false,
                          "g_css_border": false,
                          "g_gestures": false,
                          "g_signals": false,
                          "g_last_change": false,
                          "visibility-cond": "==",
                          "visibility-val": 1,
                          "visibility-groups-action": "hide",
                          "signals-cond-0": "==",
                          "signals-val-0": true,
                          "signals-icon-0": "/vis/signals/lowbattery.png",
                          "signals-icon-size-0": 0,
                          "signals-blink-0": false,
                          "signals-horz-0": 0,
                          "signals-vert-0": 0,
                          "signals-hide-edit-0": false,
                          "signals-cond-1": "==",
                          "signals-val-1": true,
                          "signals-icon-1": "/vis/signals/lowbattery.png",
                          "signals-icon-size-1": 0,
                          "signals-blink-1": false,
                          "signals-horz-1": 0,
                          "signals-vert-1": 0,
                          "signals-hide-edit-1": false,
                          "signals-cond-2": "==",
                          "signals-val-2": true,
                          "signals-icon-2": "/vis/signals/lowbattery.png",
                          "signals-icon-size-2": 0,
                          "signals-blink-2": false,
                          "signals-horz-2": 0,
                          "signals-vert-2": 0,
                          "signals-hide-edit-2": false,
                          "lc-type": "last-change",
                          "lc-is-interval": true,
                          "lc-is-moment": false,
                          "lc-format": "",
                          "lc-position-vert": "top",
                          "lc-position-horz": "right",
                          "lc-offset-vert": 0,
                          "lc-offset-horz": 0,
                          "lc-font-size": "12px",
                          "lc-font-family": "",
                          "lc-font-style": "",
                          "lc-bkg-color": "",
                          "lc-color": "",
                          "lc-border-width": "0",
                          "lc-border-style": "",
                          "lc-border-color": "",
                          "lc-border-radius": 10,
                          "lc-zindex": 0,
                          "contains_view": "201_navigation"
                        },
                        "style": {
                          "left": "41px",
                          "top": "5px",
                          "width": "172px",
                          "height": "1000px",
                          "z-index": "50"
                        },
                        "widgetSet": "basic"
                      },
                      "e00003": {
                        "tpl": "tplHqOdometer",
                        "data": {
                          "oid": "mqtt.0.ESPEasy3_3.dummy.Inhalt",
                          "g_fixed": true,
                          "g_visibility": false,
                          "g_css_font_text": true,
                          "g_css_background": false,
                          "g_css_shadow_padding": false,
                          "g_css_border": false,
                          "g_gestures": false,
                          "g_signals": false,
                          "style": "car",
                          "format": "(ddddd),dd",
                          "factor": "1",
                          "leadingZeros": "true",
                          "signals-cond-0": "==",
                          "signals-val-0": true,
                          "signals-icon-0": "/vis/signals/lowbattery.png",
                          "signals-icon-size-0": 0,
                          "signals-blink-0": false,
                          "signals-horz-0": 0,
                          "signals-vert-0": 0,
                          "signals-hide-edit-0": false,
                          "signals-cond-1": "==",
                          "signals-val-1": true,
                          "signals-icon-1": "/vis/signals/lowbattery.png",
                          "signals-icon-size-1": 0,
                          "signals-blink-1": false,
                          "signals-horz-1": 0,
                          "signals-vert-1": 0,
                          "signals-hide-edit-1": false,
                          "signals-cond-2": "==",
                          "signals-val-2": true,
                          "signals-icon-2": "/vis/signals/lowbattery.png",
                          "signals-icon-size-2": 0,
                          "signals-blink-2": false,
                          "signals-horz-2": 0,
                          "signals-vert-2": 0,
                          "signals-hide-edit-2": false,
                          "name": "Liter",
                          "visibility-cond": "==",
                          "visibility-val": 1,
                          "visibility-groups-action": "hide",
                          "lc-type": "last-change",
                          "lc-is-interval": true,
                          "lc-is-moment": false,
                          "lc-format": "",
                          "lc-position-vert": "top",
                          "lc-position-horz": "right",
                          "lc-offset-vert": 0,
                          "lc-offset-horz": 0,
                          "lc-font-size": "12px",
                          "lc-font-family": "",
                          "lc-font-style": "",
                          "lc-bkg-color": "",
                          "lc-color": "",
                          "lc-border-width": "0",
                          "lc-border-style": "",
                          "lc-border-color": "",
                          "lc-border-radius": 10,
                          "lc-zindex": 0
                        },
                        "style": {
                          "left": "397px",
                          "top": "660px",
                          "width": "230px",
                          "height": "37px",
                          "z-index": "2"
                        },
                        "widgetSet": "hqwidgets"
                      },
                      "e00004": {
                        "tpl": "tplIFrame",
                        "data": {
                          "g_fixed": false,
                          "g_visibility": false,
                          "g_css_font_text": false,
                          "g_css_background": false,
                          "g_css_shadow_padding": false,
                          "g_css_border": false,
                          "g_gestures": false,
                          "g_signals": false,
                          "g_last_change": false,
                          "visibility-cond": "==",
                          "visibility-val": 1,
                          "visibility-groups-action": "hide",
                          "refreshInterval": "0",
                          "seamless": "true",
                          "signals-cond-0": "==",
                          "signals-val-0": true,
                          "signals-icon-0": "/vis/signals/lowbattery.png",
                          "signals-icon-size-0": 0,
                          "signals-blink-0": false,
                          "signals-horz-0": 0,
                          "signals-vert-0": 0,
                          "signals-hide-edit-0": false,
                          "signals-cond-1": "==",
                          "signals-val-1": true,
                          "signals-icon-1": "/vis/signals/lowbattery.png",
                          "signals-icon-size-1": 0,
                          "signals-blink-1": false,
                          "signals-horz-1": 0,
                          "signals-vert-1": 0,
                          "signals-hide-edit-1": false,
                          "signals-cond-2": "==",
                          "signals-val-2": true,
                          "signals-icon-2": "/vis/signals/lowbattery.png",
                          "signals-icon-size-2": 0,
                          "signals-blink-2": false,
                          "signals-horz-2": 0,
                          "signals-vert-2": 0,
                          "signals-hide-edit-2": false,
                          "lc-type": "last-change",
                          "lc-is-interval": true,
                          "lc-is-moment": false,
                          "lc-format": "",
                          "lc-position-vert": "top",
                          "lc-position-horz": "right",
                          "lc-offset-vert": 0,
                          "lc-offset-horz": 0,
                          "lc-font-size": "12px",
                          "lc-font-family": "",
                          "lc-font-style": "",
                          "lc-bkg-color": "",
                          "lc-color": "",
                          "lc-border-width": "0",
                          "lc-border-style": "",
                          "lc-border-color": "",
                          "lc-border-radius": 10,
                          "lc-zindex": 0,
                          "src": "http://192.168.1.100:8082/flot/index.html?timeType=relative&relativeEnd=now&range=1440&aggregateType=count&aggregateSpan=300&hoverDetail=false&useComma=false&zoom=false&noedit=true&animation=0&l%5B0%5D%5Bid%5D=mqtt.0.ESPEasy3_3.dummy.Inhalt&l%5B0%5D%5Binstance%5D=sql.0&l%5B0%5D%5Boffset%5D=0&l%5B0%5D%5Baggregate%5D=minmax&l%5B0%5D%5Bcolor%5D=%23FF0000&l%5B0%5D%5Bmin%5D=0&l%5B0%5D%5Bmax%5D=7000&l%5B0%5D%5Bthickness%5D=1&l%5B0%5D%5Bshadowsize%5D=2&l%5B0%5D%5Bunit%5D=Liter&l%5B0%5D%5Bname%5D=Inhalt+Zisterne&l%5B0%5D%5Byaxe%5D=left&l%5B0%5D%5Bpoints%5D=false&l%5B0%5D%5Bfill%5D=.1&l%5B0%5D%5BafterComma%5D=0&l%5B0%5D%5Bdashes%5D=false&l%5B0%5D%5BdashLength%5D=10&l%5B0%5D%5BspaceLength%5D=10&l%5B1%5D%5Bid%5D=mqtt.0.ESPEasy3_3.dummy.Prozent&l%5B1%5D%5Binstance%5D=sql.0&l%5B1%5D%5Boffset%5D=0&l%5B1%5D%5Baggregate%5D=minmax&l%5B1%5D%5Bcolor%5D=%2300FF00&l%5B1%5D%5Bmin%5D=0&l%5B1%5D%5Bmax%5D=120&l%5B1%5D%5Bthickness%5D=1&l%5B1%5D%5Bshadowsize%5D=2&l%5B1%5D%5Bfill%5D=.1&l%5B1%5D%5Bunit%5D=%25&l%5B1%5D%5Byaxe%5D=right&l%5B1%5D%5Bname%5D=Prozent&l%5B1%5D%5Bxaxe%5D=off&l%5B1%5D%5BafterComma%5D=2&l%5B1%5D%5Bdashes%5D=false&l%5B1%5D%5BdashLength%5D=10&l%5B1%5D%5BspaceLength%5D=10&live=10&noBorder=noborder&bg=%23303030&x_labels_color=%23ffffff&y_labels_color=%23ffffff&barLabels=topover&title=Zisterne-F%C3%BCllstand&titlePos=top%3A35%3Bleft%3A50&titleColor=%23ffffff&legend=nw&timeFormat=%25H%3A%25M&titleSize=18&m%5B0%5D%5Bl%5D=0&m%5B0%5D%5Bv%5D=1000&m%5B0%5D%5Bf%5D=1&m%5B0%5D%5Bc%5D=%23FF0000&m%5B0%5D%5Bt%5D=3&m%5B0%5D%5Bs%5D=3&m%5B0%5D%5Bd%5D=Achtung+F%C3%BCllmenge+kritisch&m%5B0%5D%5Bp%5D=l&m%5B0%5D%5Bpy%5D=0&m%5B0%5D%5Bfc%5D=%23ffffff&m%5B0%5D%5Bfs%5D=&m%5B0%5D%5Bvl%5D=0&start=2019-10-24&start_time=12%3A00&end=2019-10-25&end_time=20%3A00"
                        },
                        "style": {
                          "left": "729px",
                          "top": "207px",
                          "width": "1128px",
                          "height": "800px",
                          "z-index": "20"
                        },
                        "widgetSet": "basic"
                      },
                      "e00005": {
                        "tpl": "tplPlump_tank_simple",
                        "data": {
                          "oid": "mqtt.0.ESPEasy3_3.dummy.Inhalt",
                          "g_fixed": false,
                          "g_visibility": false,
                          "g_css_font_text": false,
                          "g_css_background": true,
                          "g_css_shadow_padding": false,
                          "g_css_border": false,
                          "g_gestures": false,
                          "g_signals": false,
                          "visibility-cond": "==",
                          "visibility-val": 1,
                          "visibility-groups-action": "hide",
                          "type": "level",
                          "level_min": "0",
                          "level_max": "6000",
                          "color": "#dbccb8",
                          "top_water": "#3535e9",
                          "bottom_water": "#7fadf0",
                          "filter_pattern": "/vis/widgets/plumb/img/prev_tank_simple.png",
                          "filter_size": "",
                          "filter_opa": "0",
                          "conTop_level": "100",
                          "conTop_color_off": "#C0C0C0",
                          "conTop_color_on": "#00ff00",
                          "conTop_size": "20",
                          "conTop_pos": "50",
                          "signals-cond-0": "==",
                          "signals-val-0": true,
                          "signals-icon-0": "/vis/signals/lowbattery.png",
                          "signals-icon-size-0": 0,
                          "signals-blink-0": false,
                          "signals-horz-0": 0,
                          "signals-vert-0": 0,
                          "signals-hide-edit-0": false,
                          "signals-cond-1": "==",
                          "signals-val-1": true,
                          "signals-icon-1": "/vis/signals/lowbattery.png",
                          "signals-icon-size-1": 0,
                          "signals-blink-1": false,
                          "signals-horz-1": 0,
                          "signals-vert-1": 0,
                          "signals-hide-edit-1": false,
                          "signals-cond-2": "==",
                          "signals-val-2": true,
                          "signals-icon-2": "/vis/signals/lowbattery.png",
                          "signals-icon-size-2": 0,
                          "signals-blink-2": false,
                          "signals-horz-2": 0,
                          "signals-vert-2": 0,
                          "signals-hide-edit-2": false,
                          "g_conBottom": false,
                          "conBottom_level": "1",
                          "conBottom_color_off": "#C0C0C0",
                          "conBottom_color_on": "#00ff00",
                          "conBottom_size": "20",
                          "conBottom_pos": "50",
                          "g_conLeft": false,
                          "conLeft_level": "50",
                          "conLeft_color_off": "#C0C0C0",
                          "conLeft_color_on": "#00ff00",
                          "conLeft_size": "20",
                          "conLeft_pos": "50",
                          "g_conRight": false,
                          "conRight_level": "50",
                          "conRight_color_off": "#C0C0C0",
                          "conRight_color_on": "#00ff00",
                          "conRight_size": "20",
                          "conRight_pos": "50",
                          "is_filter": false,
                          "conTop_show": true,
                          "lc-type": "last-change",
                          "lc-is-interval": true,
                          "lc-is-moment": false,
                          "lc-format": "",
                          "lc-position-vert": "top",
                          "lc-position-horz": "right",
                          "lc-offset-vert": 0,
                          "lc-offset-horz": 0,
                          "lc-font-size": "12px",
                          "lc-font-family": "",
                          "lc-font-style": "",
                          "lc-bkg-color": "",
                          "lc-color": "",
                          "lc-border-width": "0",
                          "lc-border-style": "",
                          "lc-border-color": "",
                          "lc-border-radius": 10,
                          "lc-zindex": 0
                        },
                        "style": {
                          "left": "332px",
                          "top": "358px",
                          "width": "312px",
                          "height": "294px",
                          "z-index": "30"
                        },
                        "widgetSet": "plumb"
                      },
                      "e00006": {
                        "tpl": "tplImage",
                        "data": {
                          "g_fixed": false,
                          "g_visibility": false,
                          "g_css_font_text": false,
                          "g_css_background": false,
                          "g_css_shadow_padding": false,
                          "g_css_border": false,
                          "g_gestures": false,
                          "g_signals": false,
                          "g_last_change": false,
                          "visibility-cond": "==",
                          "visibility-val": 1,
                          "visibility-groups-action": "hide",
                          "refreshInterval": "0",
                          "signals-cond-0": "==",
                          "signals-val-0": true,
                          "signals-icon-0": "/vis/signals/lowbattery.png",
                          "signals-icon-size-0": 0,
                          "signals-blink-0": false,
                          "signals-horz-0": 0,
                          "signals-vert-0": 0,
                          "signals-hide-edit-0": false,
                          "signals-cond-1": "==",
                          "signals-val-1": true,
                          "signals-icon-1": "/vis/signals/lowbattery.png",
                          "signals-icon-size-1": 0,
                          "signals-blink-1": false,
                          "signals-horz-1": 0,
                          "signals-vert-1": 0,
                          "signals-hide-edit-1": false,
                          "signals-cond-2": "==",
                          "signals-val-2": true,
                          "signals-icon-2": "/vis/signals/lowbattery.png",
                          "signals-icon-size-2": 0,
                          "signals-blink-2": false,
                          "signals-horz-2": 0,
                          "signals-vert-2": 0,
                          "signals-hide-edit-2": false,
                          "lc-type": "last-change",
                          "lc-is-interval": true,
                          "lc-is-moment": false,
                          "lc-format": "",
                          "lc-position-vert": "top",
                          "lc-position-horz": "right",
                          "lc-offset-vert": 0,
                          "lc-offset-horz": 0,
                          "lc-font-size": "12px",
                          "lc-font-family": "",
                          "lc-font-style": "",
                          "lc-bkg-color": "",
                          "lc-color": "",
                          "lc-border-width": "0",
                          "lc-border-style": "",
                          "lc-border-color": "",
                          "lc-border-radius": 10,
                          "lc-zindex": 0,
                          "src": "/vis.0/main/img/zisterne1.png"
                        },
                        "style": {
                          "left": "251px",
                          "top": "208px",
                          "width": "453px",
                          "height": "573px",
                          "z-index": "1"
                        },
                        "widgetSet": "basic"
                      },
                      "e00007": {
                        "tpl": "tplCGradialGauge",
                        "data": {
                          "g_fixed": false,
                          "g_visibility": false,
                          "g_css_font_text": false,
                          "g_css_background": false,
                          "g_css_shadow_padding": false,
                          "g_css_border": false,
                          "g_gestures": false,
                          "g_signals": false,
                          "g_last_change": false,
                          "visibility-cond": "==",
                          "visibility-val": 1,
                          "visibility-groups-action": "hide",
                          "factor": "1",
                          "valueOffset": "0",
                          "hCount": "10",
                          "minorTicks": "6",
                          "animation": "true",
                          "needle": "true",
                          "needleShadow": "true",
                          "needleType": "line",
                          "valueBox": "false",
                          "ticksAngle": "270",
                          "startAngle": "45",
                          "signals-cond-0": "==",
                          "signals-val-0": true,
                          "signals-icon-0": "/vis/signals/lowbattery.png",
                          "signals-icon-size-0": 0,
                          "signals-blink-0": false,
                          "signals-horz-0": 0,
                          "signals-vert-0": 0,
                          "signals-hide-edit-0": false,
                          "signals-cond-1": "==",
                          "signals-val-1": true,
                          "signals-icon-1": "/vis/signals/lowbattery.png",
                          "signals-icon-size-1": 0,
                          "signals-blink-1": false,
                          "signals-horz-1": 0,
                          "signals-vert-1": 0,
                          "signals-hide-edit-1": false,
                          "signals-cond-2": "==",
                          "signals-val-2": true,
                          "signals-icon-2": "/vis/signals/lowbattery.png",
                          "signals-icon-size-2": 0,
                          "signals-blink-2": false,
                          "signals-horz-2": 0,
                          "signals-vert-2": 0,
                          "signals-hide-edit-2": false,
                          "lc-type": "last-change",
                          "lc-is-interval": true,
                          "lc-is-moment": false,
                          "lc-format": "",
                          "lc-position-vert": "top",
                          "lc-position-horz": "right",
                          "lc-offset-vert": 0,
                          "lc-offset-horz": 0,
                          "lc-font-size": "12px",
                          "lc-font-family": "",
                          "lc-font-style": "",
                          "lc-bkg-color": "",
                          "lc-color": "",
                          "lc-border-width": "0",
                          "lc-border-style": "",
                          "lc-border-color": "",
                          "lc-border-radius": 10,
                          "lc-zindex": 0,
                          "oid": "mqtt.0.ESPEasy3_3.dummy.Inhalt",
                          "minValue": "0",
                          "maxValue": "7000",
                          "units": "Liter",
                          "title": "Zisterne",
                          "highlightsFrom1": "0",
                          "highlightsTo1": "600",
                          "highlightsColor1": "#56c1eb",
                          "highlightsFrom2": "600",
                          "highlightsTo2": "1200",
                          "highlightsColor2": "#b2e46c",
                          "highlightsFrom3": "1200",
                          "highlightsTo3": "1800",
                          "highlightsColor3": "#f59b7f",
                          "animationRule": "cycle",
                          "animationDuration": "400",
                          "animatedValue": true,
                          "animateOnInit": true,
                          "animationTarget": "needle",
                          "colorValueBoxBackground": "transparent",
                          "colorTitle": "transparent",
                          "colorBorderOuter": "transparent",
                          "colorBorderOuterEnd": "transparent",
                          "colorValueBoxRect": "transparent",
                          "colorValueBoxRectEnd": "transparent",
                          "colorValueBoxShadow": "",
                          "colorPlate": "transparent",
                          "colorPlateEnd": "",
                          "fontNumbers": "",
                          "fontUnits": "",
                          "fontValue": "",
                          "colorNeedleCircleOuter": "",
                          "colorNeedleCircleOuterEnd": "",
                          "colorNeedleCircleInner": "",
                          "colorNeedleCircleInnerEnd": "",
                          "needleCircleInner": false,
                          "needleCircleOuter": false,
                          "fontUnitsSize": "30",
                          "fontValueSize": "50px",
                          "fontTitleSize": "",
                          "fontNumbersStyle": "normal",
                          "fontUnitsStyle": "normal",
                          "fontValueStyle": "normal",
                          "fontNumbersWeight": "normal",
                          "fontNumbersSize": "",
                          "fontTitleStyle": "normal",
                          "fontUnitsWeight": "50px",
                          "fontTitleWeight": "",
                          "fontValueWeight": "50px",
                          "colorUnits": "#fcfffa",
                          "colorNumbers": "#fcfffa",
                          "majorTicksInt": "20",
                          "majorTicksDec": "20",
                          "strokeTicks": true,
                          "needleStart": "",
                          "needleEnd": "",
                          "needleWidth": "",
                          "colorNeedle": "#fcfffa",
                          "colorNeedleEnd": "#cb1010",
                          "colorMajorTicks": "",
                          "colorValueText": "#fcfffa",
                          "g_borders": true,
                          "borders": "true",
                          "borderOuterWidth": "",
                          "borderMiddleWidth": "",
                          "borderInnerWidth": "",
                          "borderShadowWidth": "",
                          "colorBorderShadow": "transparent",
                          "colorBorderInner": "transparent",
                          "colorBorderInnerEnd": "transparent",
                          "colorMinorTicks": "",
                          "colorValueTextShadow": "transparent",
                          "colorBorderMiddle": "transparent",
                          "colorBorderMiddleEnd": "transparent",
                          "highlightsFrom4": "1800",
                          "highlightsTo4": "2400",
                          "highlightsColor4": "#e84f4f",
                          "highlightsFrom5": "2400",
                          "highlightsTo5": "3000",
                          "highlightsColor5": "#5f0707",
                          "highlightsFrom6": "3000",
                          "highlightsTo6": "3600",
                          "highlightsFrom7": "3600",
                          "highlightsTo7": "4200",
                          "highlightsFrom8": "4200",
                          "highlightsTo8": "4800",
                          "highlightsFrom9": "4800",
                          "highlightsTo9": "5400",
                          "highlightsFrom10": "5400",
                          "highlightsTo10": "7000",
                          "highlightsColor10": "#7edc50",
                          "highlightsColor9": "#7edc50",
                          "highlightsColor8": "#7edc50",
                          "highlightsColor7": "#7edc50",
                          "highlightsColor6": "#99dc50"
                        },
                        "style": {
                          "left": "281px",
                          "top": "750px",
                          "width": "200px",
                          "height": "200px",
                          "z-index": "10"
                        },
                        "widgetSet": "canvas-gauges"
                      },
                      "e00008": {
                        "tpl": "tplCGradialGauge",
                        "data": {
                          "g_fixed": false,
                          "g_visibility": false,
                          "g_css_font_text": false,
                          "g_css_background": false,
                          "g_css_shadow_padding": false,
                          "g_css_border": false,
                          "g_gestures": false,
                          "g_signals": false,
                          "g_last_change": false,
                          "visibility-cond": "==",
                          "visibility-val": 1,
                          "visibility-groups-action": "hide",
                          "factor": "1",
                          "valueOffset": "0",
                          "hCount": "10",
                          "minorTicks": "6",
                          "animation": "true",
                          "needle": "true",
                          "needleShadow": "true",
                          "needleType": "line",
                          "valueBox": "false",
                          "ticksAngle": "270",
                          "startAngle": "45",
                          "signals-cond-0": "==",
                          "signals-val-0": true,
                          "signals-icon-0": "/vis/signals/lowbattery.png",
                          "signals-icon-size-0": 0,
                          "signals-blink-0": false,
                          "signals-horz-0": 0,
                          "signals-vert-0": 0,
                          "signals-hide-edit-0": false,
                          "signals-cond-1": "==",
                          "signals-val-1": true,
                          "signals-icon-1": "/vis/signals/lowbattery.png",
                          "signals-icon-size-1": 0,
                          "signals-blink-1": false,
                          "signals-horz-1": 0,
                          "signals-vert-1": 0,
                          "signals-hide-edit-1": false,
                          "signals-cond-2": "==",
                          "signals-val-2": true,
                          "signals-icon-2": "/vis/signals/lowbattery.png",
                          "signals-icon-size-2": 0,
                          "signals-blink-2": false,
                          "signals-horz-2": 0,
                          "signals-vert-2": 0,
                          "signals-hide-edit-2": false,
                          "lc-type": "last-change",
                          "lc-is-interval": true,
                          "lc-is-moment": false,
                          "lc-format": "",
                          "lc-position-vert": "top",
                          "lc-position-horz": "right",
                          "lc-offset-vert": 0,
                          "lc-offset-horz": 0,
                          "lc-font-size": "12px",
                          "lc-font-family": "",
                          "lc-font-style": "",
                          "lc-bkg-color": "",
                          "lc-color": "",
                          "lc-border-width": "0",
                          "lc-border-style": "",
                          "lc-border-color": "",
                          "lc-border-radius": 10,
                          "lc-zindex": 0,
                          "oid": "mqtt.0.ESPEasy3_3.dummy.Prozent",
                          "minValue": "0",
                          "maxValue": "130",
                          "units": "Prozent",
                          "title": "Zisterne",
                          "highlightsFrom1": "0",
                          "highlightsTo1": "10",
                          "highlightsColor1": "#56c1eb",
                          "highlightsFrom2": "10",
                          "highlightsTo2": "20",
                          "highlightsColor2": "#b2e46c",
                          "highlightsFrom3": "20",
                          "highlightsTo3": "30",
                          "highlightsColor3": "#f59b7f",
                          "animationRule": "cycle",
                          "animationDuration": "400",
                          "animatedValue": true,
                          "animateOnInit": true,
                          "animationTarget": "needle",
                          "colorValueBoxBackground": "transparent",
                          "colorTitle": "transparent",
                          "colorBorderOuter": "transparent",
                          "colorBorderOuterEnd": "transparent",
                          "colorValueBoxRect": "transparent",
                          "colorValueBoxRectEnd": "transparent",
                          "colorValueBoxShadow": "",
                          "colorPlate": "transparent",
                          "colorPlateEnd": "",
                          "fontNumbers": "",
                          "fontUnits": "",
                          "fontValue": "",
                          "colorNeedleCircleOuter": "",
                          "colorNeedleCircleOuterEnd": "",
                          "colorNeedleCircleInner": "",
                          "colorNeedleCircleInnerEnd": "",
                          "needleCircleInner": false,
                          "needleCircleOuter": false,
                          "fontUnitsSize": "30",
                          "fontValueSize": "50px",
                          "fontTitleSize": "",
                          "fontNumbersStyle": "normal",
                          "fontUnitsStyle": "normal",
                          "fontValueStyle": "normal",
                          "fontNumbersWeight": "normal",
                          "fontNumbersSize": "",
                          "fontTitleStyle": "normal",
                          "fontUnitsWeight": "50px",
                          "fontTitleWeight": "",
                          "fontValueWeight": "50px",
                          "colorUnits": "#fcfffa",
                          "colorNumbers": "#fcfffa",
                          "majorTicksInt": "20",
                          "majorTicksDec": "20",
                          "strokeTicks": true,
                          "needleStart": "",
                          "needleEnd": "",
                          "needleWidth": "",
                          "colorNeedle": "#fcfffa",
                          "colorNeedleEnd": "#cb1010",
                          "colorMajorTicks": "",
                          "colorValueText": "#fcfffa",
                          "g_borders": true,
                          "borders": "true",
                          "borderOuterWidth": "",
                          "borderMiddleWidth": "",
                          "borderInnerWidth": "",
                          "borderShadowWidth": "",
                          "colorBorderShadow": "transparent",
                          "colorBorderInner": "transparent",
                          "colorBorderInnerEnd": "transparent",
                          "colorMinorTicks": "",
                          "colorValueTextShadow": "transparent",
                          "colorBorderMiddle": "transparent",
                          "colorBorderMiddleEnd": "transparent",
                          "highlightsFrom4": "30",
                          "highlightsTo4": "40",
                          "highlightsColor4": "#e84f4f",
                          "highlightsFrom5": "40",
                          "highlightsTo5": "50",
                          "highlightsColor5": "#5f0707",
                          "highlightsFrom6": "50",
                          "highlightsTo6": "60",
                          "highlightsFrom7": "60",
                          "highlightsTo7": "70",
                          "highlightsFrom8": "70",
                          "highlightsTo8": "80",
                          "highlightsFrom9": "80",
                          "highlightsTo9": "90",
                          "highlightsFrom10": "90",
                          "highlightsTo10": "130",
                          "highlightsColor10": "#7edc50",
                          "highlightsColor9": "#7edc50",
                          "highlightsColor8": "#7edc50",
                          "highlightsColor7": "#7edc50",
                          "highlightsColor6": "#99dc50"
                        },
                        "style": {
                          "left": "496px",
                          "top": "750px",
                          "width": "200px",
                          "height": "200px",
                          "z-index": "18"
                        },
                        "widgetSet": "canvas-gauges"
                      },
                      "e00009": {
                        "tpl": "tplHqOdometer",
                        "data": {
                          "oid": "mqtt.0.ESPEasy3_3.dummy.Inhalt",
                          "g_fixed": true,
                          "g_visibility": false,
                          "g_css_font_text": true,
                          "g_css_background": false,
                          "g_css_shadow_padding": false,
                          "g_css_border": false,
                          "g_gestures": false,
                          "g_signals": false,
                          "style": "car",
                          "format": "(ddddd),dd",
                          "factor": "1",
                          "leadingZeros": "true",
                          "signals-cond-0": "==",
                          "signals-val-0": true,
                          "signals-icon-0": "/vis/signals/lowbattery.png",
                          "signals-icon-size-0": 0,
                          "signals-blink-0": false,
                          "signals-horz-0": 0,
                          "signals-vert-0": 0,
                          "signals-hide-edit-0": false,
                          "signals-cond-1": "==",
                          "signals-val-1": true,
                          "signals-icon-1": "/vis/signals/lowbattery.png",
                          "signals-icon-size-1": 0,
                          "signals-blink-1": false,
                          "signals-horz-1": 0,
                          "signals-vert-1": 0,
                          "signals-hide-edit-1": false,
                          "signals-cond-2": "==",
                          "signals-val-2": true,
                          "signals-icon-2": "/vis/signals/lowbattery.png",
                          "signals-icon-size-2": 0,
                          "signals-blink-2": false,
                          "signals-horz-2": 0,
                          "signals-vert-2": 0,
                          "signals-hide-edit-2": false,
                          "name": "Liter",
                          "visibility-cond": "==",
                          "visibility-val": 1,
                          "visibility-groups-action": "hide",
                          "lc-type": "last-change",
                          "lc-is-interval": true,
                          "lc-is-moment": false,
                          "lc-format": "",
                          "lc-position-vert": "top",
                          "lc-position-horz": "right",
                          "lc-offset-vert": 0,
                          "lc-offset-horz": 0,
                          "lc-font-size": "12px",
                          "lc-font-family": "",
                          "lc-font-style": "",
                          "lc-bkg-color": "",
                          "lc-color": "",
                          "lc-border-width": "0",
                          "lc-border-style": "",
                          "lc-border-color": "",
                          "lc-border-radius": 10,
                          "lc-zindex": 0,
                          "g_extended": true
                        },
                        "style": {
                          "left": "307.015625px",
                          "top": "961px",
                          "width": "162px",
                          "height": "37px",
                          "z-index": "2"
                        },
                        "widgetSet": "hqwidgets"
                      },
                      "e00010": {
                        "tpl": "tplHqOdometer",
                        "data": {
                          "oid": "mqtt.0.ESPEasy3_3.dummy.Prozent",
                          "g_fixed": true,
                          "g_visibility": false,
                          "g_css_font_text": true,
                          "g_css_background": false,
                          "g_css_shadow_padding": false,
                          "g_css_border": false,
                          "g_gestures": false,
                          "g_signals": false,
                          "style": "car",
                          "format": "(ddddd),dd",
                          "factor": "1",
                          "leadingZeros": "true",
                          "signals-cond-0": "==",
                          "signals-val-0": true,
                          "signals-icon-0": "/vis/signals/lowbattery.png",
                          "signals-icon-size-0": 0,
                          "signals-blink-0": false,
                          "signals-horz-0": 0,
                          "signals-vert-0": 0,
                          "signals-hide-edit-0": false,
                          "signals-cond-1": "==",
                          "signals-val-1": true,
                          "signals-icon-1": "/vis/signals/lowbattery.png",
                          "signals-icon-size-1": 0,
                          "signals-blink-1": false,
                          "signals-horz-1": 0,
                          "signals-vert-1": 0,
                          "signals-hide-edit-1": false,
                          "signals-cond-2": "==",
                          "signals-val-2": true,
                          "signals-icon-2": "/vis/signals/lowbattery.png",
                          "signals-icon-size-2": 0,
                          "signals-blink-2": false,
                          "signals-horz-2": 0,
                          "signals-vert-2": 0,
                          "signals-hide-edit-2": false,
                          "name": "Liter",
                          "visibility-cond": "==",
                          "visibility-val": 1,
                          "visibility-groups-action": "hide",
                          "lc-type": "last-change",
                          "lc-is-interval": true,
                          "lc-is-moment": false,
                          "lc-format": "",
                          "lc-position-vert": "top",
                          "lc-position-horz": "right",
                          "lc-offset-vert": 0,
                          "lc-offset-horz": 0,
                          "lc-font-size": "12px",
                          "lc-font-family": "",
                          "lc-font-style": "",
                          "lc-bkg-color": "",
                          "lc-color": "",
                          "lc-border-width": "0",
                          "lc-border-style": "",
                          "lc-border-color": "",
                          "lc-border-radius": 10,
                          "lc-zindex": 0,
                          "g_extended": true
                        },
                        "style": {
                          "left": "516px",
                          "top": "961px",
                          "width": "162px",
                          "height": "37px",
                          "z-index": "2"
                        },
                        "widgetSet": "hqwidgets"
                      },
                      "e00011": {
                        "tpl": "tplContainerView",
                        "data": {
                          "g_fixed": false,
                          "g_visibility": false,
                          "g_css_font_text": false,
                          "g_css_background": false,
                          "g_css_shadow_padding": false,
                          "g_css_border": false,
                          "g_gestures": false,
                          "g_signals": false,
                          "g_last_change": false,
                          "visibility-cond": "==",
                          "visibility-val": 1,
                          "visibility-groups-action": "hide",
                          "signals-cond-0": "==",
                          "signals-val-0": true,
                          "signals-icon-0": "/vis/signals/lowbattery.png",
                          "signals-icon-size-0": 0,
                          "signals-blink-0": false,
                          "signals-horz-0": 0,
                          "signals-vert-0": 0,
                          "signals-hide-edit-0": false,
                          "signals-cond-1": "==",
                          "signals-val-1": true,
                          "signals-icon-1": "/vis/signals/lowbattery.png",
                          "signals-icon-size-1": 0,
                          "signals-blink-1": false,
                          "signals-horz-1": 0,
                          "signals-vert-1": 0,
                          "signals-hide-edit-1": false,
                          "signals-cond-2": "==",
                          "signals-val-2": true,
                          "signals-icon-2": "/vis/signals/lowbattery.png",
                          "signals-icon-size-2": 0,
                          "signals-blink-2": false,
                          "signals-horz-2": 0,
                          "signals-vert-2": 0,
                          "signals-hide-edit-2": false,
                          "lc-type": "last-change",
                          "lc-is-interval": true,
                          "lc-is-moment": false,
                          "lc-format": "",
                          "lc-position-vert": "top",
                          "lc-position-horz": "right",
                          "lc-offset-vert": 0,
                          "lc-offset-horz": 0,
                          "lc-font-size": "12px",
                          "lc-font-family": "",
                          "lc-font-style": "",
                          "lc-bkg-color": "",
                          "lc-color": "",
                          "lc-border-width": "0",
                          "lc-border-style": "",
                          "lc-border-color": "",
                          "lc-border-radius": 10,
                          "lc-zindex": 0,
                          "contains_view": "348_ueberschrift"
                        },
                        "style": {
                          "left": "245px",
                          "top": "12px",
                          "width": "1350px",
                          "height": "180px",
                          "z-index": "20"
                        },
                        "widgetSet": "basic"
                      }
                    },
                    "name": "365_zisterne",
                    "filterList": []
                  }
                  

                  Wenn noch etwas benötigt wird, einfach melden. Habe die Widgets für Navi und Überschrift nicht mitgeliefert. Wenn Du sie benötigst, dann bitte melden. Bei der Zisterne liegen zwei Widgets übereinander, bitte die Gruppen auflösen.

                  L Offline
                  L Offline
                  ltathome
                  schrieb am zuletzt editiert von ltathome
                  #230

                  @opossum said in Füllstandsmessung per Pegelsonde.:

                  [EDIT:] Danke - es fehlt noch das Image von der Zisterne. Die Gauge-Widget sind besser als das jqplot. -> Hab eins gefunden

                  Zisterne.png
                  Auch sehr schön - für die Sektoren kann ich jetzt schön über bindings die Grenzen aus meinen mqtt-states einstellen:

                  zisterne.png

                  und:
                  zisterne1.png

                  1 Antwort Letzte Antwort
                  0
                  • L ltathome

                    @opossum Darf ich nochmal fragen, woher ich die "tolle Zisterne" haben könnte?

                    Ich habe mein Teil jetzt seit ein paar Tagen auch "produktiv" - ich habe aber am Code noch deutlich umgebaut, da ich mir die Möglichkeit schaffen wollte, über ein Relais bei Erreichen eines Minimums oder Maximums zu schalten (< Minimal: Umschalten auf Hauswasser, Bei > maximal zurückschalten auf Zisterne. Zwei unterschiedliche Werte, weil das sonst erstens "flattert" und es keinen Sinn macht, selbst bei nur "minimal" über Minimum wieder zurückzuschalten. Und weil ich dann schon mal dran war, habe ich das sowohl über einen Taster, als auch per mqtt realisiert. Ich kann also per Taster (PIN D2) und mqtt das Relais (PIN D3) umschalten zwischen Automatik, Hauswasser und Zisterne. Die Schwellwerte lassen sich ebenfalls per mqtt setzen. Jetzt muss ich nur noch an der Hauswasserpumpe an das Umschaltventil ran um das ans Relais anzuschließen - die bisherige Schwimmerumschaltung klappt nicht sauber - und vor allem muss ich für manuelle Eingriffe jedesmal in den Keller..
                    image0.jpeg image1.jpeg image2.jpeg

                    /*------------------------------------------------------------------------------------------------------------------------------------------------------------------
                      Program:      Füllstandsmessung mit Pegelsonde
                    
                      Description:  Dieses Programm misst die analolge Spannung an einem Port, welche von einem Drucksensor
                                    0-5m Meßhöhe und 4-20mA Stromschnittstelle erzeugt wird.
                                    Voraussetzung ist ein Meßwandler, welcher die 24V Versorgungsspannung an
                                    den Drucksensor liefert und 0-3,3V analoge Spannung ausgibt.
                                    Dienste:
                                    DHCP, wenn vorhanden, sonst wird eine feste IP mit 192.168.1.21 vergeben.
                    
                      Hardware:     Arduino Nano ATmega 328P
                                    W5100 Netzwerk shield
                                    LCD Display I2C HD44780
                    
                    				Pin-Ports:
                    				A0 = Analog IN
                    				A4 = SDA
                    				A5 = SCL
                    
                    
                      Date:         20191013
                      Modified:     Initial Version 1.0
                                    - DHCP error routine
                    
                                    20191017
                                    - Fixed uptime_d
                    
                                    20191019
                                    Version 1.1
                                    - Dichte Berechnung hinzugefügt
                                    Version 1.2
                                    - LCD wechselt jetzt alle 30 Sek. zwischen Uptime und Analog Messwert
                    
                                    20191024
                                    - Fixed MQTT uptime_d char array
                    
                                    20191028
                                    Version 1.3
                                    - MQTT Port definierbar
                                    - MQTT User Password authentication
                    
                    				20200110
                    				Version 1.4
                    				- Array für die Beruhigung des Messwertes eingefügt
                    
                      Author:       Eisbaeeer, https://github.com/Eisbaeeer
                    
                      Author:       Ethernet part: W.A. Smith, http://startingelectronics.com
                                    progress bar -  CC BY-SA 3.0 :  skywodd, https://www.carnetdumaker.net/articles/faire-une-barre-de-progression-avec-arduino-et-liquidcrystal/
                    
                      LICENSE: 		MIT License
                    
                      -------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
                    // Include some libraries
                    #include <Ethernet.h>
                    #include <SPI.h>
                    
                    #include <Wire.h>
                    #include <hd44780.h>                       // main hd44780 header
                    #include <hd44780ioClass/hd44780_I2Cexp.h> // i2c expander i/o class header
                    hd44780_I2Cexp lcd; // declare lcd object: auto locate & auto config expander chip
                    #include <Wire.h>
                    #include <LiquidCrystal_I2C.h>
                    
                    #define twenty_x_four // 4x20 display
                    
                    #ifdef twenty_x_four
                    const int LCD_COLS = 20;
                    const int LCD_ROWS = 4;
                    const int LCD_NB_COLUMNS = 20;
                    #endif
                    
                    #ifdef sixteen_x_four
                    const int LCD_COLS = 16;
                    const int LCD_ROWS = 4;
                    const int LCD_NB_COLUMNS = 16;
                    #endif
                    
                    #include "progress.h"
                    
                    
                    #define MODE_PIN 2
                    #define MODE_ZISTERNE 0
                    #define MODE_HAUSWASSER 1
                    #define MODE_AUTO 2
                    #define MODE_COUNT 10
                    bool setmode = false;
                    const char *modes[] = {"Zisterne", "Hauswasser", "Auto"};
                    int mode_count = MODE_COUNT;
                    int mode = MODE_AUTO;
                    int old_mode = MODE_AUTO;
                    int pin_stat;
                    int old_stat;
                    
                    #define VALVE_PIN 3
                    #define VALVE_ZISTERNE LOW
                    #define VALVE_HAUSWASSER HIGH
                    int valve = VALVE_ZISTERNE;
                    int new_valve = VALVE_ZISTERNE;
                    int reason = 0;
                    const char *valves[] = {"Zisterne", "Hauswasser"};
                    const char *reasons[] = {"manuelle Steuerung", "Automatik voll", "Automatik leer"};
                    
                    // ##############################################################################################################################
                    // ---- HIER die Anpassungen vornehmen ----
                    // ##############################################################################################################################
                    // Hier die maximale Füllmenge des Behälters angeben. Dies gilt nur für symmetrische Behälter.
                    const float max_liter = 6500;
                    // Analoger Wert bei maximalem Füllstand (wird alle 30 Sekungen auf dem LCD angezeigt oder in der seriellen Konsole mit 9600 Baud.
                    const int analog_max = 715;
                    
                    // Dichte der Flüssigkeit - Bei Heizöl bitte "1.086" eintragen, aber nur wenn die Kalibrierung mit Wasser erfolgt ist!
                    // Bei Kalibrierung mit Wasser bitte "1.0" eintragen
                    const float dichte = 1.0;
                    
                    // IP Adresse und Port des MQTT Servers
                    const char *mqttserver = "iobroker.server.intern";
                    const int mqttport = 1883;
                    // Wenn der MQTT Server eine Authentifizierung verlangt, bitte folgende Zeile aktivieren und Benutzer / Passwort eintragen
                    const char *mqttuser = "mqttiobroker";
                    const char *mqttpass = "passwort";
                    
                    // IP Adresse, falls kein DHCP vorhanden ist. Diese Adresse wird nur verwendet, wenn der DHCP-Server nicht erreichbar ist.
                    IPAddress ip(192, 168, 1, 21);
                    
                    // MAC-Addresse bitte anpassen! Sollte auf dem Netzwerkmodul stehen. Ansonsten eine generieren.
                    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x0A };
                    
                    char buf[40];
                    
                    // ##############################################################################################################################
                    // AB hier nichts mehr ändern!
                    // (Ausser ihr wisst, was ihr tut)
                    // ##############################################################################################################################
                    
                    // #define USE_SERIAL  Serial
                    
                    // No more delay
                    unsigned long startMillis;  // some global variables available anywhere in the program
                    unsigned long hstartMillis;  // some global variables available anywhere in the program
                    unsigned long currentMillis;
                    const unsigned long sekunde = 1000;  // one seconds
                    const unsigned long hsekunde = 500;  //Half second
                    
                    unsigned long pinMillis;
                    unsigned long lastMillis = 0;
                    
                    int secs = 0, mins = 0, hours = 0, days = 0;
                    char uptime[25];
                    
                    float percent;
                    float liter;
                    float limit_low = 500;
                    float limit_high = 1000;
                    boolean LCD_Page;
                    
                    // Analog IN
                    int analogPin = A0;
                    const int messungen = 60;     // Anzahl Messungen
                    int myArray[messungen];       // Array für Messwerte
                    float analog = 0.0;             // Durchschnittswert
                    int pointer = 0;              // Pointer für Messung
                    
                    // MQTT global vars
                    #include <PubSubClient.h>
                    unsigned int send_interval = 10; // the sending interval of indications to the server, by default 10 seconds
                    #define MQTT_KEEPALIVE 60;
                    
                    boolean mqttconnected = false;
                    
                    // MQTT definitions
                    void MqttCallback(char *topic, byte *payload, unsigned int length);
                    EthernetClient ethClient;
                    PubSubClient mqttclient;
                    // (mqttserver, mqttport, MqttCallback, ethClient);
                    #define MQTT_ID "Zisterne"
                    
                    char pl[30];
                    
                    // Declare subs
                    void Mqttpublish();
                    
                    void defaultEthernet(void) {
                        Ethernet.begin(mac, ip);  // initialize Ethernet device
                    }
                    
                    void Uptime() {
                        secs++;
                        secs = secs % 60;
                        if (secs == 0) {
                            mins++;
                            mins = mins % 60;
                            if (mins == 0) {
                                hours++;
                                hours = hours % 24;
                                if (hours == 0) {
                                    days++;
                                    days = days % 10000;   // Nach 9999 Tagen zurück auf 0 (das sind 27 Jahre....)
                                }
                            }
                        }
                        sprintf(uptime, "%4dd %2dh %2dm", days, hours, mins);
                      
                        if (secs == 0) {        // Every Minute
                            //USE_SERIAL.print(F("Uptime: "));
                            //USE_SERIAL.println(uptime);
                            // MQTT reconnect timeout
                            //Mqttpublish();
                        }
                        if (secs % send_interval == 0) { // Alle 30 Sekunden
                            LCD_Page = !LCD_Page;
                            Mqttpublish();
                            // MqttSub();
                        }
                        if (mins == 0 && secs == 0) {      // Jede Stunde
                            //USE_SERIAL.println(F("ONE HOUR"));
                        }
                    }
                    
                    void ReadAnalog() {
                        // read the analog value and build floating middle
                        myArray[pointer++] = analogRead(analogPin);      // read the input pin
                        // myArray[pointer++] = 352;
                    
                        pointer = pointer % messungen;
                    
                        // Werte aufaddieren
                        for (int i = 0; i < messungen; i++) {
                            analog = analog + myArray[i];
                        }
                        // Summe durch Anzahl - geglättet
                        analog = analog / messungen;
                    
                        percent = min(100 * analog / analog_max, 100);
                    
                        float calc = max_liter / analog_max;    // calculate percent
                        calc = calc * dichte;                     // calculate dichte
                        liter = min(analog * calc, max_liter);    // calculate liter
                    
                        /* //USE_SERIAL.print(F("Analog: "));
                        //USE_SERIAL.println(analog);
                        //USE_SERIAL.print(F("Prozent: "));
                        //USE_SERIAL.println(percent);
                        //USE_SERIAL.print(F("Liter: "));
                        //USE_SERIAL.println(liter);
                        */
                    }
                    
                    void setup() {
                        // USE_SERIAL.begin(9600);       // for debugging
                    
                        /*--------------------------------------------------------------
                           LCD init
                          --------------------------------------------------------------*/
                        lcd.init();
                        int status;
                        status = lcd.begin(LCD_COLS, LCD_ROWS);
                        if (status) { // non zero status means it was unsuccesful
                            status = -status; // convert negative status value to positive number
                            // begin() failed so blink error code using the onboard LED if possible
                            hd44780::fatalError(status); // does not return
                        }
                      
                        // initalization was successful, the backlight should be on now
                        // Print a message to the LCD
                        lcd.print("Zisterne");
                        lcd.setCursor(0, 1);
                        lcd.print("Version 1.4");
                        lcd.setCursor(0, 3);
                        lcd.print("github/Eisbaeeer");
                        delay(2000);
                      
                        setup_progressbar();
                      
                        /*--------------------------------------------------------------
                           Milliseconds start
                          --------------------------------------------------------------*/
                        startMillis = millis();  //initial start time
                      
                        /*--------------------------------------------------------------
                           Ethernet init
                          --------------------------------------------------------------*/
                        if (Ethernet.begin(mac) == 0) {
                            //USE_SERIAL.println(F("Failed config using DHCP"));
                            // DHCP not working, switch to static IP
                            defaultEthernet();
                            if (Ethernet.hardwareStatus() == EthernetNoHardware) {
                                //USE_SERIAL.println(F("Eth shield not found"));
                            } else if (Ethernet.linkStatus() == LinkOFF) {
                                //USE_SERIAL.println(F("Eth cable not conn"));
                            }
                        }
                    
                        // USE_SERIAL.print(F("IP: "));
                        // USE_SERIAL.println(Ethernet.localIP());
                    
                      
                        // start MQTT client
                        MqttConnect(mqttuser, mqttpass);  
                      
                        /*-------------------------------------------------------------------
                         * Setup Pins for Valve and mode-setting
                         */
                        pinMode(MODE_PIN, INPUT_PULLUP);
                        pinMode(VALVE_PIN, OUTPUT);
                      
                        pin_stat = old_stat = digitalRead(MODE_PIN);
                    }
                    
                    void MqttConnect(char *user, char* pass) {
                    
                        mqttclient.setClient(ethClient);
                        mqttclient.setServer(mqttserver, mqttport);
                        mqttclient.setCallback(MqttCallback);
                        
                        mqttconnected = mqttclient.connect(MQTT_ID, user, pass);
                        if (mqttconnected) {
                            // USE_SERIAL.println("Connected to Mqtt-Server");
                            mqttclient.subscribe("Zisterne/cmd/Mode");
                            mqttclient.subscribe("Zisterne/cmd/Limit");
                            // USE_SERIAL.println("subscribing to Zisterne/cmd/Mode");
                        }
                    }
                    
                    void MqttCallback(char *topic, byte *payload, unsigned int length) {
                        char *payloadvalue;
                        char *payloadkey;
                    
                        payload[length] = '\0';
                        payloadkey = (char *)&payload[0];
                    
                        // USE_SERIAL.println(payloadstring);
                        if (strcmp(topic, "Zisterne/cmd/Mode") == 0) {
                            if (strcmp(payloadkey, "0") == 0 || strcmp(payloadkey, "Zisterne") == 0) {
                                mode = MODE_ZISTERNE;
                            } else if (strcmp(payloadkey, "1") == 0 || strcmp(payloadkey, "Hauswasser") == 0) {
                                mode = MODE_HAUSWASSER;
                            } else if (strcmp(payloadkey, "2") == 0 || strcmp(payloadkey, "Auto") == 0) {
                                mode = MODE_AUTO;
                            }
                        } else if (strcmp(topic, "Zisterne/cmd/Limit") == 0) {
                            int eq = 0;
                            for (int i = 0; i < length; i++) {
                                if (payload[i] == '=') {
                                    eq = i;
                                    break;
                                }
                            }
                            if (eq > 0) {
                                payload[eq++] = 0;
                                payloadvalue = (char *)&payload[eq];
                                if (strcmp((char *)payload, "Low") == 0 || strcmp((char *)payload, "low") == 0) {
                                    limit_low = atoi(payloadvalue);
                                }
                                if (strcmp((char *)payload, "High") == 0 || strcmp((char *)payload, "high") == 0) {
                                    limit_high = atoi(payloadvalue);
                                }
                            }
                        }
                    }
                    
                    void CheckEthernet() {
                        if (Ethernet.hardwareStatus() != EthernetNoHardware) {
                            /*--------------------------------------------------------------
                               check ehternet services
                              --------------------------------------------------------------*/
                            switch (Ethernet.maintain()) {
                                case 1:
                                    //renewed fail
                                    //USE_SERIAL.println(F("Error: renewed fail"));
                                    break;
                        
                                case 2:
                                    //renewed success
                                    //USE_SERIAL.println(F("Renewed success"));
                                    //print your local IP address:
                                    //USE_SERIAL.print(F("My IP address: "));
                                    //USE_SERIAL.println(Ethernet.localIP());
                                    break;
                            
                                case 3:
                                    //rebind fail
                                    //USE_SERIAL.println(F("Error: rebind fail"));
                                    break; 
                        
                                case 4:
                                    //rebind success
                                    //USE_SERIAL.println(F("Rebind success"));
                                    //print your local IP address:
                                    //USE_SERIAL.print(F("My IP address: "));
                                    //USE_SERIAL.println(Ethernet.localIP());
                                    break;
                            
                                default:
                                    //nothing happened
                                    break;
                            }    
                        }
                    }
                    
                    void loop() {
                        /*--------------------------------------------------------------
                         remove delay (half second)
                         --------------------------------------------------------------*/
                        mqttclient.loop();
                      
                        pin_stat = digitalRead(MODE_PIN);
                        pinMillis = millis();
                        if (pin_stat == LOW) {
                            if (pinMillis - lastMillis > 200) {
                                //USE_SERIAL.println("Impuls Low");
                                lastMillis = pinMillis;
                                mode_count = MODE_COUNT;
                                if (!setmode) {
                                    setmode = true;
                                    old_mode = mode;
                                    //sprintf(buf, "Enter Settings-Mode %d (%s)", mode, modes[mode]);
                                    //USE_SERIAL.println(buf);
                                } else {
                                    mode--;
                                    if (mode < 0) {
                                        mode = 2;
                                    }
                                    //sprintf(buf, "Mode change to %d (%s)", mode, modes[mode]);
                                    //USE_SERIAL.println(buf);
                                }
                            }
                        }
                    
                        /*--------------------------------------------------------------
                         remove delay (one second)
                         --------------------------------------------------------------*/
                        currentMillis = millis();  //get the current "time" (actually the number of milliseconds since the program started)
                        if (currentMillis - startMillis >= sekunde) { // Hier eine Sekunde warten
                            startMillis = currentMillis;
                            /******************************************************************************************
                               1 Sekunden Takt
                             *****************************************************************************************/
                            // Hier die Funktionen im Sekundentakt
                            // ###################################
                    
                            CheckEthernet();
                            Uptime();
                            ReadAnalog();
                            
                            if (setmode) {
                                mode_count--;
                                if (mode_count <= 0) {
                                    //sprintf(buf, "leaving Settings-Mode - change from %d to %d (%s)", old_mode, mode, modes[mode]);
                                    //USE_SERIAL.println(buf);
                                    old_mode = mode;
                                    setmode = false;
                                }
                            }
                            if (!setmode) {
                                if (mode == MODE_ZISTERNE) {
                                    new_valve = VALVE_ZISTERNE;
                                    reason = 0;
                                } else if (mode == MODE_HAUSWASSER) {
                                    new_valve = VALVE_HAUSWASSER;
                                    reason = 0;
                                } else if (mode == MODE_AUTO) {
                                    if (liter >= limit_high) {
                                        new_valve = VALVE_ZISTERNE;
                                        reason = 1;
                                    }
                                    if (liter <= limit_low) {
                                        new_valve = VALVE_HAUSWASSER;
                                        reason = 2;
                                    }
                                }
                            }
                            /*-----------------------------------------------------------
                             * Wenn Ventil umzuschalten ist
                            */
                            if (new_valve != valve) {
                                valve = new_valve;
                                digitalWrite(VALVE_PIN, valve);
                                //sprintf(buf, "Set Valve to %s (%s)", valves[valve], reasons[reason]);
                                //USE_SERIAL.println(buf);
                            }
                        
                            // print out to LCD
                    
                            if (!setmode) {
                                draw_progressbar(percent);
                            }
                            write_lcd();
                        }
                    
                    }
                    /******************************************************************************************
                       Ende Loop
                    * ****************************************************************************************
                       Beginn Unterprogramme
                    ******************************************************************************************/
                    
                    void write_lcd(void) {
                        char LCDbuff[20];
                    
                        if (!setmode) {
                        // Zeile 1
                            lcd.setCursor(6, 0);
                            dtostrf(liter, 4, 0, LCDbuff);
                            lcd.print(LCDbuff); lcd.print(" Liter");
                    
                    
                    #ifdef sixteen_x_four
                            if ( LCD_Page == false ) {
                                // Zeile 3
                                lcd.setCursor(0, 2);
                                lcd.print("Uptime");
                    
                                // Zeile 4
                                lcd.setCursor(0, 3);
                                lcd.print(uptime);
                            } else {
                                // Zeile 3
                                lcd.setCursor(0, 2);
                                lcd.print("Messwert Analog");
                            
                                // Zeile 4
                                lcd.setCursor(0, 3);
                                lcd.print(analogRead(analogPin));      
                            }
                    #endif
                    #ifdef twenty_x_four
                            // Zeile 3
                            lcd.setCursor(0, 2);
                            lcd.print("Uptime");
                          
                            // Zeile 3
                            lcd.setCursor(7, 2);
                            lcd.print(uptime);
                          
                            // Zeile 4
                            lcd.setCursor(0, 3);
                            if (mode == 2) {
                                lcd.print("Auto: ");
                            } else {
                                lcd.print("Manuell: ");
                            }
                            lcd.setCursor(10, 3);
                            lcd.print(valves[valve]);
                          
                            // Zeile 4
                            // lcd.setCursor(16, 3);
                            // lcd.print(analogRead(analogPin));
                    #endif
                        } else {
                            lcd.clear();
                            lcd.setCursor(0, 0);
                            lcd.print("Ventilsteuerung     ");
                            lcd.setCursor(0, 1);
                            lcd.print("Bisher: ");
                            lcd.setCursor(10, 1);
                            lcd.print(modes[old_mode]);
                            lcd.print("       ");
                            lcd.setCursor(0, 2);
                            lcd.print("Neu: ");
                            lcd.setCursor(6, 2);
                            lcd.print(modes[mode]);
                            lcd.setCursor(0, 3);
                            lcd.print(mode_count);
                        }
                    }
                    
                    void Mqttpublish(void) {
                        if (mqttclient.connected()) {
                            dtostrf(analog, 5, 2, buf);
                            mqttclient.publish("Zisterne/Analog", buf);
                            dtostrf(liter, 5, 0, buf);
                            mqttclient.publish("Zisterne/Liter", buf);
                            dtostrf(limit_low, 1, 0, buf);
                            mqttclient.publish("Zisterne/LiterLow", buf);
                            dtostrf(limit_high, 1, 0, buf);
                            mqttclient.publish("Zisterne/LiterHigh", buf);
                            dtostrf(percent, 5, 0, buf);
                            mqttclient.publish("Zisterne/Prozent", buf);
                            
                            if (mode == 2) {
                                mqttclient.publish("Zisterne/Modus", "Auto");
                            } else {
                                mqttclient.publish("Zisterne/Modus", "Manuell");          
                            }
                            dtostrf(mode, 1, 0, buf);
                            mqttclient.publish("Zisterne/Mode", buf);
                            dtostrf(valve, 1, 0, buf);
                            mqttclient.publish("Zisterne/Valve", buf);
                            mqttclient.publish("Zisterne/Ventil", valves[valve]);
                    
                            // System
                            mqttclient.publish("Zisterne/Uptime", uptime);
                        } else {
                            MqttConnect(mqttuser, mqttpass);  
                        }
                    }
                    
                    void draw_progressbar(byte percent) {
                      
                        lcd.clear();
                        /* Affiche la nouvelle valeur sous forme numérique sur la première ligne */
                        lcd.setCursor(0, 0);
                        lcd.print(percent);
                        lcd.print(F(" %  "));
                        // N.B. Les deux espaces en fin de ligne permettent d'effacer les chiffres du pourcentage
                        // précédent quand on passe d'une valeur à deux ou trois chiffres à une valeur à deux ou un chiffres.
                      
                        /* Déplace le curseur sur la seconde ligne */
                        lcd.setCursor(0, 1);
                      
                        /* Map la plage (0 ~ 100) vers la plage (0 ~ LCD_NB_COLUMNS * 2 - 2) */
                        byte nb_columns = map(percent, 0, 100, 0, LCD_NB_COLUMNS * 2 - 2);
                        // Chaque caractère affiche 2 barres verticales, mais le premier et dernier caractère n'en affiche qu'une.
                      
                        /* Dessine chaque caractère de la ligne */
                        for (byte i = 0; i < LCD_NB_COLUMNS; ++i) {
                            if (i == 0) { // Premiére case
                                /* Affiche le char de début en fonction du nombre de colonnes */
                                if (nb_columns > 0) {
                                    lcd.write(1); // Char début 1 / 1
                                    nb_columns -= 1;      
                                } else {
                                    lcd.write((byte) 0); // Char début 0 / 1
                                }    
                            } else if (i == LCD_NB_COLUMNS - 1) { // Derniére case    
                                /* Affiche le char de fin en fonction du nombre de colonnes */
                                if (nb_columns > 0) {
                                    lcd.write(6); // Char fin 1 / 1    
                                } else {
                                    lcd.write(5); // Char fin 0 / 1
                                }  
                            } else { // Autres cases
                                /* Affiche le char adéquat en fonction du nombre de colonnes */
                                if (nb_columns >= 2) {
                                    lcd.write(4); // Char div 2 / 2
                                    nb_columns -= 2;
                                } else if (nb_columns == 1) {
                                    lcd.write(3); // Char div 1 / 2
                                    nb_columns -= 1;
                                } else {
                                    lcd.write(2); // Char div 0 / 2
                                }
                            }
                        }
                    }
                    
                    EisbaeeerE Offline
                    EisbaeeerE Offline
                    Eisbaeeer
                    Developer
                    schrieb am zuletzt editiert von
                    #231

                    @ltathome Hi. Ich will deine Änderung ;-) Kannst du einen pull-request machen? Oder wenn das zuviel ist, kannst du die Änderungen im Code markieren?
                    Grüße Eisbaeeer

                    Kein support per PM. Bitte im Forum Fragen stellen!

                    1 Antwort Letzte Antwort
                    0
                    • L Offline
                      L Offline
                      ltathome
                      schrieb am zuletzt editiert von ltathome
                      #232

                      Hi - das Thema pull-Request hatten wir neulich schon mal auch per Chat - hatten wir dann nicht weiterverfolgt. Ich hab dir hier den diff beigepackt: patch.diff

                      und kann dir gerne helfen die wichtigen Stellen zu erklären - melde dich halt.

                      Grundsätzlich folgendes angepackt:
                      einen Pin (PIN 2) als Input-Pin deklariert:

                      #define MODE_PIN 2
                      #define MODE_ZISTERNE 0
                      #define MODE_HAUSWASSER 1
                      #define MODE_AUTO 2
                      #define MODE_COUNT 10
                      bool setmode = false;
                      const char *modes[] = {"Zisterne", "Hauswasser", "Auto"};
                      int mode_count = MODE_COUNT;
                      int mode = MODE_AUTO;
                      int old_mode = MODE_AUTO;
                      int pin_stat;
                      int old_stat;
                      

                      der wird im loop auf Low/high-Übergänge geprüft und mit erstem auslösen setzt sich das System in einen "Mode-Change" Modus für 10 sekunden, in dem jeder weitere Übergang die Modi durchschaltet und den Countdown wieder auf 10 Sekunden setzt (damit das nicht prellt, zwischen den Übergängen 200ms delay:

                          pin_stat = digitalRead(MODE_PIN);
                          pinMillis = millis();
                          if (pin_stat == LOW) {
                              if (pinMillis - lastMillis > 200) {
                                  //USE_SERIAL.println("Impuls Low");
                                  lastMillis = pinMillis;
                                  mode_count = MODE_COUNT;
                                  if (!setmode) {
                                      setmode = true;
                                      old_mode = mode;
                                      //sprintf(buf, "Enter Settings-Mode %d (%s)", mode, modes[mode]);
                                      //USE_SERIAL.println(buf);
                                  } else {
                                      mode--;
                                      if (mode < 0) {
                                          mode = 2;
                                      }
                                      //sprintf(buf, "Mode change to %d (%s)", mode, modes[mode]);
                                      //USE_SERIAL.println(buf);
                                  }
                              }
                          }
                      

                      Wenn im Settingsmodus - den Zähler runterzählen und sonst die entscheidung treffen, ob das Ventil umzuschalten ist (Limits)

                              if (setmode) {
                                  mode_count--;
                                  if (mode_count <= 0) {
                                      //sprintf(buf, "leaving Settings-Mode - change from %d to %d (%s)", old_mode, mode, modes[mode]);
                                      //USE_SERIAL.println(buf);
                                      old_mode = mode;
                                      setmode = false;
                                  }
                              }
                              if (!setmode) {
                                  if (mode == MODE_ZISTERNE) {
                                      new_valve = VALVE_ZISTERNE;
                                      reason = 0;
                                  } else if (mode == MODE_HAUSWASSER) {
                                      new_valve = VALVE_HAUSWASSER;
                                      reason = 0;
                                  } else if (mode == MODE_AUTO) {
                                      if (liter >= limit_high) {
                                          new_valve = VALVE_ZISTERNE;
                                          reason = 1;
                                      }
                                      if (liter <= limit_low) {
                                          new_valve = VALVE_HAUSWASSER;
                                          reason = 2;
                                      }
                                  }
                              }
                              /*-----------------------------------------------------------
                               * Wenn Ventil umzuschalten ist
                              */
                              if (new_valve != valve) {
                                  valve = new_valve;
                                  digitalWrite(VALVE_PIN, valve);
                                  //sprintf(buf, "Set Valve to %s (%s)", valves[valve], reasons[reason]);
                                  //USE_SERIAL.println(buf);
                              }
                      

                      Einen PIN (3) als Ausgang für das Ventil-Relais:

                      
                      #define VALVE_PIN 3
                      #define VALVE_ZISTERNE LOW
                      #define VALVE_HAUSWASSER HIGH
                      int valve = VALVE_ZISTERNE;
                      int new_valve = VALVE_ZISTERNE;
                      int reason = 0;
                      const char *valves[] = {"Zisterne", "Hauswasser"};
                      const char *reasons[] = {"manuelle Steuerung", "Automatik voll", "Automatik leer"};
                      
                      

                      Die MQTT-Publishes erweitert:

                      void Mqttpublish(void) {
                              if (mqttclient.connected()) {
                                  dtostrf(analog, 5, 2, buf);
                                  mqttclient.publish("Zisterne/Analog", buf);
                                  dtostrf(liter, 5, 0, buf);
                                  mqttclient.publish("Zisterne/Liter", buf);
                                  dtostrf(limit_low, 1, 0, buf);
                                  mqttclient.publish("Zisterne/LiterLow", buf);
                                  dtostrf(limit_high, 1, 0, buf);
                                  mqttclient.publish("Zisterne/LiterHigh", buf);
                                  dtostrf(percent, 5, 0, buf);
                                  mqttclient.publish("Zisterne/Prozent", buf);
                                  
                                  if (mode == 2) {
                                      mqttclient.publish("Zisterne/Modus", "Auto");
                                  } else {
                                      mqttclient.publish("Zisterne/Modus", "Manuell");          
                                  }
                                  dtostrf(mode, 1, 0, buf);
                                  mqttclient.publish("Zisterne/Mode", buf);
                                  dtostrf(valve, 1, 0, buf);
                                  mqttclient.publish("Zisterne/Valve", buf);
                                  mqttclient.publish("Zisterne/Ventil", valves[valve]);
                          
                                  // System
                                  mqttclient.publish("Zisterne/Uptime", uptime);
                              } else {
                                  MqttConnect(mqttuser, mqttpass);  
                              }
                          }
                      

                      und natürlich den Subscribe eingebaut:

                      
                      
                      void MqttConnect(char *user, char* pass) {
                      
                          mqttclient.setClient(ethClient);
                          mqttclient.setServer(mqttserver, mqttport);
                          mqttclient.setCallback(MqttCallback);
                          
                          mqttconnected = mqttclient.connect(MQTT_ID, user, pass);
                          if (mqttconnected) {
                              // USE_SERIAL.println("Connected to Mqtt-Server");
                              mqttclient.subscribe("Zisterne/cmnd/Mode");
                              mqttclient.subscribe("Zisterne/cmnd/Limit");
                              mqttclient.subscribe("Zisterne/Mode");
                              // USE_SERIAL.println("subscribing to Zisterne/cmnd/Mode");
                          }
                      }
                      
                      

                      sowie den Callback definiert:

                      
                      void MqttCallback(char *topic, byte *payload, unsigned int length) {
                          char *payloadvalue;
                          char *payloadkey;
                      
                          payload[length] = '\0';
                          payloadkey = (char *)&payload[0];
                      
                          // USE_SERIAL.println(payloadstring);
                          if (strcmp(topic, "Zisterne/cmnd/Mode") == 0 || strcmp(topic, "Zisterne/Mode") == 0) {
                              if (strcmp(payloadkey, "0") == 0 || strcmp(payloadkey, "Zisterne") == 0) {
                                  mode = MODE_ZISTERNE;
                              } else if (strcmp(payloadkey, "1") == 0 || strcmp(payloadkey, "Hauswasser") == 0) {
                                  mode = MODE_HAUSWASSER;
                              } else if (strcmp(payloadkey, "2") == 0 || strcmp(payloadkey, "Auto") == 0) {
                                  mode = MODE_AUTO;
                              }
                          } else if (strcmp(topic, "Zisterne/cmnd/Limit") == 0) {
                              int eq = 0;
                              for (int i = 0; i < length; i++) {
                                  if (payload[i] == '=') {
                                      eq = i;
                                      break;
                                  }
                              }
                              if (eq > 0) {
                                  payload[eq++] = 0;
                                  payloadvalue = (char *)&payload[eq];
                                  if (strcmp((char *)payload, "Low") == 0 || strcmp((char *)payload, "low") == 0) {
                                      limit_low = atoi(payloadvalue);
                                  }
                                  if (strcmp((char *)payload, "High") == 0 || strcmp((char *)payload, "high") == 0) {
                                      limit_high = atoi(payloadvalue);
                                  }
                              }
                          }
                      }
                      

                      wie gesagt - melde dich, wenn ich helfen kann/soll.

                      EisbaeeerE 1 Antwort Letzte Antwort
                      0
                      • M Offline
                        M Offline
                        Maze77
                        schrieb am zuletzt editiert von
                        #233

                        Hallo Zusammen,

                        nachdem mich das "Wasserproblem" bei meinem Homematic Sender auch ereilt hat, bin ich nach langer Recherche nun auch hier gelandet :)

                        Vorweg schon einmal danke für die geleistete Arbeit und die Bereitstellung der Informationen.

                        Nachdem mir für die Überwachung des Füllstandes der Zisterne professionelle Lösungen ala W&T einfach zu teuer sind und auch über das Ziel hinausschießen, werde ich mich nun auch mit them Thema Arduino/ESP beschäftigen müssen ;)

                        @Eisbaeeer So wie es aussieht, gibt es passen zu den Nano-Board Clonen keine W5100 Ethernet Shields mehr / derzeit.

                        Deswegen werde ich mein "Glück" mit einem Arduino MKR 1000 versuchen und das ganze per WLAN einbinden. Eventuell werde ich dass später mal auf LAN ändern und den MKR woanders einsetzen.

                        Die Drucksonde und das Strom-2-Spannungs-Board sind jetzt erstmal ne Weile unterwegs. Schade eigentlich, das man keine Sonden in Europa unter 200€ bekommt :(

                        Wie sind die Erfahrungen mit dem MT3608 Step-up Board?
                        Der MKR läuft ja "nur" auf 3.3V. Muss mal sehen wie zuverlässig ich das angehoben bekomme um den Sensor stabil zu betreiben.
                        Wie die Auflösung der Analogen Inputs dann im Zusammenspiel mit dem Sensor und A2V Board sind, wird sich zeigen.
                        Da ich von den 5m auch nur um die 2.3m benötige, werde ich hier auch Jumper seitig rumspielen, dass ich bei meinem maximalen Füllstand an die 3.3V des Boards ran komme.

                        Hat vielleicht jemand bereits Erfahrungen mit dem MKR1000 Board gemacht?
                        Für mich ist die Arduino-Welt Neuland, aber nichts, wo man sich nicht hinein arbeiten kann :)

                        @Eisbaeeer Ich würde mein Sketch gerne auf deinem Sketch aufbauen und mir Code-Schnipsel von dort "klauen" :) Hoffe das ist für Dich in Ordnung.

                        Soweit erstmal und Grüße vom Bodensee,
                        Maze

                        EisbaeeerE 1 Antwort Letzte Antwort
                        0
                        • M Maze77

                          Hallo Zusammen,

                          nachdem mich das "Wasserproblem" bei meinem Homematic Sender auch ereilt hat, bin ich nach langer Recherche nun auch hier gelandet :)

                          Vorweg schon einmal danke für die geleistete Arbeit und die Bereitstellung der Informationen.

                          Nachdem mir für die Überwachung des Füllstandes der Zisterne professionelle Lösungen ala W&T einfach zu teuer sind und auch über das Ziel hinausschießen, werde ich mich nun auch mit them Thema Arduino/ESP beschäftigen müssen ;)

                          @Eisbaeeer So wie es aussieht, gibt es passen zu den Nano-Board Clonen keine W5100 Ethernet Shields mehr / derzeit.

                          Deswegen werde ich mein "Glück" mit einem Arduino MKR 1000 versuchen und das ganze per WLAN einbinden. Eventuell werde ich dass später mal auf LAN ändern und den MKR woanders einsetzen.

                          Die Drucksonde und das Strom-2-Spannungs-Board sind jetzt erstmal ne Weile unterwegs. Schade eigentlich, das man keine Sonden in Europa unter 200€ bekommt :(

                          Wie sind die Erfahrungen mit dem MT3608 Step-up Board?
                          Der MKR läuft ja "nur" auf 3.3V. Muss mal sehen wie zuverlässig ich das angehoben bekomme um den Sensor stabil zu betreiben.
                          Wie die Auflösung der Analogen Inputs dann im Zusammenspiel mit dem Sensor und A2V Board sind, wird sich zeigen.
                          Da ich von den 5m auch nur um die 2.3m benötige, werde ich hier auch Jumper seitig rumspielen, dass ich bei meinem maximalen Füllstand an die 3.3V des Boards ran komme.

                          Hat vielleicht jemand bereits Erfahrungen mit dem MKR1000 Board gemacht?
                          Für mich ist die Arduino-Welt Neuland, aber nichts, wo man sich nicht hinein arbeiten kann :)

                          @Eisbaeeer Ich würde mein Sketch gerne auf deinem Sketch aufbauen und mir Code-Schnipsel von dort "klauen" :) Hoffe das ist für Dich in Ordnung.

                          Soweit erstmal und Grüße vom Bodensee,
                          Maze

                          EisbaeeerE Offline
                          EisbaeeerE Offline
                          Eisbaeeer
                          Developer
                          schrieb am zuletzt editiert von
                          #234

                          @Maze77 sagte in Füllstandsmessung per Pegelsonde.:

                          @Eisbaeeer Ich würde mein Sketch gerne auf deinem Sketch aufbauen und mir Code-Schnipsel von dort "klauen" :) Hoffe das ist für Dich in Ordnung.

                          Soweit erstmal und Grüße vom Bodensee,
                          Maze

                          Hi Maze
                          Alles gut. Code liegt auf Github. Kannst ihn gerne abwandeln oder codeschnipsel verwenden. Wenn du Wifi nutzen willst, kann ich dir die NodeMCU oder ESP32 empfehlen. Günstig und richtig schnell. Mein Anspruch war eben Kabelgebunden.
                          Gruß Eisbaeeer

                          Kein support per PM. Bitte im Forum Fragen stellen!

                          1 Antwort Letzte Antwort
                          0
                          • M Offline
                            M Offline
                            Maze77
                            schrieb am zuletzt editiert von
                            #235

                            Danke schonmal :)

                            Hast du noch eine Bezugsquelle zu deinem Arduino-Clone und vorallem dem Ethernet Shield?
                            Hab nur Shields für den "Uno" von den Abmaßen gefunden.

                            Gruß
                            Maze

                            1 Antwort Letzte Antwort
                            0
                            • L ltathome

                              Hi - das Thema pull-Request hatten wir neulich schon mal auch per Chat - hatten wir dann nicht weiterverfolgt. Ich hab dir hier den diff beigepackt: patch.diff

                              und kann dir gerne helfen die wichtigen Stellen zu erklären - melde dich halt.

                              Grundsätzlich folgendes angepackt:
                              einen Pin (PIN 2) als Input-Pin deklariert:

                              #define MODE_PIN 2
                              #define MODE_ZISTERNE 0
                              #define MODE_HAUSWASSER 1
                              #define MODE_AUTO 2
                              #define MODE_COUNT 10
                              bool setmode = false;
                              const char *modes[] = {"Zisterne", "Hauswasser", "Auto"};
                              int mode_count = MODE_COUNT;
                              int mode = MODE_AUTO;
                              int old_mode = MODE_AUTO;
                              int pin_stat;
                              int old_stat;
                              

                              der wird im loop auf Low/high-Übergänge geprüft und mit erstem auslösen setzt sich das System in einen "Mode-Change" Modus für 10 sekunden, in dem jeder weitere Übergang die Modi durchschaltet und den Countdown wieder auf 10 Sekunden setzt (damit das nicht prellt, zwischen den Übergängen 200ms delay:

                                  pin_stat = digitalRead(MODE_PIN);
                                  pinMillis = millis();
                                  if (pin_stat == LOW) {
                                      if (pinMillis - lastMillis > 200) {
                                          //USE_SERIAL.println("Impuls Low");
                                          lastMillis = pinMillis;
                                          mode_count = MODE_COUNT;
                                          if (!setmode) {
                                              setmode = true;
                                              old_mode = mode;
                                              //sprintf(buf, "Enter Settings-Mode %d (%s)", mode, modes[mode]);
                                              //USE_SERIAL.println(buf);
                                          } else {
                                              mode--;
                                              if (mode < 0) {
                                                  mode = 2;
                                              }
                                              //sprintf(buf, "Mode change to %d (%s)", mode, modes[mode]);
                                              //USE_SERIAL.println(buf);
                                          }
                                      }
                                  }
                              

                              Wenn im Settingsmodus - den Zähler runterzählen und sonst die entscheidung treffen, ob das Ventil umzuschalten ist (Limits)

                                      if (setmode) {
                                          mode_count--;
                                          if (mode_count <= 0) {
                                              //sprintf(buf, "leaving Settings-Mode - change from %d to %d (%s)", old_mode, mode, modes[mode]);
                                              //USE_SERIAL.println(buf);
                                              old_mode = mode;
                                              setmode = false;
                                          }
                                      }
                                      if (!setmode) {
                                          if (mode == MODE_ZISTERNE) {
                                              new_valve = VALVE_ZISTERNE;
                                              reason = 0;
                                          } else if (mode == MODE_HAUSWASSER) {
                                              new_valve = VALVE_HAUSWASSER;
                                              reason = 0;
                                          } else if (mode == MODE_AUTO) {
                                              if (liter >= limit_high) {
                                                  new_valve = VALVE_ZISTERNE;
                                                  reason = 1;
                                              }
                                              if (liter <= limit_low) {
                                                  new_valve = VALVE_HAUSWASSER;
                                                  reason = 2;
                                              }
                                          }
                                      }
                                      /*-----------------------------------------------------------
                                       * Wenn Ventil umzuschalten ist
                                      */
                                      if (new_valve != valve) {
                                          valve = new_valve;
                                          digitalWrite(VALVE_PIN, valve);
                                          //sprintf(buf, "Set Valve to %s (%s)", valves[valve], reasons[reason]);
                                          //USE_SERIAL.println(buf);
                                      }
                              

                              Einen PIN (3) als Ausgang für das Ventil-Relais:

                              
                              #define VALVE_PIN 3
                              #define VALVE_ZISTERNE LOW
                              #define VALVE_HAUSWASSER HIGH
                              int valve = VALVE_ZISTERNE;
                              int new_valve = VALVE_ZISTERNE;
                              int reason = 0;
                              const char *valves[] = {"Zisterne", "Hauswasser"};
                              const char *reasons[] = {"manuelle Steuerung", "Automatik voll", "Automatik leer"};
                              
                              

                              Die MQTT-Publishes erweitert:

                              void Mqttpublish(void) {
                                      if (mqttclient.connected()) {
                                          dtostrf(analog, 5, 2, buf);
                                          mqttclient.publish("Zisterne/Analog", buf);
                                          dtostrf(liter, 5, 0, buf);
                                          mqttclient.publish("Zisterne/Liter", buf);
                                          dtostrf(limit_low, 1, 0, buf);
                                          mqttclient.publish("Zisterne/LiterLow", buf);
                                          dtostrf(limit_high, 1, 0, buf);
                                          mqttclient.publish("Zisterne/LiterHigh", buf);
                                          dtostrf(percent, 5, 0, buf);
                                          mqttclient.publish("Zisterne/Prozent", buf);
                                          
                                          if (mode == 2) {
                                              mqttclient.publish("Zisterne/Modus", "Auto");
                                          } else {
                                              mqttclient.publish("Zisterne/Modus", "Manuell");          
                                          }
                                          dtostrf(mode, 1, 0, buf);
                                          mqttclient.publish("Zisterne/Mode", buf);
                                          dtostrf(valve, 1, 0, buf);
                                          mqttclient.publish("Zisterne/Valve", buf);
                                          mqttclient.publish("Zisterne/Ventil", valves[valve]);
                                  
                                          // System
                                          mqttclient.publish("Zisterne/Uptime", uptime);
                                      } else {
                                          MqttConnect(mqttuser, mqttpass);  
                                      }
                                  }
                              

                              und natürlich den Subscribe eingebaut:

                              
                              
                              void MqttConnect(char *user, char* pass) {
                              
                                  mqttclient.setClient(ethClient);
                                  mqttclient.setServer(mqttserver, mqttport);
                                  mqttclient.setCallback(MqttCallback);
                                  
                                  mqttconnected = mqttclient.connect(MQTT_ID, user, pass);
                                  if (mqttconnected) {
                                      // USE_SERIAL.println("Connected to Mqtt-Server");
                                      mqttclient.subscribe("Zisterne/cmnd/Mode");
                                      mqttclient.subscribe("Zisterne/cmnd/Limit");
                                      mqttclient.subscribe("Zisterne/Mode");
                                      // USE_SERIAL.println("subscribing to Zisterne/cmnd/Mode");
                                  }
                              }
                              
                              

                              sowie den Callback definiert:

                              
                              void MqttCallback(char *topic, byte *payload, unsigned int length) {
                                  char *payloadvalue;
                                  char *payloadkey;
                              
                                  payload[length] = '\0';
                                  payloadkey = (char *)&payload[0];
                              
                                  // USE_SERIAL.println(payloadstring);
                                  if (strcmp(topic, "Zisterne/cmnd/Mode") == 0 || strcmp(topic, "Zisterne/Mode") == 0) {
                                      if (strcmp(payloadkey, "0") == 0 || strcmp(payloadkey, "Zisterne") == 0) {
                                          mode = MODE_ZISTERNE;
                                      } else if (strcmp(payloadkey, "1") == 0 || strcmp(payloadkey, "Hauswasser") == 0) {
                                          mode = MODE_HAUSWASSER;
                                      } else if (strcmp(payloadkey, "2") == 0 || strcmp(payloadkey, "Auto") == 0) {
                                          mode = MODE_AUTO;
                                      }
                                  } else if (strcmp(topic, "Zisterne/cmnd/Limit") == 0) {
                                      int eq = 0;
                                      for (int i = 0; i < length; i++) {
                                          if (payload[i] == '=') {
                                              eq = i;
                                              break;
                                          }
                                      }
                                      if (eq > 0) {
                                          payload[eq++] = 0;
                                          payloadvalue = (char *)&payload[eq];
                                          if (strcmp((char *)payload, "Low") == 0 || strcmp((char *)payload, "low") == 0) {
                                              limit_low = atoi(payloadvalue);
                                          }
                                          if (strcmp((char *)payload, "High") == 0 || strcmp((char *)payload, "high") == 0) {
                                              limit_high = atoi(payloadvalue);
                                          }
                                      }
                                  }
                              }
                              

                              wie gesagt - melde dich, wenn ich helfen kann/soll.

                              EisbaeeerE Offline
                              EisbaeeerE Offline
                              Eisbaeeer
                              Developer
                              schrieb am zuletzt editiert von
                              #236

                              @ltathome Da hast du mir ja ein paar Zeilen Code verheimlicht ;-)
                              ABER der diff hat alles gerettet. Hab eben den Code aktualisiert und fehlerfrei compiliert. Werde ihn die nächsten Tage hoffentlich mal einspielen, testen und in Github hochladen.
                              Danke für die Anpassung.
                              Gruß Eisbaeeer

                              Kein support per PM. Bitte im Forum Fragen stellen!

                              L 1 Antwort Letzte Antwort
                              0
                              • EisbaeeerE Eisbaeeer

                                Nicht wirklich ein Schaltplan, aber ich hoffe man kann es nachvollziehen.
                                Der Aufwand für Eagle war mir jetzt zu hoch. Aber es sollte ersichtlich sein, wie man das verschaltet.
                                Schaltplan.jpg
                                Ansonsten einfach fragen.
                                Grüße Eisbaeeer

                                E Offline
                                E Offline
                                ede70
                                schrieb am zuletzt editiert von
                                #237

                                @Eisbaeeer ich bekomme bei dem von dir angegebenen Wandler die 0V am linken Poti nicht kalibriert. Minimal kriege ca. 3V. Weniger geht nicht und man hört beim Weiterdrehen ein leises Klicken im Poti?
                                e6c99ea7-8909-4582-b962-c16339912678-grafik.png
                                Jumper sind beide gezogen.
                                Lötstellen habe ich "nachgelötet", dann das Modul ausgetauscht gg. ein baugleiches. Auf 0V komme ich nicht.
                                Deine Anleitung ist ja super, aber ich verzweifle langsam. Gibt es noch ein Tipp?

                                Vielen Dank für die Hilfe!
                                Torsten

                                EisbaeeerE 1 Antwort Letzte Antwort
                                0
                                • E ede70

                                  @Eisbaeeer ich bekomme bei dem von dir angegebenen Wandler die 0V am linken Poti nicht kalibriert. Minimal kriege ca. 3V. Weniger geht nicht und man hört beim Weiterdrehen ein leises Klicken im Poti?
                                  e6c99ea7-8909-4582-b962-c16339912678-grafik.png
                                  Jumper sind beide gezogen.
                                  Lötstellen habe ich "nachgelötet", dann das Modul ausgetauscht gg. ein baugleiches. Auf 0V komme ich nicht.
                                  Deine Anleitung ist ja super, aber ich verzweifle langsam. Gibt es noch ein Tipp?

                                  Vielen Dank für die Hilfe!
                                  Torsten

                                  EisbaeeerE Offline
                                  EisbaeeerE Offline
                                  Eisbaeeer
                                  Developer
                                  schrieb am zuletzt editiert von
                                  #238

                                  @ede70 hab eben nochmals nachgeschaut. Deine Jumper sind richtig gesteckt. Welchen Wert hast du denn ohne Sonde?20200530_195133.jpg
                                  Gruß Eisbaeeer

                                  Kein support per PM. Bitte im Forum Fragen stellen!

                                  E 1 Antwort Letzte Antwort
                                  0
                                  • EisbaeeerE Eisbaeeer

                                    @ede70 hab eben nochmals nachgeschaut. Deine Jumper sind richtig gesteckt. Welchen Wert hast du denn ohne Sonde?20200530_195133.jpg
                                    Gruß Eisbaeeer

                                    E Offline
                                    E Offline
                                    ede70
                                    schrieb am zuletzt editiert von
                                    #239

                                    @Eisbaeeer ca. 5,3V

                                    1 Antwort Letzte Antwort
                                    0
                                    • EisbaeeerE Eisbaeeer

                                      @ltathome Da hast du mir ja ein paar Zeilen Code verheimlicht ;-)
                                      ABER der diff hat alles gerettet. Hab eben den Code aktualisiert und fehlerfrei compiliert. Werde ihn die nächsten Tage hoffentlich mal einspielen, testen und in Github hochladen.
                                      Danke für die Anpassung.
                                      Gruß Eisbaeeer

                                      L Offline
                                      L Offline
                                      ltathome
                                      schrieb am zuletzt editiert von
                                      #240

                                      @Eisbaeeer said in Füllstandsmessung per Pegelsonde.:

                                      @ltathome Da hast du mir ja ein paar Zeilen Code verheimlicht ;-)
                                      ABER der diff hat alles gerettet. Hab eben den Code aktualisiert und fehlerfrei compiliert. Werde ihn die nächsten Tage hoffentlich mal einspielen, testen und in Github hochladen.
                                      Danke für die Anpassung.
                                      Gruß Eisbaeeer

                                      Ich hatte erwartet, dass klar ist, dass das nur die wesentlichen Ausschnitte waren - sorry.

                                      EisbaeeerE 1 Antwort Letzte Antwort
                                      0
                                      • L ltathome

                                        @Eisbaeeer said in Füllstandsmessung per Pegelsonde.:

                                        @ltathome Da hast du mir ja ein paar Zeilen Code verheimlicht ;-)
                                        ABER der diff hat alles gerettet. Hab eben den Code aktualisiert und fehlerfrei compiliert. Werde ihn die nächsten Tage hoffentlich mal einspielen, testen und in Github hochladen.
                                        Danke für die Anpassung.
                                        Gruß Eisbaeeer

                                        Ich hatte erwartet, dass klar ist, dass das nur die wesentlichen Ausschnitte waren - sorry.

                                        EisbaeeerE Offline
                                        EisbaeeerE Offline
                                        Eisbaeeer
                                        Developer
                                        schrieb am zuletzt editiert von
                                        #241

                                        @ltathome Kein Problem ;-) War nicht als Kritik gemeint!
                                        Gruß

                                        Kein support per PM. Bitte im Forum Fragen stellen!

                                        1 Antwort Letzte Antwort
                                        0
                                        • M Offline
                                          M Offline
                                          Maze77
                                          schrieb am zuletzt editiert von Maze77
                                          #242

                                          Hallo Zusammen,

                                          ich hatte jetzt auch mal ein wenig Zeit mir den Cdoe anzusehen.

                                          Meiner Hardware ist folgende:

                                          Ardunio MKR 1000
                                          LCD 2x16

                                          Drucksonde, DC-DC-Step Up und Messbrücke kommen noch.

                                          Nachdem ich mich erst einmal in das Thema einarbeiten musste, bin ich jetzt soweit, dass der Code angepasst auf meine WiFi Verbindung und das 16x2 Display läuft.

                                          Die Messwerte habe ich mittels Poti simuliert.

                                          Hierbei ist mir ein Fehler in deinem Skript aufgefallen @Eisbaeeer und zwar bei der Glättung des Analogen Messwertes.
                                          Der Fehler fällt bei deinen 60 Messungen nicht wirklich stark ins Gewicht, aber er ist da :) Bei 2 Messungen liegst du um 100% daneben. Du hast vergessen den Wert "fuel" wieder zu resetten. Somit addierst du auf den alten Wert die neuen hinzu. Der Fehler liegt somit bei (messungen+ 1) / (messungen).
                                          Die eine Zeile im Code behebt den Fehler.

                                              // Werte aufaddieren
                                                  fuel = 0; // Initialisierung HINZUGEFÜGT, da Berechnung sonst falsch
                                                  for (int i = 0; i < messungen; i++)
                                                    {
                                                     fuel = fuel + myArray[i];
                                                    }
                                                  // Summe durch Anzahl
                                                     fuel = fuel / messungen;
                                          

                                          Dann Frage ich mich, warum du die Prozentzahl so "seltsam" berechnest.

                                              percent = fuel * 0.132;
                                          

                                          Du gibts in dem Skript doch den maximalen Analog Wert an und hast den aktuellen vorliegen. Somit wäre folgender Code eigentlich richtig:

                                          percent = fuel / analog_value * 100;
                                          

                                          Was mir noch aufgefallen ist, ist dass die Pointerschleife zuweit läuft:

                                              if ( pointer > messungen ) {
                                                pointer = 0;
                                              } else {
                                                pointer++;  
                                              }
                                          

                                          Bei dir mit zB messungen = 60 ginge der Pointer von 0 bis 60 was 61 Messpunkten entspricht. (die 0 nicht vergessen).

                                          Was sehr schade an dem Code ist, ist der Umstand, dass er mittlerweile für ein 20x4 LCD geschrieben ist. In deiner Teile List und auch im Header vom Code stehen 16x2, was vielleicht den ein oder anderen zum "Fehlkauf" verleitet ;)

                                          Aber im Großen und Ganzen läuft der Code und die Kommunikation zu meinem IP-Symcon MQTT Server funktioniert auch 1A.

                                          Sobald der Drucksensor kommt sollte sich somit das Zisternenüberwachungsproblem erledigt haben :)

                                          Danke nochmal und Gruß
                                          Maze

                                          PS:
                                          Beim Arduino MKR können die Analogen Inputs mit bis zu 12Bit ausgelesen werden (0-4095).

                                          EisbaeeerE L 2 Antworten Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          859

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe