Plugwise Home Automation binding for OpenHAB

Tags: #<Tag:0x00007f5ca1166bd8> #<Tag:0x00007f5ca11669f8> #<Tag:0x00007f5ca1166890>

Hello fellow OpenHAB enthusiasts!

I have a Plugwise Home Automation system at my home for which I recently developed an OpenHAB binding. My goal is to further improve this binding with some additional features and to improve how the binding communicates with the Plugwise API.

At this moment my binding is fully working (I use it on my own home OpenHAB instance) and enables me to monitor and control all my thermostats, radiator valves and my floor heating pump.

I have already submitted the binding to the Eclipse Marketplace and I hope to create a PR for the OpenHAB repository as well as soon as I have made sure I’ve ticked all the necessary boxes for a proper PR.

You can find my forked repo along with the org.openhab.binding.plugwiseha-2.5.2-SNAPSHOT.jar file on github. This is the link to the README.md file.

I’m not sure how many of you use this system at home - I know of at least one other person who is a personal friend of mine - but I’m hoping that by posting this some of you will test drive the binding and give me some valuable feedback.

Have fun!

Future improvements:

  • Enable device ‘identify’ and ‘calibration’ through the binding
  • Add Anna & Lisa devices to the binding
  • Synchronize the zone setpoint with an optional Anna thermostat in the zone
  • Only fetch changes from the Plugwise API instead of querying the entire state of all appliances/locations each refresh cycle.

Edit: A picture is worth a thousand blog posts…

Sitemap:

3 Likes

Nice! Still considering the heating system, so i don’t have it yet. I like the local API, but because a lack of users/reviews i’m still unsure if it is (heating efficiency wise) on par with Honeywell EvoHome.

1 Like

I made the choice for Plugwise about a year ago just because of their (local) API. It was a close tie with Honeywell but so far I’m happy with how the Plugwise system performs.

And to be honest, I’m not a big fan of the Plugwise company; I used to have their Circles and a Zwave stick and their support is really awful. It seems they are more interested in B2B than B2C. Their software is also severely lacking and they are not willing to tap into the huge community of home automation enthusiasts by making their software or at least their API more accessible.

Having said all that, the Plugwise Home Automation hardware is doing it’s job for me. If you have any specific questions about their hardware feel free to ask! Maybe it will help you make an informed decision on whether or you want to take the plunge.

Edit: I have several Tom’s, Lisa’s, an Anna, an Adam and a Circle plug for the floor heating pump…

They don’t seem to stick with their product lines but keep reinventing new ones everytime. I think they now have 3 systems that support Circles for power measurement (Stick, Stretch, Adam based)? Their lack of product line commitment and lack of adding features to existing products drove me towards openHAB. :slight_smile:

1 Like

@wborn Unfortunately I agree with you on this…

Now I’m fully invested in Zwave (mostly Fibaro) and haven’t looked back!

Still struggling to make a decision for the right zone heating system. Plugwise has a big plus due to the local API, but it lacks the solid name. Honeywell is in my situation around 300 euro cheaper (10 radiators, 6 rooms. 950 vs 1250 euro), but… cloud.

If I read the documentation, Plugwise needs a separate opentherm thermostat, because the Adam only ‘injects’ an override setpoint. In theory, this is not the best approach. The thermostat asks the boiler for a certain water temp. So if that thermostat is ‘fooled’ with an override setpoint to heat another room it could ask for a suboptimal water temp. Because the thermostat can’t learn the heating characteristic (it doesn’t know which room to heat) it performs suboptimal. As said, that is theoretical. The algoritm Adam uses might be good enough to cover it up. Honeywell might be making better use of the opentherm protocol, but I can’t find much documentation on that, so I’m still getting a headache for making a choice here :blush:

Stopped reading the Tado site when i stumbled across the monthly subscription.

They way I understood how it works is that the Adam is it’s own thermostat and communicates via Opentherm to the boiler (taking into account outside ambient temperatures o.a.). The water temperature demand is dependant on several variables among those are deltaT and outside temperature.

