home-automation/hardware/esphome/plant_dashboard/plants.h

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);
}
};