Changed chlorine-pump to use the Ezo Orp module by AtlasScientific using I2C.
This module is by miles more accurate than any analog crap we could have come up with... Not that the last idea was anything to scoff at I guess
This commit is contained in:
62
external_components/ezo_orp_i2c/sensor.py
Normal file
62
external_components/ezo_orp_i2c/sensor.py
Normal file
@@ -0,0 +1,62 @@
|
||||
import esphome.codegen as cg
|
||||
import esphome.config_validation as cv
|
||||
from esphome import automation
|
||||
from esphome.components import sensor, i2c
|
||||
from esphome.components.adc import sensor as adc
|
||||
from esphome.const import (
|
||||
CONF_ID,
|
||||
DEVICE_CLASS_VOLTAGE,
|
||||
STATE_CLASS_MEASUREMENT,
|
||||
)
|
||||
|
||||
DEPENDENCIES = ["i2c"]
|
||||
|
||||
chlorine_sensor_ns = cg.esphome_ns.namespace('ezo_orp_i2c')
|
||||
ChlorineSensor = chlorine_sensor_ns.class_('EzoOrpSensor', cg.PollingComponent, sensor.Sensor, i2c.I2CDevice)
|
||||
|
||||
UNIT_MILLI_VOLT = "mV"
|
||||
|
||||
ICON_TEST_TUBE="mdi:test-tube"
|
||||
|
||||
ACTION_CONF_CALIBRATE_TARGET = "calibrate_target"
|
||||
|
||||
CalibrateAction = chlorine_sensor_ns.class_("EzoCalibrateAction", automation.Action)
|
||||
DeviceInfoAction = chlorine_sensor_ns.class_("DeviceInfoAction", automation.Action)
|
||||
|
||||
CONFIG_SCHEMA = cv.All(
|
||||
sensor.sensor_schema(
|
||||
ChlorineSensor,
|
||||
unit_of_measurement=UNIT_MILLI_VOLT,
|
||||
accuracy_decimals=1,
|
||||
device_class=DEVICE_CLASS_VOLTAGE,
|
||||
state_class=STATE_CLASS_MEASUREMENT,
|
||||
icon=ICON_TEST_TUBE
|
||||
)
|
||||
.extend(i2c.i2c_device_schema(0x62))
|
||||
.extend(cv.polling_component_schema("60s"))
|
||||
)
|
||||
|
||||
ACTION_SCHEMA = cv.Schema({
|
||||
cv.GenerateID(): cv.use_id(ChlorineSensor)
|
||||
})
|
||||
|
||||
@automation.register_action("sensor.ezo_orp_i2c.calibrate", CalibrateAction, ACTION_SCHEMA.extend({
|
||||
cv.Required(ACTION_CONF_CALIBRATE_TARGET): cv.int_range(100, 999),
|
||||
}))
|
||||
async def calibrate_action_to_code(config, action_id, template_arg, args):
|
||||
paren = await cg.get_variable(config[CONF_ID])
|
||||
var = cg.new_Pvariable(action_id, template_arg, paren)
|
||||
template_ = await cg.templatable(config[ACTION_CONF_CALIBRATE_TARGET], args, float)
|
||||
cg.add(var.set_value(template_))
|
||||
return var
|
||||
|
||||
@automation.register_action("sensor.ezo_orp_i2c.print_device_info", DeviceInfoAction, ACTION_SCHEMA)
|
||||
async def info_action_to_code(config, action_id, template_arg, args):
|
||||
paren = await cg.get_variable(config[CONF_ID])
|
||||
return cg.new_Pvariable(action_id, template_arg, paren)
|
||||
|
||||
async def to_code(config):
|
||||
var = cg.new_Pvariable(config[CONF_ID])
|
||||
await cg.register_component(var, config)
|
||||
await sensor.register_sensor(var, config)
|
||||
await i2c.register_i2c_device(var, config)
|
Reference in New Issue
Block a user