I use an Anna in our living room that communicates via the Adam to the boiler.

I don’t have much use for the learning or smart part of devices like this because our household ‘times’ are very irregular (both me and my wife work very irregular; sometimes we’re both home, sometimes neither of us is home; we work night and day shifts… So there is not much of a pattern in our daily routine to have a thermostat learn from…

Edit: @Cajus care to chime in with your advice/experience with Plugwise?

Yes, I’m ready, back from a long holiday :smile:

This is correct in my understanding. To illustrate this behavior, this is the boiler temperature graph from last March:

I was in the same boat as @lsiepel, trying to decide between Honeywell, Plugwise, Tado and even Fibaro (and Danfoss). The last two were no option; Tado because of a subscription model (really, why?!) and Fibaro has only thermostats but no boiler gateways.

For me this were the main points why I chose Plugwise over Honeywell:

  • Local API instead of a cloud based API due to privacy concerns and vendor lock-in problems;
  • The mesh network capabilities of the Zigbee protocol instead of a point-to-point connection;
  • Wired (USB) or battery powered devices instead of battery only;
  • Point from a professional installer I contacted, so take it with a grain of salt: the staggering arrogance of Honeywell support;
  • For me Plugwise was €400,- cheaper for 7 zones: 1x Adam, 7x Tom, 2x Floor, 5x Lisa, 1x Circle+ and 1x Anna. Btw, I’m still not convinced of the function of Anna in this setup. It could easily replaced by a cheaper Lisa, but ok.

The only point for me to choose Honeywell over Plugwise would be the established name.

My experience after almost a year of usage is certainly positive. It kept our old house warm during a cold winter with less gas usage. The system was overall stable during this period. The Plugwise Home app is another story. Since a short period it’s relatively stable but it was terrible before. I’m happy with the almost finished OpenHAB binding to replace the app and to completely integrate it with the rest of the house.

@QNimbus: I’m integrating the latest build of the binding as we speak in my production environment to test further :slight_smile:

1 Like

You might be right. The documentation is somewhat unclear on this:

Adam retrieves the measured temperature from your room thermostat and sends the desired temperature to the thermostat using the so called “override” functionality of the OpenTherm protocol. It is up to the thermostat to “do something” with this temperature setting. Based on the measured temperature and set temperature the regulation determines whether the boiler should start heating up the house.
Thermostats that use OpenTherm do not always do this in the same way. It is possible that your thermostat does not support above mentioned functionalities or that you first have to switch it on. Some commonly used thermostats that have been extensively tested and at that are supported are: » Plugwise Anna (24V) » Honeywell Round Modulation » Honeywell Chronotherm Touch » Remeha iSense (after contact with support)
You can also install zone thermostat Lisa instead of your existing central room thermostat.

After rereading, i think you are right. The override is only used if you use the existing thermostat. An existing thermostat is not mandatory (a Lisa is good enough).

Together with this binding, i think i’m about to make my decision in favour of Plugwise. Still it’s more expensive. 1x adam, 6x Lisa , 10x Tom. 1315 euro. (I will use a single Tom for the floor heating as that is a single zone)

Not to add to your expenses - but I use the single Tom for my floor heating as well… and an additional Plugwise Circle to switch the pump on and off. This is also supported by the binding I created.

A ‘traditional’ pump switch that switches on when it senses heat flowing through the pipes will also work, but I wanted to ensure that the pump runs at least once a week (for a short while) to increase it’s lifespan. This can be achieved through OpenHAB via the usual rules or whatever you use to automate your system.

This is also something I realized when I started using the Plugwise system. It’s also something that I intend to workaround using the binding. As it stands right now when you operate the ‘Anna’ it updates it’s setpoint to the associated zone on the Adam gateway - but not the other way around. So if you changed the setpoint of the zone where the Anna is located, it’s not reflected on the Anna itself.

Is there any benefit using the Anna instead of a Lisa in the main living room?

Last thing to fix before i will order the Plugwise setup. I’d like to control the floor heating with one Tom (7 Floor’s are to expensive and it remains a single zone), but the main pipe is 22mm and i can’t find a 22mm valve, did you find one or are you using 15mm pipes?

In retrospect, not that I’m aware of… other that a nice placeholder for where there would otherwise be a gaping hole in the wall (where the ‘old’ thermostat was)

I had a plumber install a thermostatic valve next to my floor heating ‘distributor’… So I still have the ‘conventional’ knobs on the distributor that control each loop - but since I also really have one zone like you, I thought it would be easier to just install a new thermostatic valve on the assembly next to it. I’ll see if I can post a picture for you…

The top most white knob you see is the Plugwise Tom. You can also see the circle controlling the pump.

Bought it! Will install it on wednesday and will try the binding as soon as possible. Found a suitable valve so i will use the same setup as you, except that i don’t need a pump switch. The pump i have is a smart DC-pump with build in heat detection.

Any specific part that needs testing?

This is what I had as well, but if there is no heat demand for a longer period of time (i.e. summer) than the pump will not run for extended periods of time. Which is why I wanted to automate that as well.

Good luck with the installation and please keep us posted!

Bought it and installed it. (Y) Except for the floor heating valve. I was wondering if i need it. As the plugwise app has a floor heating pump group. Isn’t this pump group a cheaper way to seperate the floor heating from the other zones?

About all my questions about the binding are answered in the documenation. Very nice.

The channel: batteryLevelLow is that something Plugwise provides(cant find it in the web interface) or functionality you added within the binding?

This is indeed something that I added in the binding; it can be configured on the appliance Thing (default setting is 15% battery level)

I’m on the verge of releasing an update for the binding which handles the Plugwise API better by only querying for changed values much in the same way as the Plugwise web app does. This makes it possible to have a faster refresh rate for the binding (new default is every 5 seconds, but you could in theory make it so it updates every second). A few other improvements are added as well, but I will try to document that in the changelog when I release the binding.

Just uploaded the latest .jar file for this binding - it’s available from https://github.com/updev-it/openhab2-addons/releases/tag/v0.2.0.

@QNimbus
I have a question, it’s not really about the plugwise stuff but I really like your sitemap.
The up/down arrows at the thermostaat and the green checks in front of the Pomp and Pomp vergrendeling.
Can you maybe share that code (can be a private message or just here in the thread)
I’m still very new too openhab and still learning how to make everything.

@robbie_demaegdt Thanks for the compliment! I have no problem sharing (part of) my sitemap with you - but I have to admit that aside from the icons which I customized the rest is ‘just’ the OpenHAB app for Android. I believe some widgets are rendered differently on the IOS app (for example the setpoint dropdown selection if I’m not mistaken)

I use the AMOLED black theme on the Android version of OpenHAB. The icons were created by me (.svg vector format) using the free Inkscape tool and by looking online for icons that I could use. (ShareIcon.net) The part of the sitemap which interests you is this :

sitemap plugwiseha label="Plugwise" {
Frame label="Batterijen" visibility=[GF_Hallway_Plugwise_ApplianceValve_BatteryLow==ON,GF_Hallway_Plugwise_ApplianceValve_BatteryLow==ON,GF_Kitchen_Plugwise_ApplianceValve_BatteryLow==ON,GF_LivingRoom_Plugwise_ApplianceValve_BatteryLow==ON,FF_Bedroom_Plugwise_ApplianceValve_L_BatteryLow==ON,FF_Bedroom_Plugwise_ApplianceValve_R_BatteryLow==ON,FF_Office_Plugwise_ApplianceValve_Battery==ON,FF_Bathroom_Plugwise_ApplianceValve_Battery==ON,SF_BedroomEva_Plugwise_ApplianceValve_BatteryLow==ON,SF_BedroomSophie_Plugwise_ApplianceValve_BatteryLow==ON,SF_Bathroom_Plugwise_ApplianceValve_BatteryLow==ON] {
	Text item=GF_StorageCubboard_Plugwise_ApplianceValve_Battery label="Vloerverwarming" visibility=[GF_StorageCubboard_Plugwise_ApplianceValve_BatteryLow==ON] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]
	Text item=GF_Hallway_Plugwise_ApplianceValve_Battery label="Hal" visibility=[GF_Hallway_Plugwise_ApplianceValve_BatteryLow==ON] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]
	Text item=GF_Kitchen_Plugwise_ApplianceValve_Battery label="Keuken" visibility=[GF_Kitchen_Plugwise_ApplianceValve_BatteryLow==ON] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]
	Text item=GF_LivingRoom_Plugwise_ApplianceValve_Battery label="Woonkamer" visibility=[GF_LivingRoom_Plugwise_ApplianceValve_BatteryLow==ON] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]
	Text item=FF_Bedroom_Plugwise_ApplianceValve_L_Battery label="Slaapkamer links" visibility=[FF_Bedroom_Plugwise_ApplianceValve_L_BatteryLow==ON] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]
	Text item=FF_Bedroom_Plugwise_ApplianceValve_R_Battery label="Slaapkamer rechts" visibility=[FF_Bedroom_Plugwise_ApplianceValve_R_BatteryLow==ON] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]
	Text item=FF_Office_Plugwise_ApplianceValve_Battery label="Werkkamer" visibility=[FF_Office_Plugwise_ApplianceValve_Battery==ON] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]
	Text item=FF_Bathroom_Plugwise_ApplianceValve_Battery label="Badkamer" visibility=[FF_Bathroom_Plugwise_ApplianceValve_Battery==ON] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]		
	Text item=SF_Bathroom_Plugwise_ApplianceValve_Battery label="Badkamer zolder" visibility=[SF_Bathroom_Plugwise_ApplianceValve_BatteryLow==ON] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]
}
Frame label="Woonkamer" {
	Text item=GF_LivingRoom_Plugwise_Zone_Temperature label="Temperatuur" valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"] {
		Frame label="Kamer thermostaat" {
			Text item=GF_LivingRoom_Plugwise_ApplianceThermostat_Temperature valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"]
		}
		Frame label="Vloerverwarming" {
			Text item=GF_StorageCubboard_Plugwise_ApplianceValve_Temperature valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"]
			Text item=GF_StorageCubboard_Plugwise_ApplianceValve_Battery label="Batterij spanning" visibility=[GF_StorageCubboard_Plugwise_ApplianceValve_Battery!=NULL] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]
		}
		Frame label="Hal" {
			Text item=GF_Hallway_Plugwise_ApplianceValve_Temperature valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"]
			Text item=GF_Hallway_Plugwise_ApplianceValve_Battery label="Batterij spanning" visibility=[GF_Hallway_Plugwise_ApplianceValve_Battery!=NULL] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]
		}
		Frame label="Keuken" {
			Text item=GF_Kitchen_Plugwise_ApplianceValve_Temperature valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"]
			Text item=GF_Kitchen_Plugwise_ApplianceValve_Battery label="Batterij spanning" visibility=[GF_Kitchen_Plugwise_ApplianceValve_Battery!=NULL] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]
		}
		Frame label="Zithoek" {
			Text item=GF_LivingRoom_Plugwise_ApplianceValve_Temperature valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"]
			Text item=GF_LivingRoom_Plugwise_ApplianceValve_Battery label="Batterij spanning" visibility=[GF_LivingRoom_Plugwise_ApplianceValve_Battery!=NULL] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]
		}
	}
	Setpoint item=GF_LivingRoom_Plugwise_Zone_TemperatureSetpoint label="Thermostaat [%.1f °C]" minValue=5.0 maxValue=30 step=0.5 valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"]
	Switch item=GF_LivingRoom_Plugwise_Zone_FloorHeatingPump label="Pomp"
	Switch item=GF_LivingRoom_Plugwise_Zone_FloorHeatingPumpLock label="Pomp vergrendeling []"
	Text item=GF_LivingRoom_Plugwise_Zone_FloorHeatingPumpPowerUsage label="Pomp verbruik [%.1f W]" valuecolor=[<1="#808080", <15="green", <50="yellow", <75="orange", <100="red"]
}

