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