diff --git a/supersensor.yaml b/supersensor.yaml index 9231c0e..a1c0ae5 100644 --- a/supersensor.yaml +++ b/supersensor.yaml @@ -28,6 +28,14 @@ esphome: name: supersensor name_add_mac_suffix: true friendly_name: "Supersensor" + includes: + - veml7700.h + libraries: + - "Wire" + - "Adafruit Unified Sensor" + - "SPI" + - "Adafruit BusIO" + - "Adafruit VEML7700 Library" on_boot: - priority: 600 then: @@ -52,17 +60,17 @@ esphome: esp32: board: esp32dev - framework: - type: esp-idf - sdkconfig_options: - CONFIG_ESP32_DEFAULT_CPU_FREQ_240: "y" - CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ: "240" - CONFIG_ESP32_DATA_CACHE_64KB: "y" - CONFIG_ESP32_DATA_CACHE_LINE_64B: "y" - CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240: "y" - CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ: "240" - CONFIG_ESP32S3_DATA_CACHE_64KB: "y" - CONFIG_ESP32S3_DATA_CACHE_LINE_64B: "y" +# framework: +# type: esp-idf +# sdkconfig_options: +# CONFIG_ESP32_DEFAULT_CPU_FREQ_240: "y" +# CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ: "240" +# CONFIG_ESP32_DATA_CACHE_64KB: "y" +# CONFIG_ESP32_DATA_CACHE_LINE_64B: "y" +# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240: "y" +# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ: "240" +# CONFIG_ESP32S3_DATA_CACHE_64KB: "y" +# CONFIG_ESP32S3_DATA_CACHE_LINE_64B: "y" script: - id: pir_handler @@ -236,6 +244,7 @@ binary_sensor: internal: false device_class: motion on_press: + - script.stop: pir_handler - script.execute: pir_handler - platform: template @@ -259,24 +268,36 @@ sensor: name: "BMP280 Temperature" pressure: name: "BMP280 Pressure" - update_interval: 15s + update_interval: 5s address: 0x76 - - platform: bh1750 - name: "BH1750 Illuminance" - address: 0x23 - update_interval: 15s + - platform: custom + lambda: |- + auto veml7700 = new VEML7700CustomSensor(); + App.register_component(veml7700); + return {veml7700, veml7700->lux_sensor, veml7700->white_sensor, veml7700->als_sensor}; + sensors: + - name: "VEML7700 Light" # Required dummy sensor + - name: "VEML7700 Lux" + unit_of_measurement: Lux + accuracy_decimals: 0 + - name: "VEML7700 White" + unit_of_measurement: raw + accuracy_decimals: 0 + - name: "VEML7700 ALS" + unit_of_measurement: raw + accuracy_decimals: 0 - platform: uptime name: "ESP32 Uptime" icon: mdi:clock-alert - update_interval: 15s + update_interval: 5s entity_category: "diagnostic" - platform: wifi_signal name: "ESP32 WiFi RSSI" icon: mdi:wifi-strength-2 - update_interval: 15s + update_interval: 5s entity_category: "diagnostic" - platform: internal_temperature @@ -284,7 +305,7 @@ sensor: icon: mdi:thermometer unit_of_measurement: °C device_class: TEMPERATURE - update_interval: 15s + update_interval: 5s entity_category: "diagnostic" - platform: template @@ -292,7 +313,7 @@ sensor: icon: mdi:cpu-32-bit accuracy_decimals: 1 unit_of_measurement: MHz - update_interval: 15s + update_interval: 5s lambda: |- return ets_get_cpu_frequency(); entity_category: "diagnostic" @@ -302,7 +323,7 @@ sensor: icon: mdi:memory unit_of_measurement: 'kB' state_class: measurement - update_interval: 15s + update_interval: 5s lambda: |- return heap_caps_get_free_size(MALLOC_CAP_INTERNAL) / 1024; entity_category: "diagnostic" diff --git a/veml7700.h b/veml7700.h new file mode 100644 index 0000000..d03cbb2 --- /dev/null +++ b/veml7700.h @@ -0,0 +1,39 @@ +#include "esphome.h" +#include + +// Requires this lib installed: $ platformio lib --global install "Adafruit BusIO" +// based on https://github.com/adafruit/Adafruit_VEML7700/blob/master/examples/veml7700_test/veml7700_test.ino + +class VEML7700CustomSensor : public PollingComponent, public Sensor { + public: + Adafruit_VEML7700 veml = Adafruit_VEML7700(); + + Sensor *lux_sensor = new Sensor(); + Sensor *white_sensor = new Sensor(); + Sensor *als_sensor = new Sensor(); + + VEML7700CustomSensor() : PollingComponent(15000) {} + void setup() override { + Wire.begin(); + veml.begin(); + veml.setGain(VEML7700_GAIN_1); + veml.setIntegrationTime(VEML7700_IT_800MS); + // veml.powerSaveEnable(true); + // veml.setPowerSaveMode(VEML7700_POWERSAVE_MODE4); + // veml.setLowThreshold(10000); + // veml.setHighThreshold(20000); + // veml.interruptEnable(true); + } + + void update() override { + float lux = veml.readLux(); + float white = veml.readWhite(); + float als = veml.readALS(); + ESP_LOGD("VEML7700", "The value of sensor lux is: %.0f", lux); + ESP_LOGD("VEML7700", "The value of sensor white is: %.0f", white); + ESP_LOGD("VEML7700", "The value of sensor ALS is: %.0f", als); + lux_sensor->publish_state(lux); + white_sensor->publish_state(white); + als_sensor->publish_state(als); + } +};