Shelly Uni
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, ...
 
 

GPIO Pinout
| Pin | GPIO | Function | Wire | 
|---|---|---|---|
| GPIO00 | Red LED | ||
| 1 | VAC, VDC+ | red | |
| 2 | VAC, VDC- | black | |
| 3 | GPIO17 | ADC Input | white | 
| 4 | 3.3V | yellow | |
| 5 | GPIO05 | Sensor | blue | 
| 6 | GND | green | |
| 7 | GPIO12 | Input 1 | orange | 
| 8 | GPIO13 | Input 2 | brown | 
| GPIO15 | Output 1 | ||
| GPIO04 | Output 2 | ||
| GPIO14 | ADC 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