Seit langem wieder an dem Haus Projekt.
Hab in den letzten Tagen fast nur daran gesessen, herauszufinden warum, wieso weshalb....
Nutze >>diese<< Library
#include <ModbusRtu.h>
#define ID 1 //Slave ID
Modbus slave(ID, 1, 2); // this is slave ID and RS-232 or USB-FTDI
Modbus slave0(ID, 0,0);
// data array for modbus network sharing
uint16_t au16data[2];
void setup() {
slave.begin( 19200 );
slave0.begin( 19200 );
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(20, OUTPUT);
pinMode(8, INPUT);
pinMode(9, INPUT);
pinMode(13, OUTPUT);
digitalWrite(3, HIGH );
digitalWrite(4, LOW );
digitalWrite(5, HIGH );
digitalWrite(6, LOW );
digitalWrite(20, HIGH );
digitalWrite(13, HIGH );
}
void loop() {
slave.poll( au16data, 2 );
slave0.poll( au16data, 2 );
// get digital inputs -> au16data[0]
bitWrite( au16data[0], 0, digitalRead( 8 ));
bitWrite( au16data[0], 1, digitalRead( 9 ));
// set digital outputs -> au16data[1]
digitalWrite( 3, bitRead( au16data[1], 0 ));
digitalWrite( 4, bitRead( au16data[1], 1 ));
digitalWrite( 5, bitRead( au16data[1], 2 ));
digitalWrite( 6, bitRead( au16data[1], 3 ));
digitalWrite( 20, bitRead( au16data[1], 4 ));
digitalWrite( 13, bitRead( au16data[1], 5 ));
}
In openHAB muss ich die Startadresse 16 (modbus:serial.slave2.start=16) angeben, warum ausgerechnet 16?
Wie kann man es berechnen oder wovon hängt es ab?
openhab.cfg
############################### Modbus Binding ########################################
#
# sets refresh interval to Modbus polling service.
# Value in milliseconds (optional, defaults to 200)
modbus:poll=1000
# Arduino Eingänge
modbus:serial.slave1.connection=/dev/ttyUSB0:19200:8:none:2:rtu
modbus:serial.slave1.id=1
modbus:serial.slave1.start=0
modbus:serial.slave1.length=2
modbus:serial.slave1.type=discrete
# Arduino Ausgänge
modbus:serial.slave2.connection=/dev/ttyUSB0:19200:8:none:2:rtu
modbus:serial.slave2.id=1
modbus:serial.slave2.start=16
modbus:serial.slave2.length=6
modbus:serial.slave2.type=coil
demo.items
Contact MB_DT0 "DT0 PIN8 [MAP(en.map):%s]" {modbus="slave1:0"}
Contact MB_DT1 "DT1 PIN9 [MAP(en.map):%s]" {modbus="slave1:1"}
Switch MB_CL16 "MB_CL16 PIN3" {modbus="slave2:0"}
Switch MB_CL17 "MB_CL17 PIN4" {modbus="slave2:1"}
Switch MB_CL18 "MB_CL18 PIN5" {modbus="slave2:2"}
Switch MB_CL19 "MB_CL19 PIN6" {modbus="slave2:3"}
Switch MB_CL20 "MB_CL20 PIN20" {modbus="slave2:4"}
Switch MB_CL21 "MB_CL21 PIN13" {modbus="slave2:5"}
demo.sitemap
sitemap demo label="Main Menu"
{
Frame {
Text item= MB_DT0
Text item= MB_DT1
Switch item= MB_CL16
Switch item= MB_CL17
Switch item= MB_CL18
Switch item= MB_CL19
Switch item= MB_CL20
Switch item= MB_CL21
}
}
Hier noch ein Tutorial, für alle die es lesen können:
Как подружить OpenHAB и Arduino
Arduino & Modbus
Arduino & OpenHAB