SodaStream CO2 Tank Scale IOT

I wanted to better estimate when the CO2 tank was running out, so I designed a simple IOT device. It utilizes an EPP32, load cell and the ESPHome firmware. Home Assistant integration couldn’t have been any easier.

3D Model: https://makerworld.com/en/models/1125732

Da Data

ESPHome Config:

substitutions:
  name: esphome-web-94876a
  friendly_name: SodaStream CO2 Level

esphome:
  name: ${name}
  friendly_name: ${friendly_name}
  name_add_mac_suffix: false
  project:
    name: esphome.web
    version: '1.0'

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
  platform: esphome

# Allow provisioning Wi-Fi via serial
improv_serial:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

captive_portal:

dashboard_import:
  package_import_url: github://esphome/example-configs/esphome-web/esp8266.yaml@main
  import_full_config: true

# To have a "next url" for improv serial
web_server:

sensor:
  - platform: hx711
    name: "CO2 Level"
    dout_pin: GPIO4
    clk_pin: GPIO5
    gain: 128
    update_interval: 120s 
    filters:
      - calibrate_linear:
          - -1006128 -> 100
          - -400000 -> 0

ESPHome Mini-Split Climate Control

All I needed to do was buy the device for this one. It was super cheap ~$15 and simplest cloud free IOT hack I have had to do.

ESPHome Config:

esphome:
  name: workshop-mini-split
  friendly_name: Workshop Mini Split

esp8266:
  board: esp01_1m
  
# Enable Home Assistant API
api:
  encryption:
    key: ""

ota:
  platform: esphome
  password: ""

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Workshop-Mini-Split"
    password: ""

captive_portal:
# Example configuration entry

# Disable logging over UART (required)
logger:
  baud_rate: 0

# UART settings for Midea dongle (required)
uart:
  tx_pin: 1         # hardware dependant
  rx_pin: 3         # hardware dependant
  baud_rate: 9600

# Main settings
climate:
  - platform: midea
    name: Workshop Mini Split   # Use a unique name.
    period: 1s                  # Optional
    timeout: 2s                 # Optional
    num_attempts: 3             # Optional
    autoconf: true              # Autoconfigure most options.
    beeper: true                # Beep on commands.
    visual:                     # Optional. Example of visual settings override.
      min_temperature: 17 °C    # min: 17
      max_temperature: 30 °C    # max: 30
      temperature_step: 0.5 °C  # min: 0.5
    supported_modes:            # Optional. All capabilities in this section may be detected by autoconf.
      - FAN_ONLY
      - HEAT_COOL
      - COOL
      - HEAT
      - DRY
    custom_fan_modes:           # Optional
      - SILENT
      - TURBO
    supported_presets:          # Optional. All capabilities in this section may be detected by autoconf.
      - ECO
      - BOOST
      - SLEEP
    supported_swing_modes:      # Optional
      - VERTICAL
    outdoor_temperature:        # Optional. Outdoor temperature sensor (may display incorrect values after long inactivity).
      name: OutdoorTemp
    power_usage:                # Optional. Power usage sensor (only for devices that support this feature).
      name: Power
    humidity_setpoint:          # Optional. Indoor humidity sensor (only for devices that support this feature).
      name: IndoorHumidity    

AI Gas Meter

I wanted a way to add our natural gas consumption into Home Assistant, so I built a thing. It uses a ESP32 camera board, 2000mAh LiPO cell, BMS, and 4 solar cells. I found an AI On The Edge package that did all the heavy lifting. All I need to do was flash the ESP, configure the gauge layout, and setup the MQTT messages. The hardest part was polishing the gas meter window so that it could actually be read.

I stopped using this because I did not feel comfortable having a LiPo in direct sun, charging using a cheap BMS, on top of my gas meter. I plan to run 3/5V out to it and delete the solar/BMS/Lipos.