Witam,
chciałem podpiąć licznik ABB B23 112-100 pod HA przez Modbus RS485.
Testna laptopie odczytu danych wypadł pomyślnie - coś tam odczytuje, więc komunikacja jest.
Niestety HA wypluwa ostrzeżenie:
Setup failed for 'sensors': Integration not found.
Setup failed for 'modbus': Integration failed to initialize.
Modbus PC contain no entities, causing instability, entry not loaded
Mój configuration.yaml:
# Loads default set of integrations. Do not remove.
default_config:
# Load frontend themes from the themes folder
frontend:
themes: !include_dir_merge_named themes
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
modbus:
- name: PC
type: serial
baudrate: 9600
port: /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_B002FAKO-if00-port0
bytesize: 8
method: rtu
parity: N
stopbits: 1
timeout: 2
sensors:
- name: Licznik1_L1_Voltage
unit_of_measurement: V
device_class: voltage
slave: 1
address: 0x5B00
data_type: int16
- name: Licznik1_L2_Voltage
unit_of_measurement: V
device_class: voltage
slave: 1
address: 0x5B02
data_type: int16
- name: Licznik1_L3_Voltage
unit_of_measurement: V
device_class: voltage
slave: 1
address: 0x5B04
data_type: int16
- name: Licznik1_L1_Active_Power
unit_of_measurement: W
device_class: power
slave: 1
address: 0x5B16
data_type: int16
scale: 1000
- name: Licznik1_L2_Active_Power
unit_of_measurement: W
device_class: power
slave: 1
address: 0x5B18
data_type: int16
scale: 1000
- name: Licznik1_L3_Active_Power
unit_of_measurement: W
device_class: power
slave: 1
address: 0x5B1A
data_type: int16
scale: 1000
- name: Licznik1_Total_Active_Power
unit_of_measurement: W
device_class: power
slave: 1
address: 0x5B14
data_type: int16
scale: 1000
- name: Licznik1_L1_Current
unit_of_measurement: A
device_class: power
slave: 1
address: 0x5B0C
data_type: int16
precision: 2
- name: Licznik1_L2_Current
unit_of_measurement: A
device_class: power
slave: 1
address: 0x5B0E
data_type: int16
precision: 2
- name: Licznik1_L3_Current
unit_of_measurement: A
device_class: power
slave: 1
address: 0x5B10
data_type: int16
precision: 2
Nie poprawne wcięcia (każda spacja ma znaczenie!) w pliku .yaml, sekcja sensors także niepoprawna, popatrz w dukumentację - Modbus Example: sensor configuration jak to powinno wyglądać:
Skoro tak twierdzisz to OK, jeżeli w File editor nie wygląda to tak jak pokazałem, to działać nie będzie jednoznacznie jest to wskazane w logach:
Setup failed for 'sensors': Integration not found.
Setup failed for 'modbus': Integration failed to initialize.
Modbus PC contain no entities
po automatycznym tłumaczeniu:
Instalacja nie powiodła się dla 'sensors': Integracja nie została znaleziona.
Instalacja nie powiodła się dla 'modbus': Integracja nie została zainicjowana.
Modbus PC nie zawiera żadnych encji
Totalnie nie rozumiem takiego podejścia: nie wiesz czegoś (ja też wielu rzeczy nie wiem), prosisz o pomoc (ja też proszę o pomoc w różnych tematach), dostajesz wskazówki gdzie masz źle ale upierasz się, że “wcięcia są ok”.
type: serial
sensors:
Tam, pomiedzy, jest pusta linia i to jest między innymi źle, ale Edytor edytor pokazuje dobrze . Żadne narzędzie, żaden edytor nie pokaże Ci w tym miejscu - w składni yaml - błędu.
Wrzuciłem pytanie do ChatGPT:
“gdzie jest bład w ponizszym pliku yaml:
tu wkleiłem Twoj plik”
Uzyskana odpowiedz:
" W pliku YAML, który podałeś, zauważyłem kilka możliwych problemów, które mogą powodować błąd. Oto najczęstsze przyczyny:
Błąd w identacji – YAML jest bardzo wrażliwy na białe znaki (spacje i tabulatory). Należy upewnić się, że identacja jest poprawna, tzn. wszystkie elementy muszą być odpowiednio wcięte względem swoich rodziców.
Potencjalne niezgodności w użyciu !include – Jeśli używasz !include do załadowania plików (takich jak automations.yaml, scripts.yaml, scenes.yaml), musisz upewnić się, że te pliki istnieją w odpowiednich lokalizacjach i są poprawnie sformatowane.
Modbus configuration – Sekcja konfiguracji modbus i sensorów wygląda w porządku, ale warto sprawdzić, czy wszystkie adresy i inne parametry są poprawne w odniesieniu do konkretnego urządzenia Modbus.
Sprawdzanie literówek – Zwróć uwagę na nazwy kluczy i wartości. W YAML każda litera jest istotna, więc błędnie wpisany klucz może powodować błąd.
Na podstawie powyższych obserwacji i domniemanych problemów, oto kilka sugestii:
Sprawdź spacje: Upewnij się, że nie używasz tabulatorów, tylko spacji do wcięć. Spacje muszą być spójne (zwykle 2 lub 4 spacje na poziom wcięcia).
Struktura modbus: Jeśli niektóre urządzenia są opcjonalne w konfiguracji, może być wymagane dodanie odpowiednich atrybutów, np. dla niektórych sensorów, jeżeli są niepoprawnie zapisane (sprawdź dokładnie dokumentację).
Jeśli nadal masz problemy, możesz podać więcej szczegółów, co dokładnie generuje błąd."
Rozumiem, że tego nie rozumiesz, ale poprawna składnia YAML (którą sprawdza uproszczony linter YAML wbudowany w edytor) jest warunkiem koniecznym, ale równocześnie nie jest warunkiem wystarczającym dla działania jakiejś konfiguracji…
(bo sam prawidłowy format YAMLa nie oznacza, że to są poprawne zapisy konfiguracyjne)
Aby to mogło działać konfiguracja musi być zgodna z dokumentacją (a to co wkleiłeś nie jest).
Bardziej zaawansowany linter jest w narzędziach deweloperskich w sekcji YAML.
PS Puste linie nie są zakazane (nadają się do zwiększania czytelności kodu), ale brakujące wcięcia są niedopuszczalne, tu jeszcze dodam, że wcięcia mają się składać ze spacji, a nie z tabulatorów (to na wypadek korzystania z edytora który ma opcje automatycznej konwersji ciągu spacji w tabulatory - tu to jest niepożądane, a wręcz niedouszczalne!).
Na dobry początek popraw tak (celowo wywaliłem resztę sensorów, bo do sprawdzenia wystarczy jeden)
modbus:
- name: PC
type: serial
baudrate: 9600
port: /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_B002FAKO-if00-port0
bytesize: 8
method: rtu
parity: N
stopbits: 1
timeout: 2 # jesteś pewnien, że chcesz zmniejszyć z domyślnego 5 sekund?
sensors:
- name: Licznik1_L1_Voltage
unit_of_measurement: V
device_class: voltage
slave: 1
address: 0x5B00
data_type: uint32
potem sobie porównasz typy danych w/g dokumentacji, bo z tego urywka datasheeta do tego sensora chyba pasuje uint32, ale do mocy pewnie będzie już pasować int32, a do niektórych innych uint16 lub int16
Dodatkowo wartości będzie trzeba dzielić przez 10 lub 100 (czyli można mnożyć przez 0.1 lub 0.01 zamiast dzielić, jak kto woli skoro jest opcja scale, która mnoży)
Poprawiłem wcięcia, tzn zamieniłem tabulatory na spacje. Dzięki teraz wypluwa dane, pozostaje tylko kosmetyka i testowanie.
Mam tylko jeszcze pytanie czy to jest problem, że encje nie mają unikalnego identyfikatora i dlatego z poziomu interfejsu użytkownika nie można zarządzać jej ustawieniami.
A może da się jakoś to id “wymusić”?
@jaro444 można prościej, unique_id może być taki sam jak name, nazwa encji też musi być unikalna (jeżeli nie będzie unikalna HA doda na końcu kolejne numerki _1, _2 itd), u siebie wszędzie tak robię, np.
Moim skromnym zdaniem jest ok. To co podałeś to active import energy (aktualny stan licznika), a nie active power (bieżący pobór)
Ps.
Dorzuciłem załącznik z datasheet dla tego licznika.
Pozdr.
To jest twój YAML, tylko typ danych się nie zgadzał (na podstawie tego kawałka dokumentacji, z którego jest obrazek wcześniej - niewłaściwy typ danych nie zawsze się ujawnia w postaci niepoprawnego wskazania w tej chwili, ale często się ujawnia w nieoczekiwanych okolicznościach), a w pozostałych kwestiach po prostu spakuj do zipa posiadaną dokumentację i wrzuć jako załącznik (albo dorób chociaż jej screenshoty jako referencję dla przyszłych użytkowników).
Widzę że już dołożyłeś