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:
Spoiler
#-
- 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