Page 2 of 3

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Friday 07 February 2020 7:40
by edwin1234
Im missing :
What temperature is it now?
Set temperature 20 degrees
What is the pressure?
What is suply or return temperature?
If its possible, can you explain how to do that?

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Friday 07 February 2020 9:21
by Egregius
I guess you'll have to wait for the developer api for those details.
I ment that the main usage things are possible.
New temperatures you could get whit a easycontrol -> webhooks applet, but only per 0,5° change.
Set temperature can be done, and also home/away.

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Friday 07 February 2020 9:58
by edwin1234
Thanks for your answer,
Yes i know,
But cant wait ;)

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Friday 07 February 2020 10:09
by Egregius
Well, we've been waiting 2 years for IFTTT integration... Maybe another 2 years for the API? :lol:
You could mail them at [email protected]
Maybe it'll speed things up if lots of people ask for it...
I don't know what they mean with "This offer is only addressed to commercial customers including freelancers and entrepreneurs.". Could be that the API won't be accessible for normal users. There's also a page "Plans and Pricing" wich could indicate that it won't be free.

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Friday 07 February 2020 11:35
by edwin1234
I will try that,
I work as a service engineer for heating systems
Maybe if i sent a mail as a service dealer for nefit/bosch it will help a bit. 😁
But dont think so.
Think we must be patience.

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Tuesday 11 February 2020 9:20
by petkli
i did sent them an email too

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Thursday 13 February 2020 10:56
by petkli
email from Bosch:



Thank you for your interest and for contacting Bosch.
We do have a way to pair/register easy control device on our website.


Please refer to https://developer.bosch.com/web/bosch-t ... i/overview


Unfortunately, we do not have a way you can create your own client for a standalone app. We hope to add this in the future, but there is no standard timeline.
Currently you can control your device only on the website.

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Sunday 07 February 2021 22:05
by ceesjan
Has anyone managed to connect the Bosch easyconnect for a Nefit proline to Domoticz? my OS Ubuntu 20.04

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Monday 08 February 2021 0:21
by waltervl
No one yet managed to access the EasyControl outside the Bosch app. Follow the search for access here: https://github.com/robertklep/bosch-xmpp/issues/4

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Monday 19 April 2021 14:36
by zandhaas
Robert Klep managed to get access to the CT200 (Easycontrol) with the Bosch-xmpp tool.

The easy control option is added to the bosch-xmpp tool.

https://github.com/robertklep/bosch-xmpp

Perhaps someone is able to build a new plugin for this. 8-) 8-)

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Tuesday 20 April 2021 10:51
by waltervl
Perhaps the Nefit easy http server can be modified to also use the Bosch EasyControl, then no major changes to the integration are needed.
I asked it in https://github.com/robertklep/nefit-eas ... /issues/51
I have no Bosch EasyControl so have no real interest here. Perhaps you can add your thoughts to the github issue...

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Tuesday 20 April 2021 14:05
by waltervl
Perhaps lean on https://github.com/doudz/bosch-thermost ... tree/ct200 and make a python plugin

Edit: also already some work done here in HA: https://github.com/bosch-thermostat/hom ... /issues/64

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Thursday 03 June 2021 11:31
by petkli
IFTTT and the Bosch EasyControl workz.
And you can control this in Domoticz.

I know, it is not the real thing, but it workz.

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Sunday 14 November 2021 0:34
by waltervl
There is now a python library able to work with the Bosch Easycontrol: https://github.com/bosch-thermostat/bos ... ent-python

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Monday 06 February 2023 23:49
by gggr
I am a bit late to the party, but I built a plugin for Domoticz that reads data from the Bosch Easycontrol using the bosch-xmpp tool. It is very simple and provides you with some devices that are updated every minute.

You can check it out here: https://github.com/ggraat/domoticz-easycontrol-plugin

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Tuesday 07 February 2023 9:04
by waltervl
gggr wrote: Monday 06 February 2023 23:49 I am a bit late to the party, but I built a plugin for Domoticz that reads data from the Bosch Easycontrol using the bosch-xmpp tool. It is very simple and provides you with some devices that are updated every minute.

