Problems/experiences with Eurotronic Spirit radiator valves

The thresholds are:
High temp turn off: +0,2°C
Return to self-regulated mode: -0,5°C
Set to 28°C: -1°C

All relative to the target temperature. But I do not see how they should interferer each other. The actual temperature was way below the lowest threshold. Settings in OpenHAB were properly set to 28°C.

In terms of overheating: I observed the behaviour about one day (or a little less, at some point I turned of the Spirits because of high room temperature). The radiators were warm on a mostly constant base, although room temperature was (way) above the set target temp.

Since then I implemented the self-made controller which fixed the problem, so there are no real long-term observations. So yes, I don’t see a way to use the Spirits without additional controlling. At least with my heating system.

Workaround to persuade the spirits to open the valves: Set the external temp to 0°C. Worked for the last hours.

Greets

Could you share somehow with your solution. I’m fighting with those regulators and I think I need similar approach it shutting those down completely. Maybe there is no need to invent the wheel again.

The dimmer stats are green in my case. It seems it’s very slowly dropping down but in the same time temperature in the room is still rising (both Xiaomi Aquara and internal one). Setting the dimmer off doesn’t seem to cause dropping the prediction. What I see also is that the dimmer is turned down like 1% every 3-6 min.

Apart from that look at the difference in the readings. I doubt that those regulators can actually work properly without external temperature.

Sure.

The system contains multiple rulesets. First one is for controlling the target temperature. This is manly done via Outlook and the CalDAV binding in combination with motion sensors to adjust the temperature if someone is present. The so given target temp is stored in the item “SolltemperaturXX” (XX for the respective room).

The second ruleset is for actual temperature regulation. At first there is calculated es mixed temperature from all sensor (two Spirits an external Sensor). I’m not using the average, as the temperature from the external sensor is more weighted than the information from the Spirits. The result is stored in the item “MixedTempXX”

rule "Externe Temperatur für Thermostate erzeugen"
when
	Member of Temperatur changed
then
	var Temp_SensorMixXX = MultisensorDachgeschoss_Temperatur.state as Number
	Temp_SensorMixXX = Temp_SensorMixXX * 2
	Temp_SensorMixXX = Temp_SensorMixXX + TH_XX1_TempIST.state as Number
	Temp_SensorMixXX = Temp_SensorMixXX + TH_XX2_TempIST.state as Number
	Temp_SensorMixXX = Temp_SensorMixXX / 4

	MixedTempXX.sendCommand(Temp_SensorMixXX) as Number
end

And at last the actual temperature regulation. At first the thresholds are defined depending on the item “Heizungssteuerung”. It from the first ruleset and codes scenario information. “3” stands for “resident is absent, but will come soon, so start heating up”. “4” is “resident at home”. Plus, distinction between someone being present in the room or not. The two variables Comparator1 and 2 are upper and limit, where the heating is switched off, and lower limit where the heating is forced to 100% vent opening.

rule "Heizungsregelung XX"
when
	Item SolltemperaturXX changed or
	Item MixedTempXX changed or
	Item Heizungssteuerung changed or
	Member of MotionPresence changed or
	Time cron "0 */5 * * * ?"
then
	var PositiveThreshold = 0.2			// Grenze zum abschalten bei Überschreitung Soll-Wert
	var NegativeThreshold = 12.0		// Grenze zum anschalten bei Unterschreitung Soll-Wert

	// Anpassung der Variablen je nach Heizungszustand
	if(Heizungssteuerung.state == 3) {
		PositiveThreshold = 0.2
		NegativeThreshold = 1.0
	}
	if(Heizungssteuerung.state == 4 && AnwesenheitXX.state == OFF) {
		PositiveThreshold = 0.2
		NegativeThreshold = 0.6
	}
	if(Heizungssteuerung.state == 4 && AnwesenheitXX.state == ON) {
		PositiveThreshold = 0.2
		NegativeThreshold = 0.4
	}
	
	//Dachgeschoss
	var Comparator1 = SolltemperaturXX.state as Number		//Oberer Grenzwert
	Comparator1 = Comparator1 + PositiveThreshold
	
	var Comparator2 = SolltemperaturXX.state as Number		//Unterer Grenzwert
	Comparator2 = Comparator2 - NegativeThreshold
	
	ObererGrenzwertXX.sendCommand(Comparator1) as Number
	UntererGrenzwertXX.sendCommand(Comparator2) as Number

First of the three if-blocks is for the case when the MixedTemp is in between the two comparators. The item “HeizungsmodusXX” is linked of the heating-state-channel off the spirits. “KomforttemperaturXX” is the channel “Setpoint Heat”. So in this mode the actual target temp is given to the spirits and their internal regulation can do it’s job. External Temperature is sending every five minutes (with “TempUpdateXX” the expire-binding is used) or a temp update is forced when coming from another state.

Second if-block is for turning off. External temp is set to 50°C a target temp to 10°C. Additionally there is some kind of “shutdown sequence”, where the spirits are set to “Energy heat state” first, before turning them off. Without this, I had the problem that the valve channel showed 0% opening but was still open for 100%, which was pretty annoying.

