148 lines
5.0 KiB
C++
148 lines
5.0 KiB
C++
#include "esphome.h"
|
|
#include "tca9548a.h"
|
|
#include <Wire.h>
|
|
#include <Adafruit_seesaw.h>
|
|
|
|
#define DIP_ADDR 0x65
|
|
|
|
class PlantsSensor : public PollingComponent, public sensor::Sensor {
|
|
|
|
private:
|
|
Adafruit_seesaw plant_2_ss;
|
|
|
|
public:
|
|
sensor::Sensor *plant_1_enabled = new sensor::Sensor();
|
|
sensor::Sensor *plant_2_enabled = new sensor::Sensor();
|
|
sensor::Sensor *plant_3_enabled = new sensor::Sensor();
|
|
sensor::Sensor *plant_4_enabled = new sensor::Sensor();
|
|
sensor::Sensor *plant_5_enabled = new sensor::Sensor();
|
|
sensor::Sensor *plant_6_enabled = new sensor::Sensor();
|
|
sensor::Sensor *plant_7_enabled = new sensor::Sensor();
|
|
sensor::Sensor *plant_8_enabled = new sensor::Sensor();
|
|
|
|
sensor::Sensor *plant_1_sensor = new sensor::Sensor();
|
|
sensor::Sensor *plant_2_sensor = new sensor::Sensor();
|
|
sensor::Sensor *plant_3_sensor = new sensor::Sensor();
|
|
sensor::Sensor *plant_4_sensor = new sensor::Sensor();
|
|
sensor::Sensor *plant_5_sensor = new sensor::Sensor();
|
|
sensor::Sensor *plant_6_sensor = new sensor::Sensor();
|
|
sensor::Sensor *plant_7_sensor = new sensor::Sensor();
|
|
sensor::Sensor *plant_8_sensor = new sensor::Sensor();
|
|
|
|
sensor::Sensor *plant_1_remote_enabled = new sensor::Sensor();
|
|
sensor::Sensor *plant_2_remote_enabled = new sensor::Sensor();
|
|
sensor::Sensor *plant_3_remote_enabled = new sensor::Sensor();
|
|
sensor::Sensor *plant_4_remote_enabled = new sensor::Sensor();
|
|
sensor::Sensor *plant_5_remote_enabled = new sensor::Sensor();
|
|
sensor::Sensor *plant_6_remote_enabled = new sensor::Sensor();
|
|
sensor::Sensor *plant_7_remote_enabled = new sensor::Sensor();
|
|
sensor::Sensor *plant_8_remote_enabled = new sensor::Sensor();
|
|
|
|
// 4294967295UL == never per sources
|
|
PlantsSensor() : PollingComponent(60*60*1000) { }
|
|
|
|
void setup() override {
|
|
// Plant 2 : Adafruit STEMMA Soil Sensor
|
|
enableMuxPort(1);
|
|
plant_2_ss.begin(0x36);
|
|
disableMuxPort(1);
|
|
}
|
|
|
|
void update() override {
|
|
Wire.requestFrom(DIP_ADDR, 2);
|
|
byte dip_values_1 = Wire.read();
|
|
byte dip_values_2 = Wire.read();
|
|
|
|
boolean plant_1 = bitRead(dip_values_1, 7);
|
|
boolean plant_2 = bitRead(dip_values_1, 6);
|
|
boolean plant_3 = bitRead(dip_values_1, 5);
|
|
boolean plant_4 = bitRead(dip_values_1, 4);
|
|
boolean plant_5 = bitRead(dip_values_1, 3);
|
|
boolean plant_6 = bitRead(dip_values_1, 2);
|
|
boolean plant_7 = bitRead(dip_values_1, 1);
|
|
boolean plant_8 = bitRead(dip_values_1, 0);
|
|
boolean plant_1_remote = bitRead(dip_values_2, 7);
|
|
boolean plant_2_remote = bitRead(dip_values_2, 6);
|
|
boolean plant_3_remote = bitRead(dip_values_2, 5);
|
|
boolean plant_4_remote = bitRead(dip_values_2, 4);
|
|
boolean plant_5_remote = bitRead(dip_values_2, 3);
|
|
boolean plant_6_remote = bitRead(dip_values_2, 2);
|
|
boolean plant_7_remote = bitRead(dip_values_2, 1);
|
|
boolean plant_8_remote = bitRead(dip_values_2, 0);
|
|
|
|
plant_1_enabled->publish_state(plant_1);
|
|
plant_2_enabled->publish_state(plant_2);
|
|
plant_3_enabled->publish_state(plant_3);
|
|
plant_4_enabled->publish_state(plant_4);
|
|
plant_5_enabled->publish_state(plant_5);
|
|
plant_6_enabled->publish_state(plant_6);
|
|
plant_7_enabled->publish_state(plant_7);
|
|
plant_8_enabled->publish_state(plant_8);
|
|
plant_1_remote_enabled->publish_state(plant_1_remote);
|
|
plant_2_remote_enabled->publish_state(plant_2_remote);
|
|
plant_3_remote_enabled->publish_state(plant_3_remote);
|
|
plant_4_remote_enabled->publish_state(plant_4_remote);
|
|
plant_5_remote_enabled->publish_state(plant_5_remote);
|
|
plant_6_remote_enabled->publish_state(plant_6_remote);
|
|
plant_7_remote_enabled->publish_state(plant_7_remote);
|
|
plant_8_remote_enabled->publish_state(plant_8_remote);
|
|
|
|
double plant_1_value = -1;
|
|
if (plant_1) {
|
|
enableMuxPort(0);
|
|
disableMuxPort(0);
|
|
}
|
|
plant_1_sensor->publish_state(plant_1_value);
|
|
|
|
double plant_2_value = -1;
|
|
if (plant_2) {
|
|
enableMuxPort(1);
|
|
plant_2_value = plant_2_ss.touchRead(0);
|
|
disableMuxPort(1);
|
|
}
|
|
plant_2_sensor->publish_state(plant_2_value);
|
|
|
|
double plant_3_value = -1;
|
|
if (plant_3) {
|
|
enableMuxPort(2);
|
|
disableMuxPort(2);
|
|
}
|
|
plant_3_sensor->publish_state(plant_3_value);
|
|
|
|
double plant_4_value = -1;
|
|
if (plant_4) {
|
|
enableMuxPort(3);
|
|
disableMuxPort(3);
|
|
}
|
|
plant_4_sensor->publish_state(plant_4_value);
|
|
|
|
double plant_5_value = -1;
|
|
if (plant_5) {
|
|
enableMuxPort(4);
|
|
disableMuxPort(4);
|
|
}
|
|
plant_5_sensor->publish_state(plant_5_value);
|
|
|
|
double plant_6_value = -1;
|
|
if (plant_6) {
|
|
enableMuxPort(5);
|
|
disableMuxPort(5);
|
|
}
|
|
plant_6_sensor->publish_state(plant_6_value);
|
|
|
|
double plant_7_value = -1;
|
|
if (plant_7) {
|
|
enableMuxPort(6);
|
|
disableMuxPort(6);
|
|
}
|
|
plant_7_sensor->publish_state(plant_7_value);
|
|
|
|
double plant_8_value = -1;
|
|
if (plant_8) {
|
|
enableMuxPort(7);
|
|
disableMuxPort(7);
|
|
}
|
|
plant_8_sensor->publish_state(plant_8_value);
|
|
}
|
|
};
|