One year of Home Assistant

Wifi is monitored in ESPHome devices by including this sensor in the ESP device configuration yaml file:

sensor:
  - platform: wifi_signal
    name: "Dining Room DHT WiFi Signal"
    update_interval: 15s
    filters:
      - sliding_window_moving_average:
          window_size: 15
          send_every: 15
          send_first_at: 15

For sonoff devices include this type of sensor in HA:

- platform: mqtt
  state_topic: "tele/sonoff_xmas_lights/STATE"
  name: "Xmas Lights Switch Wifi Signal"
  unit_of_measurement: "%"
  value_template: "{{value_json['Wifi'].RSSI }}"
  availability_topic: "tele/sonoff_xmas_lights/LWT"
  payload_available: "Online"
  payload_not_available: "Offline"

It’s annoying that this cant be reported in raw dBm values.

The Lovelace WiFi card config:

cards:
  - cards:
      - entity: sensor.acrc_switch_wifi_signal
        max: 100
        min: 0
        name: ACRC
        severity:
          green: 70
          red: 0
          yellow: 50
        type: gauge
        unit: '%'
      - entity: sensor.bathroom_dht_wifi_signal
        max: -30
        min: -100
        name: Bathroom
        severity:
          green: -55
          red: -100
          yellow: -70
        type: gauge
        unit: dB
      - entity: sensor.comms_cupboard_dht_wifi_signal
        max: -30
        min: -100
        name: Comms
        severity:
          green: -55
          red: -100
          yellow: -70
        type: gauge
        unit: dB
    type: horizontal-stack
  - cards:
      - entity: sensor.dining_heater_north_wifi_signal
        max: -30
        min: -100
        name: Dining Heater (N)
        severity:
          green: -55
          red: -100
          yellow: -70
        type: gauge
        unit: '%'
      - entity: sensor.dining_heater_west_wifi_signal
        max: -30
        min: -100
        name: Dining Heater (W)
        severity:
          green: -55
          red: -100
          yellow: -70
        type: gauge
        unit: '%'
      - entity: sensor.dining_room_dht_wifi_signal
        max: -30
        min: -100
        name: Dining DHT
        severity:
          green: -55
          red: -100
          yellow: -70
        type: gauge
        unit: dB
    type: horizontal-stack
  - cards:
      - entity: sensor.dishwasher_wifi_signal
        max: 100
        min: 0
        name: Dishwasher
        severity:
          green: 70
          red: 0
          yellow: 50
        type: gauge
        unit: '%'
      - entity: sensor.doorbell_downstairs_wifi_signal
        max: -30
        min: -100
        name: Doorbell (Dn)
        severity:
          green: -55
          red: -100
          yellow: -70
        type: gauge
        unit: dB
      - entity: sensor.doorbell_upstairs_wifi_signal
        max: -30
        min: -100
        name: Doorbell (Up)
        severity:
          green: -55
          red: -100
          yellow: -70
        type: gauge
        unit: dB
    type: horizontal-stack
  - cards:
      - entity: sensor.ensuite_dht_wifi_signal
        max: -30
        min: -100
        name: Ensuite
        severity:
          green: -55
          red: -100
          yellow: -70
        type: gauge
        unit: dB
      - entity: sensor.lounge_dehumidifier_wifi_signal
        max: 100
        min: 0
        name: Lounge Dehumid
        severity:
          green: 70
          red: 0
          yellow: 50
        type: gauge
        unit: '%'
      - entity: sensor.lounge_room_dht_wifi_signal
        max: -30
        min: -100
        name: Lounge DHT
        severity:
          green: -55
          red: -100
          yellow: -70
        type: gauge
        unit: dB
    type: horizontal-stack
  - cards:
      - entity: sensor.master_bed_sensor_wifi_signal
        max: -30
        min: -100
        name: Master Bed
        severity:
          green: -55
          red: -100
          yellow: -70
        type: gauge
        unit: dB
      - entity: sensor.outside_light_level_wifi_signal
        max: -30
        min: -100
        name: Lux
        severity:
          green: -55
          red: -100
          yellow: -70
        type: gauge
        unit: dB
      - entity: sensor.roof_space_dht_wifi_signal
        max: -30
        min: -100
        name: Roof
        severity:
          green: -55
          red: -100
          yellow: -70
        type: gauge
        unit: dB
    type: horizontal-stack
  - cards:
      - entity: sensor.rumpus_dehumidifier_wifi_signal
        max: 100
        min: 0
        name: Rumpus Dehumid
        severity:
          green: 70
          red: 0
          yellow: 50
        type: gauge
        unit: '%'
      - entity: sensor.rumpus_room_dht_wifi_signal
        max: -30
        min: -100
        name: Rumpus DHT
        severity:
          green: -55
          red: -100
          yellow: -70
        type: gauge
        unit: dB
      - entity: sensor.spare_bedroom_dht_wifi_signal
        max: -30
        min: -100
        name: SP Bed DHT
        severity:
          green: -55
          red: -100
          yellow: -70
        type: gauge
        unit: dB
    type: horizontal-stack
  - cards:
      - entity: sensor.spare_bedroom_heater_wifi_signal
        max: -30
        min: -100
        name: Dining Heater (W)
        severity:
          green: -55
          red: -100
          yellow: -70
        type: gauge
        unit: '%'
      - entity: sensor.washing_machine_wifi_signal
        max: 100
        min: 0
        name: Washing
        severity:
          green: 70
          red: 0
          yellow: 50
        type: gauge
        unit: '%'
      - entity: sensor.xmas_lights_switch_wifi_signal
        max: 100
        min: 0
        name: Xmas Lights
        severity:
          green: 70
          red: 0
          yellow: 50
        type: gauge
        unit: '%'
    type: horizontal-stack