You can check it out here: https://github.com/ggraat/domoticz-easycontrol-plugin
This is great! Thanks. I have added it to the python plugin page. https://www.domoticz.com/wiki/Plugins

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Saturday 05 October 2024 15:17
by Domoberry
I have succesfully used the bosch-xmpp gateway and the plugin as mentioned above. Some 6 values of the Easycontrol CT200 are now available in Domoticz.To start the bosch-xmpp service I'm using a systemd script. Bit more information here: https://domoticz.com/forum/posting.php? ... ly&t=22726

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Friday 14 February 2025 13:21
by janpep
At the moment I am using Domoticz as an interface bewteen a Calendar (imported and parsed ics with a script) and a remote location where Honeywell EVOhome installation is used. In the morning I get the events for the day and set setpoint timers for the needed zones.

This system will probably be replaced by Bosch Easycontrol. I am reading here and I saw the references to github.
But I still don't get a good idea of ​​how it works and what is needed. Can someone explain it to me? What runs where? Which devices are used? Does it only read the data or can the thermostat also be set per room from Domoticz? And last but not least: Does it work reliably?

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Wednesday 28 January 2026 7:22
by Korrel
gggr wrote: Monday 06 February 2023 23:49 I am a bit late to the party, but I built a plugin for Domoticz that reads data from the Bosch Easycontrol using the bosch-xmpp tool. It is very simple and provides you with some devices that are updated every minute.

You can check it out here: https://github.com/ggraat/domoticz-easycontrol-plugin
Since my Nest (gen1) was withdrawn from online being by Google, i bought myself a Bosch CT200 for my NEfit CV installation...
I struggled with all the plugin and easyhttp servers... Tried a bridge script, tried the mqtt, some easyhttp server usinge docker/portainer... Any way, your work inspired me to do a rework and make a plugin that only needs the BOSCH-XMPP installed, and starts its own bridge in a subprocess, and sends data using the client interface... So this plugin reads and writes to the CT200 thermostate...
For everyone who likes, try it out:

Code: Select all

"""
<plugin key="bosch-ct200-plugin" name="Bosch CT200 plugin" author="Korrel" version="0.1.1">
    <description>
        <h2>Bosch Easycontrol (CT200) plugin</h2><br/>
        Basic plugin that gets information from and puts information back to a Bosch Easycontrol CT200 thermostate using BOSCH-XMPP communication.<br/><br/>
        <h3>Devices</h3><br/>
        The following devices are created :
        <ul style="list-style-type:square">
            <li>Room thermostate</li>
            <li>Room temperature</li>
            <li>Room humidity indoor</li>
            <li>Outdoor temperature</li>
            <li>Actual supply temperature</li>
            <li>Supply temperature setpoint</li>
            <li>Away</li> 
            <li>Away temperature</li>
            <li>Auto Away - enabled</li>
        </ul>
        <h3>Configuration</h3><br/>
        The plugin is using Bosch XMPP in Bridge mode for getting information, device changes are PUT by using the BOSCH-XMPP cli interface.<br/>
        If "run bridge" is set to 1 a subprocess running the bridge is started. Make sure the port is not used by another process.<br/>
        If "run bridge" is set to 0, the plugin will make use of a running bridge.<br/>
        The bosch-xmpp is mandatory for use with this plugin. Visit <a href="https://github.com/robertklep/bosch-xmpp">https://github.com/robertklep/bosch-xmpp</a>  for more information or to install.<br/>
    </description>
    <params>
        <param field="Address" label="IP Address" width="250px" required="true" default="127.0.0.1"/>
        <param field="Port" label="Port" width="50px" required="true" default="8081"/>
        <param field="Mode5" label="Run bridge" width="30px" required="true" default="0"/> 
        <param field="Mode1" label="Serial Key" width="250px" required="true" default="101xxxxxx"/>
        <param field="Mode2" label="Access Key" width="250px" required="true" default="XxXxXxXxXxXxXxXx"/>
        <param field="Password" label="Password" width="250px" required="true" default="secret" password="true"/>
        <param field="Mode3" label="Path to bosch-xmpp" width="250px" required="true" default="/usr/local/bin/bosch-xmpp"/> 
        <param field="Mode4" label="Refresh rate" width="30px" required="true" default="6"/>            
        <param field="Mode6" label="Debug" width="75px">
            <options>
                <option label="True" value="Debug"/>
                <option label="False" value="Normal"  default="true" />
            </options>
        </param>          
    </params>
</plugin>
"""
import Domoticz
import requests
import os
import subprocess

