Zabrałem się za integrację rekuperatora firmy jan-gaz z openhab.
Openhab jest na Raspberry Pi 3B+ , do testów użyłem konta openhabian.
Fizycznie używam najtańszego konwertera rs486 na USB
Rekuperator posiada interfejs modbus ascii i używając oprogramowania modpoll 3.10 - FieldTalk(tm) Modbus(R) Master Simulator jestem w stanie odczytywać i zapisywać rejestry.
Komenty z shella działają :
openhabian@openhabian:~/modpoll/arm-linux-gnueabihf $ ./modpoll -b 9600 -p none -s 1 -m ascii -r 64903 -c 1 -1 /dev/ttyUSB1 modpoll 3.10 - FieldTalk(tm) Modbus(R) Master Simulator Copyright (c) 2002-2021 proconX Pty Ltd Visit https://www.modbusdriver.com for Modbus libraries and tools. Protocol configuration: Modbus ASCII, FC3 Slave configuration...: address = 1, start reference = 64903, count = 1 Communication.........: /dev/ttyUSB1, 9600, 8, 1, none, t/o 1.00 s, poll rate 1000 ms Data type.............: 16-bit register, output (holding) register table -- Polling slave... [64903]: 86
Ale już konfiguracja w Openhab generuje błędy typu:
2022-01-01 20:59:56.772 [ERROR] [ing.ModbusSlaveConnectionFactoryImpl] - Error connecting connection SerialConnection@e50ebb[portName=/dev/ttyUSB1,port=<null>] for endpoint ModbusSerialSlaveEndpoint@1589d43[portName=/dev/ttyUSB1]: Could not get port identifier, maybe insufficient permissions. null 2022-01-01 20:59:56.774 [WARN ] [rt.modbus.internal.ModbusManagerImpl] - Could not connect to endpoint ModbusSerialSlaveEndpoint@1589d43[portName=/dev/ttyUSB1] -- aborting request ModbusReadRequestBlueprint@6e7239[slaveId=1,functionCode=READ_MULTIPLE_REGISTERS,start=64903,length=1,maxTries=3] [operation ID 0d9e841e-f658-495b-8143-f73fa2b9c66c]
Macie jakieś pomysły?
User systemowy jest już w grupie 5(tty),20(dialout)
Jan-gaz a właściwie sterownik UCS ERC22 mam podpięte w OH3. Sprawdź uprawnienia użytkownika do portu ttyUSB dla użytkownika openhab, a po drugie to w /etc/default/openhab sprawdź czy jest port EXTRA_JAVA_OPTS="-Dgnu.io.rxtx.SerialPorts=/dev/usb2:/dev/ttyUSB3:/dev/USB1"
@jarn, Dzięki 2 podejście i faktycznie nie miałem tych parametrów ustawionych.
Mam kolejne pytania:
1. Jak włączać i wyłączać rekuperator. Odpowiedzialny za to jest rejestr 64641 jest typu init16 holding register. Odczyt 5-włączony 0- wyłączony, ale zapis jest już kodem 85 i 170. Jak zdefiniować thing/item, żeby to obsłużyć ON-OFF? Zrobić konwersję Read/Write Transform czy użyć innego sposobu ?
2. W sterowniku w Jan-gaz jest duża rozpiętość rejestrów, np odczyty temperatur są pod rejestrami 64896 a prędkości wentylatorów pod rejestrami 65219. W Modbus poll mogę jednocześnie odczytywać 8 rejestórw init16. Jak zdefiniować Modbus poll żeby dobrać się do tak skrajnych rejestrów ?
Załączam dokumentacją jaką dostałem do sterownika.
Pozdrawiam.
@jarn, Dzięki 2 podejście i faktycznie nie miałem tych parametrów ustawionych.
Mam kolejne pytania:
1. Jak włączać i wyłączać rekuperator. Odpowiedzialny za to jest rejestr 64641 jest typu init16 holding register. Odczyt 5-włączony 0- wyłączony, ale zapis jest już kodem 85 i 170. Jak zdefiniować thing/item, żeby to obsłużyć ON-OFF? Zrobić konwersję Read/Write Transform czy użyć innego sposobu ?
2. W sterowniku w Jan-gaz jest duża rozpiętość rejestrów, np odczyty temperatur są pod rejestrami 64896 a prędkości wentylatorów pod rejestrami 65219. W Modbus poll mogę jednocześnie odczytywać 8 rejestórw init16. Jak zdefiniować Modbus poll żeby dobrać się do tak skrajnych rejestrów ?
Załączam dokumentacją jaką dostałem do sterownika.
Pozdrawiam.
AD 2. Trzeba stworzyć następny modbus pool.
Odnośnie sterowania mam tylko zrobione sterowanie prędkością wentylatorów. Pool holding register 65223 lenght 1. Analogiczne modbus data rejestr 65223 uint16.
Fajnie że znalazłeś rejestry po polsku.
AD 1. Tworzymy modbus pool
Nastepnie tworzymy plik w katalogu transform dla zamiany 0x00AA i 0x0055 na ON/OFF. np:
plik o nazwie reku.map
OFF=85
ON=170
0=układ wyłączony przez operatora
1=układ wyłączony w wyniku pracy w trybie ECO
2=układ wyłączony przez zegar
5=układ włączony
Następnie modbus data :
teraz możemy sopbie podpiąć itemy w kanałach
Dodatkowo można zrobić transformację dla odczytów.
Page
Hej jeszcze mam pytanie odnośnie modbus pool.
Mam skonfigurowane 2 poole na innych zakresach, ale czasami dochodzi między nimi do konfliktu. Tylko jeden odczyt może być wykonywany w danym czasie.
Błędy jakie występuj to
2022-05-04 06:43:15.688 [WARN ] [ing.ModbusSlaveConnectionFactoryImpl] - connect try 1/1 error: Connection refused (Connection refused). Connection TCPMasterConnection [m_Socket=Socket[unconnected], m_Timeout=3000, m_Connected=false, m_Address=/192.168.2.62, m_Port=1502, m_ModbusTransport=net.wimpi.modbus.io.ModbusTCPTransport@43658, m_ConnectTimeoutMillis=10000, rtuEncoded=false]. Endpoint ModbusIPSlaveEndpoint [address=192.168.2.62, port=1502]
Raz na jednej pooli jaz na drugiej.
Pytanie jak to można rozwiązać ?
Hej jeszcze mam pytanie odnośnie modbus pool.
Mam skonfigurowane 2 poole na innych zakresach, ale czasami dochodzi między nimi do konfliktu. Tylko jeden odczyt może być wykonywany w danym czasie.
Błędy jakie występuj to
2022-05-04 06:43:15.688 [WARN ] [ing.ModbusSlaveConnectionFactoryImpl] - connect try 1/1 error: Connection refused (Connection refused). Connection TCPMasterConnection [m_Socket=Socket[unconnected], m_Timeout=3000, m_Connected=false, m_Address=/192.168.2.62, m_Port=1502, m_ModbusTransport=net.wimpi.modbus.io.ModbusTCPTransport@43658, m_ConnectTimeoutMillis=10000, rtuEncoded=false]. Endpoint ModbusIPSlaveEndpoint [address=192.168.2.62, port=1502]
Raz na jednej pooli jaz na drugiej.
Pytanie jak to można rozwiązać ?
Niestety nie pomogę. U siebie nie zauważyłem problemów. Jednak ja używam połączenia poprzez port szeregowy. Mam 9x pool, co 10 sekund.