Nibe uplink binding

Maybe this channel is only used by models which have a outdoor unit, basically all “VVM XXX” models. Maybe there is a equal channel for your model. I have written a tool that logs all possible channels (basically 10000-10500 + 40000-49999) to an excel file once per minute. You could then filter for changes. And of course you could trigger some changes on the Nibe while the logger is active.
I could share my code on github but it is really only a dirty tool.

Hi there, I have Nibe F470 heat pump and trying to bind it to Openhab via Nibe Uplink binding. I can see from the binding documentation this specific model is not supported. However I’m trying to use thing type F750 as it is same kind of product. Let see what happens.

So far it seems to work well with F470 as well. I can get various temperature values and also write fan speed setting.

1 Like

Dear Alex, hope all is good for you your great project and wishing you a fantastic 2019 with continued successes!

little things to say really, first to finally report back that the DEV bundle you compiled for me after my contrib of mid-december has worked like a charm since then, so great, and thanks again.
then i guess you have received this warning from the nibeuplink API webmaster about this forthcoming upgrade end of Jan concerning this upgrade of the Transport Layer Security (TLS). Do you reckon we should do anything on our side to keep all working or it will be transparent?

Hi Olivier,

thanks for positive feedback regarding the new channels. I will wait a little bit more if there is any feedback on the other extensions and if no issues occur I will open a pull request to get these changes into the next openhab release.

The TLS change should be transparent to the binding as openhab and the binding both use http-client implementations which are stae of the art and thus support modern cipher suites.

thank you Alex for the quick answer concerningn TLS. thanks also for already considering merging soon into the official release. no rush for me but good to know, have a good day!

Trying to get this going.

Did some HTML tricks to pull everything from the status page of Nibe Uplink for my F1255-16

Here’s the output.

Initially, I thought I could do this and just simply map it as custom, but the binding unfortunately only supports 8 custom channels according to the documentation…

Name ID
brine in 40015
brine out 40016
floor drying function 47276
fuse size 47214
status 41191
average current 41190
current 41189
collector in 40028
collector out 40029
heating 44896
hot water 44897
status 44908
price of electricity 10069
AUX1 47411
AUX2 47410
AUX3 47409
AUX4 47408
AUX5 47407
X7 47412
country 48745
product/sn/V 0

Edit: Updated the complete list only including the missing ones.

Creating a new post to adress my issue.

openhab> bundle:list | grep Nibe

39 │ Active │ 80 │ 2.5.0.201901021609 │ NibeUplink Binding

2019-01-17 22:49:08.586 [DEBUG] [org.openhab.binding.nibeuplink ] - BundleEvent STARTING - org.openhab.binding.nibeuplink
2019-01-17 22:49:08.655 [DEBUG] [nk.internal.NibeUplinkHandlerFactory] - setHttpClientFactory
2019-01-17 22:49:08.669 [DEBUG] [org.openhab.binding.nibeuplink ] - ServiceEvent REGISTERED - {org.eclipse.smarthome.core.thing.binding.ThingHandlerFactory}={service.id=472, service.bundleid=39, service.scope=bundle, component.name=org.openhab.binding.nibeuplink.internal.NibeUplinkHandlerFactory, component.id=309} - org.openhab.binding.nibeuplink
2019-01-17 22:49:08.687 [DEBUG] [org.openhab.binding.nibeuplink ] - BundleEvent STARTED - org.openhab.binding.nibeuplink

nibe.things

nibeuplink:Nibe:F125516 [ user="email", password="password", nibeId="12345", customChannel01=40015, customChannel02=40016, customChannel03=47276, customChannel04=40028, customChannel05=40029, customChannel06=44896, customChannel07=44897, customChannel09=44908 ] 

nibe.items