title: Wifi Levels
type: 'custom:vertical-stack-in-card' # <---- awesome custom card!

The Kodi remote set up is here (commands in this post, Lovelace card config in post below this one): Kodi Remote - #19 by tom_l Kodi Remote - #19 by tom_l

Here’s the TV and Projector card configs:

type: 'custom:tiles-card'
card_settings:
  title: TV
  title_align: left
  columns: 4
  column_width: calc(97%/4)
  row_height: 75px
  background: var(--paper-card-background-color)
global_settings:
  label_sec:
    color:
      value: white
  icon:
    color:
      value: white
  shadow: 'elevation: 6dp'
  border:
    size: 3px
    radius: 5px
    color:
      value: black
entities:
  - column: 1
    entity: script.lounge_tv_on
    icon:
      value: 'mdi:power-cycle'
    label_sec:
      value: 'On'
    row: 1
  - column: 2
    entity: script.lounge_tv_off
    icon:
      value: 'mdi:power-off'
    label_sec:
      value: 'Off'
    row: 1
  - column: 1
    entity: script.lounge_tv_input_tv
    icon:
      value: 'mdi:television-classic'
    label_sec:
      value: TV
    row: 2
  - column: 2
    entity: script.lounge_tv_input_pc
    icon:
      value: 'mdi:desktop-classic'
    label_sec:
      value: PC
    row: 2
  - column: 3
    entity: script.lounge_tv_input_kodi
    icon:
      value: 'mdi:kodi'
    label_sec:
      value: Kodi
    row: 2
  - column: 1
    entity: script.lounge_tv_play
    icon:
      value: 'mdi:play'
    row: 3
  - column: 2
    entity: script.lounge_tv_pause
    icon:
      value: 'mdi:pause'
    row: 3
  - column: 3
    entity: script.lounge_tv_stop
    icon:
      value: 'mdi:stop'
    row: 3
  - column: 4
    entity: script.lounge_tv_rec
    icon:
      value: 'mdi:record'
      color:
        value: '#ff0000'
    row: 3
  - column: 1
    entity: script.lounge_tv_menu
    icon:
      value: 'mdi:menu'
    label_sec:
      value: Menu
    row: 4
  - column: 2
    entity: script.lounge_tv_rew
    icon:
      value: 'mdi:rewind'
    row: 4
  - column: 3
    entity: script.lounge_tv_ffwd
    icon:
      value: 'mdi:fast-forward'
    row: 4
  - column: 4
    entity: script.lounge_tv_ch_up
    icon:
      value: 'mdi:arrow-up-bold-box-outline'
    row: 4
  - column: 1
    entity: script.lounge_tv_option
    icon:
      value: 'mdi:playlist-edit'
    label_sec:
      value: Options
    row: 5
  - column: 2
    entity: script.lounge_tv_skip_back
    icon:
      value: 'mdi:skip-previous'
    row: 5
  - column: 3
    entity: script.lounge_tv_skip_fwd
    icon:
      value: 'mdi:skip-next'
    row: 5
  - column: 4
    entity: script.lounge_tv_last_ch
    icon:
      value: 'mdi:arrow-left-bold-box-outline'
    label_sec: Last CH
    row: 5
  - column: 1
    entity: script.lounge_tv_guide
    icon:
      value: 'mdi:television-guide'
    label_sec:
      value: Guide
    row: 6
  - column: 2
    entity: script.lounge_tv_info
    icon:
      value: 'mdi:information-outline'
    label_sec:
      value: Info
    row: 6
  - column: 3
    entity: script.lounge_tv_up
    icon:
      value: 'mdi:arrow-up-bold-circle'
    background:
      value: '#2576da'
    row: 6
  - column: 4
    entity: script.lounge_tv_ch_dn
    icon:
      value: 'mdi:arrow-down-bold-box-outline'
    row: 6
  - column: 1
    entity: script.lounge_tv_media
    icon:
      value: 'mdi:folder-multiple-image'
    label_sec:
      value: Media
    row: 7
  - column: 2
    entity: script.lounge_tv_left
    icon:
      value: 'mdi:arrow-left-bold-circle'
    background:
      value: '#2576da'
    row: 7
  - column: 3
    entity: script.lounge_tv_ok
    icon:
      value: 'mdi:check-circle-outline'
    row: 7
  - column: 4
    entity: script.lounge_tv_right
    icon:
      value: 'mdi:arrow-right-bold-circle'
    background:
      value: '#2576da'
    row: 7
  - column: 1
    entity: script.lounge_tv_www
    icon:
      value: 'mdi:play-network'
    label_sec: Internet
    row: 8
  - column: 2
    entity: script.lounge_tv_return
    icon:
      value: 'mdi:backburger'
    label_sec:
      value: Return
    row: 8
  - column: 3
    entity: script.lounge_tv_down
    icon:
      value: 'mdi:arrow-down-bold-circle'
    background:
      value: '#2576da'
    row: 8
  - column: 4
    entity: script.lounge_tv_exit
    icon:
      value: 'mdi:backspace'
    label_sec: Exit
    row: 8
  - column: 1
    entity: script.lounge_tv_red
    icon:
      value: 'mdi:square'
      color: '#ff0000'
    row: 9
  - column: 2
    entity: script.lounge_tv_green
    icon:
      value: 'mdi:square'
      color: '#00ff00'
    row: 9
  - column: 3
    entity: script.lounge_tv_yellow
    icon:
      value: 'mdi:square'
      color: '#ffff00'
    row: 9
  - column: 4
    entity: script.lounge_tv_blue
    icon:
      value: 'mdi:square'
      color: '#0000ff'
    row: 9