class BoschCT200Plugin:
    class dzCT200device:
        def __init__(self, unit, endpoint, name, typename=None, type=None, subtype=None, image=None, switchtype=None):
            if typename is not None:
                if image is not None:                
                    self.device = Domoticz.Device(Unit=unit, Name=name, TypeName=typename, Image=image)
                else:
                    self.device = Domoticz.Device(Unit=unit, Name=name, TypeName=typename)
            else:
                if image is not None:  
                    self.device = Domoticz.Device(Unit=unit, Name=name, Type=type, Subtype=subtype, Image=image)
                else:   
                    self.device = Domoticz.Device(Unit=unit, Name=name, Type=type, Subtype=subtype)  
#            self.device = Domoticz.Device(Unit=unit, Name=name, TypeName=typename, Type=type, Subtype=subtype, Image=image, Switchtype=switchtype)        
            self.endpoint = endpoint
     
    runAgain = 6
    CT200devices = ()
    pMainBridge = None
        
    def __init__(self):
        return

    def onStart(self):
        Domoticz.Debug("onStart called")
        if Parameters["Mode6"] == "Debug":
            Domoticz.Debugging(1)
            
        if int(Parameters["Mode4"]) >=0:
            self.runAgain = int(Parameters["Mode4"])
                                                  
        self.CT200devices = (
            self.dzCT200device(1, "/zones/zn1/manualTemperatureHeating", "Room thermostate", None, 242, 1, 103, None),
            self.dzCT200device(2, "/zones/zn1/temperatureActual", "Room temperature", "Temperature", None, None),
            self.dzCT200device(3, "/system/sensors/humidity/indoor_h1", "Room humidity indoor", "Humidity", None, None),          
            self.dzCT200device(4, "/system/sensors/temperatures/outdoor_t1", "Outdoor temperature", "Temperature", None, None),
            self.dzCT200device(5, "/heatSources/actualSupplyTemperature", "Actual supply temperature", "Temperature"),
            self.dzCT200device(6, "/heatingCircuits/hc1/supplyTemperatureSetpoint", "Supply temperature setpoint", None, 242, 1, None, None),
            self.dzCT200device(7, "/system/awayMode/enabled", "Away mode", None, 17, 1, 102, None),  
            self.dzCT200device(8, "/system/awayMode/temperature", "Away temperature", None, 242, 1, None, None),   
            self.dzCT200device(9, "/system/autoAway/enabled", "Auto away", None, 17, 1, 102, None)           
            )            
           
        if (len(Devices) == 0):
            for CT200device in self.CT200devices:
                CT200device.device.Create()
                Domoticz.Log("Created " + CT200device.device.Name + " device")
                self.updateDeviceValue(CT200device)
        else:
            Domoticz.Debug("Devices already exist" + str(Devices))
            
        if Parameters["Mode5"] == "1":
            Parameters["Address"] = "127.0.0.1"
            self.pMainBridge = subprocess.Popen([Parameters["Mode3"], '--serial=' + Parameters["Mode1"], '--access-key=' + Parameters["Mode2"], '--password=' + Parameters["Password"], 'easycontrol', 'bridge', Parameters["Port"], Parameters["Address"]])
            Domoticz.Debug("Bridge is running in process : " + str(self.pMainBridge.pid))

    def onStop(self):
        if Parameters["Mode5"] == "1":
             Domoticz.Debug("Going to kill process : " + str(self.pMainBridge.pid) + " (Bridge)")
             self.pMainBridge.terminate()   
        return

    def onConnect(self, Connection, Status, Description):
        return

    def onMessage(self, Connection, Data): 
        Domoticz.Debug("onMessage called")
        Domoticz.Debug("onMessage called with Data: '"+str(strData)+"'")
        return

    def onCommand(self, Unit, Command, Level, Hue):
        aCT200device = self.CT200devices[Unit-1] 
        Domoticz.Debug("onCommand called for unit : '" + str(Unit)+"' " + aCT200device.endpoint + " - Level : " +str(Level) + " - Command : " + Command)
        match Command:
            case "Set Level":
                os.system(Parameters["Mode3"] + " --serial=" + Parameters["Mode1"] + " --access-key=" + Parameters["Mode2"] + " --password=" + Parameters["Password"] + " easycontrol put " + aCT200device.endpoint + " '{\"value\":" + str(Level) + "}'")
            case "On":
                os.system(Parameters["Mode3"] + " --serial=" + Parameters["Mode1"] + " --access-key=" + Parameters["Mode2"] + " --password=" + Parameters["Password"] + " easycontrol put " + aCT200device.endpoint + " '{\"value\":\"true\"}'")
            case "Off":                
                os.system(Parameters["Mode3"] + " --serial=" + Parameters["Mode1"] + " --access-key=" + Parameters["Mode2"] + " --password=" + Parameters["Password"] + " easycontrol put " + aCT200device.endpoint + " '{\"value\":\"false\"}'")             
            case _:
                Domoticz.Debug("No Message defined for this unit ....")
        self.updateDeviceValue(aCT200device)        
        return

    def onNotification(self, Name, Subject, Text, Status, Priority, Sound, ImageFile):
        Domoticz.Log("Notification: " + Name + "," + Subject + "," + Text + "," + Status + "," + str(Priority) + "," + Sound + "," + ImageFile)
        return

    def onDisconnect(self, Connection):
        Domoticz.Log("onDisconnect called")
        self.isConnected = False
        return

    def onHeartbeat(self):
        self.runAgain = self.runAgain - 1
        if self.runAgain <= 0:
            for CT200device in self.CT200devices:
                self.updateDeviceValue(CT200device)
            self.runAgain = int(Parameters["Mode4"])
        else:
            Domoticz.Debug("onHeartbeat called, run again in " + str(self.runAgain) + " heartbeats.")

    def updateDeviceValue(self, aCT200device: dzCT200device):
        url = "http://" + Parameters["Address"] + ":" + Parameters["Port"] + "/bridge" + aCT200device.endpoint
        request = requests.get(url)
        value = request.json()["value"]
        if aCT200device.device.Type == 17:
            if str(value) == "false": value = 0
            else: value = 1    
        Domoticz.Debug("Going to set value " + str(value) + " on device " + aCT200device.device.Name)
        aCT200device.device.Update(int(value), str(value))
        
