Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. TDS Sensor / EC-Messen Hilfe gesucht

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    TDS Sensor / EC-Messen Hilfe gesucht

    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      bimmi last edited by

      Hallo zusammen!

      Ich wollte mal fragen, ob jemand schonmal einen EC Sensor über einen ESP mit blockly ausgewertet hat?

      Ich habe diesen Sensor gekauft: https://www.dfrobot.com/product-1662.html

      e923cb8d-2c07-4641-9c3f-c47cc9b67f98-image.png

      Der hängt jetzt am analog input eines esp32 und ich bekomme auch die Analogwerte angezeigt. Als nächstes brauch ich eine Kalibrierlösung. Jedoch bis die da ist, wollte ich um etwas Hilfe fragen bezüglich der Skripterstellung dahinter.

      Wie ich die Analogwerte umrechne ist mir bewusst (funktioniert im Prinzip wie ein Feuchtigkeitssensor) jedoch mein Problem ist die Temperaturabhängingkeit. Sprich man müsste das ganze wohl immer mit der Temperatur der Lösung umrechnen. Dazu habe ich das hier gefunden: https://wiki.dfrobot.com/Gravity__Analog_TDS_Sensor___Meter_For_Arduino_SKU__SEN0244 jedoch würde ich das ganze gerne über einen esp32 mit Tasmota nutzen, da ich auch noch Relais und andere Sensoren dran habe. Temperatursensor, Feuchtigkeitssensor, Schwimmer usw...

      Da der esp32 einen nicht so genauen ADC hat, habe ich mir bereits auch die ADC Module bestellt, damit man höher auflösen kann.

      Vielleicht bekomme ich ja hier etwas Unterstützung für mein Projekt.

      Gruß Bimmi

      E 1 Reply Last reply Reply Quote 0
      • E
        el-lutschi @bimmi last edited by

        @bimmi Hallo, bist du hier weiter gekommen? Ich bekomme in Tasmota über einen Analog Input Daten vom TDS Sensor. Leider schaffe ich es nicht diese sinnvoll zu verwerten. Alles was ich an Berechnungen im Netz gefunden habe ergibt bei mir leider kein richtiges Ergebnis. Kannst du mir vielleicht weiterhelfen?

        1 Reply Last reply Reply Quote 0
        • E
          el-lutschi last edited by

          Nach einigen Stunden basteln habe ich es nun mit einem berry script geschafft den richtigen TDS und EC Wert zu berechnen.

          Die Grundlage für mein Skript habe ich hier gefunden:
          https://github.com/arendst/Tasmota/discussions/18046

          Dieses habe ich dann noch angepasst, damit man die beiden Werte über MQTT in den iobroker bekommt.

          Hier das tasmota berry script:

          #-
          - Analog input driver written in Berry
          -
          - Support for TDS (Total Dissolved Solids) Meter Sensor_CQRSENTDS01
          - http://www.cqrobot.wiki/index.php/TDS_(Total_Dissolved_Solids)_Meter_Sensor_SKU:_CQRSENTDS01
          - Based on TMP117-driver driver by sfromis and TomsTek (https://github.com/TomsTek/tasmota-berry-TMP117-driver)
          -#
          
          class CQRSENTDS01: Driver
           static sensor_name = "CQRSENTDS01"  # sensor name
           static tds_label  = "TDS"           # label for temperature in language of preference
          
           var tds            # global TDS value in PPM
           var comp_temp      # global temperature compensation
           var voltage        # global TDS sensor voltage
           var prev_voltage
           var calib_offset
           var percentage_offset
           var ec
          
           def init()
             # initialize globals
             self.tds = 0
             self.comp_temp = 25.0
             self.voltage = 1.0
             self.prev_voltage = self.voltage
             self.ec = 0.00
             self.calib_offset = 176    # Minimale, angezeigte Spannung wenn Sensor nicht im Wasser
             self.percentage_offset = 0.96    # Abweichung des PPM Wertes. Bsp.: Anzeige 4% zu hoch -> 0.96
             # create rules to trigger when TDS sensor voltage updates and temp sensor updates
             tasmota.add_rule("ANALOG#A5", /value -> self.trigger_voltage(value))    # TDS-Sensor festlegen
             tasmota.add_rule("DS18B20-1#Temperature", /value -> self.trigger_temp(value))    # Temp-Sensor festlegen
           end
          
           def trigger_voltage(voltage)
             if voltage != nil
               self.voltage = voltage - self.calib_offset
             end
             # print("voltage:", voltage)
           end
          
           def trigger_temp(temp)
             if temp != nil
               if tasmota.get_option(8) == 1
                 self.comp_temp = 1.0 + 0.02 * (((temp - 32.0) * 0.5555) - 25.0)
               else
                 self.comp_temp = 1.0 + 0.02 * (temp - 25.0)
               end
             end
             # print("temp:", temp, "comp_temp:", self.comp_temp)
           end
          
           #- calculate TDS & EC value from voltage and temp -#
           def calc_tds()
             # to reduce cpu usage, only perform calculation if voltage changes
             if self.prev_voltage != self.voltage
               self.prev_voltage = self.voltage
               var comp_voltage = (self.voltage / 1000.0) / self.comp_temp
               self.tds = (((133.42 * comp_voltage * comp_voltage * comp_voltage - 255.86 * comp_voltage * comp_voltage + 857.39 * comp_voltage) * 0.5) * self.percentage_offset)
               self.ec = (self.tds * 2) / 1000
               # print("comp_temp:", self.comp_temp, ", comp_voltage:", comp_voltage, ", tds:", self.tds, ", EC:", self.ec)
             end
           end
          
           #- trigger a read every second -#
           def every_second()
             self.calc_tds()
           end
          
           #- display sensor TDS & EC value in the web UI -#
           def web_sensor()
             import string
             if ! self.tds
               self.tds = 0
               self.ec = 0
             end
             var msg = string.format("{s}%s %s{m}%s PPM{e}", "TDS-Sensor", "", self.tds)
             var msg_ec = string.format("{s}%s %s{m}%s EC{e}", "EC-Sensor", "", self.ec)
             tasmota.web_send_decimal(msg)
             tasmota.web_send_decimal(msg_ec)
           end
          
           #- add sensor TDS & EC value to teleperiod -#
           def json_append()
             import string
             if ! self.tds
               self.tds = 0
               self.ec = 0
             end
             var msg = string.format(',"%s":{"%s":%s}', "TDS-Sensor", "TDS", self.tds)
             var msg_ec = string.format(',"%s":{"%s":%s}', "EC-Sensor", "EC", self.ec)
             tasmota.response_append(msg)
             tasmota.response_append(msg_ec)
           end
          
          end
          cqrsentds01 = CQRSENTDS01()
          tasmota.add_driver(cqrsentds01)
          

          Viele Grüsse
          Chris

          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          1.1k
          Online

          31.7k
          Users

          79.7k
          Topics

          1.3m
          Posts

          blockly
          2
          3
          462
          Loading More Posts
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes
          Reply
          • Reply as topic
          Log in to reply
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
          The ioBroker Community 2014-2023
          logo