Vitotronic binding and dependencies still actively maintained?

I am looking for a recommendation, how to control a Viessmann heating. The Vitotronic binding looks nice at first sight, but the binding itself and its dependency optolink look rather abandoned to me. Is anyone actively using this solution? Is it still maintained? In the forum I could only find very few messages on this subject, sometimes with an open end.

Also interested by some light on this topic.
Thanks, community !

Me too. Thanks in advance for any feedback.

Hi,
I cannot say much about the binding itself, but if you ask because you’re considering installting a new Viessmann heating, I would rather advise not to from the interoperability perspective.
Last year, I conducted a market analysis of wood and pellet boilers regarding their interfacing abilities, and it turned out that Viessmann is one of the worst in that regard. Other manufacturers provide extensively documented Modbus or HTTP interfaces. I had a conversation with the service team of the Viessmann headquarter that could be summarized as that they don’t care at all and try to sell their proprietary solutions.
Please note that this is only about their wood boiler products. I haven’t looked into their fossil product line or heat pumps at all.

Hi Frédéric,

thanks for your feedback. In my case I’m already stuck with a Viessmann gas heating, so exchanging this is no option. But after some more investigation I have probably found a solution, that should work without the binding: This thread describes a solution based on vcontrold, vclient and MQTT, which looks promising. There are also other solutions around on the internet, but many of these are in German, so it might not be for everyone.

Hi @ardmore,
I’m impressed about the work the open source community has done with vcontrold. Here are even specific instructions about the integration into openHAB. Good luck :slight_smile:

It’s a rather old thread, but nevertheless it might be interesting for someone who owns a Viessmann heating, that I built the integration of our Vitodens 333-f heating using these coponents:

  • vcontrold running on a Raspberry Pi zero W with the optolink adapter attached via USB.
  • Reading the desired data from the adapter is done from a bash script vclient_mqtt.sh, running every 5 minutes via crontab:
#!/bin/bash
#set -x
#----------------------------------------------------------------------------------------
# Forward get results from vclient (part of vcontrold package) as JSON via mosquitto_pub 
#----------------------------------------------------------------------------------------
#mqtt_host=raspi4
mqtt_host=ds218plus
mqtt_client=$HOSTNAME
mqtt_sessionExp=30
vcontrold_host=atlantis:3002
if [[ $1 == "" ]] 
then 
	set $cmdlist = cmd_a
else
	set $cmdlist = cmd_$1
fi
echo cmdlist=$cmdlist

cmd_a='getSystemTime,getIsEinmalladung,getBetriebArt,getUmschaltventil,getLeistungIst,getWWUWPNachlauf,getVolStrom,getBrennerStunden1,getBrennerStarts,getBrennerStatus,getTempA,getTempAged,getTempKist,getTempKsoll,getTempVLsollM1,getTempVListM1,getNeigungM1,getNiveauM1,getTempRL17A,getTempAbgas,getPumpeStatusM1,getPumpeStatusIntern,getPumpeDrehzahlIntern,getPumpeStatusSp,getTempRaumNorSollM1,getTempRaumRedSollM1,getTempWWsoll,getTempWWist,getTempSpu,getTempStp'

#inaktiv: ,getTempKOffset

echo ON  | mosquitto_pub -i $mqtt_client -h $mqtt_host -t heizung/avail -l -x $mqtt_sessionExp
mosquitto_pub -i $mqtt_client -h $mqtt_host -t heizung/vclient/lock -m "ON" -x $mqtt_sessionExp

