hi community. i have succesfully connected my neasmart system to openhab.
i’ve use waveshare ethernet as gateway.i’ve connected directly to neasmart base on sysbus pin
the first problem it’s that openhab can act only as master but the rehau act as master too. so i’ve istalled a docker istance that act as “tranformer” from master to slave . i ve found it on openhab forum GitHub - nett-media/modbus-server
after that i’ve created on openhab a modbus thing tcp connection to docker modbus-server that trough waveshare set as tcp client read and write the coil that is specificated on rehau gateway knx instruction https://www.rehau.com/downloads/813496/nea-smart-2-0-knx-gateway.pdf
i ve created all my thing ( pooller, coil etc) that i want to share with u:
Bridge modbus:tcp:RehauNeaSmart "Rehau Nea Smart " [ host="192.168.1.8", port=502, id=1, connectMaxTries=3] {
Bridge poller Rehau_Nea_Smart "Rehau Nea Smart" [ start=1, length=32, refresh=1000, type="input" ] {
Thing data Rehau_Mode "Rehau Modo Funzionamento"[ readStart="1", readValueType="uint16",writeStart="1",writeValueType="int16", writeType="holding"]
Thing data Rehau_State "Rehau Stato Funzionamento"[ readStart="2", readValueType="uint16",writeStart="2",writeValueType="int16", writeType="holding"]
Thing data Rehau_Outside_T "Rehau Temperatura esterna"[ readStart="7", readValueType="uint16",readTransform="JS:temponly.js"]
Thing data Rehau_Deu_1 "Rehau Deumidificatore 1"[ readStart="22", readValueType="uint16"]
Thing data Rehau_Deu_2 "Rehau Deumidificatore 2"[ readStart="23", readValueType="uint16"]
Thing data Rehau_Deu_3 "Rehau Deumidificatore 3"[ readStart="24", readValueType="uint16"]
Thing data Rehau_Circ_1 "Rehau Circolatore 01"[ readStart="31", readValueType="uint16"]
Thing data Rehau_Circ_2 "Rehau Circolatore 02"[ readStart="32", readValueType="uint16"]
}
Bridge poller Zone_id_1 "Camera Matrimoniale" [ start=100, length=11, refresh=1000, type="input" ] {
Thing data Zone_id_1_Temp "Camera Matrimoniale Temperatura"[ readStart="102", readValueType="uint16",readTransform="JS:temp.js"]
Thing data Zone_id_1_SetPoint "Camera Matrimoniale SetPoint"[ readStart="101", readValueType="uint16",readTransform="JS:temp.js",writeStart="101",writeValueType="int16", writeType="holding",writeTransform="JS:tempout.js"]
Thing data Zone_id_1_Hum "Camera Matrimoniale Umidità"[ readStart="110", readValueType="uint16"]
Thing data Zone_id_1_Mode "Camera Matrimoniale Modo Funzionamento"[ readStart="100", readValueType="uint16",writeStart="100",writeValueType="int16", writeType="holding"]
}
Bridge poller Zone_id_2 "Camera Blu" [ start=200, length=11, refresh=1000, type="input" ] {
Thing data Zone_id_2_Temp "Camera Blu Temperatura"[ readStart="202", readValueType="uint16",readTransform="JS:temp.js"]
Thing data Zone_id_2_SetPoint "Camera Blu SetPoint"[ readStart="201", readValueType="uint16",readTransform="JS:temp.js",writeStart="201",writeValueType="int16", writeType="holding",writeTransform="JS:tempout.js"]
Thing data Zone_id_2_Hum "Camera Blu Umidità"[ readStart="210", readValueType="uint16"]
Thing data Zone_id_2_Mode "Camera Blu Modo Funzionamento"[ readStart="200", readValueType="uint16",writeStart="200",writeValueType="int16", writeType="holding"]
}
rehau has a strange type of reading and writing of zone temperature from 20,1 degree .
i ve create 2 java script transformation
one for reading
(function(i) {
if(i<2041)
return parseFloat(i) / 100;
if (i > 2042)
return ((2010+((i-3053)*2))/100)
})(input)
and one for writing
(function(i) {
if(i<20.10)
return parseFloat(i) * 100;
if (i > 20.10)
return (3053+((i-20.10)*50))
//return(stoca)
})(input)
i ve also created ui pages
- component: oh-label-cell
config:
header: "SALA "
icon: material:living
item: Sala_Temperatura
action: analyzer
actionAnalyzerItems:
- Sala_Temperatura
trendItem: Sala_Temperatura
- component: oh-label-cell
config:
header: Umidità
icon: material:water_drop
item: Sala_Umidita
action: analyzer
actionAnalyzerItems:
- Sala_Umidita
trendItem: Sala_Umidita
- component: oh-knob-cell
config:
icon: material:thermostat
item: Sala_SetPoint
min: 5
max: 30
step: 0.5
title: Set Point
subtitle: =items.Sala_SetPoint.state
- component: oh-label-cell
config:
title: Modalità
item: Sala_Modo_Funzionamento
label: "=(items.Sala_Modo_Funzionamento.state === '4') ?
'Auto':(items.Sala_Modo_Funzionamento.state === '1') ?
'Normale': (items.Sala_Modo_Funzionamento.state === '2') ?
'Ridotto':(items.Sala_Modo_Funzionamento.state === '3') ?
'Spento': (items.Sala_Modo_Funzionamento.state === '5') ?
'Party': (items.Sala_Modo_Funzionamento.state === '6') ?
'Vacanza': 'errore'"
action: options
actionOptions: 1=Normale,2=Modalità
Ridotta,3=Spento,4=Automatico,5=Party,6=Vacanza
actionItem: CorridoioModoClima
I hope it can be of help to someone
Davide