m2teusz
(m2teusz)
3 Październik 2023 17:26
1
Cześć,
Jestem zielony w temacie a chciał bym mieć wgląd w sprawność temperaturową rekuperacji. W tym celu mam D1_mini z podpiętymi 4 szt DS18B20 w celu pomiaru temperatur na wlocie i wylocie i to działa poprawnie (pomijając odchylnie poszczególnych odczytów względem siebie). Do obliczenia sprawności jest prosty wzór h= (“Supply Air Temperature” - “Outdoor Air Temperature” ) / (“Return Air Temperature” - “Exhaust Air Temperature”) x 100% ale nie mam zielonego pojęcia jak go zaimplementować do kodu YAML żeby sprawność dostawać jako encje. Czy ktoś z szanownego grona jest wstanie mi pomóc?
captive_portal:
dallas:
- pin: D1
sensor:
- platform: dallas
address: 0xa73de1e380b20c28
name: "Exhaust Air Temperature"
- platform: dallas
address: 0xe63de1e380a9b128
name: "Outdoor Air Temperature"
- platform: dallas
address: 0x903de1e380f02928
name: "Supply Air Temperature"
- platform: dallas
address: 0x803de1e380b4c328
name: "Return Air Temperature"
U siebie mam zrobione tak, w configuration.yaml:
sensor:
- platform: template
req_sprawnosc:
unit_of_measurement: '%'
value_template: "{{ (100*(states('sensor.comfoairq_supply_temperature')|float - states('sensor.comfoairq_outside_temperature')|float) / (states('sensor.comfoairq_inside_temperature')|float - states('sensor.comfoairq_outside_temperature')|float)) | float(0)|round(1) }}"
Potem masz to w encji “sensor.req_sprawnosc”.
Pewnie ilość floatów i round-ów przytłacza i da się to zrobić bardziej elegancko, ale u mnie działa. Korzystałem ze wzoru Sprawność rekuperatora - jak policzyć?
m2teusz
(m2teusz)
4 Październik 2023 05:50
4
Dziękuję za odpowiedź ale coś mi nie idzie
captive_portal:
dallas:
- pin: D1
sensor:
- platform: dallas
address: 0xa73de1e380b20c28
name: "Exhaust Air Temperature"
- platform: dallas
address: 0xe63de1e380a9b128
name: "Outdoor Air Temperature"
- platform: dallas
address: 0x903de1e380f02928
name: "Supply Air Temperature"
- platform: dallas
address: 0x803de1e380b4c328
name: "Return Air Temperature"
- platform: template
req_sprawnosc:
unit_of_measurement: '%'
value_template: "{{ (100*(states('sensor.esp_recuperation_supply_air_temperature')|float - states('sensor.esp_recuperation_outdoor_air_temperature')|float) / (states('sensor.esp_recuperation_return_air_temperature')|float - states('sensor.esp_recuperation_outdoor_air_temperature')|float)) | float(0)|round(1) }}"
wywala błąd podczas walidacji
INFO ESPHome 2023.9.2
INFO Reading configuration /config/esphome/esp-recuperation.yaml...
ERROR Error while reading config: Invalid YAML syntax:
mapping values are not allowed here
in "/config/esphome/esp-recuperation.yaml", line 52, column 19:
req_sprawnosc:
^
Na szybko: sprawdź czy masz dobre wcięcia: przed “req_sprawnosc” brakuje spacji, a przed “unit” i “value” dwóch dodatkowych spacji.
m2teusz
(m2teusz)
4 Październik 2023 07:06
6
Już kombinowałem ze spacjami i efekt ten sam, nie bardzo wiem o co tu chodzi ;-(
macek
4 Październik 2023 07:10
7
@Maurycy , @m2teusz sami siebie wprowadzacie w błąd ponieważ
@Maurycy pisze o konfiguracji sensor w HA - "U siebie mam zrobione tak, w configuration.yaml " - plik configuration.yaml
to plik konfiguracyjny w HA a Ty @m2teusz próbujesz tę konfiguracje zastosować w ESPHome co napewno nie będzie działać. Czy coś wymaga jeszcze wyjaśnienia?
m2teusz
(m2teusz)
4 Październik 2023 09:18
8
Dziękuję kolego za wyjaśnienie a czy był byś wstanie podpowiedzieć jak to powinno wyglądać ESPhome
artpc
(artur)
4 Październik 2023 12:53
9
Trzeba wkleić cała swoją konfiguracje a nie jakieś wyrywki .
m2teusz
(m2teusz)
4 Październik 2023 14:07
10
Poniżej moje marne wypociny:
esphome:
name: esp-recuperation
friendly_name: Recuperation
esp8266:
board: d1_mini
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "xxx"
ota:
password: "xxx"
wifi:
ssid: "xxx"
password: "xxx"
use_address: 192.168.10.100
power_save_mode: none
fast_connect: true
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esp-Recuperation"
password: "0zZyhPl750kW"
captive_portal:
dallas:
- pin: D1
sensor:
- platform: dallas
address: 0xa73de1e380b20c28
name: "Exhaust Air Temperature"
id: exhaust
icon: "mdi:home-export-outline"
- platform: dallas
address: 0xe63de1e380a9b128
name: "Outdoor Air Temperature"
id: outdoor
icon: "mdi:home-import-outline"
- platform: dallas
address: 0x903de1e380f02928
name: "Supply Air Temperature"
id: supply
icon: "mdi:home-import-outline"
- platform: dallas
address: 0x803de1e380b4c328
name: "Return Air Temperature"
id: return_temp
icon: "mdi:home-export-outline"
- platform: template
name: req_sprawnosc
unit_of_measurement: '%'
lambda: return {(100*(states id(supply)|float - states id(outdoor)|float) / (states id(return_temp)|float - states id(outdoor)|float)) | float(0)|round(1) }}"
MariuszAK
(mariuszak)
4 Październik 2023 14:57
11
Ten kod generuje Tobie błędy ? Jakie ?
artpc
(artur)
4 Październik 2023 16:48
12
Nie widzę tu błędów w konfiguracji INFO Configuration is valid!
m2teusz
(m2teusz)
4 Październik 2023 16:53
13
A podczas kompilacji:
INFO ESPHome 2023.9.3
INFO Reading configuration /config/esphome/esp-recuperation.yaml...
INFO Generating C++ source...
INFO Compiling app...
Processing esp-recuperation (board: d1_mini; framework: arduino; platform: platformio/espressif8266@3.2.0)
--------------------------------------------------------------------------------
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
Dependency Graph
|-- ESPAsyncTCP-esphome @ 2.0.0
|-- ESPAsyncWebServer-esphome @ 3.1.0
|-- DNSServer @ 1.1.1
|-- ESP8266WiFi @ 1.0
|-- ESP8266mDNS @ 1.2
|-- noise-c @ 0.1.4
Compiling .pioenvs/esp-recuperation/src/main.cpp.o
/config/esphome/esp-recuperation.yaml:61:140: warning: missing terminating " character
61 | lambda: return {(100*(states id(supply)|float - states id(outdoor)|float) / (states id(return_temp)|float - states id(outdoor)|float)) | float(0)|round(1) }}"
| ^
/config/esphome/esp-recuperation.yaml:61:140: error: missing terminating " character
/config/esphome/esp-recuperation.yaml: In lambda function:
/config/esphome/esp-recuperation.yaml:61:21: error: 'states' was not declared in this scope; did you mean 'static'?
61 | lambda: return {(100*(states id(supply)|float - states id(outdoor)|float) / (states id(return_temp)|float - states id(outdoor)|float)) | float(0)|round(1) }}"
| ^~~~~~
| static
/config/esphome/esp-recuperation.yaml:61:27: error: expected ')' before 'supply'
61 | lambda: return {(100*(states id(supply)|float - states id(outdoor)|float) / (states id(return_temp)|float - states id(outdoor)|float)) | float(0)|round(1) }}"
| ~ ^~~~~~~
| )
/config/esphome/esp-recuperation.yaml:61:137: error: expected ')' before '}' token
61 | lambda: return {(100*(states id(supply)|float - states id(outdoor)|float) / (states id(return_temp)|float - states id(outdoor)|float)) | float(0)|round(1) }}"
| ~ ^~
| )
/config/esphome/esp-recuperation.yaml:61:138: error: could not convert '{<expression error>}' from '<brace-enclosed initializer list>' to 'esphome::optional<float>'
61 | lambda: return {(100*(states id(supply)|float - states id(outdoor)|float) / (states id(return_temp)|float - states id(outdoor)|float)) | float(0)|round(1) }}"
| ^
| |
| <brace-enclosed initializer list>
/config/esphome/esp-recuperation.yaml:61:139: error: expected ';' before '}' token
61 | lambda: return {(100*(states id(supply)|float - states id(outdoor)|float) / (states id(return_temp)|float - states id(outdoor)|float)) | float(0)|round(1) }}"
| ^
| ;
/config/esphome/esp-recuperation.yaml: In function 'void setup()':
/config/esphome/esp-recuperation.yaml:61:140: error: expected ')' before '}' token
61 | lambda: return {(100*(states id(supply)|float - states id(outdoor)|float) / (states id(return_temp)|float - states id(outdoor)|float)) | float(0)|round(1) }}"
| ^
| )
src/main.cpp:330:41: note: to match this '('
330 | template__templatesensor->set_template([=]() -> optional<float> {
| ^
/config/esphome/esp-recuperation.yaml: At global scope:
/config/esphome/esp-recuperation.yaml:62:4: error: expected unqualified-id before ')' token
/config/esphome/esp-recuperation.yaml:68:3: error: 'App' does not name a type
/config/esphome/esp-recuperation.yaml:69:1: error: expected declaration before '}' token
*** [.pioenvs/esp-recuperation/src/main.cpp.o] Error 1
========================= [FAILED] Took 12.56 seconds =========================
krskrab
4 Październik 2023 17:46
14
(1) }}"
cudzysłowów - masz tyko zamykający
m2teusz
(m2teusz)
17 Październik 2023 19:36
15
Zrobiłem trochę na około ale działa
captive_portal:
dallas:
- pin: D1
sensor:
- platform: dallas
address: 0xa73de1e380b20c28
name: "Exhaust Air Temperature"
id: exhaust
icon: "mdi:home-export-outline"
- platform: dallas
address: 0xe63de1e380a9b128
name: "Outdoor Air Temperature"
# -0,6 st. C
id: outdoor
icon: "mdi:home-import-outline"
- platform: dallas
address: 0x903de1e380f02928
name: "Supply Air Temperature"
id: supply
icon: "mdi:home-import-outline"
- platform: dallas
address: 0x803de1e380b4c328
name: "Return Air Temperature"
# -0,3 st. C
id: return_temp
icon: "mdi:home-export-outline"
- platform: template
name: "Temperature Efficiency"
unit_of_measurement: '%'
icon: "mdi:chart-bell-curve-cumulative"
update_interval: 60s
# lambda: return "{(100*(states id(supply)|float - states id(outdoor)|float) / (states id(return_temp)|float - states id(outdoor)|float)) | float(0)|round(1) }}"
# lambda: return {(100*(states('Return Air Temperature')|float - states('Outdoor Air Temperature')|float) / (states('Return Air Temperature')|float - states('Outdoor Air Temperature')|float))}
lambda: |-
float supp = id(supply).state;
float outd = id(outdoor).state;
float retu = id(return_temp).state;
float exha = id(exhaust).state;
return ((supp - outd) / (retu - outd)) * 100;
Edit:
m2teusz:
"Temperature Efficiency"
Ma ktoś może pomysł jak “zabezpieczyć” aby wartość zwracana była w zakresie 0-125%, niestety zdarza się ze wartości są od -500 do +600 (sic!).
1 polubienie
Nie wiem czy rozwiązałeś problem, ale pewno polega on na tym, że -500 do +600% wynika z błędnych odczytów temperatury jednego z czujników. Załóż sobie filtr na odczyty temperatury, że jeśli poza jakimś sensownym zakresem, to jakaś wartość…