global _plugin
_plugin = BoschCT200Plugin()


def onStart():
    global _plugin
    _plugin.onStart()


def onStop():
    global _plugin
    _plugin.onStop()


def onConnect(Connection, Status, Description):
    global _plugin
    _plugin.onConnect(Connection, Status, Description)


def onMessage(Connection, Data):
    global _plugin
    _plugin.onMessage(Connection, Data)


def onCommand(Unit, Command, Level, Hue):
    global _plugin
    _plugin.onCommand(Unit, Command, Level, Hue)


def onNotification(Name, Subject, Text, Status, Priority, Sound, ImageFile):
    global _plugin
    _plugin.onNotification(Name, Subject, Text, Status, Priority, Sound, ImageFile)


def onDisconnect(Connection):
    global _plugin
    _plugin.onDisconnect(Connection)


def onHeartbeat():
    global _plugin
    _plugin.onHeartbeat()



I'll be working on some extra devices (clock/program switch clock/timers if possible and some meters (gas use for water, gas use for cv heating))

Re: Bosch EasyControl (Nefit Easy's Big Brother)

Posted: Wednesday 28 January 2026 19:35
by waltervl
Looks to be very similar as the original plugin https://github.com/ggraat/domoticz-easycontrol-plugin that also only needs the xmpp installed....

Perhaps you can make a PR on the original plugin with your extra functionality?