type: 'custom:tiles-card'
card_settings:
  title: Projector
  title_align: left
  columns: 4
  column_width: calc(97%/4)
  row_height: 75px
  background: var(--paper-card-background-color)
global_settings:
  label_sec:
    color:
      value: white
  icon:
    color:
      value: white
  shadow: 'elevation: 6dp'
  border:
    size: 3px
    radius: 5px
    color:
      value: black
entities:
  - column: 1
    column_span: 2
    entity: script.projector_on
    icon:
      value: 'mdi:power-cycle'
    label_sec:
      value: 'On'
    row: 1
  - column: 3
    column_span: 2
    entity: script.projector_off
    icon:
      value: 'mdi:power-off'
    label_sec:
      value: 'Off'
    row: 1
  - column: 1
    column_span: 2
    entity: script.projector_menu
    icon:
      value: 'mdi:menu'
    label_sec:
      value: Menu
    row: 2
  - column: 4
    entity: script.projector_pattern
    icon:
      value: 'mdi:video-stabilization'
    label_sec:
      value: Pattern
    row: 2
  - column: 3
    entity: script.projector_up
    icon:
      value: 'mdi:arrow-up-bold-circle'
    background:
      value: '#2576da'
    row: 2
  - column: 1
    entity: script.projector_colour
    icon:
      value: 'mdi:palette'
    label_sec:
      value: Colour
    row: 3
  - column: 2
    entity: script.projector_left
    icon:
      value: 'mdi:arrow-left-bold-circle'
    background:
      value: '#2576da'
    row: 3
  - column: 3
    entity: script.projector_ok
    icon:
      value: 'mdi:check-circle-outline'
    row: 3
  - column: 4
    entity: script.projector_right
    icon:
      value: 'mdi:arrow-right-bold-circle'
    row: 3
    background:
      value: '#2576da'
  - column: 1
    entity: script.projector_iris
    icon:
      value: 'mdi:camera-iris'
    label_sec:
      value: Iris
    row: 4
  - column: 2
    entity: script.projector_frame_int
    icon:
      value: 'mdi:blur-linear'
    label_sec:
      value: Iterlace
    row: 4
  - column: 3
    entity: script.projector_down
    icon:
      value: 'mdi:arrow-down-bold-circle'
    row: 4
    background:
      value: '#2576da'
  - column: 4
    entity: script.projector_esc
    icon:
      value: 'mdi:backspace'
    label_sec:
      value: Esc
    row: 4

We have yet to see how the new Areas functionality works. I’m not opposed to changing the way I have my interface set up if there is a benefit (ease of use and authorisation). I’ve already assigned my integrated devices to areas.

The way I have my panels currently set up the upstairs floorplan is the default view and is the most intuitive control method for guests. The room specific panels I and guests use frequently. The device and other panels I use occasionally though I recently added the ‘Insights’ panel and am using that more frequently than these now.

A little bit every day or so adds up over a year. Read the forums for inspiration. You’ll get there. And by the time you do I imagine HA will be even better.

Set a naming scheme from the start. domain.location_device (e.g. switch.lounge_dehumidifier) has worked well for me. If you use this for automations and put them in alphabetical order this sorts things by area and is easy to search. Having said that my next project is to break up my files as per Frenk’s recent live stream (files based on areas and domain types).

MariaDB addon works considerably better on the pi than the SQL default db. It uses more resources (memory) but it is far more responsive and stable. I use excludes extensively in the recorder, logbook and history components. I only record and show what I’m interested in. I keep 7 days of data.

Equipment: HA on a Raspi 3B, another pi3B as a GPIO-MQTT gateway for a lot of wired sensors (PIRs, smoke, doorbell, etc…) more on that here:. Lifx lights. Sonoff POW2s and S2x for power switching and monitoring. ESPhome on Wemos D1 minis or NodeMCU ESP- 32S boards with various sensors, DHT22 (temp and humidity), BH1750 (lux) , limit switches and strain gauges. I also have two Global Cache IP2IR devices for infra-red remote control of older equipment. I would recommend the Broadlink options instead - as they are cheaper and appear to work just as well.

5 Likes

Very Cool. I was able to get my first button up and running. I’m going to map all the Harmony remote buttons I need. For the tv channels do you have the channel icons saved somewhere? If so how didyou code and where did you get the icons from? Thanks for the help!

Are you still on pi?
Seems you have a lot if entities there

For now, yes.

http://www.tv-logo.com/page/australia

Saved to config/www/tv_logos

type: 'custom:tiles-card'
card_settings:
  title: TV Channels
  title_align: left
  columns: 4
  column_width: calc(97%/4)
  row_height: 75px
  background: var(--paper-card-background-color)
global_settings:
  label_sec:
    color:
      value: white
  icon:
    color:
      value: white
  shadow: 'elevation: 6dp'
  border:
    size: 3px
    radius: 5px
    color:
      value: black
entities:
  - column: 1
    entity: script.lounge_tv_ch_abc
    icon:
      value: /local/tv_logos/abc.png
      size: 100%
    row: 1
  - column: 2
    entity: script.lounge_tv_ch_sbs
    icon:
      value: /local/tv_logos/sbs.png
      size: 100%
    row: 1
  - column: 3
    entity: script.lounge_tv_ch_sbs_vice
    icon:
      value: /local/tv_logos/sbs-vice.png
      size: 100%
    row: 1
  - column: 4
    entity: script.lounge_tv_ch_sthnx
    icon:
      value: /local/tv_logos/southern-cross-television.png
      size: 100%
    row: 1
  - column: 1
    entity: script.lounge_tv_ch_nine
    icon:
      value: /local/tv_logos/nine.png
      size: 100%
    row: 2
  - column: 2
    entity: script.lounge_tv_ch_gem
    icon:
      value: /local/tv_logos/gem.png
      size: 100%
    row: 2
  - column: 3
    entity: script.lounge_tv_ch_go
    icon:
      value: /local/tv_logos/go.png
      size: 100%
    row: 2
  - column: 4
    entity: script.lounge_tv_ch_7mate
    icon:
      value: /local/tv_logos/seven-mate.png
      size: 100%
    row: 2
  - column: 1
    entity: script.lounge_tv_ch_7two
    icon:
      value: /local/tv_logos/seven-two.png
      size: 100%
    row: 3
  - column: 2
    entity: script.lounge_tv_ch_win
    icon:
      value: /local/tv_logos/win.png
      size: 100%
    row: 3
  - column: 3
    entity: script.lounge_tv_ch_one
    icon:
      value: /local/tv_logos/one.png
      size: 100%
    row: 3
  - column: 4
    entity: script.lounge_tv_ch_eleven
    icon:
      value: /local/tv_logos/eleven.png
      size: 100%
    row: 3
1 Like

Is the BOM radar static image or the multiple in rotation?

Also if what component is the forecast from?

Cheers, and awesome effort, I wait till you want to cudtomise the interface more, thats where the frustration comes from for me

Both are custom components by BrendanMoran

Radar is an animated loop:

Weather forecast custom component:

1 Like

Your setup is awesome. I’m only a few months in and had to learn what DHCP and DNS servers were when I started. I don’t want to derail your thread, but if you get a chance, can you help me out with controlling a projector? I’m sure I’ll have more questions about how you setup your stuff, because it looks great, but this one is keeping me from some functionality.

Thanks and keep up the good work. It’s inspiring to others

It’s good to see I’m not the only one who finds the generic_thermostat pretty useless. I’ve been forcing myself to continue using it thinking that “doing it myself” would be more cumbersome. But, in the end, I’m basically doing it myself anyway.

For me, each room has a desired temperature for when it’s occupied, but I don’t need different away temps for each room. So each room turns on an input boolean when it wants heat (or air conditioning) and then an automation interprets all the input booleans to determine if the heat actually needs to be on or not.

I see that you have sliders/input_numbers to set climate in each room. Do you have a generic_thermostat that gets adjusted with each of these or are you just using the input_numbers and automations?

Automations. The input numbers determine if the heating/cooling device should be turned on. Then the actual thermostat used to control the room temperature is the thermostat in the equipment not HA.

1 Like

Looks awesome Tom! Impressive! Good to see a positive thread on here. Well done.

Couldn’t have done the weather page without your excellent custom components Brendan. Thank you.

1 Like

Heya

Just wondering what you did for snail mail?
It’s possibly here somewhere, but i cant find it.

My approach was to install reed switch inside.my post box, with an arduino triggering via mqtt on open.

Just interested in how you.approached it.

Other options I considered were laser sensors that have their beams broken when post is between them.

Cheers!
D.

My mailbox setup is very similar. It’s a NodeMCU-32S running ESPhome that has two reed switches. One for the letter slot lid and one for the letter retrieval door. It spends the majority of the time asleep. It wakes up for a couple of minutes every 12 hours to send wifi and battery state, or when either of the reed switches change state.

If 14 hours go by without getting a status update I get a lost connection alert from HA.

A signal from the slot = mailbox full, signal from the door = mailbox empty.

It’s powered by a single 18650 Li cell, 4.2V regulator and 6V 3.5W solar panel. So far (summer) the battery voltage has not deviated from 4.16V, day or night. I over engineered it a bit but the real test will be winter. Being this far south the day length gets very short, overcast and the panel is facing the wrong way for this hemisphere. We shall see in another 4 months or so how good my estimates and fudge factors were.

I’ve used this exact same circuit with one limit switch to monitor a boundary gate.

I tried a few (much) cheaper ebay solar panels but found they all lie about their power output. The worst one was a supposed 5V 5W panel that put out 250mW. So yeah, if anyone else is going to build something like this ‘caveat emptor’ when dealing with Chinese solar panels on ebay. Spend your money at a reputable supplier.

4 Likes

I’m glad you are having so much fun with HA. It’s been a year, so I think you are ready. I have two words for you “Node RED”. Good luck.

I’ve been able to do everything I wanted with yaml and jinja. Why would I add the extra layer?

3 Likes

Thanks for the inspiration. Always wanted my harmony devices all on one page

2 Likes

would love more info on this, I need a way to know if i have snail mail other than checking manually every few days…

What do you want to know?

would you share the code? did you just use arduino for it?

I have wanted to implement the same thing, but I have been reluctant to try because I didnt want to figure out how to run power to it.

I cant add a solar panel to mine but even a few months of battery would be good for me…

Very nice indeed, I like this in particular because it uses the states ui (old ui) which I desperately need because of my older ipads not supporting custom lovelace cards.

I will follow this thread and watch for the code (as I might use a bit in my own setup).

I got as far as this after 6 months of Home Assistant and always looking for new ideas:

https://github.com/jimz011/HA