openHAB / CAN Bus / Stibel Eltron Heat Pump

2,283 views
Skip to first unread message

Sebastian Porombka

unread,
Dec 4, 2013, 2:55:21 PM12/4/13
to ope...@googlegroups.com
Hi

I want to tie our Stibel Eltron Heatpump to openHAB via the CAN Bus Interface.
Is there any established know-how regarding CAN-Bus <> openHAB?

If not - I'm Java EE / OSGI developer and would contribute a proper binding.
But i have no clue what the best gateway (USB<>CAN / Ethernet <> CAN) would be...

Greetings
   Sebastian Porombka

Thomas Letsch

unread,
Dec 4, 2013, 4:39:21 PM12/4/13
to ope...@googlegroups.com
Hi Sebastian,

I also own an Stiebel heat pump and the adoption to OH is also on my wish list :-).
I have bought the official can bus device from stiebel and it has a serial interface. That means a binding using the rfx library should work quite well. Do you have a can bus adaptor already?

R.,
Thomas 

kreutze...@gmail.com

unread,
Jan 8, 2014, 8:49:54 AM1/8/14
to ope...@googlegroups.com
Hi,

I have a lwz303i. Currently connects with a serial rs232 interface.
On my Linux Ubuntu server I am using https://launchpad.net/heatpumpmonitor , a set of python scripts to get the data from the heatpump.

Last month I recognized the openhab project and I started to use the existing addons.

There actually 2 addons which I would like to contribute.
1) stiebel eltron heatpump lwz303i
2) Landis + gyr energy meter zmd120

For both above I have a working implementation in python to get data via serial interface.

What is a good starting point?
I have some knowledge on c# and working mostly with visual studio.
It will take a bit time to get the development environment up an running.
Is their any existing addon which I can investigate as a starting point?
Has somebody stared already?

Be
Peter

Marco Hendricks

unread,
Jan 9, 2014, 5:09:44 AM1/9/14
to ope...@googlegroups.com
Hi Sebastian,

I have a Stibel Eltron Heatpump too and look into this topic since month. The options I found so far:

The IR serial interface on the front what is used for doing service to the Heatpump. This could be an easy option as there is an application from Stibel where the commands could be captcherd from and used in a binding. But the service cable it self is really high in price (~70 Euro).
Another option is the Internet Service Gateway from Stibel Eltron. Looks great and could be read out with the HTTP binding. But same as the option before it is high in price and not compatible with all WPM II versions. And I must disapoint you here, there is no option to upgrade the firmware on the controller. You have to buy a new one to get a new firmware.
From my point of view the best option is to connect to the internal CAN from the Heatpump (Like the ISG does).
My solution is not operational yet but I hope to get it running soon. I use a Raspberry Pi with an CAN-Bus addon to read out my Heatpump and push the data via REST interface to OpenHAB.
Same could be done with a Ardoino when you are familiar with microcontroller programming.

My idea with the Raspberry is based on this solution from Christian using Wiregate: http://knx-user-forum.de/code-schnipsel/25862-anbindung-tecalor-ttw13.html
But a Wiregate box only to read out my Heatpump was also to expensive for me.

Regards,
Marco


Am Mittwoch, 4. Dezember 2013 20:55:21 UTC+1 schrieb Sebastian Porombka:

Thomas Letsch

unread,
Jan 11, 2014, 3:20:09 AM1/11/14
to ope...@googlegroups.com, kreutze...@gmail.com
Hi Peter,

I can help you with the ramp up. That should not cost me too much time. Can't spend too much time on the heatpump binding, my time still goes to the homematic and enocean bindings.

You can contact me through my google account and we can see how we get it started :-)

G.,
Thomas

Marco Hendricks

unread,
Jan 17, 2014, 7:42:39 AM1/17/14
to ope...@googlegroups.com
Hi all,

yesterday I finished my work on the heating connection. I'm now able to connect my Raspberry to the CAN Interface of the Stiebel und send and receive data. Next step is a Python script grapping this data and send to REST API of OpenHAB.

I'm happy for any help :)

Regards,
Marco

Am Mittwoch, 4. Dezember 2013 20:55:21 UTC+1 schrieb Sebastian Porombka:

kreutze...@gmail.com

unread,
Jan 19, 2014, 2:28:01 AM1/19/14
to ope...@googlegroups.com
Hi Marco,

Your project sound interesting. I today use the rs232 with a homebrew ed cable. The above lunk shows how to do the cable.
This solution already works great in receiving the data from the heatpump. What is not yet available is sending commands , like the air control or the date time settings.

Concerning using CAN instead of rs232. Where did you find the connector? I heard that the local human interface is connected with CAN to the main controller of the heat pump. Does is allow you to connect more then one or do you need a kind of gateway in between?

