Tam nie powinno być linii platform command_line - coś musiałeś źle skopiować.
Rekuperator Thessla, problem z modbusem - #15 przez dar3k tu w tym poście wkleiłem konfigurację na pastebin.
Tam nie powinno być linii platform command_line - coś musiałeś źle skopiować.
Rekuperator Thessla, problem z modbusem - #15 przez dar3k tu w tym poście wkleiłem konfigurację na pastebin.
@PLyjo zmień sensor:
na - sensor:
zaraz po template:
Błąd mówi, że interpreter spodziewa się tablicy i jej nie dostaje, tutaj masz jeden element w tablicy którym jest owy sensor.
Druga rzecz, to co już poprzednicy mówili, błędnie dodane jest tam - command_line:
po - sensor:
powinno być od razu - name:
Edit:
@Jabol dzięki za filmik, dzięki niemu, udało się bez większych problemów spiąć moją TG z HA
Cześć.
Amatorskie pytanie do osób które korzystają z elfina EW11A.
Widzę elfina że rozgłasza wifi ale nie wiem jak się z nim połączyć w celu skonfigurowania. Jakiś adres czy coś??
A co na to instrukcja? Standardowy IP z sieci 10.x.x.x nie działa?
Hint: jak się łączysz do samodzielnego urządzenia pracującego w trybie AP, które rozgłasza własną sieć LAN z własnym serwerem DHCP, to w systemie operacyjnym, z którego się łączysz możesz podejrzeć własności tego połączenia, tam znajdziesz IP, jeśli natomiast nie ma DHCP to istnieją metody oparte na ARP lub konieczność przeczytania instrukcji również “między wierszami”.
Dla tych zaczynających od nowa i braci na wczesnym etapie implementacji tutaj znacznie uproszczone i poprawione sensory:
Zmiany głównie poprawiają odporność sensorów na zbieranie bzdurnych wartości granicznych, kiedy jeden z czujników jest w stanie 0 lub unknown, a inne nadal wypluwają przemnożenia przez zero, itp.
Dzięki temu wreszcie nie mam negatywnych sprawności, czy też 100 kW odzysku momentami:
Dodatkowo usunąłem z pomocą Discord HA wiele wariantów w publikowanych wyżej schematach, kiedy fizycznie sytuacja nie może mieć miejsca (np. chłodzenie kiedy zimno itp.), a schemat ją zakłada, toteż tworzą się czasem błędy logiczne kiedy HA startuje albo Reku lub adapter się wywalają.
Od zmiany generowane dane są bardzo czyste i dają możliwość rzeczywistych kalkulacji (średnich, median) bez konieczności ręcznego czyszczenia. Jak dla mnie zbieranie danych typu dzienny/miesięczny odzysk, czy średnia sprawność na powyższych czujnikach generowało bardzo zakłamane wartości.
Tutaj, żeby mnie ktoś źle nie zrozumiał- autor pierwotnej konfiguracji umożliwił mi wejście w temat i czerpałem garściami z jego wiedzy, za co wielkie ukłony. Natomiast po pewnym czasie zacząłem mieć przesyt powyższych problemów.
- sensor:
- name: Ventilation energy efficiency
unique_id: recu_energy_efficiency
icon: mdi:percent
unit_of_measurement: "%"
state: >
{% set t1 = states('sensor.incoming_air_temperature') | float %}
{% set t2 = states('sensor.room_supply_temperature') | float %}
{% set t3 = states('sensor.room_exhaust_temperature') | float %}
{% if is_state('binary_sensor.ventilation_bypass', 'off') and is_state('binary_sensor.fan_operational', 'on') and is_state('switch.open_windows', 'off') and t1 != t3 %}
{% set output = (t2 - t1) / (t3 - t1) * 100 %}
{{ ([ 0, output, 100] | sort)[1] | round(2) }}
{% else %}
0
{% endif %}
availability: >
{{ [
'sensor.incoming_air_temperature',
'sensor.room_supply_temperature',
'sensor.room_exhaust_temperature'
] | map('states') | select('is_number') | list | length == 3 }}
- name: Ventilation supply flow rate
unique_id: "recu_supply_flow_rate_percent"
icon: "mdi:percent"
unit_of_measurement: "%"
state: >
{% set flowN = states('sensor.air_supply_flow') | float %}
{{ ((flowN * 100) / 420 |float) | round(2, default=0) }}
availability: "{{ states('sensor.air_supply_flow') | is_number }}"
- name: Ventilation exhaust flow rate
unique_id: "recu_exhaust_flow_rate_percent"
icon: "mdi:percent"
unit_of_measurement: "%"
state: >
{% set flowW = states('sensor.air_exhaust_flow') | float %}
{{ ((flowW * 100) / 420|float) | round(2, default=0) }}
availability: "{{ states('sensor.air_exhaust_flow') | is_number }}"
- name: Ventilation power recovery
unique_id: "recu_power_recovery"
icon: "mdi:counter"
unit_of_measurement: "W"
device_class: power
state: >
{% set flowIN = states('sensor.air_supply_flow') | float %}
{% set tIN = states('sensor.incoming_air_temperature') | float %}
{% set tROOM = states('sensor.room_supply_temperature') | float %}
{% if is_state('binary_sensor.ventilation_bypass', 'off') and is_state('switch.open_windows', 'off') %}
{{ (((tROOM - tIN) * flowIN * 1200) / 3600) | abs | round(2) }}
{% else %}
0
{% endif %}
availability: >
{{ [
'sensor.air_supply_flow',
'sensor.incoming_air_temperature',
'sensor.room_supply_temperature'
] | map('states') | select('is_number') | list | length == 3 }}
Tutaj do kompletu poprawione dla nowej składni HA czujniki/włączniki modbus:
modbus:
- name: rs485
type: rtuovertcp
host: IP ADDRESS
port: PORT
delay: 2
timeout: 10
sensors:
- name: Incoming air temperature
address: 16
data_type: int16
device_class: temperature
input_type: input
precision: 2
scale: 0.1
scan_interval: 10
slave: 11
unit_of_measurement: °C
state_class: measurement
unique_id: recu_outside_temp
- name: Room supply temperature
address: 17
data_type: int16
device_class: temperature
input_type: input
precision: 2
scale: 0.1
scan_interval: 10
slave: 11
unit_of_measurement: °C
state_class: measurement
unique_id: recu_supply_temp
- name: Room exhaust temperature
address: 18
data_type: int16
device_class: temperature
input_type: input
precision: 2
scale: 0.1
scan_interval: 10
slave: 11
unit_of_measurement: °C
state_class: measurement
unique_id: recu_exhaust_temp
- name: Post FPX temperature
address: 19
data_type: int16
device_class: temperature
input_type: input
precision: 2
scale: 0.1
scan_interval: 10
slave: 11
unit_of_measurement: °C
state_class: measurement
unique_id: recu_fpx_temp
- name: Server room temperature
address: 22
data_type: int16
device_class: temperature
input_type: input
precision: 2
scale: 0.1
scan_interval: 10
slave: 11
unit_of_measurement: °C
state_class: measurement
unique_id: recu_ambient_temp
- name: Air supply flow
address: 256
data_type: int16
input_type: holding
precision: 2
scale: 1
scan_interval: 10
slave: 11
unit_of_measurement: m³/h
state_class: measurement
unique_id: recu_supply_flow
# - name: Current air supply flow
# address: 320
# count: 1
# data_type: int16
# input_type: holding
# precision: 2
# scale: 1
# scan_interval: 10
# slave: 11
# unit_of_measurement: m³/h
# state_class: measurement
# unique_id: recu_current_supply_flow
- name: Air exhaust flow
address: 257
slave: 11
precision: 2
scale: 1
scan_interval: 10
data_type: int16
input_type: holding
unit_of_measurement: m³/h
state_class: measurement
unique_id: recu_exhaust_flow
# - name: Current air exhaust flow
# address: 321
# count: 1
# data_type: int16
# input_type: holding
# precision: 2
# scale: 1
# scan_interval: 10
# slave: 11
# unit_of_measurement: m³/h
# state_class: measurement
# unique_id: recu_current_exhaust_flow
- name: Rekuperator speedmanual
address: 4210
slave: 11
scan_interval: 5
data_type: int16
input_type: holding
unit_of_measurement: '%'
- name: FPX mode
address: 4198
slave: 11
scan_interval: 10
data_type: int16
input_type: holding
binary_sensors:
- name: Ventilation bypass
address: 9
slave: 11
scan_interval: 10
input_type: coil
device_class: opening
unique_id: recu_bypass
- name: Fan Operational
address: 11
slave: 11
scan_interval: 5
input_type: coil
device_class: moving
unique_id: recu_fansON
- name: FPX state
address: 4192
slave: 11
scan_interval: 10
input_type: holding
device_class: running
unique_id: recu_fpx
switches:
- name: Airing
address: 4224
slave: 11
write_type: holding
command_on: 7
command_off: 0
verify:
unique_id: recu_airing
- name: Open windows
address: 4224
slave: 11
write_type: holding
command_on: 10
command_off: 0
verify:
unique_id: recu_open_windows
- name: Away mode
address: 4224
slave: 11
write_type: holding
command_on: 11
command_off: 0
verify:
unique_id: recu_away_mode
- name: Fireplace mode
slave: 11
write_type: holding
scan_interval: 5
address: 4224
command_on: 2
command_off: 0
verify:
unique_id: recu_fireplace
- name: Operating mode - Auto
address: 4208
slave: 11
write_type: holding
scan_interval: 5
command_on: 0
command_off: 1
verify:
unique_id: recu_mode_auto
- name: Bypass
address: 4320
slave: 11
write_type: holding
scan_interval: 5
command_on: 0
command_off: 1
verify:
unique_id: recu_bypass
- name: Winter mode
address: 4209
slave: 11
write_type: holding
scan_interval: 5
command_on: 1
command_off: 0
verify:
unique_id: recu_winter
- name: Recu ON/OFF
address: 4387
slave: 11
write_type: holding
scan_interval: 5
command_on: 1
command_off: 0
verify:
unique_id: recu_onoff
Jeżeli ktoś ma jakieś propozycje dalszej optymalizacji, chętnie wysłucham.
Czołem!
Super bo właśnie o to chodziło w dzieleniu się konfiguracja aby ktoś kto ma więcej wolnego czasu bądź samozaparcia ja skończył i wyszlifował
Jeszcze możesz spróbować powalczyć z tymi błędami w logach od rejestrów zwracających stan pracy - to jest do zrobienia na template ale jest na mojej todo list i albo brak czasu albo chęci (skoro działa a w logu tylko wpis to wyłączyłem logi i problemu nie ma;) )
Dzięki ,udało się, Nie mogłem znaleźć adresu ip.
Hej
Czy udało ci się poprawić te odczyty?
Podpowie ktoś w czym tkwi problem z poniższym wyliczeniem odzysku itp (pierwsza częśc wklejonego kodu) od pewnego czasu mam komunikat encji: “Ta encja nie jest już dostarczana przez template. Jeśli encja nie jest już używana, usuń ją w ustawieniach.” programistą nie jestem, totalnie brakuje mi juz pomysłów żeby to przywrócić w pełni do życia.
template:
- sensor:
- name: "Rekuperator Sprawność"
unique_id: sensor.rekuperator_sprawnosc
icon: "mdi:percent"
unit_of_measurement: "%"
state: >
{% if is_state('binary_sensor.rekuperator_silownik_bypassu', 'off') %}
{% set t1 = states('sensor.rekuperator_temperatura_czerpnia') | float %}
{% set t2 = states('sensor.rekuperator_temperatura_nawiew') | float %}
{% set t3 = states('sensor.rekuperator_temperatura_wywiew') | float %}
{{ (((t2 - t1) / (t3 - t1)) * 100 | float) | round(2, default=0) }}
{% else %}
0
{% endif %}
- name: "Rekuperator Wysterowanie Nawiew"
unique_id: sensor.rekuperator_wysterowanie_nawiew
icon: "mdi:percent"
unit_of_measurement: "%"
state: >
{% set flowN = states('sensor.rekuperator_strumien_nawiew') | float %}
{{ ((flowN * 100) / 360 | float) | round(2, default=0) }}
- name: "Rekuperator Wysterowanie Wywiew"
unique_id: sensor.rekuperator_wysterowanie_wywiew
icon: "mdi:percent"
unit_of_measurement: "%"
state: >
{% set flowW = states('sensor.rekuperator_strumien_wywiew') | float %}
{{ ((flowW * 100) / 360 | float) | round(2, default=0) }}
- name: "Rekuperator Odzyskana Moc"
unique_id: sensor.rekuperator_odzyskana_moc
icon: "mdi:counter"
unit_of_measurement: "W"
state: >
{% if is_state('binary_sensor.rekuperator_silownik_bypassu', 'off') %}
{% set strumienN = states('sensor.rekuperator_strumien_nawiew') | float %}
{% set tcz = states('sensor.rekuperator_temperatura_czerpnia') | float %}
{% set tn = states('sensor.rekuperator_temperatura_nawiew') | float %}
{{ (((tn - tcz) * strumienN * 1200) / 3600 | float) | round(2, default=0) if tcz < strumienN else ((((tn - tcz) * strumienN * 1200) / 3600) * -1) | round(2, default=0) }}
{% else %}
0
{% endif %}
Tu są 4 różne encje. Której konkretnie Ci brakuje?
Wszystko co niedostępne i tam gdzie wykrzynik - usunięta encja.
Nie było tematu, ogarnięte
To podziel się rozwiązaniem, może ktoś skorzysta?
Cześć, nie mogę sobie poradzić z podłączeniem TG do HA. Może ktoś mi coś podpowie
Moduł - mam moduł Waveshark RS232RS485 to ETH
Rekuperator - Airpack 300h Enthalpy ze stycznia 2023
Przewód - od strony modułu RS485 ma 3 wejścia (A+), (B-), (GND). Od strony reku jest to wejście 8pin jak do ethernet. Wziąłem zwykłą skrętkę, uciąłem z jednej strony i podłączyłem według schematu - pomarańczowy (pin 2) do (A+), biało-pomarańczowy (pin 1) do (B-), brązowy pin (8) do uziemienia. Przewód wpięty do gniazda Airmobile/Modbus RTU, ale próbowałem też do Air++
Konfiguracja modułu pod RS485
Konfiguracja HA
Skorzystałem z tego configa https://pastebin.com/raw/beQs7YcL. Zmieniłem tylko IP i port. Config poszedł do:
packages/rekuperator/rekuperator.yaml
w configuraton.yaml mam taki wpis
homeassistant:
packages: !include_dir_merge_named packages/
Na razie do głowy przychodzi mi tylko inny przewód i ewentualnie zobaczenie czy na pinach 3 i 4 idzie transmisja. Jakieś pomysły co robię źle? Rozumiem, że przy takiej konfiguracji w HA encje rekuperatora powinny się już samoistnie pojawić?
Pobierz sobie jakiś program do komunikacji po Modbus np qmodmaster i zobacz czy możesz się komunikować.
Sprawdź czy na pewno plik rekuperator.yaml
jest ładowany do HA, czasami z nieznanych powodów niektóre pliki z sekcji packages
nie są ładowane. Najlepiej to sprawdzić dodając jakieś błędne wpisy do rekuperator.yaml
i sprawdzić czy SPRAWDŹ KONFIGURACJĘ
przejdzie weryfikację, jeżeli pokaże błąd to znaczy że plik jest ładowany.
HA nie wywala błędu.
Natomiast podłączyłem na próbę na odwrót przewody przy konwerterze i zaczęła się świecić dioda od odbierania (RS485 RX), a po odpaleniu pod Linuxem mbpoll -p 5001 192.168.1.160
zaczęła mrygać dioda od dawania (RS485 TX). Program robi zwyczajny poll danych, ale dostaje błąd
Protocol configuration: Modbus TCP
Slave configuration...: address = [1]
start reference = 1, count = 1
Communication.........: 192.168.1.160, port 5001, t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, output (holding) register table
-- Polling slave 1... Ctrl-C to stop)
Read output (holding) register failed: Invalid data
-- Polling slave 1... Ctrl-C to stop)
Read output (holding) register failed: Invalid data
-- Polling slave 1... Ctrl-C to stop)
Read output (holding) register failed: Invalid data
-- Polling slave 1... Ctrl-C to stop)
Read output (holding) register failed: Invalid data
-- Polling slave 1... Ctrl-C to stop)
Read output (holding) register failed: Invalid data
^C--- 192.168.1.160 poll statistics ---
5 frames transmitted, 0 received, 5 errors, 100.0% frame loss
W zależności jak skonfigurowany konwerter ale najcześiej powinno się używać modbus rtu over tcp, zamiast modbus tcp.
Cześć wszystkim, walczę z integracją już od kilku dni. Używam Elfina 11
Nie działają mi przyciski z ustawieniem prędkości % wentylatorów.
Kod:
type: vertical-stack
cards:
- type: horizontal-stack
cards:
- type: button
tap_action:
action: toggle
entity: switch.rekuperator_on_off
name: Praca
show_state: true
icon: mdi:air-filter
show_name: true
show_icon: true
- type: button
tap_action:
action: more-info
entity: binary_sensor.rekuperator_silownik_bypassu
name: Bypass
show_state: true
icon: mdi:arrow-decision
- type: conditional
conditions:
- entity: switch.rekuperator_zima
state: 'on'
card:
type: button
tap_action:
action: toggle
entity: switch.rekuperator_zima
name: Zima
icon: mdi:snowflake
- type: conditional
conditions:
- entity: switch.rekuperator_zima
state: 'off'
card:
type: button
tap_action:
action: toggle
entity: switch.rekuperator_zima
name: Lato
icon: mdi:sun-snowflake
- type: button
tap_action:
action: toggle
entity: switch.rekuperator_mode
name: Auto
show_state: true
icon: mdi:home-floor-a
- type: horizontal-stack
cards:
- type: button
tap_action:
action: call-service
service: modbus.write_register
service_data:
address: 4210
unit: 10
value: 60
hub: modbus
target: {}
show_icon: false
name: 60%
- type: button
tap_action:
action: call-service
service: modbus.write_register
service_data:
address: 4210
unit: 10
value: 70
hub: reku
target: {}
show_icon: false
name: 70%
- type: button
tap_action:
action: call-service
service: modbus.write_register
service_data:
address: 4210
unit: 10
value: 80
hub: reku
target: {}
show_icon: false
name: 80%
- type: button
tap_action:
action: call-service
service: modbus.write_register
service_data:
address: 4210
unit: 10
value: 90
hub: reku
target: {}
show_icon: false
name: 90%
- type: button
tap_action:
action: call-service
service: modbus.write_register
service_data:
address: 4210
unit: 10
value: 100
hub: reku
target: {}
show_icon: false
name: 100%
- type: picture-elements
elements:
- type: state-label
entity: sensor.rekuperator_temperatura_czerpnia
style:
top: 27%
left: 7%
color: black
- type: state-label
entity: sensor.rekuperator_temperatura_za_fpx
style:
top: 14%
left: 19%
- type: state-label
entity: sensor.rekuperator_temperatura_nawiew
style:
top: 54%
left: 94%
color: black
- type: state-label
entity: sensor.rekuperator_strumien_nawiew
style:
top: 72%
left: 93%
- type: state-label
entity: sensor.rekuperator_wysterowanie_nawiew
style:
top: 65%
left: 94%
- type: state-label
entity: sensor.rekuperator_temperatura_wywiew
style:
top: 27%
left: 94%
color: black
- type: state-label
entity: sensor.rekuperator_strumien_wywiew
style:
top: 10%
left: 92%
- type: state-label
entity: sensor.rekuperator_wysterowanie_wywiew
style:
top: 18%
left: 94%
- type: state-label
entity: sensor.rekuperator_sprawnosc
style:
top: 80%
left: 50%
- type: state-label
entity: sensor.rekuperator_temperatura_pcb
style:
top: 72%
left: 35%
- type: state-label
entity: sensor.rekuperator_odzyskana_moc
style:
top: 90%
left: 50%
- type: state-label
entity: sensor.rekuperator_speedmanual
style:
top: 85%
left: 12%
border: 1px solid white
border-radius: 5%
- type: image
entity: binary_sensor.rekuperator_silownik_bypassu
state_image:
'on': /local/reku_bypass3.png
'off': /local/reku_empty.png
style:
top: 41%
left: 51%
width: 25%
- type: image
entity: sensor.rekuperator_fpx_flaga
state_image:
'0': /local/reku_empty.png
'1': /local/reku_fpx.png
style:
top: 8%
left: 52.5%
width: 10%
- type: image
entity: sensor.rekuperator_fpx_tryb
state_image:
'0': /local/reku_empty.png
'1': /local/reku_1.png
'2': /local/reku_2.png
style:
top: 8%
left: 60%
width: 3.5%
- type: image
entity: sensor.rekuperator_alarm
state_image:
'0': /local/reku_empty.png
'1': /local/reku_alarm.png
style:
top: 8%
left: 20%
width: 15%
- type: image
entity: sensor.rekuperator_error
state_image:
'0': /local/reku_empty.png
'1': /local/reku_alarm.png
style:
top: 8%
left: 20%
width: 15%
- type: image
entity: sensor.rekuperator_awaria_cf_nawiewu
state_image:
'0': /local/reku_empty.png
'1': /local/reku_alarm.png
style:
top: 8%
left: 20%
width: 15%
- type: image
entity: sensor.rekuperator_awaria_cf_wywiewu
state_image:
'0': /local/reku_empty.png
'1': /local/reku_alarm.png
style:
top: 8%
left: 20%
width: 15%
- type: image
entity: sensor.rekuperator_awaria_wentylatora_nawiewu
state_image:
'0': /local/reku_empty.png
'1': /local/reku_alarm.png
style:
top: 8%
left: 20%
width: 15%
- type: image
entity: sensor.rekuperator_awaria_wentylatora_wywiewu
state_image:
'0': /local/reku_empty.png
'1': /local/reku_alarm.png
style:
top: 8%
left: 20%
width: 15%
- type: image
entity: sensor.rekuperator_fpx_zabezpieczenie_termiczne
state_image:
'0': /local/reku_empty.png
'1': /local/reku_alarm.png
style:
top: 8%
left: 20%
width: 15%
- type: image
entity: sensor.rekuperator_wymiana_filtrow
state_image:
'0': /local/reku_empty.png
'1': /local/reku_alarm.png
style:
top: 8%
left: 20%
width: 15%
image: /local/reku_nobypass3.png
- type: horizontal-stack
cards:
- type: button
tap_action:
action: call-service
service: modbus.write_register
service_data:
address: 4210
unit: 10
value: 10
hub: reku
target: {}
show_icon: false
name: 10%
- type: button
tap_action:
action: call-service
service: modbus.write_register
service_data:
address: 4210
unit: 10
value: 20
hub: reku
target: {}
show_icon: false
name: 20%
- type: button
tap_action:
action: call-service
service: modbus.write_register
service_data:
address: 4210
unit: 10
value: 30
hub: reku
target: {}
show_icon: false
name: 30%
- type: button
tap_action:
action: call-service
service: modbus.write_register
service_data:
address: 4210
unit: 10
value: 40
hub: reku
target: {}
show_icon: false
name: 40%
- type: button
tap_action:
action: call-service
service: modbus.write_register
service_data:
address: 4210
unit: 10
value: 50
hub: reku
target: {}
show_icon: false
name: 50%
- type: horizontal-stack
cards:
- type: button
tap_action:
action: toggle
entity: switch.rekuperator_pusty_dom
name: Pusty dom
icon: mdi:home-account
show_state: true
- type: button
tap_action:
action: toggle
entity: switch.rekuperator_wietrzenie
name: Wietrzenie
show_state: true
icon: mdi:fan
- type: button
tap_action:
action: toggle
entity: switch.rekuperator_okna
name: Otwarte okna
show_state: true
icon: mdi:window-open-variant
- type: button
tap_action:
action: toggle
entity: switch.rekuperator_kominek
name: Kominek
show_state: true
icon: mdi:fireplace