Nibe Heat Pump Integration with nibegw on a RPIzero2w

Hi! Currently trying to get the Nibe Heat Pump integration to recognize my Nibe F730 through a nibegw on a “raspberry pi zero 2 w”.
As far as I can see my nibegw is up and running, but I cant get the integration to accept it.
any clues on how to proceed?

HA:
ip: 192.168.0.10

nibegw
ip: 192.168.0.85

I see now that my pump is red and giving a modbus alarm. I guess for some reason the nibegw is not ACK the Nibe F730 correctly? connected to the Recv-Q maybe?

Hi henrikf

did you have any troubles getting your heat pump display the data like that?

Here is a screenshot from mine, and i think you got it right.

I can’t get as far as using the home assistant add on yet.

I have exactly the same problem with my Nibe F1155 and have already spent hours on it.

My heatpump immediately goes to red/alarm when I enable modbus and only the NibeGW module communicates with it.

What I don’t understand: On my Raspberry I have NibePi (anerdins/node-red-contrib-nibepi#master) running for many months - without an alarm, it ran perfectly. I passed the data via MQTT directly from NodeRed. But now I wanted to replace that and use the HomeAssistant Nibe integration. I have to start the communication via Modbus with NodeRed (aka NibePi), then I can start the NibeGW module as well, and then I can see the measured values in the HomeAssistant integration. If the communication “stands”, I can deactivate NodeRed and everything runs properly (NibeGW => HomeAssistant).

But this is not a solution.
What is still missing ? Does anyone have this running flawlessly ?

ok, found solution:

@Kollisionskurs, I have same problem. Could you describe shortly, what was the problem and what is solution?

as @Arganox describes - “… it turns out the issue is related to running the serial port in canonical vs non-canonical mode”

so, change the following function in the nibegw script to:

int initSerialPort(int fd, int hwflowctrl)
{
	struct termios options;
	
	// Get the current options for the port...
	
	tcgetattr(fd, &options);
	
	// Set the baud rates
	cfsetispeed(&options, B9600);
	cfsetospeed(&options, B9600);
	
	// Enable the receiver and set local mode...
	options.c_cflag |= (CLOCAL | CREAD);
	
	// 8 data bits, no parity, 1 stop bit
	options.c_cflag &= ~PARENB;
	options.c_cflag &= ~CSTOPB;
	options.c_cflag &= ~CSIZE;
	options.c_cflag |= CS8;
	
	if (hwflowctrl)
		options.c_cflag |= CRTSCTS;		// Enable hardware flow control
	else
		options.c_cflag &= ~CRTSCTS;	// Disable hardware flow control
	
	// Flow control
	options.c_iflag &= ~(IXON | IXOFF | IXANY | ICRNL );
	
	// Local flags
	options.c_lflag &= ~(ISIG | ICANON | IEXTEN | ECHO | ECHOE | ECHOK | ECHONL | ECHOCTL | ECHOKE );
	
	options.c_oflag &= ~(OPOST | ONLCR);
	
	options.c_cc[VMIN] = 1;				// Min character to be read
	options.c_cc[VTIME] = 1;			// Time to wait for data (tenth of seconds)
	
	// Set the new options
	if (tcsetattr(fd, TCSANOW, &options) < 0 )
	{
		return -1;
	}
	
	return 0;
}

with it the communication stands with me for months flawlessly

1 Like