Number:Temperature	NIBE_STATUS_Avg_OT	"avg. outdoor temp <BT1>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:base#40067"	}
Number:Temperature	NIBE_STATUS_HW_Charge	"hot water charging <BT6>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:hotwater#40014"	}
Number:Temperature	NIBE_STATUS_HW_Top	"hot water top <BT7>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:hotwater#40013"	}
Number:Temperature	NIBE_STATUS_OT	"outdoor temp. <BT1>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:base#40004"	}
Number:Dimensionless	NIBE_STATUS_DegreeMinutes	"degree minutes"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:base#43005"	}
Switch	NIBE_COMPRESSOR_MODULE_Blocked	"blocked"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:base#10012"	}
Number	NIBE_COMPRESSOR_MODULE_Starts	"compressor starts <EB100-EP14>"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:compressor#43416"	}
Number:Dimensionless	NIBE_COMPRESSOR_MODULE_Brine_Pump_Speed	"brine pump speed <EP14-GP2>	 [%d %%]"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:compressor#43439"	}
Number:Dimensionless	NIBE_COMPRESSOR_MODULE_Heating_Medium_Pump_Speed	"pump speed heating medium <EP14>	 [%d %%]"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:compressor#43437"	}
Number:Temperature	NIBE_COMPRESSOR_MODULE_Brine_In	"brine in <EB100-EP14-BT10>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:custom#CH01"	}
Number:Temperature	NIBE_COMPRESSOR_MODULE_Brine_Out	"brine out <EB100-EP14-BT11>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:custom#CH02"	}
Number:Temperature	NIBE_COMPRESSOR_MODULE_Condenser_Our	"condenser out <EB100-EP14-BT12>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:compressor#40017"	}
Number:Temperature	NIBE_COMPRESSOR_MODULE_Heat_Medium_Flow	"heat medium flow <BT2>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:base#40008"	}
Number:Temperature	NIBE_COMPRESSOR_MODULE_Hot_Gas	"hot gas <EB100-EP14-BT14>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:compressor#40018"	}
Number:Temperature	NIBE_COMPRESSOR_MODULE_Liquid_Line	"liquid line <EB100-EP14-BT15>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:compressor#40019"	}
Number:Temperature	NIBE_COMPRESSOR_MODULE_Return_Temp	"return temp. <EB100-EP14-BT3>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:base#40012"	}
Number:Temperature	NIBE_COMPRESSOR_MODULE_Suction_Gas	"suction gas <EB100-EP14-BT17>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:compressor#40022"	}
Number:Time	NIBE_COMPRESSOR_MODULE_Operating_Time	"compressor operating time <EB100-EP14>"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:compressor#43420"	}
Number:Time	NIBE_COMPRESSOR_MODULE_Operating_Time_HW	"compressor operating time hot water <EB100-EP14>"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:compressor#43424"	}
Number:Frequency	NIBE_COMPRESSOR_MODULE_Min_Freq	"allowed compr. freq. min"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:compressor#43122"	}
Number:Frequency	NIBE_COMPRESSOR_MODULE_Max_Freq	"allowed compr. freq. max"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:compressor#43123"	}
Number:Frequency	NIBE_COMPRESSOR_MODULE_Current_Freq	"current compr. frequency"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:compressor#43136"	}
Switch	NIBE_CLIMATE_SYS_1_External_Adj	"external adjustment <S1>"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:base#43161"	}
Switch	NIBE_CLIMATE_SYS_1_Floor_Drying	"floor drying function"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:custom#CH03"	}
Number:Temperature	NIBE_CLIMATE_SYS_1_Calculated_Flow_Temp	"calculated flow temp. <S1>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:base#43009"	}
Number:Temperature	NIBE_CLIMATE_SYS_1_Heat_Medium_Flow_Temp	"heat medium flow <BT2>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:base#40008"	}
Number:Temperature	NIBE_CLIMATE_SYS_1_Return_Temp	"return temp. <EB100-EP14-BT3>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:base#40012"	}
Number:Temperature	NIBE_CLIMATE_SYS_1_Room_Temp	"room temperature <BT50>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:base#40033"	}
Switch	NIBE_ADDITION_Blocked	"blocked"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:base#10033"	}
Number:Time	NIBE_ADDITION_Operating_Time	"time factor"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:base#43081"	}
Number:Power	NIBE_ADDITION_Operating_Power	"electrical addition power"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:base#43084"	}
Number:Power	NIBE_ADDITION_Operating_Max_Power	"set max electrical add."	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:base#47212"	}
Number:Dimensionless	NIBE_FLM_Fan_Speed	"fan speed	 [%d %%]"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:airsupply#10001"	}
Number:Temperature	NIBE_FLM_Collector_In	"collector in <AZ1-BT26>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:custom#CH04"	}
Number:Temperature	NIBE_FLM_Collector_Out	"collector out <AZ1-BT27>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:custom#CH05"	}
Number:Temperature	NIBE_FLM_Exhaust_Air	"exhaust air <BT20>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:airsupply#40025"	}
Number:Temperature	NIBE_FLM_Extract_Air	"extract air <BT21>	 [%.1f °C]"	<temperature>	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:airsupply#40026"	}
Number	NIBE_SPA_Heating		"heating"			{	channel="nibeuplink:Nibe:F125516:custom#CH06"	}
String	NIBE_SPA_HW				"hot water"			{	channel="nibeuplink:Nibe:F125516:custom#CH07"	}
Switch	NIBE_SPA_status			"status"			{	channel="nibeuplink:Nibe:F125516:custom#CH08"	}
Switch	NIBE_OP_Vacation_Mode	"Vacation mode"		{	channel="nibeuplink:Nibe:F125516:base#48043"	}
Switch	NIBE_OP_Addition	"Addition Blocked"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:base#10033"	}
Number	NIBE_OP_Lux	"Temporary luxury mode"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:hotwater#48123"	}
Number	NIBE_OP_HWMode	"Hot water mode"	(Nibe, PersistChange)	{	channel="nibeuplink:Nibe:F125516:hotwater#47041"	}

