Compare commits

..

4 Commits

5 changed files with 173 additions and 29 deletions

30
boiler-monitor-left.yaml Normal file
View File

@ -0,0 +1,30 @@
substitutions:
node_name: "cms-boiler-monitor-left"
node_verbose_name: "Boiler Monitor Left"
packages:
cms: !include packages/cms-general.yaml
boiler2: !include
file: packages/modbus-boiler.yaml
vars:
controller_id: boiler2
sensor_name_prefix: "B2 "
esp32:
board: lolin_s2_mini
status_led:
pin: GPIO15
uart:
tx_pin: 11
rx_pin: 10
baud_rate: 38400
modbus:
modbus_controller:
id: boiler2
address: 0x2
setup_priority: -10
update_interval: 30s

View File

@ -1,6 +1,6 @@
substitutions: substitutions:
node_name: "cms-boiler-monitor" node_name: "cms-boiler-monitor-right"
node_verbose_name: "Boiler Monitor" node_verbose_name: "Boiler Monitor Right"
packages: packages:
cms: !include packages/cms-general.yaml cms: !include packages/cms-general.yaml

108
pdm.lock
View File

@ -5,15 +5,16 @@
groups = ["default"] groups = ["default"]
strategy = ["cross_platform"] strategy = ["cross_platform"]
lock_version = "4.4.1" lock_version = "4.4.1"
content_hash = "sha256:b3903016c035398a9aa716ef764496730f63fdec9ee2c76947904746b08ff5a8" content_hash = "sha256:5c088eda4f08375e4409a50c6ee8dd8af23ed3691aa9e968a8355fbf6fd8263e"
[[package]] [[package]]
name = "aioesphomeapi" name = "aioesphomeapi"
version = "21.0.2" version = "23.1.1"
requires_python = ">=3.9" requires_python = ">=3.9"
summary = "Python API for interacting with ESPHome devices." summary = "Python API for interacting with ESPHome devices."
dependencies = [ dependencies = [
"aiohappyeyeballs>=2.3.0", "aiohappyeyeballs>=2.3.0",
"async-interrupt>=1.1.1",
"async-timeout>=4.0; python_version < \"3.11\"", "async-timeout>=4.0; python_version < \"3.11\"",
"chacha20poly1305-reuseable>=0.12.1", "chacha20poly1305-reuseable>=0.12.1",
"cryptography>=42.0.2", "cryptography>=42.0.2",
@ -22,13 +23,13 @@ dependencies = [
"zeroconf<1.0,>=0.128.4", "zeroconf<1.0,>=0.128.4",
] ]
files = [ files = [
{file = "aioesphomeapi-21.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5ac6aebc86faddde5c6c72195e48229f35662745d093b9248a75ea144649edd"}, {file = "aioesphomeapi-23.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c52ea260c36d4e5ac81b4ec532eb88c00f490f13074d26cf321af4eafd505680"},
{file = "aioesphomeapi-21.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd9334713dc8f345a5238e0dfd31cdc4e764a8d6a7ed278c490eb81d03c96c75"}, {file = "aioesphomeapi-23.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763551c2106b25a119c504c60577233f5cbc3c960c99a1d1cf571edb4e35197c"},
{file = "aioesphomeapi-21.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d5c253feb5b701daff52b0b3c16f770c755c1623024a4cb313fe96b410cf3257"}, {file = "aioesphomeapi-23.1.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7489e9725d433e4e0e83553acd28cee8556428dc9662ec52fa8507354b44f06"},
{file = "aioesphomeapi-21.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb83060cd2a4279cab1f3427ff5293cb8dedfa22f7a8d8d36f8865e513a488d"}, {file = "aioesphomeapi-23.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb4f69846e898f46f237f1049fa50133ec299045d08823d04674d86d53d58255"},
{file = "aioesphomeapi-21.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:603567b819aca48f44776a664edd6d8ab2ae4001036fe98de872a317be9d8ae8"}, {file = "aioesphomeapi-23.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:951e81e6d9b4cd0660beb5cbc82d9423d6dfc902af02002575cef072992e77c7"},
{file = "aioesphomeapi-21.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef8ad0431ca02667ca3da6a80b699427a41d40c7d31bbadc7b99eea9d283b24e"}, {file = "aioesphomeapi-23.1.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2078f28cf987327daf976f3c34da24cf3f9d93a5898c8c702f68a25f20d468c"},
{file = "aioesphomeapi-21.0.2.tar.gz", hash = "sha256:339579dc067579dd2b2f7d904b736ddf727e9f3e797134765814fff394e02ada"}, {file = "aioesphomeapi-23.1.1.tar.gz", hash = "sha256:69ffdbcdd51f88cc7caf58482c2c25b3adf78b69d309ae8a81bbc6ae0bb697e9"},
] ]
[[package]] [[package]]
@ -75,6 +76,16 @@ files = [
{file = "argcomplete-3.2.2.tar.gz", hash = "sha256:f3e49e8ea59b4026ee29548e24488af46e30c9de57d48638e24f54a1ea1000a2"}, {file = "argcomplete-3.2.2.tar.gz", hash = "sha256:f3e49e8ea59b4026ee29548e24488af46e30c9de57d48638e24f54a1ea1000a2"},
] ]
[[package]]
name = "async-interrupt"
version = "1.1.1"
requires_python = ">=3.9,<4.0"
summary = "Context manager to raise an exception when a future is done"
files = [
{file = "async_interrupt-1.1.1-py3-none-any.whl", hash = "sha256:b0d8c8228b75834fd39608382e1c721d3e68e0011443e0f434b8e8e1cc7bd391"},
{file = "async_interrupt-1.1.1.tar.gz", hash = "sha256:1e5999f0980b5db21293e4cd022518eeaf52284c0499631932a1df250cb99215"},
]
[[package]] [[package]]
name = "async-timeout" name = "async-timeout"
version = "4.0.3" version = "4.0.3"
@ -322,18 +333,18 @@ files = [
[[package]] [[package]]
name = "esphome" name = "esphome"
version = "2024.2.1" version = "2024.3.0"
requires_python = ">=3.9.0" requires_python = ">=3.9.0"
summary = "Make creating custom firmwares for ESP32/ESP8266 super easy." summary = "Make creating custom firmwares for ESP32/ESP8266 super easy."
dependencies = [ dependencies = [
"PyYAML==6.0.1", "PyYAML==6.0.1",
"aioesphomeapi==21.0.2", "aioesphomeapi==23.1.1",
"argcomplete>=2.0.0", "argcomplete>=2.0.0",
"async-timeout==4.0.3; python_version <= \"3.10\"", "async-timeout==4.0.3; python_version <= \"3.10\"",
"click==8.1.7", "click==8.1.7",
"colorama==0.4.6", "colorama==0.4.6",
"cryptography==42.0.2", "cryptography==42.0.2",
"esphome-dashboard==20231107.0", "esphome-dashboard==20240319.0",
"esptool==4.7.0", "esptool==4.7.0",
"icmplib==3.0.4", "icmplib==3.0.4",
"kconfiglib==13.7.1", "kconfiglib==13.7.1",
@ -342,24 +353,25 @@ dependencies = [
"pyparsing>=3.0", "pyparsing>=3.0",
"pyserial==3.5", "pyserial==3.5",
"python-magic==0.4.27", "python-magic==0.4.27",
"ruamel-yaml==0.18.6",
"tornado==6.4", "tornado==6.4",
"tzdata>=2021.1", "tzdata>=2021.1",
"tzlocal==5.2", "tzlocal==5.2",
"voluptuous==0.14.1", "voluptuous==0.14.2",
"zeroconf==0.131.0", "zeroconf==0.131.0",
] ]
files = [ files = [
{file = "esphome-2024.2.1-py2.py3-none-any.whl", hash = "sha256:0552ecb8acf2c7a06c33ade9fa9b7a6a0ecee166036520f61f2dc09ba17a1fe7"}, {file = "esphome-2024.3.0-py2.py3-none-any.whl", hash = "sha256:16c95df2e28d17f53edf0f0cdf00bc15e520e23cd2607b34dccb76ec566e4923"},
{file = "esphome-2024.2.1.tar.gz", hash = "sha256:65fa0bf0f855bae5abb2c645c5747cc5ae006ba62f2f6b86aa98d0b78847e202"}, {file = "esphome-2024.3.0.tar.gz", hash = "sha256:4ab172997f07c891c9809ef7dc52742676bf45ce34f9ef51f9d1434d855646ff"},
] ]
[[package]] [[package]]
name = "esphome-dashboard" name = "esphome-dashboard"
version = "20231107.0" version = "20240319.0"
summary = "ESPHome dashboard" summary = "ESPHome dashboard"
files = [ files = [
{file = "esphome-dashboard-20231107.0.tar.gz", hash = "sha256:f3888cf7cee7c4d89d30e6e76d8de5b7bf3145b37d51236da90cdf3b391dd7b9"}, {file = "esphome-dashboard-20240319.0.tar.gz", hash = "sha256:8e2117656c3c03845cb116f2a45a5692df0edc86f570d70e40ed731edf7a6905"},
{file = "esphome_dashboard-20231107.0-py3-none-any.whl", hash = "sha256:e74336a275361ce41b9e7cc01a77b5539bbc832ad11c5d91040ee32ad84841be"}, {file = "esphome_dashboard-20240319.0-py3-none-any.whl", hash = "sha256:d64412ea345750473d74256a2a724a0117cba762ff27a7ca7f7f01d53c616eed"},
] ]
[[package]] [[package]]
@ -636,6 +648,52 @@ files = [
{file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"},
] ]
[[package]]
name = "ruamel-yaml"
version = "0.18.6"
requires_python = ">=3.7"
summary = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order"
dependencies = [
"ruamel-yaml-clib>=0.2.7; platform_python_implementation == \"CPython\" and python_version < \"3.13\"",
]
files = [
{file = "ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636"},
{file = "ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"},
]
[[package]]
name = "ruamel-yaml-clib"
version = "0.2.8"
requires_python = ">=3.6"
summary = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml"
files = [
{file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"},
{file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"},
{file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"},
{file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"},
{file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"},
{file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"},
{file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"},
{file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"},
{file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"},
{file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"},
{file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"},
{file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"},
{file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"},
{file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"},
{file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"},
{file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"},
{file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"},
{file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"},
{file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"},
{file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"},
{file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"},
{file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"},
{file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"},
{file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"},
{file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"},
]
[[package]] [[package]]
name = "semantic-version" name = "semantic-version"
version = "2.10.0" version = "2.10.0"
@ -648,12 +706,12 @@ files = [
[[package]] [[package]]
name = "setuptools" name = "setuptools"
version = "69.1.1" version = "69.2.0"
requires_python = ">=3.8" requires_python = ">=3.8"
summary = "Easily download, build, install, upgrade, and uninstall Python packages" summary = "Easily download, build, install, upgrade, and uninstall Python packages"
files = [ files = [
{file = "setuptools-69.1.1-py3-none-any.whl", hash = "sha256:02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56"}, {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"},
{file = "setuptools-69.1.1.tar.gz", hash = "sha256:5c0806c7d9af348e6dd3777b4f4dbb42c7ad85b190104837488eab9a7c945cf8"}, {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"},
] ]
[[package]] [[package]]
@ -767,12 +825,12 @@ files = [
[[package]] [[package]]
name = "voluptuous" name = "voluptuous"
version = "0.14.1" version = "0.14.2"
requires_python = ">=3.7" requires_python = ">=3.8"
summary = "Python data validation library" summary = "Python data validation library"
files = [ files = [
{file = "voluptuous-0.14.1-py3-none-any.whl", hash = "sha256:ab202b5164b4bbd2c9bf2d4f264efef6f0f30fc0f570be27f1332be4514eefe0"}, {file = "voluptuous-0.14.2-py3-none-any.whl", hash = "sha256:efc1dadc9ae32a30cc622602c1400a17b7bf8ee2770d64f70418144860739c3b"},
{file = "voluptuous-0.14.1.tar.gz", hash = "sha256:7b6e5f7553ce02461cce17fedb0e3603195496eb260ece9aca86cc4cc6625218"}, {file = "voluptuous-0.14.2.tar.gz", hash = "sha256:533e36175967a310f1b73170d091232bf881403e4ebe52a9b4ade8404d151f5d"},
] ]
[[package]] [[package]]

View File

@ -8,11 +8,11 @@ authors = [
{name = "Adam Goldsmith", email = "adam@adamgoldsmith.name"}, {name = "Adam Goldsmith", email = "adam@adamgoldsmith.name"},
] ]
dependencies = [ dependencies = [
"esphome~=2024.2", "esphome~=2024.3",
"tornado~=6.4", "tornado~=6.4",
"esptool~=4.7", "esptool~=4.7",
"pip~=24.0", "pip~=24.0",
"setuptools~=69.1", "setuptools~=69.2",
] ]
requires-python = ">=3.10" requires-python = ">=3.10"
license = {text = "MIT"} license = {text = "MIT"}

View File

@ -0,0 +1,56 @@
substitutions:
node_name: "cms-woodshop-air-filter"
node_verbose_name: "Wood Shop air filter controller"
packages:
cms: !include packages/cms-general.yaml
esp32:
board: lolin_s2_mini
status_led:
pin: GPIO15
remote_transmitter:
pin: GPIO10
# Infrared remotes use a 50% carrier signal
carrier_duty_percent: 50%
# Controls for Delta Air Cleaner #50-875
# IR data generated using irptransmogrifier included in RMIR v3.0.13,
# using information from this thread:
# http://www.hifi-remote.com/forums/viewtopic.php?t=102988
# specifically this update file:
# http://www.hifi-remote.com/forums/dload.php?action=file&file_id=26460
# repeats added to approximate the original learned codes, probably not necessary
button:
- platform: template
name: Time
on_press:
- remote_transmitter.transmit_pronto:
# ./irptransmogrifier.sh render F12x --parameters D=3,S=1,E=1,F=17 --pronto
data: 0000 006D 0000 000C 0030 0010 0030 0010 0010 0030 0030 0010 0030 0010 0010 0030 0010 0030 0010 0030 0030 0010 0010 0030 0010 0030 0010 0130
- platform: template
name: Start/Stop
on_press:
- remote_transmitter.transmit_pronto:
# ./irptransmogrifier.sh render F12x --parameters D=3,S=1,E=1,F=129 --number-repeats 2 --pronto
data: 0000 006D 0024 0000 0030 0010 0030 0010 0010 0030 0030 0010 0030 0010 0010 0030 0010 0030 0010 0030 0010 0030 0010 0030 0010 0030 0030 0110 0030 0010 0030 0010 0010 0030 0030 0010 0030 0010 0010 0030 0010 0030 0010 0030 0010 0030 0010 0030 0010 0030 0030 0110 0030 0010 0030 0010 0010 0030 0030 0010 0030 0010 0010 0030 0010 0030 0010 0030 0010 0030 0010 0030 0010 0030 0010 0130
- platform: template
name: Speed
on_press:
- remote_transmitter.transmit_pronto:
# ./irptransmogrifier.sh render F12x --parameters D=3,S=1,E=1,F=65 --number-repeats 1 --pronto
data: 0000 006D 0018 0000 0030 0010 0030 0010 0010 0030 0030 0010 0030 0010 0010 0030 0010 0030 0010 0030 0010 0030 0010 0030 0030 0010 0010 0130 0030 0010 0030 0010 0010 0030 0030 0010 0030 0010 0010 0030 0010 0030 0010 0030 0010 0030 0010 0030 0010 0030 0010 0130
api:
services:
- service: transmit_ir_pronto
variables:
data: string
then:
- remote_transmitter.transmit_pronto:
data: !lambda 'return data;'