Eq3 eqiva Bluetooth radiator

Hey there I’ve just startet with openhab, but I would chip in for it too.
If it helps in any way, there is a working module for FHEM: https://forum.fhem.de/index.php/topic,39308.15.html
Unfortunately it is in german. If you need a translation I could help

Hi @DSTM, @maxpower, @bademux, @someone86,

Ok, I’m going to order that device, could you please confirm or maybe find your device in an online shop so that I won’t order wrong one?

Hi @vkolotov,
sounds great. I bought this one:

Productnr: 141771E0

2 Likes

Mine is slightly different:
eqiva 142461A0 UK Bluetooth

Got the same one.

The same, 141771E0

Looks like we have our device nicely documented https://media.readthedocs.org/pdf/reverse-engineering-ble-devices/latest/reverse-engineering-ble-devices.pdf

1 Like

Very good, I’ll have some tie before NY to work on some bits and pieces to prepare for the implementation. I’ll keep your posted. BTW, I have not yet ordered the device, let me read through the documentation, maybe we get away without buying it.

What is needed to get it up and running? There’s obviously a few of us with the devices already and there are a few projects already for controlling the device so we might be able to help expedite the process :slight_smile:

Hey,
is there anything I can do to support the implementation? If Vlad needs the device I could order one.
I would love to combine this with OwnTracks :slight_smile:

I found a method to easy Controll Equiva Bluetooth valves
just install BlueZ with Gatttool and check out that rule

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//		Rule für Openhab2 um Equiva EQ-3 Bluetooth Thermostate anzusteuern			//
//	Getestet auf einem Raspberry3 mit BlueZ mit Gatttool (in BlueZ enthalten)		//
//			Basierend auf den Scripts von Sergio Alberti							//
//https://gitlab.com/sergioalberti/gsoc-blereverse/tree/master/eq3_eqiva_reveng		//
//Da Gatttool Essentiel für die Verbindung ist und nur für Linux erhältlich ist		//
//					 funktioniert die Rule nicht auf Windows!						//
// Rule by Patrick Schröder
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
val SendToEq3= [GenericItem myitem, String mac, Integer code |
	var results = executeCommandLine("gatttool -b "+ mac +" --char-write-req -a 0x0411 -n "+ code ,5000)
		if(results == "Characteristic value was written successfully"){
			logInfo("Thermostat",myitem.label +" wurde geupdated")
		}
		else
		{
			logWarn("Thermostat",item.label +" Update hat nicht funktioniert!")
		}
		return results
]


val Integer Boost_Start = 4501			//öffnet das Ventil für 5 min zum schnellen Aufheizen
val Integer Boost_Stop = 4500			//Beendet den Boost vor ablauf der Zeit
val Integer SelComfort = 43				//Aktivirt den Comfort Modus
val Integer SelReduced = 44				//Aktiviert den Reduced Modus z.B. bei abwesenheit
val Integer SetComRed = 11				//11 und die Tmperaturen in Hex      Identifer =11 
										//Comfort_Temp =44°C = 2C   Reduced_Temp 18°C = 24   ==112C24

val Integer Automode = 4000				//Kann über die Calor BT app konfiguriert werden (Heizmodi für Wochentage usw.) 
										//Theoretisch ist die konfig auch über OH möglich muss aber aufwendig programiert werden

val Integer Manmode = 4040				//Stellt das Thermostat auf Manuellen Betrieb
val Integer LockMode = 8001				//Sperrt das Thermostat um zugriff für Kinder usw. zu verhindern
val Integer UnlockMode = 8000			//entspert das Thermostat
val Integer ManTemp = 41				//41 und die Tmperatur * 2 in Hex also z.B. 22°*2=44 in Hex 2C        Stellt den Modus automatisch auf Manuel




rule "ThermostatWohnzimmerBoost"

when 
    Item thermostat_wz_boost changed
then

if (thermostat_wz_boost.state == ON){

	SendToEq3.apply(thermostat_wz_boost,"00:1A:22:12:D9:0E",Boost_Start)	//	Aufruf der Routine mit den Parametern (Benutztes Item, MAC Adresse des Thermostats, Die Variable für die gewünschte funktion)
}	
else
{
	SendToEq3.apply(thermostat_wz_boost,"00:1A:22:12:D9:0E",Boost_Stop)
}
end