I guess you can do everything with both. The service interface with rs232 does not influence the functionality of the local human interface.

I started to work on my energy meter as the first binding. As soon as I have this done I could join you in the heat pump binding.

Marco Hendricks

unread,
Jan 19, 2014, 9:11:13 AM1/19/14
to ope...@googlegroups.com, kreutze...@gmail.com
Peter,

I looked at the heatpumpMonitor project but I was unable to find how to build the cable?

If you have CAN or not depends on your Heatpump control. I have a WPMiw what has a CAN output for additional remote controls.
Between the service connector on the front and CAN on the back should not be much differents. The only thing why I not use it, was the price of the cable.

I think a binding is more or less not possible as I do not plan to use a CAN to Ethernet adapter. My RPI should read out the CAN and send the data to the OpenHAB REST Interface.

About your power meter. I have the same build in and would like to read it out. The only thing I found so far was this page: http://hpc.fs.uni-lj.si/electricity-meter-code
What are your plans and how do you want to read out the meter?

Regards,
Marco

kreutze...@gmail.com

unread,
Mar 3, 2014, 12:51:38 AM3/3/14
to ope...@googlegroups.com
Hi Marco,

How to build the cable is described here http://robert.penz.name/heat-pump-lwz/

Not sure if you can connect it directly to Raspberry or with help of additional hardware

I have started now with a new binding structure and basic call to seriell interface. Of course I will start rs232 as this is what I can test on, but to extent CAN should then not be a bid deal.

Do you have some info on the CAN interface?
How to get status and how to send new settings? Win CAN?

In the seriell interface I need to first install a port monitor and the stiebel software to log the traffic between the heatpump and the Spiegel softwre . By that I may find out how to send updated settings.

It will take some time .... So I focus on getting status first.
/peter

kreutze...@gmail.com

unread,
Mar 3, 2014, 12:51:39 AM3/3/14
to ope...@googlegroups.com

Marco Hendricks

unread,
Mar 4, 2014, 3:07:03 PM3/4/14
to ope...@googlegroups.com, kreutze...@gmail.com
Peter,

As we have two different Heat pumps, I don't expect it could be in one binding as the differences between Serial and CAN are huge.
And even if we could bring it together in one I saw a lot of differences between CAN compatible Stiebel Heat Pumps.
I will try to find a Java library what supports CAN so we have a basic.

Regards,
Marco

kreutze...@gmail.com

unread,
Mar 5, 2014, 3:06:22 AM3/5/14
to ope...@googlegroups.com, kreutze...@gmail.com

Hi Marco,

yes the differences are on the protocol and on the different versions of firmware

we can easily have one binding implementing both Serial and CAN protocol

When you look at the http://robert.penz.name/heat-pump-lwz/

you see already that there is incompatibility between the firmware version

 

I will start reading the version info from the heatpump , based on that we can have different interpretations of the data we receive from the heat pump. The implementation of protocal can still be generic, translating the received data depends on firmware version, e.g. the outside temperature can be at a different position in the telegram we receive from different firmeare versions.

in the python solution from above link they use ini files to configure the difference in the firmware.

 

At least for serial I will try to have a equivalent solution for serial and support for different firmware versions.

 

/Peter

 

Peter Kreutzer

unread,
May 20, 2014, 7:35:31 AM5/20/14
to ope...@googlegroups.com
Hi all,
 
just to give an update.
I have now a running version of a Stiebel eltron heat pump binding connected via serial RS232 interface
Current version support heat pump firmware version 2.06
The binding allows other firmware versions by adding configuration files (xml)
 