Frame label="Slaapkamer" {
	Text item=FF_Bedroom_Plugwise_Zone_Temperature label="Temperatuur" valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"] {
		Frame label="Kamer thermostaat" {
			Text item=FF_Bedroom_Plugwise_ApplianceThermostat_Temperature valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"]
		}
		Frame label="Thermostaatkraan links" {
			Text item=FF_Bedroom_Plugwise_ApplianceValve_L_Temperature valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"]
			Text item=FF_Bedroom_Plugwise_ApplianceValve_L_Battery label="Batterij spanning" visibility=[FF_Bedroom_Plugwise_ApplianceValve_L_Battery!=NULL] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]
		}
		Frame label="Thermostaatkraan rechts" {
			Text item=FF_Bedroom_Plugwise_ApplianceValve_R_Temperature valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"]
			Text item=FF_Bedroom_Plugwise_ApplianceValve_R_Battery label="Batterij spanning" visibility=[FF_Bedroom_Plugwise_ApplianceValve_R_Battery!=NULL] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]
		}
	}
	Setpoint item=FF_Bedroom_Plugwise_Zone_TemperatureSetpoint label="Thermostaat [%.1f °C]" minValue=5.0 maxValue=30 step=0.5 valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"]
}	

Frame label="Werkkamer" {
	Text item=FF_Office_Plugwise_Zone_Temperature label="Temperatuur" valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"] {
		Text item=FF_Office_Plugwise_ApplianceThermostat_Temperature valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"]
		Text item=FF_Office_Plugwise_ApplianceValve_Temperature valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"]
		Text item=FF_Office_Plugwise_ApplianceValve_Battery label="Batterij spanning" visibility=[FF_Office_Plugwise_ApplianceValve_Battery!=NULL] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]
	}
	Setpoint item=FF_Office_Plugwise_Zone_TemperatureSetpoint label="Thermostaat [%.1f °C]" minValue=5.0 maxValue=30 step=0.5 valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"]
}

