Plugwise Home Automation binding for OpenHAB

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

@QNimbus: Do you know if your plugin also works with the Plugwise stretch? That would be genius!
I looked into it, and looks like both are working with an xml http API, so i am gonna give it a try. I have about 10 circles including one for my sun-panels. I’ll keep you posted.

Hmm… here i am already… Looks not good… installed the Jar and also the xstream jar.
Saw the plugwise Binding, added and configured the thing. unfortunately error:

Status: OFFLINE - CONFIGURATION_ERROR Unknown HTTP status code 500 returned by the controller

The login works as it should, with a bogus login i get a login failure. So thats good. :slight_smile: But it seems the API is different anyway. pity…
I had it working in my own php-written domotica solution, but i am abandoning this in favor of openHAB. I hope i can manage to get this working…

I happen to know since I created the binding - but unfortunately the Stretch is not (yet) supported. I do not own this device and as such I’m unable to inspect the API it uses and incorporate it into the binding.

The Stretch and circles are also slightly ouside of the scope of the PlugwiseHA binding since it aims to manage boiler and thermostat related devices and if I understand correctly the Stretch is a different product aiming to provide insight in power usage. Having said that, if someone would lend or buy me a Stretch I would be willing to write a working binding for it.

Isn’t the ‘Stretch’ supported by the Plugwise binding in OpenHAB (not my binding, but the one that manages the ZWave network by Plugwise?

I’m assuming you are referring to the binding not working with the ‘Stretch’?

Note: If you use OpenHAB-2.5.0M3 or newer the XStream library is once again included in the build and you should not have to install the XStream library separately.

The OpenHab Plugwise binding is working directly with the ‘stick’. Actually there is a stick inside the Stretch (I opened the stretch a long time ago), but i’m not sure that stick will work; and the disadvantage of this is that i cannot manage the circle’s normally anymore. I prefer talking to the stretch. :slight_smile:

Well, i have one stretch 2 with 10 circles, and i can say i am experienced talking to the API with autoIT and php (curl). I can read the current states, used/produced power and toggle the circle’s on/off. (Just read that the stretch 3 should work to same way too.)
Maybe i can help you with the correct urls, xml data and testing?

Should this binding also work with the Anna thermostat and the Smile T? This box is currently available in the Netherlands for 99EUR. The Smile T has the network connection and sits between the boiler and the termostaat

I have installed the binding and the plugwise home automation gateway is online but I cannot see the Anna. Looks like the deviceid cannot be found?

I can confirm this works.

steps I did on Milestone 4:

  • Install the latest version of this binding.
  • Configure the Plugwise Home Automation Gateway (Same config as Adam)
  • Add thing manually “Plugwise room thermostate”
  • Enable trace log on this binding via Karaf
  • look for section Anna and copy appliance ID to the new added thing.

use the items and things described in the readme file mentioned in the start of this topic.

@ QNimbus Thanks for the great work!