Shelly Uni

esp8266 eu Comes with ESPHome sensor
Shelly Uni - shelly_uni_1000x1000.webp
Shelly Uni - shelly_uni_625x625.webp
Shelly Uni - shelly_uni_gpio.jpg

Notes

Shelly UNI is the smallest universal module with two available digital inputs and potential-free outputs, providing endless functionalities.

  • 2 digital inputs
  • 2 potential-free outputs
  • ADC can measure any voltage from 0 to 30 VDC
  • supports DS18B20 temperature sensors or a DHT22 humidity and temperature sensor, …

header

GPIO Pinout

PinGPIOFunctionWire
GPIO00Red LED
1VAC, VDC+red
2VAC, VDC-black
3GPIO17ADC Inputwhite
43.3Vyellow
5GPIO05Sensorblue
6GNDgreen
7GPIO12Input 1orange
8GPIO13Input 2brown
GPIO15Output 1
GPIO04Output 2
GPIO14ADC Range

ADC range Selector

ADC Input (GPIO17) have two ranges (0 - 15 or 0 - 30V), selectable by GPIO14. If you configure GPIO14 as switch and turn it on you get 30V input range. Tested by Protoncek. Device return pure ADC readings, so need to multiply to get actual voltage. Linear approximation looks more or less acceptable. Possible multiply factors: 14.64 on 15V range, 30.64 on 30V range.

Basic Configuration

esphome:
  name: Shelly Uni
esp8266:
  board: esp_wroom_02
  restore_from_flash: true
logger:
  esp8266_store_log_strings_in_flash: False
logger:
  level: INFO
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
api:
  encryption:
    key: !secret esp_api_key
ota:
  password: !secret ota_secret
external_components:
  - source: github://nrandell/dallasng
dallasng:
  - pin:
      number: GPIO05
      mode:
        input: True
        pullup: True
    update_interval: '7s'
sensor:  
  - platform: dallasng
    address: 0xaf00000001b25428
    name: "Temperature"
    filters:
      - filter_out: 85.0
  - platform: wifi_signal
    name: "RSSI"
    id: sensor_rssi
    update_interval: 90s
    entity_category: "diagnostic"
  - platform: uptime
    name: "Uptime"
    id: sensor_uptime
    update_interval: 300s
    entity_category: "diagnostic"
  - platform: adc
    pin: GPIO17
    name: Voltage
    id: sensor_voltage
    accuracy_decimals: 1
    update_interval: 9s
    filters:
      - lambda: if (id(adc_range).state) return x*30.64; else return x*14.64;
button:
  - platform: restart
    name: "Restart"
    id: button_restart
switch:
  - platform: output
    name: "Output 1"
    output: out_1
  - platform: output
    name: "Output 2"
    output: out_2
  - platform: gpio
    id: adc_range
    name: ADC Range
    pin: GPIO14
    restore_mode: RESTORE_DEFAULT_ON
output:
  - platform: gpio
    id: out_1
    pin:
      number: GPIO15
      inverted: False
  - platform: gpio
    id: out_2
    pin:
      number: GPIO04
      inverted: False
binary_sensor:
  - platform: status
    name: "Status"
    id: sensor_status
  - platform: template
    name: "API connected"
    id: sensor_api_connected
    internal: True
    entity_category: 'diagnostic'
    device_class: 'connectivity'
    lambda: return global_api_server->is_connected();
    on_press:
      - light.turn_on: led_status
    on_release:
      - light.turn_off: led_status
  - platform: gpio
    name: "Input 1"
    pin:
      number: GPIO12
      mode: INPUT_PULLUP
      inverted: False
  - platform: gpio
    name: "Input 2"
    pin:
      number: GPIO13
      mode: INPUT_PULLUP
      inverted: False
light:
  - platform: status_led
    name: "LED"
    id: led_status
    pin:
      number: GPIO00
      inverted: True
    internal: True
    restore_mode: ALWAYS_OFF