Skip to content

DjMayone/shelly-ws90-ha-meteo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

18 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🌀 Shelly WS90 Weather Station β€” Full Home Assistant Integration with ESPHome Display

A complete smart weather station project built around the Shelly WS90, integrated with Home Assistant via BTHome Bluetooth proxy, enriched with custom sensor templates, a polished Lovelace dashboard, and a real-time SenseCAP Indicator D1 touchscreen display powered by ESPHome.


πŸ“Έ Screenshots

Home Assistant Dashboard

Dashboard

SenseCAP Indicator Display

SenseCAP

🎯 Project Overview

This project turns a Shelly WS90 outdoor weather station into a fully integrated smart home weather system. All data is collected via Bluetooth (BTHome protocol), processed through custom Home Assistant sensor templates, displayed on a beautiful Lovelace dashboard, and mirrored on a dedicated 4-inch touchscreen display placed indoors.

Key features:

  • Real-time weather data from Shelly WS90 via BTHome
  • Custom sensor templates: Beaufort scale, wind direction (16 cardinal points), heat index, wind chill, UV category, solar irradiance estimation
  • Daily, monthly and yearly rain accumulation via utility meters
  • Polished Lovelace dashboard optimized for mobile
  • SenseCAP Indicator D1 touchscreen display with LVGL interface
  • Bluetooth proxy built into the SenseCAP for extended BLE range
  • Boot screen with spinner animation
  • Automatic display on/off via time-based automation

πŸ›’ Hardware Required

Component Description
Shelly WS90 Outdoor solar-powered weather station
SenseCAP Indicator D1 4-inch 480x480 touchscreen display (ESP32-S3 + RP2040)
ESP32 Bluetooth Proxy Any ESP32 running ESPHome as BLE proxy (or use SenseCAP)
Home Assistant server Raspberry Pi, NUC, or any HA-compatible hardware

πŸ— Architecture

Shelly WS90 (outdoor)
        β”‚
        β”‚ Bluetooth (BTHome)
        β–Ό
ESP32 Bluetooth Proxy ──────────────────────────────────┐
        β”‚                                               β”‚
        β”‚ WiFi                                          β”‚
        β–Ό                                               β”‚
Home Assistant                                          β”‚
  β”œβ”€β”€ BTHome Integration                                β”‚
  β”œβ”€β”€ Custom Sensor Templates (templates.yaml)          β”‚
  β”œβ”€β”€ Utility Meters (utility_meter.yaml)               β”‚
  β”œβ”€β”€ Lovelace Dashboard                                β”‚
  └── ESPHome Integration                               β”‚
              β”‚                                         β”‚
              β”‚ WiFi (API)                              β”‚
              β–Ό                                         β”‚
  SenseCAP Indicator D1 β—„β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    β”œβ”€β”€ LVGL Display (weather data)
    β”œβ”€β”€ Bluetooth Proxy (active)
    └── FT5X06 Touchscreen

πŸ“ File Structure

β”œβ”€β”€ README.md
β”œβ”€β”€ .gitignore
β”œβ”€β”€ secrets.yaml.example
β”œβ”€β”€ esphome/
β”‚   └── sensecap-indicator.yaml      # SenseCAP ESPHome configuration
└── homeassistant/
    β”œβ”€β”€ configuration.yaml.example   # configuration.yaml additions
    β”œβ”€β”€ templates.yaml               # Custom sensor templates
    β”œβ”€β”€ utility_meter.yaml           # Rain accumulation meters
    β”œβ”€β”€ logbook_exclude.yaml         # Logbook exclude list
    └── dashboard_meteo.yaml         # Lovelace dashboard

βš™οΈ Home Assistant Configuration

1. Prerequisites

  • Home Assistant with BTHome integration enabled
  • Shelly WS90 paired via BTHome
  • At least one ESP32 running as Bluetooth proxy

2. Sensor Templates

Add to configuration.yaml:

template: !include templates.yaml
utility_meter: !include utility_meter.yaml
logbook:
  exclude:
    entities: !include logbook_exclude.yaml

The templates.yaml file creates these derived sensors from raw WS90 data:

Sensor Description
sensor.vento_beaufort Wind speed on Beaufort scale (0-12)
sensor.direzione_vento_testo Wind direction as text (N, NNE, NE...)
sensor.velocita_vento_km_h Wind speed converted from m/s to km/h
sensor.raffica_vento_km_h Wind gust converted from m/s to km/h
sensor.temperatura_percepita Heat Index when T β‰₯ 27Β°C (Rothfusz formula)
sensor.temperatura_wind_chill Wind Chill when T ≀ 10Β°C (Canadian formula)
sensor.comfort_termico Thermal comfort (Gelido β†’ Afoso)
sensor.pressione_tendenza Pressure with stability category attribute
sensor.irraggiamento_solare Solar irradiance estimated in W/mΒ² from lux
sensor.categoria_uv UV category (Basso β†’ Estremo) per WHO scale
sensor.condizione_meteo General weather condition with dynamic icon
sensor.stato_batteria_ws90 Battery status with dynamic icon

The utility_meter.yaml creates:

Sensor Reset
sensor.pioggia_giornaliera Daily at midnight
sensor.pioggia_mensile Monthly on 1st
sensor.pioggia_annuale Yearly on Jan 1st

3. Lovelace Dashboard

The dashboard is organized in sections:

  • Weather condition β€” prominent card with dynamic icon
  • Temperature β€” current, perceived, wind chill + 48h graph
  • Humidity & Pressure β€” dew point, comfort + graphs
  • Wind β€” speed, gust, Beaufort, direction (vertical layout)
  • Rain β€” current, daily, monthly, yearly + graph
  • Solar & UV β€” lux, W/mΒ², UV index, UV category + separate graphs
  • System β€” battery, voltage, BT signal

Required HACS cards:

  • mushroom (v5.1.1+)
  • mini-graph-card

πŸ“Ÿ SenseCAP Indicator D1 Setup

The SenseCAP Indicator D1 runs a custom ESPHome firmware that:

  • Connects to Home Assistant via native API
  • Displays real-time weather data using LVGL graphics
  • Acts as an active Bluetooth proxy for extended WS90 range
  • Shows a boot screen with spinner animation while connecting
  • Turns on/off automatically via HA time-based automation
  • Toggles display manually via the physical button

Key ESPHome components used:

  • st7701s display driver (480x480 RGB)
  • ft5x06 touchscreen controller
  • lvgl for UI rendering
  • bluetooth_proxy for BLE forwarding
  • pca9554 GPIO expander

Display layout:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ 14:08 29/03/2026 β”‚ ← Time & Date β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ OUTDOOR TEMPERATURE β”‚ β”‚ 19.2Β° β”‚ ← Large temperature (72pt font) β”‚ Confortevole β”‚ ← Comfort level β”‚ Parzialmente nuvoloso β”‚ ← Weather condition β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ HUMIDITY PRESSURE RAIN TODAY UV β”‚ β”‚ 21% 1001hPa 0.0mm 2.0β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Weather Station β€” Milan, Italy β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜


πŸš€ Installation

Step 1 β€” Home Assistant

  1. Clone this repository
  2. Copy homeassistant/templates.yaml, utility_meter.yaml and logbook_exclude.yaml to your HA config directory
  3. Add to configuration.yaml (see configuration.yaml.example)
  4. Restart Home Assistant
  5. Import the Lovelace dashboard via YAML editor

Step 2 β€” SenseCAP Indicator

  1. Open ESPHome in Home Assistant
  2. Create a new device named sensecap-indicator
  3. Copy the content of esphome/sensecap-indicator.yaml
  4. Copy secrets.yaml.example to secrets.yaml and fill in your values
  5. Flash via USB first time, then OTA for updates
  6. Add the device to Home Assistant when discovered

Step 3 β€” Automations

Create two automations in HA for automatic display control:

  • Display ON: Trigger at 06:00 β†’ light.turn_on β†’ light.backlight
  • Display OFF: Trigger at 22:00 β†’ light.turn_off β†’ light.backlight

πŸ”§ Secrets Required

Copy secrets.yaml.example to secrets.yaml and fill in your values:

wifi_ssid: "YourWiFiSSID"
wifi_password: "YourWiFiPassword"
ap_password: "YourFallbackAPPassword"
api_key: "YourESPHomeAPIKey"
ota_password: "YourOTAPassword"
web_username: "admin"
web_password: "YourWebServerPassword"

πŸ“Š Data Flow

The WS90 transmits these raw sensors via BTHome:

  • Temperature, Humidity, Dew point
  • Atmospheric pressure
  • Wind speed (m/s), Wind gust (m/s), Wind direction (degrees)
  • Precipitation (mm)
  • Illuminance (lux), UV index
  • Battery voltage

All raw data is enriched by sensor templates before being displayed.


πŸ™ Credits


πŸ“„ License

MIT License β€” feel free to use, modify and share!

About

Shelly WS90 Weather Station integrated with Home Assistant and SenseCAP Indicator D1

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors