Looks great. Are you willing to share your config on how you set up the buttons for the tv, projector, etc?
Sure, I’ll paste it up tomorrow.
Nice!
I’m just starting out and can only dream of all that right now, but I’d appreciate any insight you might have on the initial decisions to get going to where you ended up.
For example, like you, I initially set up rooms for everything. I’ve now changed over to having categories like “climate”, “security”, and “lighting”. This is because it appears to this newbie that with the introduction of areas, the developers want us to design around that configuration going forward in lovelace. There seems to be no need to set up a “Living Room” tab when you select everything in the living room when you create an area. How does any of this impact what you have already worked at?
What other types of advice for the newbie? Database used, history retention, equipment used?
I’m just starting, so it’s interesting to see what products others use and why…
Thanks for sharing!
Steve
I’m really curious how you are doing the wifi levels… that’s something I would love to bring into my setup.
Great work… Saw you originally in the reddit forum.
Wow. I think I need to revise my layout now.
I’m also interested in that wifi levels card you have.
EDIT: Looks like it’s just pulling the linkquality
attribute from some of the sensors. My Xiaomi sensors on Zigbee2mqtt have this. I guess different sensors will have this names slightly different.
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.
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
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:
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.
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.
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.
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?