Yet I don’t see that anything is happening, no errors, nothing when refreshing things-file or items-file. It seems like the thing is not being registered correctly through nibe.things…

Any ideas? :slight_smile:

Solved:

OK!
It was picky about the nibeuplink:Nibe:F125516 which needed to actually be specified as f1155.
i.e. nibeuplink:f1155:16-CU RTFM :blush:

Hi @Lockzi,

thanks for your feedback.

These channels have recently been added to the DEV version.

Most of the other channels you mentioned are channels which will most likely never change like fuse size, AUX1-5, X7, country, product/sn. Thus it does not make any sense to include them in openhab.
In a very early version of this binding each and every channel was included which means there were more than 1000 channels per model. People were lost and stuff was completely unmaintainable.
So it was decided to focus on a reduced set of very common channels which provide relevant information. If you could give me more information on those channels I could perhaps add a few of them.
I will need:

  • a brief description what is the purpose of this channel
  • a unit which is used by the channel (in case of a numeric value)
  • a mapping of numer values to textual representations in case of textual status channels
  • a scaling factor (will be either 1, 10 or 100)

For those which will not be added you will have the chance to use it as custom channel.

Thanks for your reply and all work with this binding Alex!

I’ve never been accustomed to a binding with UoM before. Great learning, and also I do now recognize why it’s beeing limited in readable values in order to keep the maintenance of variables down. I how ever am more used to formatting my own values.

I am unable to get brine in/out working using custom channels (they are not loading for some reason? Even though I see them in the JSON response)
|brine in|40015|
|brine out|40016|

Is there a DEV version built available for download or do I need to build it myself?

Update: A suggestion would be to just include a channel for the RAW json output. The users would then be able to extract whatever items they would like. I do that on multiple parts through out my system.
Many thanks!

Here you go: http://friese-de.eu/openhab2/
The 2.5.0-SNAPSHOT version should be compatible with openhab 2.4.0 as of now.

I am planning to extend the amount of custom channels and also include an option to apply a custom scaling factor to those custom channels. This should address your needs and this should also be much more convenient than processing raw json data. Thus it is a feature which will be used by more people.

1 Like

Many thanks Alex, I was already using that 2.5.0 snapshot.

