vejvik

esphome kalorimetr kamstrup

Mar 17th, 2026
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.33 KB | None | 0 0
  1. esphome:
  2. name: kalorimemetry_termostaty
  3. friendly_name: kalorimetry a termostaty
  4. platformio_options:
  5. board_build.f_cpu: 240000000L
  6.  
  7. on_boot:
  8. priority: -100
  9. then:
  10. - delay: 5s
  11. - logger.log:
  12. level: INFO
  13. format: "Start ESP – kontroluji stav termostatů"
  14. - if:
  15. condition:
  16. binary_sensor.is_on: termostat1
  17. then:
  18. - lambda: |-
  19. id(pump1_start) = millis();
  20. ESP_LOGI("boot", "Termostat 1 je ON po startu – zapinam Rele 1");
  21. - switch.turn_on: rele1
  22. - if:
  23. condition:
  24. binary_sensor.is_on: termostat2
  25. then:
  26. - lambda: |-
  27. id(pump2_start) = millis();
  28. ESP_LOGI("boot", "Termostat 2 je ON po startu – zapinam Rele 2");
  29. - switch.turn_on: rele2
  30. - if:
  31. condition:
  32. binary_sensor.is_on: termostat3
  33. then:
  34. - lambda: |-
  35. id(pump3_start) = millis();
  36. ESP_LOGI("boot", "Termostat 3 je ON po startu – zapinam Rele 3");
  37. - switch.turn_on: rele3
  38. - if:
  39. condition:
  40. binary_sensor.is_on: termostat4
  41. then:
  42. - lambda: |-
  43. id(pump4_start) = millis();
  44. ESP_LOGI("boot", "Termostat 4 je ON po startu – zapinam Rele 4");
  45. - switch.turn_on: rele4
  46.  
  47. esp32:
  48. board: esp32dev
  49. framework:
  50. type: arduino
  51.  
  52.  
  53. # Enable logging
  54. logger:
  55.  
  56.  
  57. # Enable Home Assistant API
  58. api:
  59. encryption:
  60. key: "j5UGcOWlC5gVcN/NDsiXmhhHjCzd8PlQ+6PthqYlR4M="
  61.  
  62. ota:
  63. - platform: esphome
  64. password: "0dba985dda5f42046ab8b3f0e28c1aef"
  65.  
  66. wifi:
  67. ssid: !secret wifi_ssid
  68. password: !secret wifi_password
  69.  
  70. # Enable fallback hotspot (captive portal) in case wifi connection fails
  71. ap:
  72. ssid: "Kalorimetry Fallback Hotspot"
  73. password: "iJLvGdCnHGOk"
  74.  
  75. time:
  76. - platform: sntp
  77. id: time_sntp
  78.  
  79. external_components:
  80. - source: github://SzczepanLeon/esphome-components@version_4
  81. #- source: /config/esphome/external_components/5c086c68/components
  82. refresh: 0s
  83. components: [ wmbus ]
  84.  
  85. one_wire:
  86. - platform: gpio
  87. pin: GPIO4
  88.  
  89. wmbus:
  90. mosi_pin: GPIO13
  91. miso_pin: GPIO5
  92. clk_pin: GPIO2
  93. cs_pin: GPIO14
  94. gdo0_pin: GPIO15
  95. gdo2_pin: GPIO16 # gelb
  96.  
  97. led_pin: GPIO0
  98. led_blink_time: "1s"
  99.  
  100. all_drivers: False
  101. #sync_mode: True
  102. log_all: True
  103.  
  104.  
  105. globals:
  106. - id: pump1_start
  107. type: unsigned long
  108. restore_value: no
  109. initial_value: '0'
  110.  
  111. - id: pump2_start
  112. type: unsigned long
  113. restore_value: no
  114. initial_value: '0'
  115.  
  116. - id: pump3_start
  117. type: unsigned long
  118. restore_value: no
  119. initial_value: '0'
  120.  
  121. - id: pump4_start
  122. type: unsigned long
  123. restore_value: no
  124. initial_value: '0'
  125.  
  126. # =========================================================
  127. # kalorimetry
  128. # =========================================================
  129.  
  130. sensor:
  131. # Kalorimetr 1
  132. - platform: wmbus
  133. meter_id: 0x83077062
  134. type: kamheat
  135. key: "347AF74DA7B2EEE1DC4CBEE88D9XXXX"
  136. sensors:
  137. - name: "kalorimetr1_t1_temperature_inlet"
  138. field: "t1_temperature"
  139. accuracy_decimals: 2
  140. unit_of_measurement: "°C"
  141. device_class: "temperature"
  142. state_class: "measurement"
  143. icon: "mdi:thermometer"
  144.  
  145. - name: "kalorimetr1_t2_temperature_outlet"
  146. field: "t2_temperature"
  147. accuracy_decimals: 2
  148. unit_of_measurement: "°C"
  149. device_class: "temperature"
  150. state_class: "measurement"
  151. icon: "mdi:thermometer"
  152.  
  153. - name: "kalorimetr1_total_energy_consumption"
  154. field: "total_energy_consumption"
  155. accuracy_decimals: 0
  156. unit_of_measurement: "kWh"
  157. device_class: "energy"
  158. state_class: "total_increasing"
  159. icon: "mdi:heat-pump"
  160.  
  161. - name: "kalorimetr1_total_volume"
  162. field: "total_volume"
  163. accuracy_decimals: 2
  164. unit_of_measurement: "m³"
  165. device_class: "volume"
  166. state_class: "total_increasing"
  167. icon: "mdi:water"
  168.  
  169. - name: "kalorimetr1_aktuální průtok"
  170. field: "volume_flow"
  171. accuracy_decimals: 3
  172. unit_of_measurement: "m³/h"
  173. device_class: "volume_flow_rate"
  174. state_class: "measurement"
  175. icon: "mdi:water"
  176.  
  177. - name: "kalorimetr1_target_energy"
  178. field: "target_energy"
  179. accuracy_decimals: 0
  180. unit_of_measurement: "kWh"
  181. device_class: "energy"
  182. state_class: "total_increasing"
  183. icon: "mdi:heat-pump"
  184.  
  185. - name: "kalorimetr1_target_volume"
  186. field: "target_volume"
  187. accuracy_decimals: 2
  188. unit_of_measurement: "m³"
  189. device_class: "volume"
  190. state_class: "total_increasing"
  191. icon: "mdi:water"
  192.  
  193. # Kalorimetr 2
  194. - platform: wmbus
  195. meter_id: 0x83077063
  196. type: kamheat
  197. key: "C2203DA23074525F2FEC8D1A2D2AXXXX"
  198. sensors:
  199. - name: "kalorimetr2_t1_temperature_inlet"
  200. field: "t1_temperature"
  201. accuracy_decimals: 2
  202. unit_of_measurement: "°C"
  203. device_class: "temperature"
  204. state_class: "measurement"
  205. icon: "mdi:thermometer"
  206.  
  207. - name: "kalorimetr2_t2_temperature_outlet"
  208. field: "t2_temperature"
  209. accuracy_decimals: 2
  210. unit_of_measurement: "°C"
  211. device_class: "temperature"
  212. state_class: "measurement"
  213. icon: "mdi:thermometer"
  214.  
  215. - name: "kalorimetr2_total_energy_consumption"
  216. field: "total_energy_consumption"
  217. accuracy_decimals: 0
  218. unit_of_measurement: "kWh"
  219. device_class: "energy"
  220. state_class: "total_increasing"
  221. icon: "mdi:heat-pump"
  222.  
  223. - name: "kalorimetr2_total_volume"
  224. field: "total_volume"
  225. accuracy_decimals: 2
  226. unit_of_measurement: "m³"
  227. device_class: "volume"
  228. state_class: "total_increasing"
  229. icon: "mdi:water"
  230.  
  231. - name: "kalorimetr2_aktuální průtok"
  232. field: "volume_flow"
  233. accuracy_decimals: 3
  234. unit_of_measurement: "m³/h"
  235. device_class: "volume_flow_rate"
  236. state_class: "measurement"
  237. icon: "mdi:water"
  238.  
  239. - name: "kalorimetr2_target_energy"
  240. field: "target_energy"
  241. accuracy_decimals: 0
  242. unit_of_measurement: "kWh"
  243. device_class: "energy"
  244. state_class: "total_increasing"
  245. icon: "mdi:heat-pump"
  246.  
  247. - name: "kalorimetr2_target_volume"
  248. field: "target_volume"
  249. accuracy_decimals: 2
  250. unit_of_measurement: "m³"
  251. device_class: "volume"
  252. state_class: "total_increasing"
  253. icon: "mdi:water"
  254.  
  255.  
  256.  
  257.  
  258. # Kalorimetr 3
  259. - platform: wmbus
  260. meter_id: 0x83077064
  261. type: kamheat
  262. key: "7BEF3209F2FB93E78F4F28229682XXXX"
  263. sensors:
  264. - name: "kalorimetr3_t1_temperature_inlet"
  265. field: "t1_temperature"
  266. accuracy_decimals: 2
  267. unit_of_measurement: "°C"
  268. device_class: "temperature"
  269. state_class: "measurement"
  270. icon: "mdi:thermometer"
  271.  
  272. - name: "kalorimetr3_t2_temperature_outlet"
  273. field: "t2_temperature"
  274. accuracy_decimals: 2
  275. unit_of_measurement: "°C"
  276. device_class: "temperature"
  277. state_class: "measurement"
  278. icon: "mdi:thermometer"
  279.  
  280. - name: "kalorimetr3_total_energy_consumption"
  281. field: "total_energy_consumption"
  282. accuracy_decimals: 0
  283. unit_of_measurement: "kWh"
  284. device_class: "energy"
  285. state_class: "total_increasing"
  286. icon: "mdi:heat-pump"
  287.  
  288. - name: "kalorimetr3_total_volume"
  289. field: "total_volume"
  290. accuracy_decimals: 2
  291. unit_of_measurement: "m³"
  292. device_class: "volume"
  293. state_class: "total_increasing"
  294. icon: "mdi:water"
  295.  
  296. - name: "kalorimetr3_aktuální průtok"
  297. field: "volume_flow"
  298. accuracy_decimals: 3
  299. unit_of_measurement: "m³/h"
  300. device_class: "volume_flow_rate"
  301. state_class: "measurement"
  302. icon: "mdi:water"
  303.  
  304. - name: "kalorimetr3_target_energy"
  305. field: "target_energy"
  306. accuracy_decimals: 0
  307. unit_of_measurement: "kWh"
  308. device_class: "energy"
  309. state_class: "total_increasing"
  310. icon: "mdi:heat-pump"
  311.  
  312. - name: "kalorimetr3_target_volume"
  313. field: "target_volume"
  314. accuracy_decimals: 2
  315. unit_of_measurement: "m³"
  316. device_class: "volume"
  317. state_class: "total_increasing"
  318. icon: "mdi:water"
  319.  
  320. # Kalorimetr 4
  321. - platform: wmbus
  322. meter_id: 0x83077065
  323. type: kamheat
  324. key: "0437DA39091431870F793353686FXXXX"
  325. sensors:
  326. - name: "kalorimetr4_t1_temperature_inlet"
  327. field: "t1_temperature"
  328. accuracy_decimals: 2
  329. unit_of_measurement: "°C"
  330. device_class: "temperature"
  331. state_class: "measurement"
  332. icon: "mdi:thermometer"
  333.  
  334. - name: "kalorimetr4_t2_temperature_outlet"
  335. field: "t2_temperature"
  336. accuracy_decimals: 2
  337. unit_of_measurement: "°C"
  338. device_class: "temperature"
  339. state_class: "measurement"
  340. icon: "mdi:thermometer"
  341.  
  342. - name: "kalorimetr4_total_energy_consumption"
  343. field: "total_energy_consumption"
  344. accuracy_decimals: 0
  345. unit_of_measurement: "kWh"
  346. device_class: "energy"
  347. state_class: "total_increasing"
  348. icon: "mdi:heat-pump"
  349.  
  350. - name: "kalorimetr4_total_volume"
  351. field: "total_volume"
  352. accuracy_decimals: 2
  353. unit_of_measurement: "m³"
  354. device_class: "volume"
  355. state_class: "total_increasing"
  356. icon: "mdi:water"
  357.  
  358. - name: "kalorimetr4_aktuální průtok"
  359. field: "volume_flow"
  360. accuracy_decimals: 3
  361. unit_of_measurement: "m³/h"
  362. device_class: "volume_flow_rate"
  363. state_class: "measurement"
  364. icon: "mdi:water"
  365.  
  366. - name: "kalorimetr4_target_energy"
  367. field: "target_energy"
  368. accuracy_decimals: 0
  369. unit_of_measurement: "kWh"
  370. device_class: "energy"
  371. state_class: "total_increasing"
  372. icon: "mdi:heat-pump"
  373.  
  374. - name: "kalorimetr4_target_volume"
  375. field: "target_volume"
  376. accuracy_decimals: 2
  377. unit_of_measurement: "m³"
  378. device_class: "volume"
  379. state_class: "total_increasing"
  380. icon: "mdi:water"
  381.  
  382. # =========================================================
  383. # dallas
  384. # =========================================================
  385.  
  386. - platform: dallas_temp
  387. address: 0x0000000000000000 # adresa čidla
  388. name: "Teplota 1"
  389. unit_of_measurement: "°C"
  390. accuracy_decimals: 1
  391.  
  392.  
  393. # =========================================================
  394. # RELÉ (čerpadla)
  395. # =========================================================
  396. switch:
  397. - platform: gpio
  398. pin: GPIO27
  399. id: rele1
  400. name: "Čerpadlo 1"
  401. restore_mode: ALWAYS_OFF
  402. inverted: true
  403.  
  404. - platform: gpio
  405. pin: GPIO17
  406. id: rele2
  407. name: "Čerpadlo 2"
  408. restore_mode: ALWAYS_OFF
  409. inverted: true
  410.  
  411. - platform: gpio
  412. pin: GPIO18
  413. id: rele3
  414. name: "Čerpadlo 3"
  415. restore_mode: ALWAYS_OFF
  416. inverted: true
  417.  
  418. - platform: gpio
  419. pin: GPIO19
  420. id: rele4
  421. name: "Čerpadlo 4"
  422. restore_mode: ALWAYS_OFF
  423. inverted: true
  424.  
  425. - platform: restart
  426. name: "restart esp"
  427.  
  428. # =========================================================
  429. # TERMOSTATY (suchý kontakt)
  430. # =========================================================
  431. binary_sensor:
  432.  
  433. # -------------------------
  434. # TERMOSTAT 1
  435. # -------------------------
  436. - platform: gpio
  437. pin:
  438. number: GPIO32
  439. mode: INPUT_PULLUP
  440. inverted: true
  441. name: "Termostat 1"
  442. id: termostat1
  443. filters:
  444. - delayed_on: 1000ms
  445. - delayed_off: 1000ms
  446.  
  447. on_press:
  448. then:
  449. - lambda: |-
  450. id(pump1_start) = millis();
  451. ESP_LOGI("termostat", "Termostat 1 sepnul");
  452. - logger.log:
  453. level: INFO
  454. format: "Zapinam Rele 1"
  455. - switch.turn_on: rele1
  456.  
  457. on_release:
  458. then:
  459. - logger.log:
  460. level: INFO
  461. format: "Termostat 1 rozepnul – cekam na minimalni dobu behu Rele 1"
  462. - script.execute: vypnuti1
  463.  
  464.  
  465. # -------------------------
  466. # TERMOSTAT 2
  467. # -------------------------
  468. - platform: gpio
  469. pin:
  470. number: GPIO33
  471. mode: INPUT_PULLUP
  472. inverted: true
  473. name: "Termostat 2"
  474. id: termostat2
  475. filters:
  476. - delayed_on: 1000ms
  477. - delayed_off: 1000ms
  478.  
  479. on_press:
  480. then:
  481. - lambda: |-
  482. id(pump2_start) = millis();
  483. ESP_LOGI("termostat", "Termostat 2 sepnul");
  484. - logger.log:
  485. level: INFO
  486. format: "Zapinam Rele 2"
  487. - switch.turn_on: rele2
  488.  
  489. on_release:
  490. then:
  491. - logger.log:
  492. level: INFO
  493. format: "Termostat 2 rozepnul – cekam na minimalni dobu behu Rele 2"
  494. - script.execute: vypnuti2
  495.  
  496.  
  497. # -------------------------
  498. # TERMOSTAT 3
  499. # -------------------------
  500. - platform: gpio
  501. pin:
  502. number: GPIO25
  503. mode: INPUT_PULLUP
  504. inverted: true
  505. name: "Termostat 3"
  506. id: termostat3
  507. filters:
  508. - delayed_on: 1000ms
  509. - delayed_off: 1000ms
  510.  
  511. on_press:
  512. then:
  513. - lambda: |-
  514. id(pump3_start) = millis();
  515. ESP_LOGI("termostat", "Termostat 3 sepnul");
  516. - logger.log:
  517. level: INFO
  518. format: "Zapinam Rele 3"
  519. - switch.turn_on: rele3
  520.  
  521. on_release:
  522. then:
  523. - logger.log:
  524. level: INFO
  525. format: "Termostat 3 rozepnul – cekam na minimalni dobu behu Rele 3"
  526. - script.execute: vypnuti3
  527.  
  528.  
  529. # -------------------------
  530. # TERMOSTAT 4
  531. # -------------------------
  532. - platform: gpio
  533. pin:
  534. number: GPIO26
  535. mode: INPUT_PULLUP
  536. inverted: true
  537. name: "Termostat 4"
  538. id: termostat4
  539. filters:
  540. - delayed_on: 1000ms
  541. - delayed_off: 1000ms
  542.  
  543. on_press:
  544. then:
  545. - lambda: |-
  546. id(pump4_start) = millis();
  547. ESP_LOGI("termostat", "Termostat 4 sepnul");
  548. - logger.log:
  549. level: INFO
  550. format: "Zapinam Rele 4"
  551. - switch.turn_on: rele4
  552.  
  553. on_release:
  554. then:
  555. - logger.log:
  556. level: INFO
  557. format: "Termostat 4 rozepnul – cekam na minimalni dobu behu Rele 4"
  558. - script.execute: vypnuti4
  559.  
  560.  
  561. # =========================================================
  562. # MINIMÁLNÍ DOBA BĚHU 2 MINUTY (120 000 ms)
  563. # =========================================================
  564. script:
  565.  
  566. - id: vypnuti1
  567. mode: restart
  568. then:
  569. - lambda: |-
  570. unsigned long elapsed = millis() - id(pump1_start);
  571. unsigned long remaining = (elapsed < 120000) ? (120000 - elapsed) / 1000 : 0;
  572. ESP_LOGI("script", "Rele 1: uz bezi %lu s, cekam jeste %lu s", elapsed / 1000, remaining);
  573. - wait_until:
  574. condition:
  575. lambda: 'return (millis() - id(pump1_start)) >= 120000;'
  576. timeout: 200s
  577. - if:
  578. condition:
  579. binary_sensor.is_on: termostat1
  580. then:
  581. - logger.log:
  582. level: WARN
  583. format: "Rele 1 – termostat stale sepnuty, NEVYPINAM!"
  584. else:
  585. - logger.log:
  586. level: INFO
  587. format: "Vypinam Rele 1 – minimalni doba behu splnena"
  588. - switch.turn_off: rele1
  589.  
  590. - id: vypnuti2
  591. mode: restart
  592. then:
  593. - lambda: |-
  594. unsigned long elapsed = millis() - id(pump2_start);
  595. unsigned long remaining = (elapsed < 120000) ? (120000 - elapsed) / 1000 : 0;
  596. ESP_LOGI("script", "Rele 2: uz bezi %lu s, cekam jeste %lu s", elapsed / 1000, remaining);
  597. - wait_until:
  598. condition:
  599. lambda: 'return (millis() - id(pump2_start)) >= 120000;'
  600. timeout: 200s
  601. - if:
  602. condition:
  603. binary_sensor.is_on: termostat2
  604. then:
  605. - logger.log:
  606. level: WARN
  607. format: "Rele 2 – termostat stale sepnuty, NEVYPINAM!"
  608. else:
  609. - logger.log:
  610. level: INFO
  611. format: "Vypinam Rele 2 – minimalni doba behu splnena"
  612. - switch.turn_off: rele2
  613.  
  614. - id: vypnuti3
  615. mode: restart
  616. then:
  617. - lambda: |-
  618. unsigned long elapsed = millis() - id(pump3_start);
  619. unsigned long remaining = (elapsed < 120000) ? (120000 - elapsed) / 1000 : 0;
  620. ESP_LOGI("script", "Rele 3: uz bezi %lu s, cekam jeste %lu s", elapsed / 1000, remaining);
  621. - wait_until:
  622. condition:
  623. lambda: 'return (millis() - id(pump3_start)) >= 120000;'
  624. timeout: 200s
  625. - if:
  626. condition:
  627. binary_sensor.is_on: termostat3
  628. then:
  629. - logger.log:
  630. level: WARN
  631. format: "Rele 3 – termostat stale sepnuty, NEVYPINAM!"
  632. else:
  633. - logger.log:
  634. level: INFO
  635. format: "Vypinam Rele 3 – minimalni doba behu splnena"
  636. - switch.turn_off: rele3
  637.  
  638. - id: vypnuti4
  639. mode: restart
  640. then:
  641. - lambda: |-
  642. unsigned long elapsed = millis() - id(pump4_start);
  643. unsigned long remaining = (elapsed < 120000) ? (120000 - elapsed) / 1000 : 0;
  644. ESP_LOGI("script", "Rele 4: uz bezi %lu s, cekam jeste %lu s", elapsed / 1000, remaining);
  645. - wait_until:
  646. condition:
  647. lambda: 'return (millis() - id(pump4_start)) >= 120000;'
  648. timeout: 200s
  649. - if:
  650. condition:
  651. binary_sensor.is_on: termostat4
  652. then:
  653. - logger.log:
  654. level: WARN
  655. format: "Rele 4 – termostat stale sepnuty, NEVYPINAM!"
  656. else:
  657. - logger.log:
  658. level: INFO
  659. format: "Vypinam Rele 4 – minimalni doba behu splnena"
  660. - switch.turn_off: rele4
  661.  
  662.  
  663. captive_portal:
  664.  
Advertisement
Add Comment
Please, Sign In to add comment