Here the current example of my 2.06 version configuration file.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<requests>
    <request name="Version" description="Read version information" requestByte="FD">
        <recordDefinition name="Version" position="4" length="2" scale="0.01" dataType="Status"/>
    </request>
    <request name="Time" description="Reads Time" requestByte="FC">
        <recordDefinition name="WeekDay" position="5" length="1" scale="1.0" dataType="Settings" min="1" max="6" step="1.0" unit="d"/>
        <recordDefinition name="Hours" position="6" length="1" scale="1.0" dataType="Settings" min="0" max="23" step="1.0" unit="h"/>
        <recordDefinition name="Minutes" position="7" length="1" scale="1.0" dataType="Settings" min="0" max="59" step="1.0" unit="min"/>
        <recordDefinition name="Seconds" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="59" step="1.0" unit="s"/>
        <recordDefinition name="Year" position="9" length="1" scale="1.0" dataType="Settings" min="0" max="99" step="1.0" unit="YY"/>
        <recordDefinition name="Month" position="11" length="1" scale="1.0" dataType="Settings" min="1" max="12" step="1.0" unit="MM"/>
        <recordDefinition name="Day" position="12" length="1" scale="1.0" dataType="Settings" min="1" max="31" step="1.0" unit="DD"/>
    </request>
    <request name="OperationCounters" description="Reads Operation counters and Time" requestByte="09">
        <recordDefinition name="CompressorA" position="4" length="2" scale="1.0" dataType="Status" unit="h"/>
        <recordDefinition name="CompressorB" position="6" length="2" scale="1.0" dataType="Status" unit="h"/>
        <recordDefinition name="HeatingMode" position="8" length="2" scale="1.0" dataType="Status" unit="h"/>
        <recordDefinition name="DHWMode" position="10" length="2" scale="1.0" dataType="Status" unit="h"/>
        <recordDefinition name="CoolingMode" position="12" length="2" scale="1.0" dataType="Status" unit="h"/>
    </request>
    <request name="CurrentValues" description="Reads measurements" requestByte="FB">
        <recordDefinition name="CollectorTemperatur" position="4" length="2" scale="0.1" dataType="Sensor" unit="°C"/>
        <recordDefinition name="OutsideTemperature" position="6" length="2" scale="0.1" dataType="Sensor" unit="°C"/>
        <recordDefinition name="FlowTemperature" position="8" length="2" scale="0.1" dataType="Sensor" unit="°C"/>
        <recordDefinition name="ReturnTemperature" position="10" length="2" scale="0.1" dataType="Sensor" unit="°C"/>
        <recordDefinition name="HotGasTemperature" position="12" length="2" scale="0.1" dataType="Sensor" unit="°C"/>
        <recordDefinition name="CylinderTemperature" position="14" length="2" scale="0.1" dataType="Sensor" unit="°C"/>
        <recordDefinition name="EvaporatorTemperature" position="20" length="2" scale="0.1" dataType="Sensor" unit="°C"/>
        <recordDefinition name="CondenserTemperature" position="22" length="2" scale="0.1" dataType="Sensor" unit="°C"/>
        <recordDefinition name="ExtractFanSpeed" position="30" length="1" scale="1.0" dataType="Sensor" unit="°C"/>
        <recordDefinition name="SupplyFanSpeed" position="31" length="1" scale="1.0" dataType="Sensor" unit="°C"/>
        <recordDefinition name="ExhaustFanSpeed" position="32" length="1" scale="1.0" dataType="Sensor" unit="°C"/>
        <recordDefinition name="FilteredOutsideTemperature" position="34" length="2" scale="0.1" dataType="Sensor" unit="°C"/>
    </request>
    <request name="SettingsNominalValues" description="Reads nominal setting values" requestByte="17">
        <recordDefinition name="P01RoomTemperatureStandardMode" position="4" length="2" scale="0.1" dataType="Settings" min="10" max="30" step="0.1" unit="°C"/>
        <recordDefinition name="P02RoomTemperatureSetbackMode" position="6" length="2" scale="0.1" dataType="Settings" min="10" max="30" step="0.1" unit="°C"/>
        <recordDefinition name="P03RoomTemperatureStandby" position="8" length="2" scale="0.1" dataType="Settings" min="10" max="30" step="0.1" unit="°C"/>
        <recordDefinition name="P04DHWTemperatureStandardMode" position="10" length="2" scale="0.1" dataType="Settings" min="10" max="55" step="0.1" unit="°C"/>
        <recordDefinition name="P05DHWTemperaturSetbackMode" position="12" length="2" scale="0.1" dataType="Settings" min="10" max="55" step="1.0" unit="°C"/>
        <recordDefinition name="P06DHWTemperatureStandby" position="14" length="2" scale="0.1" dataType="Settings" min="10" max="55" step="1.0" unit="°C"/>
        <recordDefinition name="P07FanStageStandardMode" position="16" length="1" scale="1.0" dataType="Settings" min="0" max="3" step="1.0" unit=""/>
        <recordDefinition name="P08FanStageSetbackMode" position="17" length="1" scale="1.0" dataType="Settings" min="0" max="3" step="1.0" unit=""/>
        <recordDefinition name="P09FanStageStandby" position="18" length="1" scale="1.0" dataType="Settings" min="0" max="3" step="1.0" unit=""/>
        <recordDefinition name="P10HeatingCircuitTemperatureManualMode" position="19" length="2" scale="0.1" dataType="Settings" min="10" max="65" step="0.1" unit="°C"/>
        <recordDefinition name="P11DHWTemperatureManualMode" position="21" length="2" scale="0.1" dataType="Settings" min="10" max="65" step="0.1" unit="°C"/>
        <recordDefinition name="P12FanStageManualMode" position="23" length="1" scale="1.0" dataType="Settings" min="0" max="3" step="1.0" unit=""/>
    </request>
    <request name="SettingsVentilation" description="Reads ventilation setting values" requestByte="01">
        <recordDefinition name="P37FanStageSupplyAir1" position="4" length="2" scale="1.0" dataType="Settings" min="60" max="280" step="1.0" unit="m^3/s"/>
        <recordDefinition name="P38FanStageSupplyAir2" position="6" length="2" scale="1.0" dataType="Settings" min="60" max="280" step="1.0" unit="m^3/s"/>
        <recordDefinition name="P39FanStageSupplyAir3" position="8" length="2" scale="1.0" dataType="Settings" min="60" max="280" step="1.0" unit="m^3/s"/>
        <recordDefinition name="P40FanStageExtractyAir1" position="10" length="2" scale="1.0" dataType="Settings" min="60" max="280" step="1.0" unit="m^3/s"/>
        <recordDefinition name="P41FanStageExtractyAir2" position="12" length="2" scale="1.0" dataType="Settings" min="60" max="280" step="1.0" unit="m^3/s"/>
        <recordDefinition name="P42FanStageExtractyAir3" position="14" length="2" scale="1.0" dataType="Settings" min="60" max="280" step="1.0" unit="m^3/s"/>
        <recordDefinition name="P43VentilationTimeUnscheduledStage3" position="16" length="2" scale="1.0" dataType="Settings" min="0" max="1000" step="1.0" unit="min"/>
        <recordDefinition name="P44VentilationTimeUnscheduledStage2" position="18" length="2" scale="1.0" dataType="Settings" min="0" max="1000" step="1.0" unit="min"/>
        <recordDefinition name="P45VentilationTimeUnscheduledStage1" position="20" length="2" scale="1.0" dataType="Settings" min="0" max="1000" step="1.0" unit="min"/>
        <recordDefinition name="P46VentilationTimeUnscheduledStage0" position="22" length="2" scale="1.0" dataType="Settings" min="0" max="1000" step="1.0" unit="min"/>
        <recordDefinition name="P75OperatingModePassiveCooling" position="24" length="1" scale="1.0" dataType="Settings" min="0" max="2" step="1.0" unit=""/>
        <recordDefinition name="StoveFireplaceOperation" position="25" length="1" scale="1.0" dataType="Settings" min="0" max="4" step="1.0" unit=""/>
    </request>
    <request name="SettingsHeating1" description="Read heating setting values" requestByte="06">
        <recordDefinition name="P21HysteresisHeating1" position="4" length="1" scale="0.1" dataType="Settings" min="0" max="10" step="0.1" unit="K"/>
        <recordDefinition name="P22HysteresisHeating2" position="5" length="1" scale="0.1" dataType="Settings" min="0" max="10" step="0.1" unit="K"/>
        <recordDefinition name="P23HysteresisHeating3" position="6" length="1" scale="0.1" dataType="Settings" min="0" max="5" step="0.1" unit="K"/>
        <recordDefinition name="P24HysteresisHeating4" position="7" length="1" scale="0.1" dataType="Settings" min="0" max="5" step="0.1" unit="K"/>
        <recordDefinition name="P25HysteresisHeating5" position="8" length="1" scale="0.1" dataType="Settings" min="0" max="5" step="0.1" unit="K"/>
        <recordDefinition name="P26HysteresisHeating6" position="9" length="1" scale="0.1" dataType="Settings" min="0" max="5" step="0.1" unit="K"/>
        <recordDefinition name="P27HysteresisHeating7" position="10" length="1" scale="0.1" dataType="Settings" min="0" max="5" step="0.1" unit="K"/>
        <recordDefinition name="P28HysteresisHeating8" position="11" length="1" scale="0.1" dataType="Settings" min="0" max="5" step="0.1" unit="K"/>
        <recordDefinition name="P29SwitchingHysteresisAsymmetry" position="12" length="1" scale="1.0" dataType="Settings" min="1" max="5" step="1.0" unit=""/>
        <recordDefinition name="P30SwitchingValueIntegralPortionHeating" position="13" length="2" scale="1.0" dataType="Settings" min="1" max="999" step="1.0" unit="Kmin"/>
        <recordDefinition name="P31AmountOfUnlockedElectricalBoosterStages" position="15" length="1" scale="1.0" dataType="Settings" min="0" max="3" step="1.0" unit=""/>
        <recordDefinition name="MaximumFlowTemperatureHeatingMode" position="16" length="2" scale="0.1" dataType="Settings" min="10" max="75" step="0.1" unit="°C"/>
        <recordDefinition name="P49ChangeoverTemperatureSummerWinter" position="18" length="2" scale="0.1" dataType="Settings" min="10" max="25" step="0.1" unit="°C"/>
        <recordDefinition name="P50HysteresisChangeoverTemperatureSummerWinter" position="20" length="2" scale="0.1" dataType="Settings" min="1" max="5" step="0.1" unit="K"/>
        <recordDefinition name="P77OutsideTemperatureAdjustment" position="22" length="2" scale="1.0" dataType="Settings" min="0" max="24" step="1.0" unit="h"/>
        <recordDefinition name="P78BivalencePoint" position="24" length="2" scale="0.1" dataType="Settings" min="-10" max="20" step="0.1" unit="°C"/>
        <recordDefinition name="P79DelayedEnableReheating" position="26" length="1" scale="1.0" dataType="Settings" min="0" max="60" step="1.0" unit="min"/>
        <recordDefinition name="OutputElectricalHeatingStage1" position="27" length="1" scale="0.1" dataType="Settings" min="0" max="10" step="1.0" unit="kW"/>
    </request>
    <request name="SettingsHeating2" description="Read heating setting values" requestByte="05">
        <recordDefinition name="P13IncreaseHeatingHC1" position="4" length="2" scale="0.1" dataType="Settings" min="1" max="5" step="0.1" unit=""/>
        <recordDefinition name="P14LowEndPointHeatingHC1" position="6" length="2" scale="0.1" dataType="Settings" min="1" max="20" step="0.1" unit="K"/>
        <recordDefinition name="P15RoomInfluenceHeatingHC1" position="8" length="2" scale="0.1" dataType="Settings" min="1" max="10" step="0.1" unit=""/>
        <recordDefinition name="P16IncreaseHeatingHC2" position="10" length="1" scale="0.1" dataType="Settings" min="0" max="5" step="0.1" unit=""/>
        <recordDefinition name="P17LowEndPointHeatingHC2" position="11" length="2" scale="0.1" dataType="Settings" min="0" max="20" step="0.1" unit="K"/>
        <recordDefinition name="P18RoomInfluenceHeatingHC2" position="13" length="2" scale="0.1" dataType="Settings" min="0" max="10" step="0.1" unit=""/>
        <recordDefinition name="P19TemperatureCaptureReturnFlowHC1" position="15" length="1" scale="1.0" dataType="Settings" min="1" max="100" step="1.0" unit="%"/>
        <recordDefinition name="P20TemperatureCaptureReturnFlowHC2" position="16" length="2" scale="1.0" dataType="Settings" min="1" max="100" step="1.0" unit="%"/>
        <recordDefinition name="MaxSetHeatingCircuitTemperatureHC1" position="18" length="2" scale="0.1" dataType="Settings" min="20" max="65" step="0.1" unit="°C"/>
        <recordDefinition name="MinSetHeatingCircuitTemperatureHC1" position="20" length="2" scale="0.1" dataType="Settings" min="5" max="40" step="0.1" unit="°C"/>
        <recordDefinition name="MaxSetHeatingCircuitTemperatureHC2" position="22" length="2" scale="0.1" dataType="Settings" min="20" max="65" step="0.1" unit="°C"/>
        <recordDefinition name="MinSetHeatingCircuitTemperatureHC2" position="24" length="2" scale="0.1" dataType="Settings" min="5" max="40" step="0.1" unit="°C"/>
    </request>
    <request name="SettingsEvaporator1" description="Read evaporator settings values" requestByte="03">
        <recordDefinition name="UpperLimitEvaporatorTemperatureForDefrostEnd" position="4" length="2" scale="0.1" dataType="Settings" min="10" max="30" step="0.1" unit="°C"/>
        <recordDefinition name="MaxEvaporatorDefrostTime" position="6" length="2" scale="1.0" dataType="Settings" min="2" max="20" step="1.0" unit="min"/>
        <recordDefinition name="LimitTemperatureCondenserElectricalReheating" position="8" length="2" scale="0.1" dataType="Settings" min="10" max="30" step="0.1" unit="°C"/>
        <recordDefinition name="LimitTemperatureCondenserDefrostTermination" position="10" length="2" scale="0.1" dataType="Settings" min="5" max="10" step="0.1" unit="°C"/>
        <recordDefinition name="P47CompressorRestartDelay" position="12" length="1" scale="1.0" dataType="Settings" min="0" max="20" step="1.0" unit="min"/>
        <recordDefinition name="P48ExhaustFanSpeed" position="13" length="1" scale="1.0" dataType="Settings" min="10" max="100" step="1.0" unit="%"/>
    </request>
    <request name="SettingsEvaporator2" description="Read evaporator settings values" requestByte="04">
        <recordDefinition name="MaxDefrostDurationAAExchanger" position="4" length="1" scale="1.0" dataType="Settings" min="0" max="120" step="1.0" unit="min"/>
        <recordDefinition name="DefrostStartThreshold" position="5" length="2" scale="0.1" dataType="Settings" min="0" max="10" step="0.1" unit="%"/>
        <recordDefinition name="VolumeFlowFilterReplacement" position="7" length="2" scale="1.0" dataType="Settings" min="50" max="100" step="1.0" unit="%"/>
        <recordDefinition name="P85DefrostModeAAHE" position="9" length="1" scale="1.0" dataType="Settings" min="1" max="5" step="1.0" unit=""/>
    </request>
    <request name="SettingsDryHeatingProgram" description="Read dry heatingprogram settings values" requestByte="10">
        <recordDefinition name="P70Start" position="4" length="1" scale="1.0" dataType="Settings" min="0" max="0" step="1.0" unit=""/>
        <recordDefinition name="P71BaseTemperature" position="5" length="2" scale="0.1" dataType="Settings" min="20" max="40" step="0.1" unit="°C"/>
        <recordDefinition name="P72PeakTemperature" position="7" length="2" scale="0.1" dataType="Settings" min="25" max="50" step="0.1" unit="°C"/>
        <recordDefinition name="P73BaseTemperatureDuration" position="9" length="2" scale="1.0" dataType="Settings" min="0" max="5" step="1.0" unit="days"/>
        <recordDefinition name="P74Increase" position="11" length="2" scale="0.1" dataType="Settings" min="1" max="10" step="0.1" unit="K/days"/>
    </request>
    <request name="SettingsCirculationPump" description="Read circulation pump setting values" requestByte="0A">
        <recordDefinition name="P54minStartupCycles" position="4" length="1" scale="1.0" dataType="Settings" min="1" max="24" step="1.0" unit="per/day"/>
        <recordDefinition name="P55maxStartupCycles" position="5" length="2" scale="1.0" dataType="Settings" min="1" max="288" step="1.0" unit="per/day"/>
        <recordDefinition name="P56OutsideTemperatureMinHeatingCycles" position="7" length="2" scale="0.1" dataType="Settings" min="0" max="20" step="0.1" unit="°C"/>
        <recordDefinition name="P57OutsideTemperatureMaxHeatingCycles" position="9" length="2" scale="0.1" dataType="Settings" min="0" max="25" step="0.1" unit="°C"/>
        <recordDefinition name="P58SuppressTemperatureCaptureDuringPumpStart" position="11" length="2" scale="1.0" dataType="Settings" min="0" max="120" step="1.0" unit="sec"/>
    </request>
    <request name="SettingsHeatingProgram" description="Read heating program 1 and 2 setting values" requestByte="0B">
        <recordDefinition name="HP1StartTime" position="4" length="2" scale="1.0" dataType="Settings" min="0" max="2359" step="1.0" unit="hh:mm"/>
        <recordDefinition name="HP1StopTime" position="6" length="2" scale="1.0" dataType="Settings" min="0" max="2359" step="1.0" unit="hh:mm"/>
        <recordDefinition name="HP1Monday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="7"/>
        <recordDefinition name="HP1Tuesday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="6"/>
        <recordDefinition name="HP1Wednesday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="5"/>
        <recordDefinition name="HP1Thusday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="4"/>
        <recordDefinition name="HP1Friday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="3"/>
        <recordDefinition name="HP1Saturday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="2"/>
        <recordDefinition name="HP1Sunday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="1"/>
        <recordDefinition name="HP1Enabled" position="9" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="On/Off" bitPosition="1"/>
        <recordDefinition name="HP2StartTime" position="10" length="2" scale="1.0" dataType="Settings" min="0" max="2359" step="1.0" unit="hh:mm"/>
        <recordDefinition name="HP2StopTime" position="12" length="2" scale="1.0" dataType="Settings" min="0" max="2359" step="1.0" unit="hh:mm"/>
        <recordDefinition name="HP2Monday" position="14" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="7"/>
        <recordDefinition name="HP2Tuesday" position="14" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="6"/>
        <recordDefinition name="HP2Wednesday" position="14" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="5"/>
        <recordDefinition name="HP2Thusday" position="14" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="4"/>
        <recordDefinition name="HP2Friday" position="14" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="3"/>
        <recordDefinition name="HP2Saturday" position="14" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="2"/>
        <recordDefinition name="HP2Sunday" position="14" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="1"/>
        <recordDefinition name="HP2Enabled" position="15" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="On/Off" bitPosition="1"/>
    </request>
    <request name="SettingsDomesticHotWaterProgram" description="Read Domestic Water program setting values" requestByte="0C">
        <recordDefinition name="BP1StartTime" position="4" length="2" scale="1.0" dataType="Settings" min="0" max="2359" step="1.0" unit="hh:mm"/>
        <recordDefinition name="BP1StopTime" position="6" length="2" scale="1.0" dataType="Settings" min="0" max="2359" step="1.0" unit="hh:mm"/>
        <recordDefinition name="BP1Monday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="7"/>
        <recordDefinition name="BP1Tuesday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="6"/>
        <recordDefinition name="BP1Wednesday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="5"/>
        <recordDefinition name="BP1Thusday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="4"/>
        <recordDefinition name="BP1Friday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="3"/>
        <recordDefinition name="BP1Saturday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="2"/>
        <recordDefinition name="BP1Sunday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="1"/>
        <recordDefinition name="BP1Enabled" position="9" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="On/Off" bitPosition="1"/>
    </request>
    <request name="SettingsVentilationProgram" description="Read ventilation program 1 and 2 setting values" requestByte="0D">
        <recordDefinition name="LP1StartTime" position="4" length="2" scale="1.0" dataType="Settings" min="0" max="2359" step="1.0" unit="hh:mm"/>
        <recordDefinition name="LP1StopTime" position="6" length="2" scale="1.0" dataType="Settings" min="0" max="2359" step="1.0" unit="hh:mm"/>
        <recordDefinition name="LP1Monday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="7"/>
        <recordDefinition name="LP1Tuesday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="6"/>
        <recordDefinition name="LP1Wednesday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="5"/>
        <recordDefinition name="LP1Thusday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="4"/>
        <recordDefinition name="LP1Friday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="3"/>
        <recordDefinition name="LP1Saturday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="2"/>
        <recordDefinition name="LP1Sunday" position="8" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="1"/>
        <recordDefinition name="LP1Enabled" position="9" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="On/Off" bitPosition="1"/>
        <recordDefinition name="LP2StartTime" position="10" length="2" scale="1.0" dataType="Settings" min="0" max="2359" step="1.0" unit="hh:mm"/>
        <recordDefinition name="LP2StopTime" position="12" length="2" scale="1.0" dataType="Settings" min="0" max="2359" step="1.0" unit="hh:mm"/>
        <recordDefinition name="LP2Monday" position="14" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="7"/>
        <recordDefinition name="LP2Tuesday" position="14" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="6"/>
        <recordDefinition name="LP2Wednesday" position="14" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="5"/>
        <recordDefinition name="LP2Thusday" position="14" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="4"/>
        <recordDefinition name="LP2Friday" position="14" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="3"/>
        <recordDefinition name="LP2Saturday" position="14" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="2"/>
        <recordDefinition name="LP2Sunday" position="14" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="weekday" bitPosition="1"/>
        <recordDefinition name="LP2Enabled" position="15" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit="On/Off" bitPosition="1"/>
    </request>
    <request name="SettingsAbsenceProgram" description="Read absence program setting values" requestByte="0F">
        <recordDefinition name="AP0DurationUntilAbsenceStart" position="4" length="2" scale="0.1" dataType="Settings" min="0" max="2388" step="0.1" unit="h"/>
        <recordDefinition name="AP0AbsenceDuration" position="6" length="2" scale="0.1" dataType="Settings" min="0" max="2388" step="0.1" unit="h"/>
        <recordDefinition name="AP0EnableAbsenceProgram" position="7" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit=""/>
    </request>
    <request name="SettingsRestartAndMixerTime" description="Read restart and mixer time setting values" requestByte="0E">
        <recordDefinition name="P59RestartBeforSetbackEnd" position="4" length="2" scale="1.0" dataType="Settings" min="0" max="300" step="1.0" unit="min"/>
        <recordDefinition name="MixerProportionalRange" position="6" length="2" scale="0.1" dataType="Settings" min="1" max="100" step="0.1" unit="%"/>
        <recordDefinition name="DerivativeMixerTime" position="8" length="2" scale="0.1" dataType="Settings" min="1" max="100" step="0.1" unit="sec"/>
        <recordDefinition name="MixerTimeInterval" position="10" length="2" scale="1.0" dataType="Settings" min="1" max="10" step="0.1" unit="K/day"/>
    </request>
        <request name="SettingsDomesticHotWater" description="Read Domestic Water setting values" requestByte="07">
        <recordDefinition name="P32StartupHysteresisDHWTemperature" position="4" length="1" scale="0.1" dataType="Settings" min="2" max="10" step="0.1" unit="K"/>
        <recordDefinition name="P33TimeDelayElectricalReheating" position="5" length="1" scale="1.0" dataType="Settings" min="0" max="240" step="1.0" unit="min"/>
        <recordDefinition name="P34OutsideTemperatureLimitForImmElectricalReheating" position="6" length="2" scale="0.1" dataType="Settings" min="-10" max="10" step="1.0" unit="°C"/>
        <recordDefinition name="P35PasteurisationInterval" position="8" length="1" scale="1.0" dataType="Settings" min="1" max="30" step="1.0" unit="K/day"/>
        <recordDefinition name="P36MaxDurationDHWLoading" position="9" length="1" scale="1.0" dataType="Settings" min="6" max="12" step="1.0" unit="h"/>
        <recordDefinition name="PasteurisationHeatupTemperature" position="10" length="2" scale="0.1" dataType="Settings" min="10" max="65" step="0.1" unit="°C"/>
        <recordDefinition name="NoOfEnabledElectricalReheatStagesDHWLoading" position="12" length="1" scale="1.0" dataType="Settings" min="0" max="3" step="1.0" unit=""/>
        <recordDefinition name="MaxFlowTemperatureDHWMode" position="13" length="2" scale="0.1" dataType="Settings" min="10" max="75" step="0.1" unit="°C"/>
        <recordDefinition name="CompressorShutdownDHWLoading" position="15" length="1" scale="1.0" dataType="Settings" min="0" max="1" step="1.0" unit=""/>
    </request>