I’ve updated to OpenHAB 2.4 release.
Yet I am unable to get the correct values for FLM Collector In and Out. The purpose of that variable is that the ventilation heat exchanger pre-heats the incoming brine line (by roughly 1 degree C). So, logically the FLM Collector In should be roughly the same as Brine In.

I also have the same problem with the FAN speed. The rest of my custom channels are static, so I don’t really know if they work or not at this point or is showing a previously saved value.

Things

nibeuplink:f1155:16-CU [ user="email", password="pass", nibeId="12345", 
            customChannel01=47260, //FanSpeed
            customChannel02=40028, //NIBE_FLM_Collector_In
            customChannel03=40029, //NIBE_FLM_Collector_Out
            customChannel04=47276, //NIBE_CLIMATE_SYS_1_Floor_Drying
            customChannel05=44896, //NIBE_SPA_Heating
            customChannel06=44897, //NIBE_SPA_HW
            customChannel07=44908 //NIBE_SPA_Status 
            ]

Items

Number NIBE_FLM_Fan_Speed "fan speed[MAP(nibeFan.map):%s]" &lt;fan&gt;    (Nibe, PersistChange)   {   channel="nibeuplink:f1150:16-CU:custom#CH01", expire="1m"   }
Number:Temperature NIBE_FLM_Collector_In "collector in &lt;AZ1-BT26&gt; [%.1f °C]" &lt;temperature&gt;   (Nibe, PersistChange)   {   channel="nibeuplink:f1155:16-CU:custom#CH02"[profile="transform:JS", function="divide10.js"], expire = "1m" } // 40028 defined in nibe.things   

Number:Temperature NIBE_FLM_Collector_Out "collector out &lt;AZ1-BT27&gt; [%.1f °C]" &lt;temperature&gt;   (Nibe, PersistChange)   {   channel="nibeuplink:f1155:16-CU:custom#CH03"[profile="transform:JS", function="divide10.js"], expire = "1m" } // 40029 defined in nibe.things

divide10.js

(function(i) {
    return i*0.1;
})(input)

Hi,

I found a small bug when adjusting the degree minutes to a negative number.
The allowed value should range from -30000 to 30000 for base#43005 and the allowed write value is ‘any integer’, but the validation seems to mis the minus sign (-)

2019-01-28 20:07:59.460 [INFO ] [llback.AbstractUplinkCommandCallback] - channel 'base#43005' does not allow value '-150' - validation rule '[0-9]+'
2019-01-28 20:07:59.462 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception: 
org.openhab.binding.nibeuplink.internal.model.ValidationException: channel (base#43005) could not be updated due to a validation error
	at org.openhab.binding.nibeuplink.internal.command.UpdateSetting.prepareRequest(UpdateSetting.java:93) ~[?:?]
	at org.openhab.binding.nibeuplink.internal.callback.AbstractUplinkCommandCallback.performAction(AbstractUplinkCommandCallback.java:130) ~[?:?]
	at org.openhab.binding.nibeuplink.internal.connector.UplinkWebInterface$WebRequestExecutor.run(UplinkWebInterface.java:159) ~[?:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:?]
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) ~[?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) ~[?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]
	at java.lang.Thread.run(Thread.java:748) [?:?]

I think in the org.openhab.binding.nibeuplink.internal.model.BaseChannels class on line 92 (on current Master branch) should be:

 public static final Channel CH_43005 = INSTANCE.addChannel(new ScaledChannel("43005", "Degree Minutes (16 bit)",
            ChannelGroup.BASE, ScaleFactor.DIV_10, "/Manage/4.9.3", "-?[0-9]+"));

Can you change this to allow negative degree minutes to be set?

Hi @AlexF ,
is it a known issue that after updating a thing of the NibeUplink binding the connection does not build up properly again?

When I e.g. change my password of the Nibe Uplink account and change this setting in the thing via PaperUI, the status changes from “Online” to “UNKNOWN - waiting for web api login” and remains there until a restart of the openhab system/service.

I also encountered this problem when changing the custom channels as well.

