Mam pytanie. Na moim RPi4 mam zainstalowany OH3 oraz 2-CH RS485 HAT https://www.waveshare.com/2-ch-rs485-hat.htm
Próbuję połączyć się nim przez MODBUS RTU. Jednak po ustawieniu w pliku modbus.things
Bridge modbus:serial:localSerial [port="/dev/ttySC1", baud=9600, stopBits="1", parity="none", dataBits=8, encoding="rtu"]
{
Bridge poller Licznik [ start=0, length=1, refresh=6000, type="holding" ]
{
Thing data Energia [ readStart="0", readValueType="uint16" ]
}}
Na stronie wyświetla pięknie online ale na tym się kończy. Dodam, że ten HAT działa prawidłowo z Node-red na tym samym RPi i mam komunikacje z licznikiem.
W logach
dostaje coś takiego:2021-01-14 12:34:45.133 [ERROR] [ing.ModbusSlaveConnectionFactoryImpl] - Error connecting connection SerialConnection@7aa846[portName=/dev/ttySC1,port=<null>] for endpoint ModbusSerialSlaveEndpoint@1da4fef[portName=/dev/ttySC1]: Could not get port identifier, maybe insufficient permissions. null
2021-01-14 12:34:45.135 [WARN ] [rt.modbus.internal.ModbusManagerImpl] - Could not connect to endpoint ModbusSerialSlaveEndpoint@1da4fef[portName=/dev/ttySC1] -- aborting request ModbusReadRequestBlueprint@2fa254[slaveId=1,functionCode=READ_MULTIPLE_REGISTERS,start=0,length=1,maxTries=3] [operation ID 69972665-5097-497a-b9d5-71a543bfdb61]
Jest to prawdopodobnie związane z permissions opisanymi w https://www.openhab.org/docs/installation/linux.html#privileges-for-common-peripherals
jednak polecenie w terminalu sudo adduser openhab tty
daje The user `openhab' is already a member of `tty'.
Proszę o pomoc choć być może rozwiązanie jest trywialne ale nie jestem specjalistą ani linuxa ani OH3.
Same uprawnienia to jedno, druga rzecz to dodatkowe porty szeregowe które OH powinien widzieć. Standardowe porty, które łapie openHAB to ttyUSB, ttyACM plus kilka innych. Nazwa którą masz ttySC może nie być obsługiwana w domyślnej konfiguracji.
Jako że jesteś na malince podejrzewam że korzystasz z instalacji przez openhabiana. W pliku /etc/default/openhab dodaj do linii EXTRA_JAVA_OPTS tą część "-Dgnu.io.rxtx.SerialPorts=/dev/ttySC1". Jeśli na początku linii jest znak # to go usuń, ponieważ jest to znak komentarza, który powoduje zignorowanie tej linii.
EDIT: Jak by ktoś się zastanawiał jakie nazwy portów są obsługiwane to niestety nie ma tego w oficjalnej dokumentacji i trzeba to wygrzebać ze źródeł biblioteki obsługującej porty szeregowe: https://github.com/NeuronRobotics/nrjavaserial/blob/master/src/main/java/gnu/io/RXTXCommDriver.java#L650
@ldywicki bardzo dziękuję za wskazówki. Zrobiłem wszystko według instrukcji. Zadziałało! 😀
Oryginalnie w tym pliku jest już linia: EXTRA_JAVA_OPTS="-Xms192m -Xmx320m" którą tylko rozszerzyłem zgodnie z radą kolegi.
EXTRA_JAVA_OPTS="-Xms192m -Xmx320m -Dgnu.io.rxtx.SerialPorts=/dev/ttySC1"
Dziękuję także za link do źródeł biblioteki obsługującej porty szeregowe przyda się na przyszłość. 👍