substitutions:
  devicename: 18650-esp
  Device_Location: Garage-Test
  update_interval: !secret d1-update_interval
  ipaddress: 10.0.0.92
  platform: ESP8266

esphome:
  name: 18650-esp
  friendly_name: "18650-esp Display"

esp8266:
  board: nodemcuv2

# Enable logging
logger:
  level: WARN

wifi:
  ssid: !secret mogwai_wifi_name
  password: !secret mogwai_wifi_password
  <<: !include common/network.yaml

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "18650-esp Fallback Hotspot"
    password: "9WKClRAQzN67"

# Enable Home Assistant API
api:
  encryption:
    key: !secret mogwai_api_key

ota:
  platform: esphome
  password: !secret mogwai_ota_key

captive_portal:

sun:
  latitude: !secret latitude
  longitude: !secret longitude

<<: !include common/mqtt-onb.yaml

<<: !include common/time.yaml

<<: !include common/website.yaml

# Example configuration entry for ESP8266
i2c:
  sda: D1
  scl: D2
  scan: true
  id: bus_a
  frequency: 400Mhz

switch:

  - <<: !include common/nodemcu-led-onboard1.yaml

  - <<: !include common/restart.yaml

sensor:

  - platform: sun
    name: Sun Elevation
    type: elevation
    update_interval: $update_interval

  - platform: sun
    name: Sun Azimuth
    type: azimuth
    update_interval: $update_interval

text_sensor:

  - <<: !include common/version.yaml

  - platform: mqtt_subscribe
    name: "Lounge Room Temperature from MQTT"
    id: lounge_temp
    topic: /sensors/nodemcu-02/sensor/temperature/state

  - platform: mqtt_subscribe
    id: family_temp
    name: "Family Room Temperature from MQTT"
    topic: /sensors/nodemcu-01/sensor/temperature/state

  - platform: mqtt_subscribe
    id: study_temp
    name: "Study - Node 3 Temperature from MQTT"
    topic: /sensors/nodemcu-03/sensor/temperature/state

  - platform: homeassistant
    id: weatherst_temp
    entity_id: sensor.weather_station_temp
    internal: True

  - platform: homeassistant
    id: lora_temp
    entity_id: sensor.garage_lora_wan_temp
    internal: True

  - platform: homeassistant
    name: "Weather Forecast From Home Assistant"
    entity_id: weather.dakabin
    id: openweathermap
    internal: True

  - platform: sun
    name: Sun Next Sunrise
    type: sunrise
    id: sunrise
    internal: True

  - platform: sun
    name: Sun Next Sunset
    type: sunset
    id: sunset
    internal: True

  - platform: homeassistant   # Forecast minimal temperature
    id: today_min
    entity_id: sensor.dakabin_temp_min_0

  - platform: homeassistant   # Forecast maximal temperature
    id: today_max
    entity_id: sensor.dakabin_temp_max_0
    internal: True

  - platform: homeassistant   # Forecast icon
    id: today_icon
    entity_id: sensor.dakabin_icon_descriptor_0
    internal: True

  - platform : homeassistant
    id: today_rain
    entity_id: sensor.dakabin_rain_chance_0
    internal: True

  - platform : homeassistant
    id: today_rain_amount_range
    entity_id: sensor.dakabin_rain_amount_range_0
    internal: True

  - platform : homeassistant
    id: today_condition
    entity_id: weather.dakabin_hourly
    internal: True

  - platform : homeassistant
    id: today_rain_prob
    entity_id: sensor.dakabin_rain_chance_0
    internal: True

  - platform : homeassistant
    id: today_cloud
    entity_id: sensor.openweathermap_forecast_cloud_coverage
    internal: True

font:
  - file: "Ac437_IBM_CGAthin.ttf"
    id: ibm
    size: 8
  - file: "beastly.ttf"
    id: slkscr8
    size: 12

  - file: "160MKSDAL.ttf"
    id: mksdal
    size: 36

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    address: 0x3C
    lambda: |-
      it.print(0, 0, id(slkscr8), "DATA1 - Disk Space");
      it.printf(0, 45, id(mksdal), TextAlign::BASELINE_LEFT, "   %s", id(today_min).state.c_str());
      it.strftime(0, 60, id(ibm), TextAlign::BASELINE_LEFT, "    %l:%M", id(homeassistant_time).now());

interval:

  - <<: !include common/version-interval.yaml

  - <<: !include common/whatami.yaml

  - interval: !secret d1-update_interval
    then:
      - mqtt.publish:
          topic: /sensors/18650-esp/forecast
          payload: !lambda |-
            return id(today_min).state;
      - mqtt.publish:
          topic: /sensors/18650-esp/forecast-max
          payload: !lambda |-
            return id(today_max).state;
      - mqtt.publish:
          topic: /sensors/18650-esp/forecast-rain
          payload: !lambda |-
            return id(today_rain).state;
      - mqtt.publish:
          topic: /sensors/18650-esp/forecast-cloud
          payload: !lambda |-
            return id(today_cloud).state;
      - mqtt.publish:
          topic: /sensors/18650-esp/forecast-icon
          payload: !lambda |-
            return id(today_icon).state;
      - mqtt.publish:
          topic: /sensors/18650-esp/forecast-condition
          payload: !lambda |-
            return id(today_condition).state;
      - mqtt.publish:
          topic: /sensors/18650-esp/forecast-weather
          payload: !lambda |-
            return id(openweathermap).state;
      - mqtt.publish:
          topic: /sensors/18650-esp/forecast-rain-prob
          payload: !lambda |-
            return id(today_rain_prob).state;
      - mqtt.publish:
          topic: /sensors/18650-esp/sunrise
          payload: !lambda |-
            return id(sunrise).state;
      - mqtt.publish:
          topic: /sensors/18650-esp/sunset
          payload: !lambda |-
            return id(sunset).state;