Problem ze zrozumieniem adresów Modbus

Cześć,
Mam rekuperator Ostberg Heru 100S.
Udało mi się włączyć na nim komunikację modbus, łączy się z HA i nawet “coś” odczytuje.
Nie mogę tylko zrozumieć w jaki sposób to działa :slight_smile:
Mam takiego pdfa z jak mi się wydaje opisanymi adresami:
https://fsp.ostberg.com/products/front/products/download_document/27947/4382/iqc-touch-display (jak się nie otwiera konkretny to chyba tylko trzeba pobrać z sekcji download).
Są tam wpisy typu:
3x00002 Outdoor temperature (unit)

I teraz skopiowałem z internetu taki kawałek yaml:

- name: heru_outdoor_temperature
unit_of_measurement: °C
address: 1
slave: 1
input_type: input
device_class: temperature

I o dziwo faktycznie pokazuje prawdopodobną temp. zewnętrzną :slight_smile:
Tylko za nic w świecie nie mogę zrozumieć jak to się ma do tego adresu z pdf rekuperacji…
Ktoś pomoże?

jak coś kopiujesz “z internetu”, to podaj źródło, bo ten kawałek YAML jest kompletnie oderwany od rzeczywistości (tzn. nie wynika z niego z jakiej integracji korzystasz), o dziwo ma też złe wcięcia, więc to raczej cud, że działa.

Bo istotą pytania są te adresy i skąd one sie biorą i czemu działają :slight_smile:
Wstawiam screen z mojego terminala, bo nie mogę na szybko znaleźć tamtego forum.


Screenshot_20230403_205119_Termius

A ile dokładnie pokazuje? :wink:

6 stopni Celsjusza, ale patrzyłem z godzinę temu :slight_smile:

Pomijając poprawność zapisu sensora w HA, odczytałeś przez Modbusa rejestr typu input ( input register numery zaczynające się od 300001 do 365536) czyli dokładnie to co w dokumentacji jest pod 3x00002:

Na forum specem od Modbusa jest @RobinI30.

1 polubienie

A gdybym chciał odczytać np 3x00028 Current exhaust fan speed
To w jaki sposób? Bo nadal nie kumam zależności…

Tak:

address: 27
input_type: input
1 polubienie

… czyli zawsze około 10? :stuck_out_tongue_closed_eyes:

To co przed “x” oznacza rodzaj rejestru: 1-cewka, 3- input, 4-holding.
Dzięki temu wiesz jakiego Function code użyć do operacji na rejestrze.
Żeby było śmieszniej dla rej. typu 3 używasz funkcji 4 i na odwrót :slight_smile:

To co po “x” oznacza faktyczny adres.
W innej konwencji podawane są tylko adresy.

Errata - Uściślenie

To co po “x” oznacza faktyczny nr.rejestru
W innej konwencji podawane są tylko nr.rejestru

Numer rejestru, różni się od adresu o 1. Rejestry o numerach 1-16 są adresowane jako 0-15
Dlatego odczytując adres 1 odczytuje rejestr nr,2

1 polubienie

Wg mnie odczytał poprawną wartość.

No właśnie :slight_smile: :

Tak - dobrze, że ktoś czuwa :slight_smile:

Pamiętałem o tym bo sam się na tym “przejechałem” przy zabawie z Modbusem.

@macek @RobinI30
Dzięki wielkie Panowie, już kumam! :slight_smile:
No nie było to takie proste :slight_smile:

Edit:
A jeszcze pytanie o zapis slave - to ma znaczenie?

… i ma i nie ma.
Jeśli urządzenie ma wbudowany ModbusTCP to nie ma, ponieważ slave oznacza identyfikator urządzenia . Identyfikatorem jest IP i jest tylko takie jedno.
W przypadku gdy fizycznie łączysz się przez RS485 musisz ustawić unikatowy identyfikator, ponieważ na jednej magistrali można “powiesić” kilka różnych. Slave jest pewnego rodzaju adresem całego urządzenia.

1 polubienie

Bardzo łatwo się naciąć, ponieważ dokumentacja jest różna - raz podają rejestr a raz adres.
Choć sześciocyfrowa liczba wskazuje raczej na nr. rejestru.

mod2

Podobnie jest w dokumentacji HA
mod3

… i weź się teraz nie pomyl !! :slight_smile: