golang client library to Viessmann Vitotrol web service

Package go-vitotrol provides access to the Viessmann™ Vitotrol™ cloud API for controlling/monitoring boilers.

Build Status Coverage Status Go Report Card GoDoc

See https://www.viessmann.com/app_vitodata/VIIWebService-1.16.0.0/iPhoneWebService.asmx

Only requests I really need are currently implemented:

  • Login
  • GetDevices
  • RequestRefreshStatus
  • RequestWriteStatus
  • GetData
  • WriteData
  • RefreshData
  • GetErrorHistory
  • GetTimesheet
  • WriteTimesheetData
  • GetTypeInfo

Any pull-request is welcome.

Install

The library:

go get -u github.com/maxatome/go-vitotrol

The vitotrol command:

go get -u github.com/maxatome/go-vitotrol/cmd/vitotrol

resulting a vitotrol executable in $GOPATH/bin/ directory.

Example

See cmd/vitotrol/*.go for an example of use.

Executable vitotrol usage follows:

usage: vitotrol [OPTIONS] ACTION [PARAMS]
  -config string
        login+password config file
  -debug
        print debug information
  -device string
        DeviceID, index, DeviceName, DeviceId@LocationID, DeviceName@LocationName (see `devices' action) (default "0")
  -json
        used by `timesheet' action to display timesheets using JSON format
  -login string
        login on vitotrol API
  -password string
        password on vitotrol API
  -verbose
        print verbose information

ACTION & PARAMS can be:
- devices              list all available devices
- list [attrs|timesheets]  list attribute (default) or timesheet names
- get ATTR_NAME ...    get the value of attributes ATTR_NAME, ... on vitodata
                         server
- get all              get all known attributes on vitodata server
- rget ATTR_NAME ...   refresh then get the value of attributes ATTR_NAME, ...
                         on vitodata server
- rget all             refresh than get all known attributes on vitodata server
- bget ATTR_IDX ...    get the value of attributes ATTR_IDX, ... on vitodata
                         server without checking their validity before (for
                         developing purpose)
- rbget ATTR_IDX ...   refresh then get the value of attributes ATTR_IDX, ...
                         on vitodata server without checking their validity
                         before (for developing purpose)
- set ATTR_NAME VALUE  set the value of attribute ATTR_NAME to VALUE
- timesheet TIMESHEET ...
                       get the timesheet TIMESHEET data
- set_timesheet TIMESHEET '{"wday":[{"from":630,"to":2200},...],...}'
                       replace the whole timesheet TIMESHEET
                       wday is either a day (eg. mon) or a range of days
                       (eg. mon-wed or sat-mon)
                       The JSON content can be in a file with the syntax @file
- errors               get the error history
- remote_attrs         list server available attributes
                         (for developing purpose)

The config file is a two lines file containing the LOGIN on the first line and the PASSWORD on the second, and is named $HOME/.vitotrol-api by default (when all --config, --login and --password options are missing or empty):

LOGIN
PASSWORD

License

go-vitotrol is released under the MIT License.

Miscellaneous

Want to automatically feed an Influx database with attribute values? See vitotrol2influx.

Comments
  • not an issue, merely a request :-)

    not an issue, merely a request :-)

    Hello, nice project here ! I have however a question: in the web interface (https://vitodata100.viessmann.com/VD100/Service/Overview.aspx), I succeed to get the fuel consumption for my heating device, with which I make a graph - but currently, I need to manually go to the web portal-. Your application seems to work with my system (for instance, I can retrieve temperature data, etc.) but some other parameters seem to be absent from the API. How comes ? Is the web portal using a different API ? Is it then possible to adapt your tool ? Here is the parameters I get (sorry, in French, but quite readable). I put before "=>" the parameters I identified as recognised by your tool. It also seems that only one circuit is taken into account (I have 2 heating circuits on the same heater, A1 and M2): -Chaudière- OutdoorTemp => Température extérieure 10 °C BoilerTemp => Temp. chaudière 41 °C Consigne de temp. chaudière 37,2 °C InternalPumpStatus => POMPE INTERNE Marche BurnerState => BRULEUR allure 1 Arrêt Brûleur allure 2 Arrêt BurnerHoursRun => Heures fonctionnement brûleur all.1 6385,21 Heures Heures fonctionnement brûleur all.2 791,48 Heures BurnerStarts => Démarrages du brûleur 40074 Conso. combustible (litres ou m³) 8896,449 Liter -Circuit de chauffage A1- Mode de fonct. actuel A1M1 Mode normal Inversion externe du mode de fonct. A1M1 Arrêt HeatNormalTemp => Consigne de temp. amb. marche normale A1M1 19 °C Température de départ A1M1 41 °C HeatingPumpStatus => Pompe de circuit de chauffage A1M1 Marche PartyMode => Régime réceptions A1M1 Arrêt Régime éco. A1M1 Arrêt IndoorTemp => Température ambiante A1M1 21,1 °C FrostProtectionStatus => Risque de gel du circuit de chauffage A1M1 Inactif HolidaysStatus => Programme vacances A1M1 Inactif HolidaysStart => Jour départ en vacances A1M1 01/01/1970 HolidaysEnd => Jour retour de vacances A1M1 01/01/1970 Pente courbe de chauffe A1 1,2 Parallèle courbe de chauffe A1 0 K -Circuit de chauffage M2- Mode de fonct. actuel M2 Mode normal Inversion externe mode de fonct. M2 Arrêt Consigne de temp. amb. marche normale M2 21 °C Température de départ M2 29,5 °C POMPE CC M2 Marche Régime réceptions M2 Arrêt Régime éco. M2 Arrêt Température ambiante M2 21,1 °C Risque de gel du circuit de chauffage M2 Inactif Programme vacances M2 Inactif Jour départ en vacances M2 01/01/1970 Jour retour de vacances M2 01/01/1970 Pente courbe de chauffe M2 0,6 Parallèle courbe de chauffe M2 0 K -Eau chaude- Production d’ECS Charge inactive HotWaterTemp => Température ECS sonde de charge sonde confort 47,6 °C Pompe charge ECS Arrêt Flow-switch Arrêt Pompe de bouclage Marche

    Do you think it is possible to access the missing parameters ?

    Thank you beforehand, Michel

  • Cannot set DateTime

    Cannot set DateTime

    Probably a stupid format error on my side, but I can't seem to set DateTime:

    vitotrol -verbose set DateTime "2019-05-11 07:22:00"
    Working with device VT 200 (HO1A / HO1B)@[id]
    *** WriteData failed: Unexpected status 9
    
  • Install fail

    Install fail

    There seems to be a new install process. The documented
    go get -u github.com/maxatome/go-vitotrol does not work under windows 10:

    > go get -u github.com/maxatome/go-vitotrol
    go: go.mod file not found in current directory or any parent directory.
            'go get' is no longer supported outside a module.
            To build and install a command, use 'go install' with a version,
            like 'go install example.com/cmd@latest'
            For more information, see https://golang.org/doc/go-get-install-deprecation
            or run 'go help get' or 'go help install'.```
  • Use HTTPS instead of HTTP when connect to Viessmann

    Use HTTPS instead of HTTP when connect to Viessmann

    Viessmann doesn't redirect to HTTPS so using HTTP login credentials sent in clear text. HTTPS is supported by the server and seems to work fine for a couple days for me. You can check that clear text is used with:

    sudo tcpdump host www.viessmann.com -A

  • Cannot fetch data anymore

    Cannot fetch data anymore

    Two days ago go-vitotrol stopped working for me. It just hangs on any get command like vitotrol -debug -verbose get BoilerTemp. In web interface and the App everything is fine so it seems like some issue with data access via APIs.

    Any ideas how to fix it?

  • Influxdb database

    Influxdb database

    Hi,

    I wrote a (bash) glue to push go-vitotrol data in a influxDB database. InfluxDB share a golang client to write data.

    I would like to know if this feature could be integrate go-vitotrol.

    Thanks

  • Bug with

    Bug with "Unbloat cmd/vitotrol/main.go by introducing actions"

    Hi,

    I'm using your amazing tool in order to push temperature into my influxdb/grafana stack. But, in your last release, I can't run actions.go /usr/local/go/bin/go run /home/maitrey0da/dev/go-workdir/actions.go -login foo -password bar rget IndoorTemp OutdoorTemp command-line-arguments ./actions.go:36: undefined: Options ./actions.go:52: undefined: Options

    Can you help me or review the readme ?

    Thanks

  • can't set konf_neigung to non-integer value

    can't set konf_neigung to non-integer value

    I try to set the konf_neigung_rw-0x0b35 to 1.3 but it finally rounds the value (seen by rget) although it prints that the wanted value was successfully set. At the Vitodens-300W I see 1,0 instead of 1,3

    pi@rp4b:~ $ /home/pi/go/bin/vitotrol -verbose set konf_neigung_rw-0x0b35 1.3
    Working with device VT 200 (HO1C)@75014............
    konf_neigung_rw-0x0b35 attribute successfully set to `1.3'
    pi@rp4b:~ $ /home/pi/go/bin/vitotrol rget konf_neigung_rw-0x0b35
    konf_neigung_rw-0x0b35: 1@2022-10-19 11:21:28 (konf_neigung_rw)
    
    pi@rp4b:~ $ /home/pi/go/bin/vitotrol -verbose set konf_neigung_rw-0x0b35 2
    Working with device VT 200 (HO1C)@75014............
    konf_neigung_rw-0x0b35 attribute successfully set to `2'
    pi@rp4b:~ $ /home/pi/go/bin/vitotrol rget konf_neigung_rw-0x0b35
    konf_neigung_rw-0x0b35: 2@2022-10-19 11:22:20 (konf_neigung_rw)
    
    pi@rp4b:~ $ /home/pi/go/bin/vitotrol -verbose set konf_neigung_rw-0x0b35 1
    Working with device VT 200 (HO1C)@75014............
    konf_neigung_rw-0x0b35 attribute successfully set to `1'
    pi@rp4b:~ $ /home/pi/go/bin/vitotrol rget konf_neigung_rw-0x0b35
    konf_neigung_rw-0x0b35: 1@2022-10-19 11:23:03 (konf_neigung_rw)
    
    
  • No devices

    No devices

    Hi, When I run the following command, I have a "no devices" response.

    Executing the --debug show me that the Name can be retreived but no devices. What I have done wrong ?

    Thanks

    $ ./vitotrol --debug devices

    2018/08/23 11:41:25 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">soap:Body0Kein Fehler2.5.7.01MynameMyname</soap:Body></soap:Envelope> 2018/08/23 11:41:26 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">soap:Body0Kein Fehler</soap:Body></soap:Envelope>

golang long polling library. Makes web pub-sub easy via HTTP long-poll server :smiley: :coffee: :computer:
golang long polling library.  Makes web pub-sub easy via HTTP long-poll server :smiley: :coffee: :computer:

golongpoll Golang long polling library. Makes web pub-sub easy via an HTTP long-poll server. New in v1.1 Deprecated CreateManager and CreateCustomMana

Jan 6, 2023
It's client library written in Golang for interacting with Linkedin Cruise Control using its HTTP API.

go-cruise-control It's client library (written in Golang) for interacting with Linkedin Cruise Control using its HTTP API. Supported Cruise Control ve

Jan 10, 2022
RES Service protocol library for Go

RES Service for Go Synchronize Your Clients Go package used to create REST, real time, and RPC APIs, where all your reactive web clients are synchroni

Nov 23, 2022
Cluster extensions for Sarama, the Go client library for Apache Kafka 0.9

Cluster extensions for Sarama, the Go client library for Apache Kafka 0.9 (and later).

Dec 28, 2022
Apache Pulsar Go Client Library

Apache Pulsar Go Client Library A Go client library for the Apache Pulsar project. Goal This projects is developing a pure-Go client library for Pulsa

Jan 4, 2023
Confluent's Apache Kafka Golang client

Confluent's Golang Client for Apache KafkaTM confluent-kafka-go is Confluent's Golang client for Apache Kafka and the Confluent Platform. Features: Hi

Dec 30, 2022
Golang client for NATS, the cloud native messaging system.

NATS - Go Client A Go client for the NATS messaging system. Installation # Go client go get github.com/nats-io/nats.go/ # Server go get github.com/na

Jan 5, 2023
High abstraction wrapper for Golang Rabbit MQ Client

GRMQ Go Rabbit MQ What are the typical use-cases of RabbitMQ broker ? We create

Nov 3, 2022
Httpmq-go - Golang client for httpmq

HTTP MQ - Go Client Golang client for httpmq Table of Content 1. Introduction 2. Installation 3. Examples 4. Local Development 5. License 1. Introduct

May 21, 2022
⚡ HTTP/2 Apple Push Notification Service (APNs) push provider for Go — Send push notifications to iOS, tvOS, Safari and OSX apps, using the APNs HTTP/2 protocol.

APNS/2 APNS/2 is a go package designed for simple, flexible and fast Apple Push Notifications on iOS, OSX and Safari using the new HTTP/2 Push provide

Jan 1, 2023
Uniqush is a free and open source software system which provides a unified push service for server side notification to apps on mobile devices.

Homepage Download Blog/News @uniqush Introduction Uniqush (\ˈyü-nə-ku̇sh\ "uni" pronounced as in "unified", and "qush" pronounced as in "cushion") is

Jan 9, 2023
⚡️ A lightweight service that will build and store your go projects binaries, Integrated with Github, Gitlab, Bitbucket and Bitbucket Server.
⚡️ A lightweight service that will build and store your go projects binaries, Integrated with Github, Gitlab, Bitbucket and  Bitbucket Server.

Rabbit A lightweight service that will build and store your go projects binaries. Rabbit is a lightweight service that will build and store your go pr

Nov 19, 2022
Temporal service and CLI
Temporal service and CLI

Temporal Temporal is a microservice orchestration platform which enables developers to build scalable applications without sacrificing productivity or

Jan 1, 2023
The Xiaomi message push service is a system-level channel on MIUI and is universal across the platform, which can provide developers with stable, reliable, and efficient push services.

Go-Push-API MiPush、JiPush、UMeng MiPush The Xiaomi message push service is a system-level channel on MIUI and is universal across the platform, which c

Oct 20, 2022
Service responsible for streaming Kafka messages.

kafka-stream ????‍♂️ Service responsible for streaming Kafka messages. What it does? This service reads all messages from the input topic and sends th

Oct 16, 2021
ntfy is a super simple pub-sub notification service. It allows you to send desktop notifications via scripts.

ntfy ntfy (pronounce: notify) is a super simple pub-sub notification service. It allows you to send desktop and (soon) phone notifications via scripts

Jan 9, 2023
Go service for CRUD note, log tracking by RabbitMQ
Go service for CRUD note, log tracking by RabbitMQ

Service for CRUD note, log tracking by RabbitMQ Architecture Three components: Service note CRUD, use a DB RabbitMQ for saving messages pushed from se

Nov 29, 2021
Tool for collect statistics from AMQP (RabbitMQ) broker. Good for cloud native service calculation.

amqp-statisticator Tool for collect statistics around your AMQP broker. For example RabbitMQ expose a lot information trought the management API, but

Dec 13, 2021
The Bhojpur MDM is a software-as-a-service product used as a Mobile Device Manager based on Bhojpur.NET Platform for application delivery.

Bhojpur MDM - Mobile Device Manager The Bhojpur MDM is a software-as-a-service product used as a Mobile Device Manager based on Bhojpur.NET Platform f

Dec 31, 2021