{"id":42,"date":"2024-08-17T00:14:50","date_gmt":"2024-08-17T06:14:50","guid":{"rendered":"https:\/\/wtech.ninja\/?p=42"},"modified":"2024-08-17T00:14:50","modified_gmt":"2024-08-17T06:14:50","slug":"home-assistant-w-docker-compose-on-linux","status":"publish","type":"post","link":"https:\/\/wtech.ninja\/?p=42","title":{"rendered":"Home Assistant w\/ docker-compose, on Linux"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Everything on this page should be taken with a grain of salt, because I haven&#8217;t been using Home Assistant for that long. Trust nothing. But also if this helps you, then that&#8217;s cool too. Most of the things here have been stolen from other guides, and tweaked slightly by me. This guide is probably more for myself than for anyone else.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A friend of mine introduced me to this app, and honestly it&#8217;s the sickest thing I&#8217;ve touched in a bit. You&#8217;re basically limited only by your imagination and wallet (sadly). Anyway, I&#8217;m not here to sell you on it, but I will share my setup and a couple of my automations as examples. From here on, if you see the acronym &#8220;HA&#8221; just assume it means &#8220;Home Assistant&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I would definitely <strong>not<\/strong> recommend this setup for beginners. Both because I&#8217;m not great at explaining things, and because it is mildly complex.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The majority of this information was stolen from here: <a href=\"https:\/\/iotechonline.com\/home-assistant-install-with-docker-compose\/\">https:\/\/iotechonline.com\/home-assistant-install-with-docker-compose\/<\/a> so basically, if this guide is too hard to read, try reading that guide which is most likely made by someone who knows what they&#8217;re doing. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The main differences between this and that one are that they have <code>node-red<\/code> and <code>hass-configurator<\/code>, and I&#8217;ve dropped those but added <code>zwave-js-ui<\/code> and <code>zigbee2mqtt<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To start off, make a new folder for your HA data. (I put mine in <code>~\/Documents\/Docker\/Home-Assistant<\/code>). Now, in that folder you&#8217;re gonna create two files, called &#8220;<code>docker-compose.yaml<\/code>&#8221; and &#8220;.env&#8221;. Also you&#8217;re going to want to create a folder in that one called &#8220;<code>hass-config<\/code>&#8220;, and create a file name &#8220;<code>configuration.yaml<\/code>&#8221; in it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Create this folder and file structure in the folder for your HA data as a non-root user:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6\">folder structure<\/span><span role=\"button\" tabindex=\"0\" data-code=\"\n\u251c\u2500\u2500 docker-compose.yaml       (file)\n\u251c\u2500\u2500 .env                      (file)\n\u251c\u2500\u2500 hass-config               (folder)\n\u2502   \u2514\u2500\u2500 configuration.yaml    (file)\n\u251c\u2500\u2500 mariadb                   (folder)\n\u251c\u2500\u2500 mosquitto                 (folder)\n\u2502   \u251c\u2500\u2500 config                (folder)\n\u2502   \u2502   \u2514\u2500\u2500 mosquitto.conf    (file)\n\u2502   \u251c\u2500\u2500 data                  (folder)\n\u2502   \u2514\u2500\u2500 log                   (folder)\n\u2514\u2500\u2500 zigbee2mqtt               (folder)\n    \u2514\u2500\u2500 configuration.yaml    (file)\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">\u251c\u2500\u2500 docker-compose.yaml       (file)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">\u251c\u2500\u2500 .env                      (file)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">\u251c\u2500\u2500 hass-config               (folder)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">\u2502   \u2514\u2500\u2500 configuration.yaml    (file)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">\u251c\u2500\u2500 mariadb                   (folder)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">\u251c\u2500\u2500 mosquitto                 (folder)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">\u2502   \u251c\u2500\u2500 config                (folder)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">\u2502   \u2502   \u2514\u2500\u2500 mosquitto.conf    (file)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">\u2502   \u251c\u2500\u2500 data                  (folder)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">\u2502   \u2514\u2500\u2500 log                   (folder)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">\u2514\u2500\u2500 zigbee2mqtt               (folder)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">    \u2514\u2500\u2500 configuration.yaml    (file)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s my <code>docker-compose.yaml<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(3 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6\">docker-compose.yaml<\/span><span role=\"button\" tabindex=\"0\" data-code=\"version: '3'\nservices:\n  homeassistant:\n    container_name: hass\n    image: homeassistant\/home-assistant\n    volumes:\n      - .\/hass-config:\/config\n      - \/etc\/localtime:\/etc\/localtime:ro\n      - \/run\/dbus:\/run\/dbus:ro\n    restart: unless-stopped\n    network_mode: host\n    depends_on:\n      - mariadb\n      - mosquitto\n\n  mariadb:\n    image: linuxserver\/mariadb\n    container_name: mariadb\n    restart: unless-stopped\n    environment:\n      MYSQL_ROOT_PASSWORD: &quot;${MYSQL_ROOT_PASSWORD}&quot;\n      MYSQL_DATABASE: ha_db\n      MYSQL_USER: homeassistant\n      MYSQL_PASSWORD: &quot;${HA_MYSQL_PASSWORD}&quot;\n      PUID: 1000\n      PGID: 1000\n    volumes:\n      - .\/mariadb:\/config\n    ports:\n      - &quot;3307:3306&quot;\n\n  zwave-js-ui:\n    container_name: zwave-js-ui\n    image: zwavejs\/zwave-js-ui:latest\n    restart: always\n    stop_signal: SIGINT\n    tty: true\n    environment:\n            - SESSION_SECRET=mysupersecretkey\n            - ZWAVEJS_EXTERNAL_CONFIG=\/usr\/src\/app\/store\/.config-db\n            # Uncomment if you want log times and dates to match your timezone instead of UTC\n            # Available at https:\/\/en.wikipedia.org\/wiki\/List_of_tz_database_time_zones\n            #- TZ=America\/New_York\n    networks:\n      - zwave\n    devices:\n      - &quot;\/dev\/serial\/by-id\/usb-Silicon_Labs_Zooz_ZST10\u00a0700_Z-Wave_Stick_0001-if00-port0:\/dev\/zwave&quot;\n    volumes: \n      - .\/zwavejs\/store:\/usr\/src\/app\/store\n    ports:\n      - &quot;8091:8091&quot;\n      - &quot;3000:3000&quot;\n\n  zigbee2mqtt:\n    container_name: zigbee2mqtt\n    image: koenkk\/zigbee2mqtt\n    restart: unless-stopped\n    volumes:\n      - .\/zigbee2mqtt:\/app\/data\n      - \/run\/udev:\/run\/udev:ro\n    ports:\n      # Frontend port\n      - 8087:8081\n    environment:\n      - TZ=America\/Edmonton\n    devices:\n      - &quot;\/dev\/serial\/by-id\/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_6ed36468addbed118cf1e72d62c613ac-if00-port0:\/dev\/ttyACM0&quot;\n\n  mosquitto:\n    image: eclipse-mosquitto\n    container_name: mosquitto\n    restart: unless-stopped\n    ports:\n      - &quot;1883:1883&quot;\n      - &quot;9001:9001&quot;\n    volumes:\n      - &quot;.\/mosquitto:\/mosquitto&quot;\n    environment:\n      - TZ=America\/Edmonton\n    user: &quot;${PUID}:${PGID}&quot;\n    command: &quot;mosquitto -c \/mosquitto-no-auth.conf&quot;\n\n  portainer:\n    ports:\n      - &quot;9000:9000&quot;\n    container_name: portainer\n    restart: unless-stopped\n    volumes:\n      - &quot;\/var\/run\/docker.sock:\/var\/run\/docker.sock&quot;\n      - &quot;.\/portainer\/portainer_data:\/data&quot;\n    image: &quot;portainer\/portainer-ce&quot;\n\n  esphome:\n    container_name: esphome\n    image: esphome\/esphome\n    volumes:\n      - .\/esphome:\/config\n      - \/etc\/localtime:\/etc\/localtime:ro\n    restart: always\n    privileged: true\n    network_mode: host\n\nnetworks:\n    zwave:\nvolumes:\n    zwave-config:\n        name: zwave-config\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #97E1F1\">version<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">3<\/span><span style=\"color: #DEE492\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">services<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">homeassistant<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">container_name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">hass<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">image<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">homeassistant\/home-assistant<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">volumes<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">.\/hass-config:\/config<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">\/etc\/localtime:\/etc\/localtime:ro<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">\/run\/dbus:\/run\/dbus:ro<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">restart<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">unless-stopped<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">network_mode<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">host<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">depends_on<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">mariadb<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">mosquitto<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">mariadb<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">image<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">linuxserver\/mariadb<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">container_name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">mariadb<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">restart<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">unless-stopped<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">environment<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">MYSQL_ROOT_PASSWORD<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">${MYSQL_ROOT_PASSWORD}<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">MYSQL_DATABASE<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">ha_db<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">MYSQL_USER<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">homeassistant<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">MYSQL_PASSWORD<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">${HA_MYSQL_PASSWORD}<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">PUID<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">1000<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">PGID<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">1000<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">volumes<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">.\/mariadb:\/config<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">ports<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">3307:3306<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">zwave-js-ui<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">container_name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">zwave-js-ui<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">image<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">zwavejs\/zwave-js-ui:latest<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">restart<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">always<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">stop_signal<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">SIGINT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">tty<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">environment<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">            <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">SESSION_SECRET=mysupersecretkey<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">            <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">ZWAVEJS_EXTERNAL_CONFIG=\/usr\/src\/app\/store\/.config-db<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">            <\/span><span style=\"color: #7B7F8B\"># Uncomment if you want log times and dates to match your timezone instead of UTC<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">            <\/span><span style=\"color: #7B7F8B\"># Available at https:\/\/en.wikipedia.org\/wiki\/List_of_tz_database_time_zones<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">            <\/span><span style=\"color: #7B7F8B\">#- TZ=America\/New_York<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">networks<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">zwave<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">devices<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">\/dev\/serial\/by-id\/usb-Silicon_Labs_Zooz_ZST10\u00a0700_Z-Wave_Stick_0001-if00-port0:\/dev\/zwave<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">volumes<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">.\/zwavejs\/store:\/usr\/src\/app\/store<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">ports<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">8091:8091<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">3000:3000<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">zigbee2mqtt<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">container_name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">zigbee2mqtt<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">image<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">koenkk\/zigbee2mqtt<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">restart<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">unless-stopped<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">volumes<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">.\/zigbee2mqtt:\/app\/data<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">\/run\/udev:\/run\/udev:ro<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">ports<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #7B7F8B\"># Frontend port<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">8087:8081<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">environment<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">TZ=America\/Edmonton<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">devices<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">\/dev\/serial\/by-id\/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_6ed36468addbed118cf1e72d62c613ac-if00-port0:\/dev\/ttyACM0<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">mosquitto<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">image<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">eclipse-mosquitto<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">container_name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">mosquitto<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">restart<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">unless-stopped<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">ports<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">1883:1883<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">9001:9001<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">volumes<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">.\/mosquitto:\/mosquitto<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">environment<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">TZ=America\/Edmonton<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">user<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">${PUID}:${PGID}<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">command<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">mosquitto -c \/mosquitto-no-auth.conf<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">portainer<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">ports<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">9000:9000<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">container_name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">portainer<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">restart<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">unless-stopped<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">volumes<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">\/var\/run\/docker.sock:\/var\/run\/docker.sock<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">.\/portainer\/portainer_data:\/data<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">image<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">portainer\/portainer-ce<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">esphome<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">container_name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">esphome<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">image<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">esphome\/esphome<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">volumes<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">.\/esphome:\/config<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">\/etc\/localtime:\/etc\/localtime:ro<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">restart<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">always<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">privileged<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">network_mode<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">host<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">networks<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">zwave<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">volumes<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">zwave-config<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        <\/span><span style=\"color: #97E1F1\">name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">zwave-config<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">You&#8217;ll probably have to change the &#8220;devices&#8221; sections in both &#8220;<code>zigbee2mqtt<\/code>&#8221; and &#8220;<code>zwave-js-ui<\/code>&#8221; to reflect whatever dongles you have, unless you happen to have the exact same ones I do.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s my <code>.env<\/code> file:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6\">.env<\/span><span role=\"button\" tabindex=\"0\" data-code=\"MYSQL_ROOT_PASSWORD=NotMyRealPassword2\nHA_MYSQL_PASSWORD=NotMyRealPassword3\nPUID=1000\nPGID=1000\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #f6f6f4\">MYSQL_ROOT_PASSWORD=NotMyRealPassword2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">HA_MYSQL_PASSWORD=NotMyRealPassword3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">PUID=1000<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">PGID=1000<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s my hass-config\/configuration.yaml:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6\">configuration.yaml<\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Loads default set of integrations. Do not remove.\ndefault_config:\n\nmqtt:\npowercalc:  \nrecorder:\n  db_url: mysql:\/\/homeassistant:proud2b1@172.17.0.1:3307\/ha_db?charset=utf8mb4\n  purge_keep_days: 60\n\n# Load frontend themes from the themes folder\nfrontend:\n  themes: !include_dir_merge_named themes\n  extra_module_url:\n    - \/local\/community\/custom-brand-icons\/custom\n\nautomation: !include automations.yaml\nscript: !include scripts.yaml\nscene: !include scenes.yaml\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #7B7F8B\"># Loads default set of integrations. Do not remove.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">default_config<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">mqtt<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">powercalc<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">recorder<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">db_url<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">mysql:\/\/homeassistant:proud2b1@172.17.0.1:3307\/ha_db?charset=utf8mb4<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">purge_keep_days<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">60<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #7B7F8B\"># Load frontend themes from the themes folder<\/span><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">frontend<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">themes<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">!include_dir_merge_named<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">themes<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">extra_module_url<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">\/local\/community\/custom-brand-icons\/custom<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">automation<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">!include<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">automations.yaml<\/span><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">script<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">!include<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">scripts.yaml<\/span><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">scene<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">!include<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">scenes.yaml<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s my &#8220;<code>mosquitto\/config\/mosquitto.conf<\/code>&#8220;:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6\">mosquitto.conf<\/span><span role=\"button\" tabindex=\"0\" data-code=\"persistence true\npersistence_location \/mosquitto\/data\/\nlog_dest file \/mosquitto\/log\/mosquitto.log\nlistener 1883\nallow_anonymous true\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #f6f6f4\">persistence true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">persistence_location \/mosquitto\/data\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">log_dest file \/mosquitto\/log\/mosquitto.log<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">listener 1883<\/span><\/span>\n<span class=\"line\"><span style=\"color: #f6f6f4\">allow_anonymous true<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s my &#8220;<code>zigbee2mqtt\/configuration.yaml<\/code>&#8220;:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6\">configuration.yaml<\/span><span role=\"button\" tabindex=\"0\" data-code=\"homeassistant: true\npermit_join: false\nmqtt:\n  base_topic: zigbee2mqtt\n  server: mqtt:\/\/mosquitto\nfrontend:\n  port: 8081\nserial:\n  port: \/dev\/ttyACM0\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #97E1F1\">homeassistant<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">permit_join<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">mqtt<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">base_topic<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">zigbee2mqtt<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">server<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">mqtt:\/\/mosquitto<\/span><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">frontend<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">port<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">8081<\/span><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">serial<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">port<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">\/dev\/ttyACM0<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">(I&#8217;ve replaced my passwords with placeholders, if it wasn&#8217;t obvious)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For an explanation of what the different things do:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>the <code>homeassistant<\/code> block is the only one that&#8217;s actually required, afaik.<\/li>\n\n\n\n<li>the <code>mariadb<\/code> block is for using a better database system with homeassistant, to improve performance.<\/li>\n\n\n\n<li>the <code>zwave-js-ui<\/code> block is used with a zwave dongle to use zwave devices with HA, and the ui is accessible at port 8091.<\/li>\n\n\n\n<li>the <code>zigbee2mqtt<\/code> block is used with a dongle to make it so you can use zigbee devices with HA, and the ui is accessible on port 8087.<\/li>\n\n\n\n<li>the <code>mosquitto<\/code> block is needed for zigbee2mqtt.<\/li>\n\n\n\n<li>the <code>portainer<\/code> block adds portainer on port 9000, it&#8217;s a useful tool for managing your docker stuff.<\/li>\n\n\n\n<li>the <code>esphome<\/code> block adds the esphome service, which is fantastic. More about this later.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">To set this up using <code>docker-compose<\/code>, you&#8217;d just download both files, move them to a folder, make any changes you want (probably should change the passwords in the .env file) and run &#8220;<code>sudo docker-compose up -d\"<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(Myself, I&#8217;d run &#8220;<code>sudo docker-compose up<\/code>&#8221; and look at the logs for errors, before you run it in the background using &#8220;<code>sudo docker-compose up -d<\/code>&#8220;.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">After that, go to http:\/\/&lt;your server&#8217;s ip address&gt;:8123 and it should ask you to make an admin account. Congrats! You should be in.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Later on, to update the docker images, navigate to the folder you have the files in. Then, run these four commands:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"sudo docker-compose down   # Stop HA\nsudo docker-compose pull   # Download new images of HA\nsudo docker-compose up -d  # Start HA again (using new images)\nsudo docker image prune -f # Remove old images to free up space\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #62E884\">sudo<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">docker-compose<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">down<\/span><span style=\"color: #F6F6F4\">   <\/span><span style=\"color: #7B7F8B\"># Stop HA<\/span><\/span>\n<span class=\"line\"><span style=\"color: #62E884\">sudo<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">docker-compose<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">pull<\/span><span style=\"color: #F6F6F4\">   <\/span><span style=\"color: #7B7F8B\"># Download new images of HA<\/span><\/span>\n<span class=\"line\"><span style=\"color: #62E884\">sudo<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">docker-compose<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">up<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">-d<\/span><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #7B7F8B\"># Start HA again (using new images)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #62E884\">sudo<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">docker<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">image<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">prune<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">-f<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #7B7F8B\"># Remove old images to free up space<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Anyway, that&#8217;s the basic installation stuff. Here&#8217;s some more info on a couple of things:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">portainer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This is a pretty nice web ui for looking at your docker containers\/stacks. I enjoy it. Homepage can be found here: <a href=\"https:\/\/www.portainer.io\/\">https:\/\/www.portainer.io\/<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">esphome<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This may not be as useful to some people, but basically there is a custom firmware for esp-based wifi smart devices, and this addon makes deploying your custom firmware to them easier, and lets you change their configuration using a nice web ui. I have a few cheap smart plugs and this makes it so much nicer to deal with them. The project&#8217;s homepage is here: <a href=\"https:\/\/esphome.io\/\">https:\/\/esphome.io\/<\/a><\/p>\n\n\n\n<div style=\"height:48px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Examples of useful automations <\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Turn Air Conditioner smart plug off at 4am<\/li>\n\n\n\n<li>Turn lights on when I arrive after sunset<\/li>\n\n\n\n<li>Turn lights on when phone alarm goes off (this uses an automation blueprint that can be found here: <a href=\"https:\/\/community.home-assistant.io\/t\/adjustable-wake-up-to-android-alarm\/599838\">https:\/\/community.home-assistant.io\/t\/adjustable-wake-up-to-android-alarm\/599838<\/a><\/li>\n\n\n\n<li>Send notification when minecraft server is down<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">My hardware<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Currently, my server is a ROG GL552VW with an intel i5-6300hq, 4 core 2.3ghz base\/3.2ghz boost. It works well for me.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As far as smart devices go, I have six Globe Electric 50347 smart plugs, because they were on sale at Canadian Tire for $6.93 each, and can be flashed with esphome with relative ease using tuya-cloudcutter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s an example esphome config for one of them:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(3 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6\">misc.yaml<\/span><span role=\"button\" tabindex=\"0\" data-code=\"substitutions:\n  number: &quot;1&quot;\n  device_name: Misc${number}\n  device_description: Globe Electric 50347 Smart plug\n  friendly_name: Misc Plug ${number}\n\nesphome:\n  name: misc\n\nbk72xx:\n  board: wb2s\n\n# Enable logging\nlogger:\n\n# Enable Home Assistant API\napi:\n  encryption:\n    key: &quot;&lt;generate a key here https:\/\/esphome.io\/components\/api.html&gt;&quot;\n\nweb_server:\n  port: 80\n  auth:\n    username: admin\n    password: &quot;NotMyPassword5&quot;\n\nota:\n  - platform: esphome\n    password: &quot;NotMyPassword4&quot;\n    \nwifi:\n  ssid: &quot;NachoBusiness&quot;\n  password: &quot;12345678&quot;\n  reboot_timeout: &quot;3min&quot;\n\n  # Enable fallback hotspot (captive portal) in case wifi connection fails\n  #ap:\n  #  ssid: &quot;Misc${number} Fallback Hotspot&quot;\n  #  password: &quot;NotMyPassword6&quot;\n\ntext_sensor:\n  - platform: wifi_info\n    ip_address:\n      name: ESP IP Address\n    ssid:\n      name: ESP Connected SSID\n    bssid:\n      name: ESP Connected BSSID\n    mac_address:\n      name: ESP Mac Wifi Address\n      \nsensor:\n\n  - platform: wifi_signal\n    name: ${friendly_name} Signal\n    update_interval: 60s\n\n  - platform: hlw8012\n    model: BL0937     # note that the model must be specified to use special calculation parameters\n    sel_pin:          # I believe that cf_pin reports either Voltage or Current depending on this select pin\n      inverted: true  # determine whether true reports Voltage\n      number: P24\n    cf_pin:           # current or voltage (ele_pin: 7)\n      inverted: true  # the logic of BL0937 is opposite from HLW8012\n      number: P7\n    cf1_pin:          #  Power (vi_pin: 8)\n      inverted: true  # the logic of BL0937 is opposite from HLW8012\n      number: P8\n\n    update_interval: 15s      # How often to measure and report values\n    \n    # PC191HA measures and returns Voltage OR Current according to the value of sel_pin,\n    #   but it can change the value of sel_pin periodically  \n    initial_mode: &quot;VOLTAGE&quot;       # reports VOLTAGE or CURRENT\n    change_mode_every: 4          # how many times to report before swapping between\n        #   reporting Voltage or Current. Note that the first value reported should be ignored as inaccurate\n\n    # Adjust according to the actual resistor values on board to calibrate the specific unit\n    voltage_divider:  872.357   # LOWER VALUE GIVES LOWER VOLTAGE - Was 775 -wb\n    current_resistor: 0.0009  # HIGHER VALUE GIVES LOWER WATTAGE\n\n    #\n    # how the power monitoring values are returned to ESPHome\n    #\n\n    voltage:\n      name: ${device_name} Voltage\n      id:   ${device_name}_voltage\n      unit_of_measurement: V\n      accuracy_decimals: 1\n      filters:\n        - skip_initial: 2\n    power:\n      name: ${device_name} Power\n      id:   ${device_name}_power\n      unit_of_measurement: W\n      accuracy_decimals: 2\n      filters:\n        - skip_initial: 2\n\n    # power should simply be current x voltage -- except that the pc191ha doesn't follow that formula.  \n    # Setting current_resistor to give an accurate Amperage does NOT also give the correct Wattage\n    # so here I calculate current from power and voltage\n    \n  - platform: template  \n    name: ${device_name} Current\n    id:   ${device_name}_current\n    unit_of_measurement: A\n    accuracy_decimals: 2\n    update_interval: &quot;20s&quot;\n    lambda: |-\n      return (id(${device_name}_power).state \/ id(${device_name}_voltage).state);\n    filters:  \n      - skip_initial: 2\n\n  - platform: uptime\n    name: ${device_name} Uptime\n    id:   ${device_name}_uptime\n    update_interval: &quot;30s&quot;\n\nlight:\n  - platform: status_led\n    name: &quot;led&quot;\n    internal: true\n    id: led\n    pin:\n      number: P6\n      inverted: true\n\nbinary_sensor:\n  - platform: gpio\n    pin:\n      number: P10\n      inverted: true\n    id: button1\n    filters:\n      - delayed_on: 10ms\n      - delayed_off: 10ms\n    on_click:\n      - switch.toggle: outlet\n\n  - platform: status\n    name: ${friendly_name} status\n\nswitch:\n  - platform: gpio\n    name: ${friendly_name} Outlet\n    id: outlet\n    pin: P26\n    icon: mdi:power-socket-us\n    on_turn_on:\n      - light.turn_on: led\n    on_turn_off:\n      - light.turn_off: led\n\ncaptive_portal:\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #97E1F1\">substitutions<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">number<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">1<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">device_name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">Misc${number}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">device_description<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">Globe Electric 50347 Smart plug<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">friendly_name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">Misc Plug ${number}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">esphome<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">misc<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">bk72xx<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">board<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">wb2s<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #7B7F8B\"># Enable logging<\/span><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">logger<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #7B7F8B\"># Enable Home Assistant API<\/span><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">api<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">encryption<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">key<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">&lt;generate a key here https:\/\/esphome.io\/components\/api.html&gt;<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">web_server<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">port<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">80<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">auth<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">username<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">admin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">password<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">NotMyPassword5<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">ota<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">platform<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">esphome<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">password<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">NotMyPassword4<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">wifi<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">ssid<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">NachoBusiness<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">password<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">12345678<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #97E1F1\">reboot_timeout<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">3min<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #7B7F8B\"># Enable fallback hotspot (captive portal) in case wifi connection fails<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #7B7F8B\">#ap:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #7B7F8B\">#  ssid: &quot;Misc${number} Fallback Hotspot&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #7B7F8B\">#  password: &quot;NotMyPassword6&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">text_sensor<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">platform<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">wifi_info<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">ip_address<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">ESP IP Address<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">ssid<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">ESP Connected SSID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">bssid<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">ESP Connected BSSID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">mac_address<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">ESP Mac Wifi Address<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">sensor<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">platform<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">wifi_signal<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">${friendly_name} Signal<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">update_interval<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">60s<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">platform<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">hlw8012<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">model<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">BL0937<\/span><span style=\"color: #F6F6F4\">     <\/span><span style=\"color: #7B7F8B\"># note that the model must be specified to use special calculation parameters<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">sel_pin<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\">          <\/span><span style=\"color: #7B7F8B\"># I believe that cf_pin reports either Voltage or Current depending on this select pin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">inverted<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">true<\/span><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #7B7F8B\"># determine whether true reports Voltage<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">number<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">P24<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">cf_pin<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\">           <\/span><span style=\"color: #7B7F8B\"># current or voltage (ele_pin: 7)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">inverted<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">true<\/span><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #7B7F8B\"># the logic of BL0937 is opposite from HLW8012<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">number<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">P7<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">cf1_pin<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\">          <\/span><span style=\"color: #7B7F8B\">#  Power (vi_pin: 8)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">inverted<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">true<\/span><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #7B7F8B\"># the logic of BL0937 is opposite from HLW8012<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">number<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">P8<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">update_interval<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">15s<\/span><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #7B7F8B\"># How often to measure and report values<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\"># PC191HA measures and returns Voltage OR Current according to the value of sel_pin,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\">#   but it can change the value of sel_pin periodically  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">initial_mode<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">VOLTAGE<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #F6F6F4\">       <\/span><span style=\"color: #7B7F8B\"># reports VOLTAGE or CURRENT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">change_mode_every<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">4<\/span><span style=\"color: #F6F6F4\">          <\/span><span style=\"color: #7B7F8B\"># how many times to report before swapping between<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        <\/span><span style=\"color: #7B7F8B\">#   reporting Voltage or Current. Note that the first value reported should be ignored as inaccurate<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\"># Adjust according to the actual resistor values on board to calibrate the specific unit<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">voltage_divider<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #BF9EEE\">872.357<\/span><span style=\"color: #F6F6F4\">   <\/span><span style=\"color: #7B7F8B\"># LOWER VALUE GIVES LOWER VOLTAGE - Was 775 -wb<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">current_resistor<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">0.0009<\/span><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #7B7F8B\"># HIGHER VALUE GIVES LOWER WATTAGE<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\">#<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\"># how the power monitoring values are returned to ESPHome<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\">#<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">voltage<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">${device_name} Voltage<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">id<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\">   <\/span><span style=\"color: #E7EE98\">${device_name}_voltage<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">unit_of_measurement<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">V<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">accuracy_decimals<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">filters<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">skip_initial<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">power<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">${device_name} Power<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">id<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\">   <\/span><span style=\"color: #E7EE98\">${device_name}_power<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">unit_of_measurement<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">W<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">accuracy_decimals<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">filters<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">skip_initial<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">2<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\"># power should simply be current x voltage -- except that the pc191ha doesn&#39;t follow that formula.  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\"># Setting current_resistor to give an accurate Amperage does NOT also give the correct Wattage<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\"># so here I calculate current from power and voltage<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">platform<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">template<\/span><span style=\"color: #F6F6F4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">${device_name} Current<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">id<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\">   <\/span><span style=\"color: #E7EE98\">${device_name}_current<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">unit_of_measurement<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">A<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">accuracy_decimals<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">update_interval<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">20s<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">lambda<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">|-<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E7EE98\">      return (id(${device_name}_power).state \/ id(${device_name}_voltage).state);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">filters<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">skip_initial<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">2<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">platform<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">uptime<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">${device_name} Uptime<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">id<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\">   <\/span><span style=\"color: #E7EE98\">${device_name}_uptime<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">update_interval<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">30s<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">light<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">platform<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">status_led<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">led<\/span><span style=\"color: #DEE492\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">internal<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">id<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">led<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">pin<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">number<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">P6<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">inverted<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">true<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">binary_sensor<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">platform<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">gpio<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">pin<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">number<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">P10<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #97E1F1\">inverted<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">id<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">button1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">filters<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">delayed_on<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">10ms<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">delayed_off<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">10ms<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">on_click<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">switch.toggle<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">outlet<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">platform<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">status<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">${friendly_name} status<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">switch<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">platform<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">gpio<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">name<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">${friendly_name} Outlet<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">id<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">outlet<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">pin<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">P26<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">icon<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">mdi:power-socket-us<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">on_turn_on<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">light.turn_on<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">led<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1\">on_turn_off<\/span><span style=\"color: #F286C4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #97E1F1\">light.turn_off<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #E7EE98\">led<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #97E1F1\">captive_portal<\/span><span style=\"color: #F286C4\">:<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;ll eventually upload some version of this to <a href=\"http:\/\/devices.esphome.io\">http:\/\/devices.esphome.io<\/a>, but I want to calibrate the voltage and power on them first, which I haven&#8217;t done yet. The basic config was taken from a couple of smart plugs, namely these two:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/devices.esphome.io\/devices\/Globe-Electric-Wi-Fi-Smart-Plug-50329\">https:\/\/devices.esphome.io\/devices\/Globe-Electric-Wi-Fi-Smart-Plug-50329<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/devices.esphome.io\/devices\/Arlec-PC191HA-Plug\">https:\/\/devices.esphome.io\/devices\/Arlec-PC191HA-Plug<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;re wanting to use this config, you&#8217;ll have to replace the api key and all the passwords, and the wifi information.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Besides all of those, I also have two Aqara USC-01 wall switches, and an Aqara T2 Relay (up above a fan with a light). You can use the Aqara wall switches in decoupled relay mode to provide constant power to the relay, and set the button presses to do things.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For instance, one press will toggle the first half of the relay, toggling my lights, and a double press will toggle the second half, toggling my fan. I&#8217;m pretty happy with it except for the delay.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Everything on this page should be taken with a grain of salt, because I haven&#8217;t been using Home Assistant for that long. Trust nothing. But also if this helps you, then that&#8217;s cool too. Most of the things here have been stolen from other guides, and tweaked slightly by me. This guide is probably more [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,3,4],"tags":[],"class_list":["post-42","post","type-post","status-publish","format-standard","hentry","category-docker","category-home-assistant","category-how-to"],"_links":{"self":[{"href":"https:\/\/wtech.ninja\/index.php?rest_route=\/wp\/v2\/posts\/42","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wtech.ninja\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wtech.ninja\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wtech.ninja\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wtech.ninja\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=42"}],"version-history":[{"count":0,"href":"https:\/\/wtech.ninja\/index.php?rest_route=\/wp\/v2\/posts\/42\/revisions"}],"wp:attachment":[{"href":"https:\/\/wtech.ninja\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=42"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wtech.ninja\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=42"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wtech.ninja\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=42"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}