</requests>
 
All settings , status and sensor data are availabel.
Settings will be loaded only at start up time. Currently no changes are able on these. I am working on writing back to the heat pump. But this will take some week before i have finalized the implementation and testing.
 
If somebody whats to test the current version for reading the current infoirmation from heat pump it please let me know.
 
Future ideas:
- writing back the settings to heatpump
- implements a in debug a automatic request sniffer, which probes the knows request byte and display the responses from the heat pump.
   this will allow users to configure its own confguration file version.
- scripts for setting the time based on the current ntp binding time
- scripts to send notification to my mobile (android) when electrical booster has started
 
/peter
 
 
 
 
Message has been deleted

Cyril Jaquier

unread,
May 21, 2014, 2:41:00 PM5/21/14
to ope...@googlegroups.com
Hi Peter,

Great! I have a Stiebel-Eltron WPF 7 E and will be eventually interested in connecting it to openHAB. Unfortunately, I have no time to invest in this at the moment but thank you in advance for your contribution ;-)

Regards,
Cyril

Peter Kreutzer

unread,
May 22, 2014, 8:47:56 AM5/22/14
to ope...@googlegroups.com
Here some teaser of a sitemap combining the charts and measurements
 
 
 
 

 

 

Peter Kreutzer

unread,
May 22, 2014, 8:50:58 AM5/22/14
to ope...@googlegroups.com
another one
currently the setting is not working.
struggleling with the concurrency of the different threads of executte and comand update.
Hope to get his sorted out soon.
 
 
 

