abbrechen
Suchergebnisse werden angezeigt für 
Anzeigen  nur  | Stattdessen suchen nach 
Meintest du: 
Beantwortet! Gehe zur Lösung.

Using Node Red to visualize ViCare data

The ViCare App is nice and easy to use, however not really good at visualizing things.

So I chose Node Red to construct a number of dashboards for my Vitodens installation that has additional Viessmann thermal panels and a fireplace attached to the heating system's 1000 litre buffer.

Node-Red allows constructing simple to quite complex data-flows with only a minimal programming effort. One of the key features is the construction of dashboards to visualize and manipulate data without in depth knowledge of html, CSS etc. Basic Javascript experience is helpful however.

I'm just a hobbyist, no professional programmer so bear with me in case something seems strange, unclear or too trivial.

CaCicala_0-1636386292917.png

 

Refreshing the Access Token

I am assuming that you already have generated an access token and further on the static refresh token. So, we can start by enabling Node Red to refresh the access token regularly and in time before it expires - e.g., every 59 minutes. See refreshAccessToken.json below.

Flow variables accessToken, deviceID, installationID, and gatewaySerial are used to store the respective values. The latter three values are static and are derived from the “getting started” preparation steps. In the example shown here, I have used generic values.

CaCicala_1-1636386292921.png

 

The “Extract Refresh Token” branch is for informational purposes only.

Request Authorization

All of the variables necessary for authorizing the user are used in my “universal header node”. They prime the http request that is retrieving data from the API. It is a function node consisting of the following Java Script snippet:

 

 

 

var atoken = flow.get('accessToken')
msg.headers = {Authorization: "Bearer "+ atoken}
msg.installationID = flow.get('installationID');
msg.gatewaySerial = flow.get('gatewaySerial');
msg.deviceId = flow.get('deviceID');
return msg;

 

 

 

No matter by which request you retrieve data from the API using Node-Red, the method is always through a http request node.

Feature overview

This is a good continuation point after you’ve solved the preliminaries. The Feature Overview contains all parameters that are available from your specific installation – i.e. it varies from customer to customer. It helps to select the features that you want to observe and/or manipulate.

CaCicala_2-1636386292923.png

 

The timestamp is used to trigger the flow; the universal header is described above; the http request “Read Feature List” calls the URL https://api.viessmann.com/iot/v1/equipment/installations/{{installationID}}/gateways/{{gatewaySerial... and is configured as follows:

CaCicala_3-1636386292929.png

 

The msg.payload of debug node “Feature List” contains a large JSON structure that can be analysed by using the debug feature of Node Red. Alternatively a JSON Viewer can be used (Firefox, Notepad++ with JSON plugin etc.)

See attached: FeatureOverviewRequest.json

Reading only few datapoints

As you probably know, there is a an access limitation of 1440 per 24h. If you’re interested in a few data points only and don’t need to update your data very often, direct feature access by URL is the easiest way.

CaCicala_4-1636386292931.png

 

To retrieve the common supply temperature for example, the http request node “Read Feature” uses the following URL: https://api.viessmann-platform.io/iot/v1/equipment/installations/{{installationID}}/gateways/{{gatew...
The rest of the http request node is configured as in the chapter above.

As a result, the API delivers a small JSON object from which we can extract the datapoint of interest by using another function node:

 

 

 

msg.payload=msg.payload.data.properties.value.value;
msg.topic="Common Supply";
return msg;

 

 

 

The msg.topic is optional but comes in handy when generating multi value graph charts.

See attached file: singleRequest.json

If you would trigger this request every minute, you’d use up all the 1440 accesses per day; furthermore, you wouldn’t be able to refresh the access token anymore. I’ve been told, also the Vicare App would be blocked – to be verified.

Reading more datapoints more often

Since the installation features requests returns all datapoints available for your specific installation in one go, you can access many more datapoints by performing only one single request.

In my specific case the installation features JSON consists of 165kB which creates quite a big data footprint in relation to the data actually used.

CaCicala_5-1636386292936.png

 

The first 3 nodes are identical to the ones in chapter Feature Overview

The Feature JSON structure mainly consists of a data array with – in my case – 150 elements. You could now address each feature of interest by using its specific index.