Last Block is for forcing 100% valve opening. External temperature is set to 0°C and target temp to 28°C.

	//Heizkörper XX bei Messwert über Hysteresegrenze ausschalten
	if(MixedTempXX.state >= Comparator1) {
		ForceTempXX.sendCommand(ON)
		
		// Externe Temperatur auf 50°C setzen
		if(TH_XX1_ExTemp.state != 50 || TH_XX2_ExTemp.state != 50 || TempUpdateXX.state == ON) {
			ExTempXX.sendCommand(50)
			TempUpdateXX.sendCommand(OFF)
		}
		// Solltemperatur auf 10°C schalten
		if(TH_XX1_Heat_Hi.state != 10 || TH_XX2_Heat_Hi.state != 10) {
			Thread::sleep(5000)
			KomforttemperaturXX.sendCommand(10)
			Thread::sleep(10000)
		}
		// Heizung Ausschalten
		if(TH_XX1_Mode.state != 0 || TH_XX2_Mode.state != 0) {
			HeizungsmodusXX.sendCommand(11)
			Thread::sleep(10000)
			HeizungsmodusXX.sendCommand(0)
		}
	}
	
	//Heizkörper XX bei Messwert unter Hysteresegrenze Einschalten und auf 28°C setzen (Vollast)
	if(MixedTempXX.state < Comparator2) {
		ForceTempXX.sendCommand(ON)
		
		//Heizung Einschalten
		if(TH_XX1_Mode.state != 1 || TH_XX2_Mode.state != 1) {
			HeizungsmodusXX.sendCommand(1)
		}
		// Solltemperatur auf 28°C schalten
		if(TH_XX1_Heat_Hi.state != 28 || TH_XX2_Heat_Hi.state != 28) {
			KomforttemperaturXX.sendCommand(28)
		}
		//Externe Temperatur auf 0°C setzen
		if(TH_XX1_ExTemp.state != 0 || TH_XX2_ExTemp.state != 0 || TempUpdateXX.state == ON) {
			ExTempXX.sendCommand(0)
			TempUpdateXX.sendCommand(OFF)
		}
	}
end

Hope I could help!

Greets

Alex

You might want to check out the following post:

Thanks - that seems like a breakthrough with all the problems we have.

Hi,

there is a special thread for the problem I have with the devices. But probably people watching this one have some input and the subject is quite generic so it still fits.
What are your experiences about temperature reporting from the device. It just does not work for me when it should be initiated by the device. Only when a command is sent it also reports back new values.
Any feedback?

Unrelated to that it seems the device database is not fully correct: (@chris)
https://www.cd-jackson.com/index.php/zwave/zwave-device-database/zwave-device-list/devicesummary/710
as it says “Supports security: No” while in the manual (only found a german one https://eurotronic.org/wp-content/uploads/2018/12/Spirit_Z-Wave_BAL_web_DE_view_V5.pdf)
it mentions to support security and even “for full feature set it requires security”.

The best way to see if the device supports the security class is to look at the list of command classes - if security is listed, then it supports security. The tickbox that you refer to is a different issue at the protocol level.

Thanks for your investigation! Although the solution I posted above is working well here for the last (cold) months, being able to control the valve state directly would be much more elegant.

@Wolfgang_Rosenauer: Have you set “5: Measured Temperature report” to 1? For me this worked.

ah, sorry for the noise

1 Like

@AlexW I had it on 1 for some time, currently on 2 but without any success. Will set to 1 again for now.
So others can really confirm that temperature reports work for you guys? I have no idea why two devices behave the same way and just do not work. I’m on openHAB SNAPSHOT but as outlined in the other thread I do not believe that openHAB has its part in that?

I found some references in the web where the setting 1 helped. I’m still not sure but will watch it.

A question (and please tell me if I should post in another category in a new topic):
In case I do not get it to work it seems that I always get temperature reports when I send a control command to the device.
Is there a way in openHAB to pull actively the device or do I need to send “fake” commands (like switching heating mode back and forth) every 10 minutes?

Dear all,

I use the Spirit and I also observe the strange behaiour that setting the thermostat to “OFF” sets the valve to zero for some seconds, and then the valve drives to some position between 6% and 11%.

Was anyone able to clarify this?

Is it possible that the valve cannot go to zero because of the calibration to the heatings’s valve closed position? It might be possible that zero is the set value for the valve which cannot be mechanically reached, and so at 6%-11% (in my case) the valve could be mechanically closed. So, after some seconds the valve reports this valve setting back. Could that be?

But this might only be true if the vale NEVER remains at zero which I have to check over time.

Normally the valve should calibrate itself during the installation process while mounting it to the heater.

When in OFF-state my spirits are always showing 0% valve opening. If your heater stays cold despite of the valve being shown as open, you might try to redo the first-installation-process.

If the heater gets warm, try to set the external temperature to 50°C or some other high number.

@Wolfgang_Rosenauer:

Try a rule like this:

rule "HeatingTimer"
when
	Time cron "0 */10 * * * ?"
then
	YourItem.sendCommand(11)
	Thread::sleep(3000)
	YourItem.sendCommand(1)
end

11 == setting the Spirit to OFF

1 == “comfort temperature”

What firmware version you have? Mine is 0.15 and I have the same problem as Tobias.

Sorry, but I do not use the valve anymore: It suffers from some issues (see e.g. Amazon reviews) where it suddenly fully opens without any obvious reason and does not close again.

Very annoying in case you are not at home at this occasion…

What did you use instead?

innogy Smart Home thermostats. The binding was just updated…

Do the innogy thermostats behave as desired? Are you happy with them?

Yes. Works very well!

1 Like