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
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