WW Solar would have index 92 and can be extracted like msg.payload=msg.payload.data[92].properties.value.value;

However, the index is different for each installation and is prone to vary in case Viessmann decides to add new datapoints to the API.

In order to be reliable, we have to parse the JSON to find the appropriate elements. This can be achieved by the findIndex function of Javascript. It retrieves the index number for any given feature name which is then used to access the feature:

 

 

 

featureArray=msg.payload.data;
idx = featureArray.findIndex((element) => element.feature ===  'heating.solar.sensors.temperature.dhw');
msg.payload=msg.payload.data[idx].properties.value.value;
msg.topic = "WWSolar"; //optional - necessary for multi value charts
return msg;

 

 

 

I hope that you find this useful. Thanks to Michael Hanna for his support!

Christoph Krzikalla

 

JSON files for copy & paste into Node Red - the forum doesn't allow upload of text or JSON files...

 

refreshAccessToken.json

 

 

 

[
    {
        "id": "eb3f132b.f55c48",
        "type": "tab",
        "label": "Heatingsystem",
        "disabled": false,
        "info": ""
    },
    {
        "id": "8e64bcb1.3a6198",
        "type": "function",
        "z": "eb3f132b.f55c48",
        "name": "set payload and headers",
        "func": "msg.payload = \"grant_type=refresh_token&client_id=yourClientID&refresh_token=theRefreshToken\";\nmsg.headers = {};\nmsg.headers['Content-Type'] = 'application/x-www-form-urlencoded';\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 410,
        "y": 160,
        "wires": [
            [
                "8eed9ce.e975a6"
            ]
        ]
    },
    {
        "id": "2f0fb613.30912a",
        "type": "inject",
        "z": "eb3f132b.f55c48",
        "name": "Refresh Access Token",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "3540",
        "crontab": "",
        "once": true,
        "onceDelay": "",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 170,
        "y": 160,
        "wires": [
            [
                "8e64bcb1.3a6198"
            ]
        ]
    },
    {
        "id": "8eed9ce.e975a6",
        "type": "http request",
        "z": "eb3f132b.f55c48",
        "name": "refreshtoken",
        "method": "POST",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "https://iam.viessmann.com/idp/v2/token",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 610,
        "y": 160,
        "wires": [
            [
                "caf45d2a.5b914"
            ]
        ]
    },
    {
        "id": "caf45d2a.5b914",
        "type": "function",
        "z": "eb3f132b.f55c48",
        "name": "Extract Token",
        "func": "msg.payload=msg.payload.access_token;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 820,
        "y": 160,
        "wires": [
            [
                "6c93aa04.283ec4",
                "b330b072.f48968"
            ]
        ]
    },
    {
        "id": "6c93aa04.283ec4",
        "type": "debug",
        "z": "eb3f132b.f55c48",
        "name": "access_token",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1040,
        "y": 220,
        "wires": []
    },
    {
        "id": "b330b072.f48968",
        "type": "change",
        "z": "eb3f132b.f55c48",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "accessToken",
                "pt": "flow",
                "to": "payload",
                "tot": "msg"
            },
            {
                "t": "set",
                "p": "deviceID",
                "pt": "flow",
                "to": "0",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "installationID",
                "pt": "flow",
                "to": "123456",
                "tot": "num"
            },
            {
                "t": "set",
                "p": "gatewaySerial",
                "pt": "flow",
                "to": "yourGatewaySerialNo",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1040,
        "y": 160,
        "wires": [
            []
        ]
    }
]

 

 

 

featureOverviewRequest.json

 

 

 