anco...@gmail.com

unread,
Oct 7, 2014, 6:05:02 AM10/7/14
to ope...@googlegroups.com
Is anybody trying to follow the discussion inside this forum http://www.haustechnikdialog.de/Forum/p/2100861 (in German language)? There are suggestions how to use a Raspberry Pi and a home made CAN interface (basically an UART2CAN interface). I'm actually interested in using similar approach (not exactly with the same HW) but need to understand details on CAN bus protocol. It seems some work has been already done (quite recently) but I was not able to have a really clear understanding. Just few points about what I understood, maybe someone else can help me to elaborate a bit more:

1) There seems to be an implemented "remote control" using ConfortSoft SW and with an home made optical interface.
2) Sniffing 1) it was possible to grab a commands table as reported here: http://juerg5524.ch/data/ElsterTable.inc
3) There seems to be an already consolidated know-how in how to translate 2) into can bus messages
4) CAN bus should be configured as 20Kbps using short ID (11bits)
5) Example of single command (READ a value):
  • A 5 bytes message need to be transmitted with ID=680: 0x61 0x01 0xfa 0x00 0x08 where
    • first 2 bytes (0x61 0x01) seems to be related to receiver ID and/or functionality
    • 3rd byte is always 0xfa
    • last 2 bytes are the indication on which value I'm interested to
  • As a response, a 7 bytes message with ID=301: 0xd2 0x00 0xfa 0x00 0x08 0x00 0xd2
    • first 2 bytes (0xd2 0x00) should be related to transmitter ID and/or request type
    • 3rd byte is always 0xfa
    • 4th and 5th bytes are the indication about which value is reported
    • last 2 bytes are read value (in this case 0x00 0xd2 i.e. 210 in decimal that could means a temperature of 21.0 degree)
So what it is not really clear to me is the association between the first 2 bytes of TX/RX messages and the CAN ID used for the messages. Is there anybody knowing it? Looking at C++ code here (http://juerg5524.ch/data/can_progs.zip) there seems to be a formula but that's somehow NOT aligned with the trace in the example above.

Thanks
Cheers
Andrea
Reply all
Reply to author
Forward
0 new messages