Frame label="Badkamer" {
	Text item=FF_Bathroom_Plugwise_Zone_Temperature label="Temperatuur" valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"] {
		Text item=FF_Bathroom_Plugwise_ApplianceValve_Temperature valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"]
		Text item=FF_Bathroom_Plugwise_ApplianceValve_Battery label="Batterij spanning" visibility=[FF_Bathroom_Plugwise_ApplianceValve_Battery!=NULL] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]
	}
	Setpoint item=FF_Bathroom_Plugwise_Zone_TemperatureSetpoint label="Thermostaat [%.1f °C]" minValue=5.0 maxValue=30 step=0.5 valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"]
}

Frame label="Badkamer zolder" {
	Text item=SF_Bathroom_Plugwise_Zone_Temperature label="Temperatuur" valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"] {
		Text item=SF_Bathroom_Plugwise_ApplianceValve_Temperature valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"]
		Text item=SF_Bathroom_Plugwise_ApplianceValve_Battery label="Batterij spanning" visibility=[SF_Bathroom_Plugwise_ApplianceValve_Battery!=NULL] valuecolor=[<10="red", <20="orange", <30="yellow", <=100="green"]
	}
	Setpoint item=SF_Bathroom_Plugwise_Zone_TemperatureSetpoint label="Thermostaat [%.1f °C]" minValue=5.0 maxValue=30 step=0.5 valuecolor=[<18="blue", <=24="green", <30="orange", <=50="red"]
}

The icons I use for (toggle) switches are :

mmswitch2-on
mmswitch2-off

If you’re interested in all the icons I use across all my sitemaps, I could archive them and upload them for you - just let me know.

Hope this helps!

1 Like