Going a bit deeper I found the following in the log, wondering about the third log entry (update of the item outdoor temperature):

2019-01-30 22:14:43.544 [me.event.ThingUpdatedEvent] - Thing 'nibeuplink:f730:0c39773a' has been updated.
2019-01-30 22:14:43.547 [hingStatusInfoChangedEvent] - 'nibeuplink:f730:0c39773a' changed from ONLINE: logged in to UNKNOWN: waiting for web api login
2019-01-30 22:21:14.767 [vent.ItemStateChangedEvent] - NibeF730_Base_BT1OutdoorTemperature changed from 1.4000000000000001 °C to 0.9 °C

So there is some connection availabe as the Nibe Uplink web site shows this correctly changed temperature value of 0.9°C:
image

But the PaperUI stays on the old value:
image

The HABPanel also shows the correct value:
image

Thanks for your assistance.

Regards
Jonathan

Hi @AlexF,

just to give you an update on my last post:
It seems to have healed itself after a while. I had a look into the settings today morning and the status is now “online”.

Now I recognized another thing which I find “interesting”:
I cleared the custom channels from the thing settings:

But they still show up in the PaperUI Control Section:
image

Has this something to do with caching of openHAB or even PaperUI?

Thanks!

Regards
Jonathan

The PaperUI shows “Items”. To remove those you also need to delete the items. If persistence is activated those items still show old values even if openhab is restarted because last value from persistence is used.

Hi @AlexF,

sorry, that was my fault - I thought I have already deleted these items…
Next time I have to double check that. :face_with_hand_over_mouth:

Regards
Jonathan

is now merged into openhab master. Next milestone version should then contain all changes which are currently available in my DEV version.

1 Like

Hi @AlexF,

I just found out, that channel general#47011 is also available for the F730 models:

My heating offset is set to 1 at the display unit of my heat pump - this value is not visible in the online monitoring (maybe in the paid part…).
image

Edit: channel airsupply#47260 is also available on F730 with the same values given for F750.

Regards
Jonathan

Hello all,
I receive a communication error since a day.
When I update the binding in paperui or restart in console The log says

2019-05-04 09:51:48.535 [hingStatusInfoChangedEvent] - ‘nibeuplink:vvm320:mynibe’ changed from OFFLINE (COMMUNICATION_ERROR): Total timeout 120000 ms elapsed to OFFLINE (COMMUNICATION_ERROR): Max requests queued per destination 1024 exceeded for HttpDestination[https://www.nibeuplink.com]@1a98073,queue=1024,pool=DuplexConnectionPool@bb2a7e[c=2/2,a=2,i=0]

this is the log after i restart the binding from the console:

2019-05-04 12:05:32.461 [hingStatusInfoChangedEvent] - ‘nibeuplink:vvm320:mynibe’ changed from UNKNOWN: waiting for web api login to UNINITIALIZED
2019-05-04 12:05:32.486 [hingStatusInfoChangedEvent] - ‘nibeuplink:vvm320:mynibe’ changed from UNINITIALIZED to UNINITIALIZED (HANDLER_MISSING_ERROR)
2019-05-04 12:05:35.793 [me.event.ThingUpdatedEvent] - Thing ‘nibeuplink:vvm320:mynibe’ has been updated.
2019-05-04 12:05:35.827 [hingStatusInfoChangedEvent] - ‘nibeuplink:vvm320:mynibe’ changed from UNINITIALIZED (HANDLER_MISSING_ERROR) to INITIALIZING
2019-05-04 12:05:35.845 [hingStatusInfoChangedEvent] - ‘nibeuplink:vvm320:mynibe’ changed from INITIALIZING to UNKNOWN: waiting for web api login

I can log in to the NIBE uplink webpage and see, that my NIBE systems sends regularly data.
An idea how to resolve this, or where to start looking for the cause? Thanks

SOLVED: A reboot of the rasPi openhab is running on resolved the issue. A restart of the openhab service did unfortunately not solve the problem. (Annoying that services and rules stop suddenly working on an openHAB system and require restarts)