IFS=',' read -ra cmd_array <<< "$cmd_a"
#Print the split string
for c in "${cmd_array[@]}"
do
	result=`/usr/local/bin/vclient -h $vcontrold_host -c $c`
	#message=(${result// \\n/})
	message=(${result//\n/})
	echo ${message[1]}

	mosquitto_pub -i $mqtt_client -h $mqtt_host -t heizung/$c -m "${message[1]}" -x $mqtt_sessionExp
	sleep 0.01
	
done

cmd2='getTimerWWMo,getTimerWWDi,getTimerWWMi,getTimerWWDo,getTimerWWFr,getTimerWWSa,getTimerWWSo,getTimerM1Mo,getTimerM1Di,getTimerM1Mi,getTimerM1Do,getTimerM1Fr,getTimerM1Sa,getTimerM1So'

IFS=',' read -ra cmd_array <<< "$cmd2"
#Print the split string
for c in "${cmd_array[@]}"
do
	result=`/usr/local/bin/vclient -h $vcontrold_host -c $c`
	message=(${result//\\n/})
	#echo ${message[1]}
	mosquitto_pub -i $mqtt_client -h $mqtt_host -t heizung/$c -m "${message[1]} ${message[2]} ${message[3]} ${message[4]} ${message[5]} ${message[6]} ${message[7]} ${message[8]}" -x $mqtt_sessionExp
	sleep 0.01
	
done

mosquitto_pub -i $mqtt_client -h $mqtt_host -t heizung/vclient/lock -m "OFF" -x $mqtt_sessionExp
  • In openHAB I created this MQTT thing for the heating:
UID: mqtt:topic:ds218plus:heizung
label: Heizung MQTT Thing ds218plus
thingTypeUID: mqtt:topic
configuration:
  availabilityTopic: heizung/avail
  payloadAvailable: ON
bridgeUID: mqtt:broker:ds218plus
location: Keller
channels:
  - id: Aussentemperatur
    channelTypeUID: mqtt:string
    label: Außentemperatur
    description: null
    configuration:
      stateTopic: heizung/getTempA
  - id: Warmwassertemperatur_Ist
    channelTypeUID: mqtt:string
    label: Heizung Warmwassertemp. Ist
    description: null
    configuration:
      stateTopic: heizung/getTempWWist
  - id: Warmwassertemperatur_Soll
    channelTypeUID: mqtt:string
    label: Heizung Warmwassertemp. Soll
    description: null
    configuration:
      stateTopic: heizung/getTempWWsoll
  - id: Kesseltemperatur_Ist
    channelTypeUID: mqtt:string
    label: Heizung Kesseltemp. Ist
    description: null
    configuration:
      stateTopic: heizung/getTempKist
  - id: Kesseltemperatur_Soll
    channelTypeUID: mqtt:string
    label: Heizung Kesseltemp. Soll
    description: null
    configuration:
      stateTopic: heizung/getTempKsoll
  - id: Brennerstunden
    channelTypeUID: mqtt:string
    label: KesselBrennerstunden
    description: null
    configuration:
      stateTopic: heizung/getBrennerStunden1
  - id: Betriebsart
    channelTypeUID: mqtt:string
    label: Kessel Betriebsart
    description: null
    configuration:
      stateTopic: heizung/getBetriebArt
  - id: Brennerstatus
    channelTypeUID: mqtt:string
    label: Kessel Brennerstatus
    description: null
    configuration:
      stateTopic: heizung/getBrennerStatus
  - id: Kesseltemperatur_Offset
    channelTypeUID: mqtt:string
    label: Heizung Kesseltemp. Offset
    description: null
    configuration:
      stateTopic: heizung/getTempKOffset
  - id: Vorlauftemperatur_Ist
    channelTypeUID: mqtt:string
    label: Heizung Vorlauftemp. Ist
    description: null
    configuration:
      stateTopic: heizung/getTempVListM1
  - id: Vorlauftemperatur_Soll
    channelTypeUID: mqtt:string
    label: Heizung Vorlauftemp. Soll
    description: null
    configuration:
      stateTopic: heizung/getTempVLsollM1
  - id: Anlagenleistung
    channelTypeUID: mqtt:string
    label: Heizung Anlagenleistung
    description: null
    configuration:
      stateTopic: heizung/getLeistungIst
  - id: Ruecklauftemperatur
    channelTypeUID: mqtt:string
    label: Heizung Rücklauftemperatur
    description: null
    configuration:
      stateTopic: heizung/getTempRL17A
  - id: Speichertemperatur_Unten
    channelTypeUID: mqtt:string
    label: Heizung Speichertemp. Unten
    description: null
    configuration:
      stateTopic: heizung/getTempSpu
  - id: Speichertemperatur_Tiefpass
    channelTypeUID: mqtt:string
    label: Heizung Speichertemp. Tiefpass
    description: null
    configuration:
      stateTopic: heizung/getTempStp
  - id: Volumenstrom
    channelTypeUID: mqtt:string
    label: Heizung Volumenstrom
    description: null
    configuration:
      stateTopic: heizung/getVolStrom
  - id: Pumpe_StatusIntern
    channelTypeUID: mqtt:string
    label: Pumpe Status Intern
    description: null
    configuration:
      stateTopic: heizung/getPumpeStatusIntern
  - id: Pumpe_DrehzahlIntern
    channelTypeUID: mqtt:string
    label: Pumpe Drehzahl Intern
    description: null
    configuration:
      stateTopic: heizung/getPumpeDrehzahlIntern
  - id: Timer_WarmwasserMontag
    channelTypeUID: mqtt:string
    label: Timer Warmwasser Montag
    description: null
    configuration:
      stateTopic: heizung/getTimerWWMo
  - id: Umschaltventil
    channelTypeUID: mqtt:string
    label: Heizung Umschaltventil
    description: null
    configuration:
      stateTopic: heizung/getUmschaltventil
  - id: SystemTime
    channelTypeUID: mqtt:string
    label: Heizung Systemzeit
    description: null
    configuration:
      stateTopic: heizung/getSystemTime
  - id: Timer_M1Montag
    channelTypeUID: mqtt:string
    label: Timer Heizung Montag
    description: null
    configuration:
      stateTopic: heizung/getTimerM1Mo
  - id: Heizkurve_NeigungM1
    channelTypeUID: mqtt:string
    label: Heizkurve Neigung M1
    description: null
    configuration:
      stateTopic: heizung/getNeigungM1
  - id: Heizkurve_NiveauM1
    channelTypeUID: mqtt:string
    label: Heizkurve Niveau M1
    description: ""
    configuration:
      stateTopic: heizung/getNiveauM1
  - id: BetriebPartyM1
    channelTypeUID: mqtt:string
    label: Betriebsart Party M1
    description: null
    configuration:
      stateTopic: heizung/getBetriebPartyM1
  - id: TempPartyM1
    channelTypeUID: mqtt:string
    label: Temperatur Party M1
    description: null
    configuration:
      stateTopic: heizung/getTempPartyM1
  - id: TempAbgas
    channelTypeUID: mqtt:string
    label: Temperatur Abgas
    description: null
    configuration:
      stateTopic: heizung/getTempAbgas
  - id: Raumtemperatur_Soll
    channelTypeUID: mqtt:string
    label: Raumtemperatur Soll
    description: null
    configuration:
      stateTopic: heizung/getTempRaumNorSollM1
  - id: Raumtemperatur_Red_Soll
    channelTypeUID: mqtt:string
    label: Temperatur Heizung reduziert Soll
    description: null
    configuration:
      stateTopic: heizung/getTempRaumRedSollM1
  - id: Warmwasser_Einmalladung
    channelTypeUID: mqtt:number
    label: Warmwasser einmalige Speicherladung
    description: Ist einmalige Speicherladung aktiv? 0/1
    configuration:
      stateTopic: heizung/getIsEinmalladung
  - id: Brennerstarts
    channelTypeUID: mqtt:string
    label: Kessel Brennerstarts
    description: null
    configuration:
      stateTopic: heizung/getBrennerStarts
  - id: Aussentemperatur_ged
    channelTypeUID: mqtt:string
    label: Außentemperatur gedämpft
    description: null
    configuration:
      stateTopic: heizung/getTempAged

This environment is running successfully for about two years.

I also integrated sending set commands to the vcontrold process to be able change some parameters of the heating. The UI for this is simply built in a sitemap and later on adapted on a Sonoff NSPanel using the NXPanel solution for openHAB.

Regards, Christoph