[
    {
        "id": "28ce4ad9.56b3ee",
        "type": "inject",
        "z": "60e7ff21.b1ce48",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 140,
        "y": 480,
        "wires": [
            [
                "efd9bd12.35253"
            ]
        ]
    },
    {
        "id": "7c34263e.a7791",
        "type": "http request",
        "z": "60e7ff21.b1ce48",
        "name": "Read Feature List",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "https://api.viessmann.com/iot/v1/equipment/installations/{{installationID}}/gateways/{{gatewaySerial}}/devices/{{deviceId}}/features/",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 550,
        "y": 480,
        "wires": [
            [
                "92f53cc2.4ba79"
            ]
        ]
    },
    {
        "id": "efd9bd12.35253",
        "type": "function",
        "z": "60e7ff21.b1ce48",
        "name": "Universal Header",
        "func": "var atoken = flow.get('accessToken')\nmsg.headers = {\n    Authorization: \"Bearer \"+ atoken\n}\nmsg.installationID = flow.get('installationID');\nmsg.gatewaySerial = flow.get('gatewaySerial');\nmsg.deviceId = flow.get('deviceID');\nreturn msg;\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 330,
        "y": 480,
        "wires": [
            [
                "7c34263e.a7791"
            ]
        ]
    },
    {
        "id": "92f53cc2.4ba79",
        "type": "debug",
        "z": "60e7ff21.b1ce48",
        "name": "Feature List (JSON)",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 780,
        "y": 480,
        "wires": []
    }
]

 

 

 

singleRequest.json

 

 

 

[
    {
        "id": "619f461a.3caf38",
        "type": "http request",
        "z": "60e7ff21.b1ce48",
        "name": "Read Feature",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "https://api.viessmann-platform.io/iot/v1/equipment/installations/{{installationID}}/gateways/{{gatewaySerial}}/devices/0/features/heating.boiler.sensors.temperature.commonSupply",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 600,
        "y": 1600,
        "wires": [
            [
                "ea81b906.b45e3"
            ]
        ]
    },
    {
        "id": "996c1677.deb32",
        "type": "debug",
        "z": "60e7ff21.b1ce48",
        "name": "Example",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 920,
        "y": 1600,
        "wires": []
    },
    {
        "id": "954542bb.556178",
        "type": "function",
        "z": "60e7ff21.b1ce48",
        "name": "Universal Header",
        "func": "var atoken = flow.get('accessToken')\nmsg.headers = {\n    Authorization: \"Bearer \"+ atoken\n}\nmsg.installationID = flow.get('installationID');\nmsg.gatewaySerial = flow.get('gatewaySerial');\nmsg.deviceId = flow.get('deviceID');\nreturn msg;\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 410,
        "y": 1600,
        "wires": [
            [
                "619f461a.3caf38"
            ]
        ]
    },
    {
        "id": "8ab5e8c0.40a968",
        "type": "inject",
        "z": "60e7ff21.b1ce48",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 240,
        "y": 1600,
        "wires": [
            [
                "954542bb.556178"
            ]
        ]
    },
    {
        "id": "ea81b906.b45e3",
        "type": "function",
        "z": "60e7ff21.b1ce48",
        "name": "Extract Value",
        "func": "msg.payload=msg.payload.data.properties.value.value;\nmsg.topic=\"Common Supply\";\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 770,
        "y": 1600,
        "wires": [
            [
                "996c1677.deb32"
            ]
        ]
    }
]

 

 

 

1 AKZEPTIERTE LÖSUNG

Akzeptierte Lösungen

Mittlerweile habe ich einige meiner Tutorials auf Deutsch umgestellt, aktualisiert und auf meinem kleinen Tech-Blog veröffentlicht. Ihr findet das auf https://rustimation.eu - wird je nach Erkenntnisfortschritt erweitert und ergänzt.

Chris

Lösung in ursprünglichem Beitrag anzeigen

30 ANTWORTEN 30

Unfortunately, the forum server nailed my above text shut so I can't update it anymore.

I forgot to write that node red and the whole logic is running on a Raspberry Pi 3. This enables me to also attach one wire sensors and other things to retrieve datapoints (via MQTT) from other appliances or where ViCare doesn't provide them yet.

E.g. my 1000 litre hot water storage is a Viessmann (Italia) Solarcell HSK 1000 Combination buffer (dhw and heating) which is connected to the Vitotronic 200. However the necessary datapoints for the four sensors are not (yet) provided. I hoped it would be heating.dhw.sensors.temperature.hotWaterStorage.xxx but this seems for dhw only. ==> @MichaelHanna --> Feature request 🙂

I simply plugged additional sensors into the sensor holes of the buffer and connected them to my Raspberry Pi.

Christoph Krzikalla

