# NibeGW Hardware and Compiling hints


## RS-485 Modules

For settting up a NibeGW you need a RS485 module. 
While ProDiNo already have RS-485 support included, you need a separate module for Arduino Uno.
Most cheap modules out there are compatible with 5V voltage and therefore compatible with Arduino based hardware.
Mostly you will get one of two commonly used designs:

* Modules based on Max1348 chip, which has 2 pins on the Arduino side (RXD, TXD) + VCC + GND
* Modules based on Max485 chip, which has 4 pins on the Arduino side (RO, RE, DE, DI) + VCC + GND

Both types of modules work fine with NibeGW.
The difference between the two is, that the Max485 chip needs to be switched between RX mode and TX mode manually while the Max1348 chip do this automatically.
That is why you need an extra "direction pin" on the Arduino to switch the module with Max485 chip between the two modes.

#### Wiring diagram for Max1348 based modules:

```
 TX  RX   5V  GND    Arduino
 |   |    |    |
 |   |    |    |
 |   |    |    |
 RX  TX  VCC  GND    Max1348 based module
```

#### Wiring diagram for Max485 (PIN2 is used as direction pin here):

```
 TX  RX  PIN2      5V  GND    Arduino
 |   |    |        |    |
 |   |    |        |    |
 |   |    |---|    |    |
 DI  RO   DE  RE  VCC  GND    Max485 bases module
```


## Ethernet Shield W5100

This Ethernet shield is based on Wiznet W5100 Ethernet Chip.
It is supported by the Arduino Ehternet Library.
No special configuration is needed, NibeGW supports this shield out of the box.

ProDiNo already have Ethernet included, so there's no need for a separate Ethernet Shield.
Also the ProDiNo Ethernet is supported by NibeGW out of the box.


## Arduino Uno

Arduino Uno has only one serial port which is shared with USB. 
So make sure to disconnect all hardware (ethernet shield, RS485 module, etc.) while uploading the compiled sketch to the Arduino.
Furthermore do not use the USB port while Arduino is communicating with the Nibe heatpump.

For compiling NibeGW, you have to make the following changes to the code:

#### Config.h:

Comment out support for all special boards:

```
//#define PRODINO_BOARD
//#define PRODINO_BOARD_ESP32
//#define TRANSPORT_ETH_ENC28J6A0
//#define ENABLE_DYNAMIC_CONFIG
```

Comment out debugging on the serial console:

```
//#define ENABLE_SERIAL_DEBUG
```

Adjust the settings for your ethernet connection, target ip and ports and modbus module to simulate.
Leave the serial configuration untouched - it is fine for Arduino Uno.

#### NibeGW.h:

Enable support for HARDWARE_SERIAL:

```
//#define HARDWARE_SERIAL_WITH_PINS
#define HARDWARE_SERIAL
```

##  ProDiNo ESP32 Ethernet v1 

Todo


## ProDiNo Ethernet V2

Todo


## Debugging

Debugging messages are available by connecting to port 23 to your NibeGW via telnet. Enable debugging in Config.h:

```
#define ENABLE_DEBUG
#define VERBOSE_LEVEL 5
#define ENABLE_REMOTE_DEBUG     // Remote debug is available in telnet port 23
```

You can connect to NibeGW with any telnet client. You can also set some options via telnet. With 'h' you get a menue with all available options:

```
Arduino NibeGW
Commands:
 E -> exit
 i -> info
 1 -> set verbose level to 1
 2 -> set verbose level to 2
 3 -> set verbose level to 3
 4 -> set verbose level to 4
 5 -> set verbose level to 5
```

On the target IP you can see the receiving udp messages with netcat (if you changed the default target port 9999, you also have to adjust it here):

```
nc -lu 9999 | hexdump -C
```