rule "ManuelleTemperaturWohnzimmer"

when 
	Item thermostat_wz changed

then

var int temp = (thermostat_wz.state as DecimalType * 2).intValue()		
var hex value = ManTemp + Integer::toHexString(temp)
		SendToEq3.apply(thermostat_wz,"00:1A:22:12:D9:0E",value)
end
1 Like

this works only in one direction openhab->valve, not for manual changes on valve

I don’t think this was advertised as allowing for manual changes to be recognised in OH. I imagine, however, there is a way to use gatttool to poll the valve periodically to get the latest status - I don’t know what command needs to be sent though.

you have to send a command every time, if you want the state of the radiator. i use only openhab to control my radiators, in this case i have always the correct state.

Very unfortunate that there is still no solution for OpenHab, so I switched completely to HomeAssistant. Out of The Box runs great wit equiva (eq3) bluetooth.

Hi @vkolotov,

Have you made any progress on this so far?

I also managed to make it work but the Bluetooth range of the raspberry pi is not big enough for me. So sometimes it works but most of the time not.

That’s my log:

I followed this guide and came through all until the last point.
Until the last step I have come successfully (display of the Json and control via http), only the Basic UI remains empty or functionless. OH2 runs as host on an Intel NUC with OMV/Debian, so I’m still thinking about where the error could be (Something with the rights maybe?). According to the OH2 logs there is also an item state change, but nothing arrives at the thermostat, the json also remains unaffected, too.
Any ideas?
Thanks
Kelvin

OH Logs

[ome.event.ItemCommandEvent] – Item ‚thermostat_wz‘ received command 4.5
[ome.event.ItemCommandEvent] – Item ‚thermostat_wz‘ received command 4.5
[ome.event.ItemCommandEvent] – Item ‚thermostat_wz‘ received command 4.5
[ome.event.ItemCommandEvent] – Item ‚thermostat_wz‘ received command 4.5
[ome.event.ItemCommandEvent] – Item ‚thermostat_wz‘ received command 4.5
[ome.event.ItemCommandEvent] – Item ‚thermostat_wz_mode‘ received command OFF

thermostat.items

Number thermostat_wz “Thermostat Wohnzimmer [%.1f °C]” { http=“>[:GET:http://192.168.1.11/eq/php/eq3.php?mac=00:1A:22:12:24:B2&temperature=%2$s{Au>
Switch thermostat_wz_mode “Thermostat Auto [%s]” { http=">[
:GET:http://192.168.1.11/eq/php/eq3.php?mac=00:1A:22:12:24:B2&mode=%2$s{Authorization=Ba>
Switch thermostat_wz_boost “Thermostat Boost [%s]” { http=”>[*:GET:http://192.168.1.11/eq/php/eq3.php?mac=00:1A:22:12:24:B2&boost=%2$s{Authorization>
Number thermostat_wz_valve “Thermostat Ventil [%.1f]” { http=“<[thermostatWohnzimmer:600000:JSONPATH($.valve)]”}

default.sitemap

sitemap default label=“SmartHome”
{
Setpoint item=thermostat_wz label=“Thermostat [%.1f °C]” minValue=4.5 maxValue=30 step=0.5
Text item=thermostat_wz_valve
Switch item=thermostat_wz_mode
Switch item=thermostat_wz_boost
}

Added to http.cfg

thermostatWohnzimmer.url=http://192.168.1.11/eq/php/eq3.php?mac=00:1A:22:12:24:B2{Authorization=Basic SECRET}
thermostatWohnzimmer.updateInterval=120000

JSON/HTTP

Basic UI

Honestly I don’t know why to choose the php solution with the webserver? Isn’t it easier just to execute the script with the executecommand?
THat’s how I do it atm and it works. Only drawback is that I don’t get changes when done manually on the thermostat and therefore have to pull the status. But this is something probably not solved by the webserver implementation, right?

If you would be so kind and give me a direction here I will try your approach. The only solutions I found are based on a webserver.