Thank you so much! Finally, this works perfect for me.

I had to tinker around for a few days because of a very trivial mistake (MY mistake, not yours).

I imported the three Flows as separated flows via Flow-JSON-Import in Node Red and was wondering why getting "Token invalid" answers from the server. After Changing flow.get('accessToken') to global.get('accessToken') my problems disappeared 🙂 

 

Now I just have to implement the multiple request of more than value ("read more datapoints" as described above) and put the values in my local InfluxDB to feed my Grafana graphs.

 

 

 

Again, big kudos. "Re-Engineering" your work was finally trivial but I never could build this from scratch by my own!

 

Kind regards, Daniel

 

 

Hello Daniel,

thank you very much for your motivation feedback. Yeah, I have forgotten to mention, that all my Viessmann codes reside in one flow tab - hence the flow.get statements.

I'll also have a look into InfluxDB and Grafana as Node-Red keeps forgetting historical values as soon as you restart the server or the node-red application.

Kind regards

Chris

Data-Export to InfluxDB works now, too.

I chose to install "node-red-contrib-influxdb" to the palette, which adds three new nodes. I use "influxdb out".

 

Initial configuration of the node is necessary:

  • Name --> any name you like
  • Server --> Name of server, Version (I use 2.0), URL (IP + Port), Token
  • Organisation --> depends on InfluxDB configuration
  • Bucket --> the "dataspace" for this special purpose in InfluxDB
  • Meassurement --> free to choose. If Meassurement does not exist in InfluxDB, Influx will create this on demand
  • no "Verify server certificate" (didn't try with it, tried to avoide any extra authentification issues für testing)

Configuration of InfluxDB

  • you need a running InfluxDB System (my Influx is running as a docker container) including initial setup (user, organisation, etc)
  • create a new bucket, for example "viessmann-data"
  • create a new API-token, you will need this für node configuration in node red (see above)

Connecting Node Red and InfluxDB by just dragging output of your "data extraction function" directly to the "InfluxDB out" node. How simple is that 🙂

 

Hint: My Node Red and influxDB both run as docker container. By default docker uses NAT and the containers are NOT directly connected to the host network. Therefore it is necessary to use IP and Port of the Docker host for configuration of the InfluxDB node. Might be unnecessary in other use cases, for example Node Red and DB as native instances / services on the on the same host without docker (then "localhost" should work, too).

 

Whats the benefit?

On the one hand it is kind of "onpremise copy" of the Viessmann VCare App (in lack of Vitoconnect opto interface the data is of course exclusively coming from Viessmann servers.) . Check system status from any web browser in local network, faster polling the data (ViCare App seems to need aprox. 10 seconds to connect on load), etc

 

On the other hand (that is the main purpose for my personal needs): having all the data in timeseries in in InfluxDB I can now correlate them with other data generated in my heterogeneous smarthome ecosystem.

 

My Viessmann Vitodens with solar, 600 litre buffer, etc have been installed just a few weeks ago. Now I can overlay Data-graphs for example flow temperature of the burner with valve status of my Homematic room thermostats. So it is possible to see, if Vitodens generates too much heat to heat up the rooms to desired temperature (room keeps warm but valves nearly closed). Or check modulation rate in correlation with room temperature  and outside temperature.

This helps me to adjust the heating curves (was able to flatten the curve from 1,4 to 1,2) which will lower gas consumption (of course gas consumption ist written in InfluxDB too, including a conversion to "Euro per day" to keep me scared during the ongoing raise of energy prices), etc 🙂

 

Regards, Daniel

 

 

 

 

 

nodered-influxdb (1).jpeg

Hello Daniel,

great stuff! I'll look into it, as soon as I can find the time.

So far I have no intention to work with docker as virtualization tends to complicate matters. In my humble opinion, it is cheaper to buy another Raspberry Pi if I want to set up different scenarios (e.g. one for my Webserver, Owncloud and gateway functionality, another one for IoT stuff etc.). But who knows...

In case you're interested, have a look at my Raspberry Pi Blog https://rustimation.eu

Rgds

Chris

Hallo ihr beiden

Ich versuche grade es etwas nachzuvollziehen wie dies mit dem Token funktioniert, aber ich steige nicht dahinter. In dem DeveloperPortal von Viessmann habe ich doch nur eine ID erstellen können, wo kommen denn die anderen Werte her? GatewaySerial, DeviceID etc.

MfG

Björn

Hallo Björn,

 

nach dem Erstellen der ID musst Du erst einmal einen Access Token und Refresh Token einreichten, bzw abfragen, damit die API überhaupt angefragt werden kann. Das ist alles in der Dokumentation beschrieben:

https://developer.viessmann.com/en/introduction

https://developer.viessmann.com/de/doc/getting-started

https://developer.viessmann.com/en/doc/authentication

 

Als Nächstes muss man für die Abfrage der Datenpunkte diese drei Parameter ermitteln:

  • Installation ID 
  • gateway serial
  • DeviceID

Diese sind statisch und können dann dauerhaft für die Abfragen verwendet werden. Man muss sie halt nur einmal initial ermitteln, z.B. mit Curl oder auch mit Node Red und das JSON-Objekt dann auswerten.

Ist im Detail hier erläutert:

https://developer.viessmann.com/en/doc/iot/overview

 

Die eigentliche Abfrage der Messpunkte erfolgt dann, wie oben unter Reading only few datapoints beschrieben.

Die Antwort der API auf die Abfrage ist im ein sehr großes JSON-Objekt mit allen verfügbaren Datenpunkten.

https://developer.viessmann.com/en/doc/iot/data-points

 

Chris hat dann m.E. die gute Idee gehabtmregelmäßig das ganze Objekt zu ziehen und lokal mit Node Red sich die interessanten Datenpunkte für die eigenen Zwecke rauszusuchen. Das minimiert die API-Abrufe. Ich habe das dann nur nach meinem Bedarf angepasst und verfeinert. Du kannst die Werte in einem Node Red Dashboard anzeigen lassen, in eine DB schreiben, per MQTT irgendwo hinpusten, usw usw. Die Möglichkeiten sind dann nicht mehr limitiert, wenn die Daten einmal vorhanden sind 🙂

 

Freundlicher Gruß,

Daniel

 

@CaCicala Thank you very much. Without your detailed description I would never have been able to build this myself. Meanwhile it works and I only have to extract the relevant values. 

 

@Saint Würdest du deinen Flow teilen? Ich bin ein absoluter Anfänger in node-red und froh, dass die Tokens jetzt endlich sauber funktionieren. Dein Flow sieht ziemlich genau nach dem aus, was ich auch machen wollte und die InfluxDB wäre für mich ebenfalls hilfreich. 

 

@Bjoern-84 Ich habe da auch eine Weile gebraucht. Im Endeffekt habe den Authorization Request wie hier in Step 1 beschrieben gemacht: https://developer.viessmann.com/de/doc/authentication

Achtung: Unbedingt das Ende der Seite bzgl. "Zugriffstoken erneuern" beachten: "scope=IoT%20User%20offline_access"

 

Anschließend habe ich Chris' Flow refreshAccessToken.json kopiert und ein bisschen umgebaut. Set Payload and Headers sieht dann etwa so aus:

msg.payload = "grant_type=authorization_code&client_id=<deineOAuthClientID>&redirect_uri=http://localhost:4200/&code_verifier=<codeChallengeDesAuthorizationRequests>&code=<CodeDerAuthorizationResponse>";
msg.headers = {};
msg.headers['Content-Type'] = 'application/x-www-form-urlencoded';

return msg;

 

Als Antwort bekommst du dann refresh_token, womit du du ziemlich einfach mit den Flows von Chris weiterarbeiten kannst, um die Installationen, Gateways und Devices zu holen (s. auch https://developer.viessmann.com/de/doc/iot/overview). Und vom device bekommst du dann die einzelnen Werte...

 

Allen nochmals besten Dank & viele Grüße

Danny

Super, freut mich, wenn meine Lösung euch weitergeholfen hat.

Viele Grüße vom Gardasee

Chris

Danke Leute, jetzt hab sogar ich es verstanden und es scheint auch zu laufen. Hab jetzt Testweise meine 3 verschiedenen Systeme KNX, Modbus und die Viessmann Heizung stichpunktartig im Node-Red. Verbindung zur InfluxDB und auch wenn benötigt auf einen OPC-UA Server scheint auch zu funktionieren. Wie bekomme ich Schreibzugriffe auf die Anlage hin?

Nochmals super vielen Dank

MfG

Hi @Bjoern-84 ,

für mich war die API Dokumentation an dieser Stelle alles andere als hilfreich, aber möglicherweise habe ich die richtige Stelle einfach noch nicht gefunden...!?

Im Endeffekt scheint es grundsätzlich mit einem Command in der URL (.../devices/0/features/{feature}/commands/activate und  - falls benötigt  - einem JSON Body zu funktionieren. 

Die beste Hilfestellung, um überhaupt eine Idee zu bekommen, brachte mir folgender Thread:

https://www.viessmann-community.com/t5/Getting-started-programming-with/HowTo-send-a-command-via-the... 

Bin aber noch nicht dazu gekommen, das auszuprobieren. 

Falls du dir das genauer anschaust oder eine vernünftige Doku findest, lass uns doch gerne mal ein paar Infos zum Thema zukommen.

Danke & viele Grüße

Danny 

 

...noch eine Anmerkung, die mir gerade erst aufgefallen ist...

 

Wenn du dir mit Chris' Logik mittels Read Feature List alle features holst, bekommst du ein großes Objekt mit allen einzelnen Features. 

Zu jedem einzelnen feature bekommst du ein Command-Objekt. Wenn du nichts schreiben kannst, scheint das leer zu sein. Wenn du schreiben kannst, sieht das folgendermaßen aus (am Beispiel des features heating.dhw.oneTimeCharge):

commands: object
  activate: object
    uri: "https://api.viessmann.com/iot/v1/equipment/installations/<id>/gateways/<id>/devices/0/features/heating.dhw.oneTimeCharge/commands/activate"
    name: "activate"
    isExecutable: true
    params: object
    empty
  deactivate: object
    uri: "https://api.viessmann.com/iot/v1/equipment/installations/<id>/gateways/<id>/devices/0/features/heating.dhw.oneTimeCharge/commands/deactivate"
    name: "deactivate"
    isExecutable: false
    params: object

    empty

 

Servus

Hat von euch schon einer probiert Parameter in die Anlage zu schreiben?

Ich bekomme das irgendwie nicht hin.

Mein Versuch:

http Request

POST

https://api.viessmann.com/iot/v1/equipment/installations/{{installationID}}/gateways/{{gatewaySerial...

 

Function Node:

msg.payload = {"data": 4 {"success": true}};
msg.headers = {};
msg.headers['Content-Type'] = 'application/json';
msg.headers['authorization'] = 'auth_token';
return msg;

 

Er nimmt mir aber schon den Payload nicht an.

In der API Documentation ist eine Beschreibung über den Body aber ich verstehe dies nicht wie ich das in den Payload umsetzen muss.

LG

Hallo Daniel,

ich fange gerade an, Daten auszulesen... und in DB zu schreiben... mit Temperaturen ... also Zahlenwerten bekomme ich es nach den Beispielen schon hin... nur mit Textwerten on / off beim Brennerstatus

habe ich noch Probleme... die Zeile mit dem Brennerstatur würde mich sehr interessieren...

könntest du die Einstellungen der  Elemente teilen ? ... wäre echt super

 

Danke Marco

Moin.

Häng einfach einen change-node dazwischen und mach aus on 1 umd off 0.

LG

 

Hallo Bjoern,

 

besten Dank ... habs gefunden... ich konnte nichtmal on/off abrufen... fand später das

value.value falsch war ...  properties.status.value ... so hats geklappt.

Danke VG

@CaCicalaLooks great!!! Thank you for the information.

 

But I didn't get / understand the following detail: Which hardware / interface do you use to read the data using the Node-RED http request node?

Is it a Viessmann Vitoconnect OPTO1 or OPTO2 device connected to your Vitodens installation?

Or something else?

 

Thx

Thomas

 

 

 

Hi,

I’m using a vitoconnect Opto 2. However it really isn’t that important. I don’t connect to the device directly but to the Viessmann Servers. For the time being, there is no way do connect to the Viessmann Vitoconnect directly. It wouldn’t be fitting to Viessmann’s business model. 
Don’t hesitate to ask further questions if anything is unclear. I have also published a solution on how to create and renew the access/refresh tokens automatically in this forum. 
kind regards/viele Grüße 

Chris 

Hi Chris,

 

thanks a lot for your quick response!

 

If I understand correctly, Vitoconnect Opto 1 or Opto 2 IS VERY important because without a device like this no data  can be retrieved at all. Neither directly nor via the cloud (Viessmann Servers).

One problem is, that currently these devices are very rare in Germany.

 

Where do you come from? What is the availability in your homeland?

Is there any other possibility / hardware available to read current measured values from my Vitodens 200 WB2 from the year 2000?

 

Kind regards

Thomas

 

 

Hi Thomas,

 

I am sure you DON'T need an adapter to directly connect to your heating system!

Earlier the adapter / opto-connector have been the only way to get data from the heating system. Please correct, if I am wrong, but i guess, that your Vitodens is connected to the internet via WLAN?

If thats correct than Vitodens is sending all data do Viessmann servers. To receive data you have to connect to the Viessmann servers too, using the offered API. Your are polling the servers to get your data that your Vitodens has sent to these servers before. There is no need (or possibility any longer?) to connect to the Vitodens directly using your LAN.

 

I am using a Vitodens 200W too and it is working exactly that way.

 

Greetings from Aachen,

Daniel

Now the heating system 

Hi,

ein Missverständnis. Ich meinte, es ist egal, ob du eine Vitoconnect Opto 1 oder 2 hast. Für die von mir beschriebene Lösung musst du deine Heizung mit den Viessmann Servern verbinden. Und das geht nur mit deren o.a. proprietären Geräten. Es sei denn, jemand hat einen Hack entwickelt. Es gibt wohl auch Lösungen, die direkt an die optische Schnittstelle rangehen. Damit habe ich mich aber noch nicht beschäftigt. 
Meine Installation aus 2019 steht in Italien. Steuern und überwachen kann ich alles aus Deutschland oder wo immer ich gerade bin. Damals gab es die Beschaffungsschwierigkeiten noch nicht. Saublöd, eigentlich. Also warten oder rumfragen ob noch irgend jemand eine Vitoconnect rumliegen hat. 
Ich schreibe meine Tutorials auf English. Das ist wohl die intendierte Forensprache hier. Wird aber immer deutscher 🙂

viele Grüße vom Gardasee und viel Glück beim Besorgen der Vitoconnect 

Chris

 

Bastellösung gefällig? Grade bei Github gefunden. Dazu sind einige Entwicklerkenntnisse und auch ggf Elektronik- und Löterfahrung erforderlich 

https://github.com/openv/openv/wiki/Die-Optolink-Schnittstelle 

Was für lange Winterabende… 

Bevor du dich zu sehr auf Vitocontrol fokussierst, besser mal nachsehen, ob deine 22 Jahre alte Vitodens 200 überhaupt damit kompatibel ist. 
Viele Grüße 

Chris

Da muss man nichts löten

Das original  Viessmann  Kabel Optolink Kabel gibt es für 39,5 € bei Ebay.

Neu und org. verpackt.

 

Für die Installation des Vcontrol auf dem Raspberry gibt es auch Tutorials.

Die richtigen Datepunkte für seine Regelung aus der langen Liste heraus zu finden ist etwas Trial und Error.

 

Um das Ganze noch in einem UI darzustellen und die Messwerte in einem MySQL zu Speicher erfordern etwas Erfahrung um die Anweisung des Tutorials anzuwenden und auf seine eigenen Bedürfnisse anzupassen.

 

Aber das ist sicher alles machbar wenn man Node-Red installieren kann.

 

VG 

 

 

 

 

Hallo Daniel,

 

nein, meine Vitodens 200 aus dem Jahr 2001 hängt eben nicht am Internet; und wegen mir muss sie das auch nicht. Mein Heimnetz / WLAN mit Verbindung zu meine Raspberry würde mir reichen...

 

Danke und Gruß

Thomas