{"id":2990,"date":"2024-10-25T13:33:09","date_gmt":"2024-10-25T11:33:09","guid":{"rendered":"https:\/\/www.rustimation.eu\/?p=2990"},"modified":"2026-02-05T10:13:28","modified_gmt":"2026-02-05T09:13:28","slug":"viessmann-ohne-api-optolink-splitter-2","status":"publish","type":"post","link":"https:\/\/www.rustimation.eu\/index.php\/viessmann-ohne-api-optolink-splitter-2\/","title":{"rendered":"Viessmann ohne API &#8211; Optolink Splitter (2)"},"content":{"rendered":"<p><strong>Letztes Update:\u00a0<\/strong>Januar 2026<\/p>\n<p>Hat man erst einmal die ganze Infrastruktur zum Laufen gebracht, geht es ans Eingemachte.<\/p>\n<h2>Identifikation des Ger\u00e4ts<\/h2>\n<p>Es gibt einen einfachen und einen deutlich aufw\u00e4ndigeren Weg, die Identifikation vorzunehmen:<\/p>\n<p>Der einfachere erfordert einen Account bei Viessmann &#8211; das ist aber derselbe, den du schon hast, wenn du das Vitoconnect K\u00e4stchen mit der ViCare App nutzt.<\/p>\n<p>Der zweite Weg geht direkt \u00fcber die Heizungsanlage: Hierzu hat Phil, der Entwickler des Optolink Splitters eine <a href=\"https:\/\/github.com\/philippoo66\/ViessData21\/blob\/master\/README.md#datapoints_readme\" target=\"_blank\" rel=\"noopener\">Anleitung zur Identifikation<\/a> geschrieben, die f\u00fcr Laien nicht ganz einfach zu verstehen ist. Ich versuche einen alternativen Erkl\u00e4rungsansatz &#8211; eventuell hilft auch eine Kombination aus beidem. Bei meinen sonstigen Artikeln in diesem Blog versuche ich m\u00f6glicht pr\u00e4zise Hinweise zu geben. Leider mu\u00df\u00a0 ich bei dieser Art der\u00a0 Ger\u00e4te-Identifikation und, weiter unten, den Datenpunkten ziemlich vage bleiben. Das liegt auch daran, dass ich lediglich Nutzer einer Vitodens Therme von Viessmann bin, kein Heizungsbauer und auch kein Programmierer. Ich bitte um Nachsicht, wenn nicht alles sofort 100%ig klar wird. Zum Gl\u00fcck gibt es auch noch den <a href=\"https:\/\/github.com\/philippoo66\/optolink-splitter\/discussions\" target=\"_blank\" rel=\"noopener\">Diskussionsbereich in Github<\/a>, in dem Fragen in der Regel sehr freundlich und hilfsbereit beantwortet werden.<!--more--><\/p>\n<p><a href=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/optolink_disclaimer-e1730199916608.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3116 size-full\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/optolink_disclaimer-e1730199916608.png\" alt=\"\" width=\"770\" height=\"221\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/optolink_disclaimer-e1730199916608.png 770w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/optolink_disclaimer-e1730199916608-300x86.png 300w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/optolink_disclaimer-e1730199916608-768x220.png 768w\" sizes=\"auto, (max-width: 770px) 100vw, 770px\" \/><\/a><\/p>\n<h3>Easy: Identifikation &#8211; Abk\u00fcrzung \u00fcber API<\/h3>\n<p>F\u00fcr alle diejenigen, die sich bisher mit der API in Verbindung mit oder ohne Node Red herumschlagen oder geschlagen haben, gibt es eine simple Abk\u00fcrzung. Die Abfrage der <strong>Device ID<\/strong> gibt freundlicherweise auch den Ger\u00e4tetyp im Klartext aus.<\/p>\n<p style=\"padding-left: 40px;\"><span style=\"color: #808080;\">Die ganze Geschichte, wie man die Viessmann API mit Node-Red anspricht und nutzt <span style=\"color: #993366;\">habe ich <a style=\"color: #993366;\" href=\"https:\/\/www.rustimation.eu\/index.php\/1_zugang_api\/\">hier beschrieben<\/a><\/span>.<\/span><\/p>\n<p>Hat man bisher nicht mit der API in Verbindung mit Node Red gearbeitet, ist dieser Weg aber vielleicht zu aufwendig, weshalb ich eine kleine <a href=\"https:\/\/www.rustimation.eu\/index.php\/viessmann-ohne-api-optolink-splitter-2\/#Und_dasselbe_in_Python8230\">Python Routine weiter unten\u00a0<\/a>zur Verf\u00fcgung stelle. Da beschr\u00e4nkt sich der Aufwand auf die Anmeldung bei Viessmann &#8211; hat sowieso jeder, der die ViCare Appp nutzt &#8211; sowie die Online Erzeugung eines Access Tokens im <a href=\"https:\/\/app.developer.viessmann-climatesolutions.com\/\" target=\"_blank\" rel=\"noopener\">Viessmann Developer Portal<\/a>.\u00a0 Dort findet man eine Kachel, mit der das Token erzeugt werden kann.<\/p>\n<h4>Erweiterung der bestehenden Node-Red App<\/h4>\n<p>Hat hast du f\u00fcr Node-Red ein g\u00fcltiges Access Token &#8211; es muss als flow Variable oder Global Variable vorliegen &#8211; erfolgt der bekannte dreischrittige Prozess, in dem erst die Installation ID, dann die Gateway Serial und darauf aufbauend die Device ID abgefragt wird.<\/p>\n<p>Im Grunde wird der Abschnitt, in dem die statischen Parameter erzeugt werden um zwei Nodes erweitert (Nodes mit blauen Punkten)<\/p>\n<p><a href=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-09_48_56-Node-RED-_-Viessmann-\u2013-Mozilla-Firefox.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3558\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-09_48_56-Node-RED-_-Viessmann-\u2013-Mozilla-Firefox.png\" alt=\"\" width=\"985\" height=\"321\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-09_48_56-Node-RED-_-Viessmann-\u2013-Mozilla-Firefox.png 985w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-09_48_56-Node-RED-_-Viessmann-\u2013-Mozilla-Firefox-300x98.png 300w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-09_48_56-Node-RED-_-Viessmann-\u2013-Mozilla-Firefox-768x250.png 768w\" sizes=\"auto, (max-width: 985px) 100vw, 985px\" \/><\/a><\/p>\n<p>Der Output sieht dann z.B. so aus: <a href=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-09_50_03-Node-RED-_-Viessmann-\u2013-Mozilla-Firefox.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-3559\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-09_50_03-Node-RED-_-Viessmann-\u2013-Mozilla-Firefox.png\" alt=\"\" width=\"387\" height=\"184\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-09_50_03-Node-RED-_-Viessmann-\u2013-Mozilla-Firefox.png 387w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-09_50_03-Node-RED-_-Viessmann-\u2013-Mozilla-Firefox-300x143.png 300w\" sizes=\"auto, (max-width: 387px) 100vw, 387px\" \/><\/a><\/p>\n<p>Der neue Funktionsnode sieht so aus:<\/p>\n<p><a href=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-09_54_20-Node-RED-_-Viessmann-\u2013-Mozilla-Firefox.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3560 size-large\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-09_54_20-Node-RED-_-Viessmann-\u2013-Mozilla-Firefox-1024x454.png\" alt=\"\" width=\"604\" height=\"268\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-09_54_20-Node-RED-_-Viessmann-\u2013-Mozilla-Firefox-1024x454.png 1024w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-09_54_20-Node-RED-_-Viessmann-\u2013-Mozilla-Firefox-300x133.png 300w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-09_54_20-Node-RED-_-Viessmann-\u2013-Mozilla-Firefox-768x341.png 768w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-09_54_20-Node-RED-_-Viessmann-\u2013-Mozilla-Firefox.png 1073w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><\/a>Beschrieben ist das bei <a href=\"https:\/\/www.rustimation.eu\/index.php\/1_zugang_api\/#Statische_Parameter\" target=\"_blank\" rel=\"noopener\"> statische Parameter\u00a0<\/a>in der Viessmann API Anleitung Kapitel 2. Obiger Flow sucht nach dem Device Type \"<strong>heating<\/strong>\", hat man eine PV Anlage oder etwas derart, muss wahrscheinlich ein anderer Suchparameter angegeben werden.<\/p>\n<h4>Access Token from Scratch<\/h4>\n<p>Hast du dein Node-Red f\u00fcr die API nicht mehr oder noch nicht,\u00a0 kannst du das Access Token ganz einfach \u00fcber das <a href=\"https:\/\/app.developer.viessmann-climatesolutions.com\/\" target=\"_blank\" rel=\"noopener\">Viessmann Dashboard<\/a> bei <a href=\"https:\/\/developer.viessmann-climatesolutions.com\" target=\"_blank\" rel=\"noopener\">developer.viessmann.com<\/a> generieren &#8211; vorausgesetzt, du hast einen Developer Account generiert.<\/p>\n<p>Dort gibt es eine Kachel \"Generate Access Token\". Hier den\u00a0 Scope \"IoT\" ausw\u00e4hlen. Das Access Token herauskopieren (Button) und in folgenden Flow (Inject Node) einsetzen:<\/p>\n<p><a href=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-12_44_14-Node-RED-_-Flow-1-\u2013-Mozilla-Firefox.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3567\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-12_44_14-Node-RED-_-Flow-1-\u2013-Mozilla-Firefox.png\" alt=\"\" width=\"949\" height=\"238\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-12_44_14-Node-RED-_-Flow-1-\u2013-Mozilla-Firefox.png 949w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-12_44_14-Node-RED-_-Flow-1-\u2013-Mozilla-Firefox-300x75.png 300w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2025-06-26-12_44_14-Node-RED-_-Flow-1-\u2013-Mozilla-Firefox-768x193.png 768w\" sizes=\"auto, (max-width: 949px) 100vw, 949px\" \/><\/a><\/p>\n<p>Die Model ID steht dann im Debug Node.<\/p>\n<p>Und hier das JSON File dazu<\/p>\n<pre class=\"height-set:true height:22 lang:js decode:true\">[{\"id\":\"9035c726d63ee272\",\"type\":\"http request\",\"z\":\"f6266c0fd5856e48\",\"name\":\"Installation ID\",\"method\":\"GET\",\"ret\":\"obj\",\"paytoqs\":\"ignore\",\"url\":\"https:\/\/api.viessmann-climatesolutions.com\/iot\/v2\/equipment\/installations\",\"tls\":\"\",\"persist\":false,\"proxy\":\"\",\"insecureHTTPParser\":false,\"authType\":\"\",\"senderr\":false,\"headers\":[],\"x\":680,\"y\":320,\"wires\":[[\"63ea985fa1fb6288\"]]},{\"id\":\"196e70331475247c\",\"type\":\"function\",\"z\":\"f6266c0fd5856e48\",\"name\":\"Auth Header\",\"func\":\"let atoken = flow.get('accessToken')\\nmsg.headers = {\\n    Authorization: \\\"Bearer \\\"+ atoken\\n}\\nreturn msg;\\n\\n\",\"outputs\":1,\"timeout\":\"\",\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":450,\"y\":320,\"wires\":[[\"9035c726d63ee272\"]]},{\"id\":\"404b3869948d43b9\",\"type\":\"http request\",\"z\":\"f6266c0fd5856e48\",\"name\":\"Gateway Serial\",\"method\":\"GET\",\"ret\":\"obj\",\"paytoqs\":\"ignore\",\"url\":\"https:\/\/api.viessmann-climatesolutions.com\/iot\/v2\/equipment\/gateways\",\"tls\":\"\",\"persist\":false,\"proxy\":\"\",\"insecureHTTPParser\":false,\"authType\":\"\",\"senderr\":false,\"headers\":[],\"x\":680,\"y\":360,\"wires\":[[\"9fe128f452a44b7c\"]]},{\"id\":\"63ea985fa1fb6288\",\"type\":\"change\",\"z\":\"f6266c0fd5856e48\",\"name\":\"set flow.installationID\",\"rules\":[{\"t\":\"set\",\"p\":\"installationID\",\"pt\":\"flow\",\"to\":\"payload.data[0].id\",\"tot\":\"msg\"}],\"action\":\"\",\"property\":\"\",\"from\":\"\",\"to\":\"\",\"reg\":false,\"x\":880,\"y\":320,\"wires\":[[\"1245cba72eb078f3\"]]},{\"id\":\"9fe128f452a44b7c\",\"type\":\"change\",\"z\":\"f6266c0fd5856e48\",\"name\":\"set flow.gatewaySerial\",\"rules\":[{\"t\":\"set\",\"p\":\"gatewaySerial\",\"pt\":\"flow\",\"to\":\"payload.data[0].serial\",\"tot\":\"msg\"}],\"action\":\"\",\"property\":\"\",\"from\":\"\",\"to\":\"\",\"reg\":false,\"x\":880,\"y\":360,\"wires\":[[\"adfe105d08faf8ac\"]]},{\"id\":\"1245cba72eb078f3\",\"type\":\"function\",\"z\":\"f6266c0fd5856e48\",\"name\":\"Auth Header\",\"func\":\"let atoken = flow.get('accessToken')\\nmsg.headers = {\\n    Authorization: \\\"Bearer \\\"+ atoken\\n}\\nreturn msg;\\n\\n\",\"outputs\":1,\"timeout\":\"\",\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":450,\"y\":360,\"wires\":[[\"404b3869948d43b9\"]]},{\"id\":\"cbc458b37a8c1950\",\"type\":\"http request\",\"z\":\"f6266c0fd5856e48\",\"name\":\"DeviceID\",\"method\":\"GET\",\"ret\":\"obj\",\"paytoqs\":\"ignore\",\"url\":\"https:\/\/api.viessmann-climatesolutions.com\/iot\/v2\/equipment\/installations\/{{iid}}\/gateways\/{{gws}}\/devices\/ \",\"tls\":\"\",\"persist\":false,\"proxy\":\"\",\"insecureHTTPParser\":false,\"authType\":\"\",\"senderr\":false,\"headers\":[],\"x\":660,\"y\":400,\"wires\":[[\"68cf237231231858\"]]},{\"id\":\"adfe105d08faf8ac\",\"type\":\"function\",\"z\":\"f6266c0fd5856e48\",\"name\":\"extended auth header\",\"func\":\"let atoken = flow.get('accessToken')\\nmsg.headers = {\\n    Authorization: \\\"Bearer \\\"+ atoken\\n}\\nmsg.iid = flow.get('installationID');\\nmsg.gws = flow.get('gatewaySerial');\\nreturn msg;\\n\\n\",\"outputs\":1,\"timeout\":\"\",\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":480,\"y\":400,\"wires\":[[\"cbc458b37a8c1950\"]]},{\"id\":\"68cf237231231858\",\"type\":\"function\",\"z\":\"f6266c0fd5856e48\",\"name\":\"locate Model ID\",\"func\":\"const deviceArray=msg.payload.data;\\nlet idx = deviceArray.findIndex( (element) =&gt; element.deviceType === 'heating');\\nmsg.payload=msg.payload.data[idx].modelId;\\n\\nreturn msg;\",\"outputs\":1,\"timeout\":\"\",\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":820,\"y\":400,\"wires\":[[\"57f2e631d498c8c9\"]]},{\"id\":\"7a0c61fdd8a9b6ea\",\"type\":\"inject\",\"z\":\"f6266c0fd5856e48\",\"name\":\"Inject Access Token\",\"props\":[{\"p\":\"payload\"},{\"p\":\"topic\",\"vt\":\"str\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"onceDelay\":0.1,\"topic\":\"\",\"payload\":\"Replace this text with your Access Token\",\"payloadType\":\"str\",\"x\":470,\"y\":280,\"wires\":[[\"0bd4a1d4d248070c\"]]},{\"id\":\"57f2e631d498c8c9\",\"type\":\"debug\",\"z\":\"f6266c0fd5856e48\",\"name\":\"ModelID\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"targetType\":\"msg\",\"statusVal\":\"\",\"statusType\":\"auto\",\"x\":1000,\"y\":400,\"wires\":[]},{\"id\":\"0bd4a1d4d248070c\",\"type\":\"change\",\"z\":\"f6266c0fd5856e48\",\"name\":\"\",\"rules\":[{\"t\":\"set\",\"p\":\"accessToken\",\"pt\":\"flow\",\"to\":\"payload\",\"tot\":\"msg\"}],\"action\":\"\",\"property\":\"\",\"from\":\"\",\"to\":\"\",\"reg\":false,\"x\":710,\"y\":280,\"wires\":[[\"196e70331475247c\"]]}]<\/pre>\n<h5>Und dasselbe in Python&#8230;<\/h5>\n<p>&#8230;f\u00fcr den Fall, dass du dich nicht mit Node-Red besch\u00e4ftigen willst &#8211; eigentlich schade, aber die Geschm\u00e4cker sind verschieden.<\/p>\n<pre class=\"lang:python decode:true\">import requests\r\n#In some cases the requests library needs to be installed prior to using this routine\r\nprint (\"This little routine needs a valid Viessmann API Access Token in order to work.\")\r\nprint (\"To generate it, you'll need a free Viessmann Developer Account.\")\r\nprint (\"The token can be generated at https:\/\/app.developer.viessmann-climatesolutions.com\/\")\r\nprint (\"Select Scope for IoT, press &lt;Generate Token&gt;, enter your credentials and\") \r\nprint (\"afterwards click on the copy button.\")\r\nprint (\"------------------------------------\")\r\nprint (\"Please enter your Access Token below:\")\r\n\r\natoken = input()\r\n# fetch Installation ID\r\nr=requests.get(\"https:\/\/api.viessmann-climatesolutions.com\/iot\/v2\/equipment\/installations\", headers={\"Authorization\":\"Bearer \"+ atoken})\r\ndata = r.json()\r\niid=data['data'][0]['id']\r\nprint (\"Installation ID:\", iid)\r\n\r\n#fetch gateway serial number\r\nr=requests.get(\"https:\/\/api.viessmann-climatesolutions.com\/iot\/v2\/equipment\/gateways\", headers={\"Authorization\":\"Bearer \"+atoken})\r\ndata = r.json()\r\n#print (data)\r\ngws=data['data'][0]['serial']\r\nprint (\"Gateway Serial:\", gws)\r\n\r\n#fetch and locate model ID\r\nr=requests.get(\"https:\/\/api.viessmann-climatesolutions.com\/iot\/v2\/equipment\/installations\/\"+str(iid)+\"\/gateways\/\"+str(gws)+\"\/devices\/\", headers={\"Authorization\":\"Bearer \"+ atoken})\r\ndata = r.json()\r\n\r\n# Index of first element with deviceType = 'heating' - in case of aircondition another keywoard is needed\r\nindex = next((i for i, item in enumerate(data['data']) if item.get('deviceType') == 'heating'), None)\r\nprint(\"Index:\", index)\r\nmodelId=data['data'][index]['modelId']\r\nprint (\"ModelID=\", modelId)\r\n<\/pre>\n<p>Hast du dein Ger\u00e4t identifiziert, geht es weiter bei <a href=\"https:\/\/www.rustimation.eu\/index.php\/viessmann-ohne-api-optolink-splitter-2\/#Datenpunktliste\">Datenpunktliste<\/a><\/p>\n<h3>The hard way: Identifikation &#8211; zu Fu\u00df<\/h3>\n<p>Das nachfolgende Kapitel hat eigentlich nur noch dokumentarischen Charakter.<\/p>\n<p>Es sei denn, die oben beschriebene, einfache Methode der Identifikation \u00fcber die API funktioniert nicht. Dann musst du diesen hier beschriebenen, etwas beschwerlichen Weg gehen, um dein Ger\u00e4t zu identifizieren.<\/p>\n<p>Dazu brauchen wir den Wert von einer oder zwei Adressen in unserem Ger\u00e4t:<\/p>\n<p>Die Ger\u00e4tekennung steht bei <strong>0xF8<\/strong>. Die Kennung hat folgende Struktur:<\/p>\n<figure id=\"attachment_2999\" aria-describedby=\"caption-attachment-2999\" style=\"width: 648px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/deviceIdent.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2999 size-full\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/deviceIdent.png\" alt=\"\" width=\"648\" height=\"148\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/deviceIdent.png 648w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/deviceIdent-300x69.png 300w\" sizes=\"auto, (max-width: 648px) 100vw, 648px\" \/><\/a><figcaption id=\"caption-attachment-2999\" class=\"wp-caption-text\">Quelle: https:\/\/github.com\/philippoo66\/ViessData21\/blob\/master\/README.md<\/figcaption><\/figure>\n<p>Mit dem MQTT Explorer ist die Ger\u00e4tekennung ganz einfach auszulesen:<\/p>\n<figure id=\"attachment_2995\" aria-describedby=\"caption-attachment-2995\" style=\"width: 844px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/MQTT_F8-e1729436417301.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2995 size-full\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/MQTT_F8-e1729436417301.png\" alt=\"\" width=\"844\" height=\"720\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/MQTT_F8-e1729436417301.png 844w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/MQTT_F8-e1729436417301-300x256.png 300w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/MQTT_F8-e1729436417301-768x655.png 768w\" sizes=\"auto, (max-width: 844px) 100vw, 844px\" \/><\/a><figcaption id=\"caption-attachment-2995\" class=\"wp-caption-text\">Die Vitodens Topics im Screenshot sind die von meiner eigenen Anlage und sehen bei der Original poll_list.py anders aus.<\/figcaption><\/figure>\n<p>Hierzu das Topic <span class=\"lang:default decode:true crayon-inline \">Vitodens\/cmnd<\/span>\u00a0 eintragen (es sei denn, ihr habt es in settings_ini.py ge\u00e4ndert), Format <em>raw<\/em> ausw\u00e4hlen, dann <span class=\"lang:default decode:true crayon-inline\">read;0xF8;8<\/span>\u00a0 und Publish anklicken. Das Ergebnis steht dann links unten.<\/p>\n<p>Gegebenenfalls brauchen wir noch den Wert bei F0<\/p>\n<p>Zus\u00e4tzlich brauchen wir noch die Tabelle, anhand derer wir den Anlagentyp (hoffentlich) identifizieren: Die Tabelle steht hier: <a href=\"https:\/\/github.com\/philippoo66\/ViessData21\/blob\/master\/DataPoints.txt\" target=\"_blank\" rel=\"noopener\"><span class=\"lang:default decode:true crayon-inline\">https:\/\/github.com\/philippoo66\/ViessData21\/blob\/master\/DataPoints.txt<\/span><\/a><\/p>\n<h4>Beispiel 1<\/h4>\n<p>Im ersten Schritt ben\u00f6tigen wir die ersten 2 Byte der Kennung bei F8.Zum Beispiel: <strong>204b<\/strong>01430000050c<\/p>\n<p>Mit 204b schauen wir in der Datapoints Tabelle nach und haben Gl\u00fcck:<a href=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2024-10-20-17_13_54-ViessData21_DataPoints.txt-at-master-\u00b7-philippoo66_ViessData21-\u00b7-GitHub-\u2013-Mozill.png\"><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2998\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2024-10-20-17_13_54-ViessData21_DataPoints.txt-at-master-\u00b7-philippoo66_ViessData21-\u00b7-GitHub-\u2013-Mozill.png\" alt=\"\" width=\"428\" height=\"155\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2024-10-20-17_13_54-ViessData21_DataPoints.txt-at-master-\u00b7-philippoo66_ViessData21-\u00b7-GitHub-\u2013-Mozill.png 428w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/2024-10-20-17_13_54-ViessData21_DataPoints.txt-at-master-\u00b7-philippoo66_ViessData21-\u00b7-GitHub-\u2013-Mozill-300x109.png 300w\" sizes=\"auto, (max-width: 428px) 100vw, 428px\" \/><\/a><\/p>\n<p>Ger\u00e4tetyp 0x204B zeigt auf ein einzig m\u00f6glliches Ger\u00e4t (Zeilennummer 11). Mit der Angabe CU401B_G k\u00f6nnen wir jetzt die passende Datenpunktliste heranziehen &#8211; siehe weiter unten.<\/p>\n<p>Leider ist die Identifikation nicht immer so einfach.<\/p>\n<h4>Beispiel 2<\/h4>\n<p>Phils Ger\u00e4t hat die Kennung<\/p>\n<p><strong>20 CB 1F C9 00 00 01 14<\/strong>, an F0 steht: <strong>01<\/strong><\/p>\n<p>Mit den ersten 2 Byte (20CB) gehen wir in die Datapoints Tabelle und finden eine Reihe verschiedene Ger\u00e4te mit dieser Nummer (roter Rahmen).<br \/>\nDas n\u00e4chste Byte (1F) k\u00f6nnen wir in der Regel ignorieren bzw. nehmen daf\u00fcr den Wert 01 an. Das n\u00e4chste Byte (Software Index Ident) ist C9.<br \/>\nMit <strong>01C9<\/strong> schauen wir wieder in der Tabelle bei den gefundenen Ger\u00e4ten nach.<\/p>\n<p>Uns interessiert die Spalte nach <em>softwareIndexIdent: <\/em>01C9 liegt im Bereich zwischen 01C8 und 01FF. Damit haben wir die Auswahl (orangener Rahmen) weiter verkleinert.<\/p>\n<p>Da nun wieder mehrere Ger\u00e4te zur Auswahl stehen brauchen wir noch den Wert des Bytes an F0 (ecnsysDeviceIdentF0). Dort steht bei Phil \"01\". Eine Spalte weiter nach rechts schauen wir, wo 01 passt. Es passt zwischen 1 und 9 (Blauer Rahmen). Damit haben wir das Ger\u00e4t identifiziert &#8211; es ist ein <em>VScotHO1_200_01.<\/em><\/p>\n<figure id=\"attachment_3009\" aria-describedby=\"caption-attachment-3009\" style=\"width: 1280px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/Device_Interpretation-e1729498298668.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3009 size-full\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/Device_Interpretation-e1729498298668.png\" alt=\"\" width=\"1280\" height=\"522\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/Device_Interpretation-e1729498298668.png 1280w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/Device_Interpretation-e1729498298668-300x122.png 300w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/Device_Interpretation-e1729498298668-1024x418.png 1024w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/10\/Device_Interpretation-e1729498298668-768x313.png 768w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/a><figcaption id=\"caption-attachment-3009\" class=\"wp-caption-text\">Identifikation des Ger\u00e4ts VScotHO1_200_01<\/figcaption><\/figure>\n<h4><strong>Beispiel 3<br \/>\n<\/strong><\/h4>\n<p>hier klappt es nicht so gut: Meine Vitodens 200 Baujahr 2019 zum Beispiel hat die Kennung <strong>20cb<\/strong>28cb0000010a. Mit 0x20CB schauen wir jetzt in <em>datapoints.txt<\/em> nach und entdecken wie gerade eben\u00a0 ca. 15 Ger\u00e4te dieses Typs.<\/p>\n<p>Die 28 wird ignoriert bzw. als 01 gelesen. Zusammen mit dem n\u00e4chsten Byte ergibt sich 01CB, das liegt wieder zwischen 01C8 und 01FF. Auch hier brauchen wir noch den Wert von F0. Dort steht bei mir \"0b\". Dummerweise passt das nirgendswo hin. Ende Gel\u00e4nde!<\/p>\n<p>Hier hilft nur fragen. Ohne Hintergrundwissen ist diese Aufgabe nicht zu l\u00f6sen. Es hat sich dann herausgestellt, dass es sich bei meinem Ger\u00e4t um eine VScotHO1_200_11 handelt. Mit etwas Mut zum Risiko kann man auch eine der anderen halbwegs stimmigen Ger\u00e4teIDs heranziehen. Die Datenpunktlisten innerhalb einer Familie unterscheiden sich zum Gl\u00fcck nur wenig.<\/p>\n<h2>Datenpunktliste<\/h2>\n<p>Jeder Ger\u00e4tetyp hat seine eigene Datenpunktliste. <a href=\"https:\/\/github.com\/philippoo66\/ViessData21\/blob\/master\/DP_Listen_2.zip\" target=\"_blank\" rel=\"noopener\">Die Sammlung aller Datenpunktlisten findet ihr hier zum downloaden<\/a>. (Auf der Seite rechts das Downloadsymbol anklicken.)<\/p>\n<p>Wenn ihr das ZipFile aufmacht, findet ihr die zu eurem Ger\u00e4t passende Datenpunktliste.<\/p>\n<p>So eine Datenpunktliste hat locker \u00fcber 700 Zeilen. Ganz oben stehen die Datenpunkte, die eher trivial sind &#8211; Au\u00dfentemperatur, Kesseltemperatur etc.<\/p>\n<p>Ein Wert, der in praktisch allen Ger\u00e4tefamilien vorkommt ist die Au\u00dfentemperatur:<\/p>\n<p><span class=\"lang:default decode:true crayon-inline\">&#8211; Aussentemperatur (5373) [TiefpassTemperaturwert_ATS~0x5525 (SInt)]<\/span><\/p>\n<p>Der Wert, auf den es ankommt ist der hex Wert<strong> 0x5525 (SInt)<\/strong>. Diesen k\u00f6nnten wir im Abschnitt <strong>Polling Datapoints<\/strong> der Datei poll_list.py eintragen &#8211; tats\u00e4chlich gibt's den aber schon&#8230;<\/p>\n<p>Das geschieht nach folgendem Schema:<\/p>\n<p><a href=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/12\/Datapoints1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3226 size-full\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/12\/Datapoints1.jpg\" alt=\"\" width=\"1280\" height=\"720\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/12\/Datapoints1.jpg 1280w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/12\/Datapoints1-300x169.jpg 300w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/12\/Datapoints1-1024x576.jpg 1024w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2024\/12\/Datapoints1-768x432.jpg 768w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/a><\/p>\n<p>Weitere Infos in <a href=\"https:\/\/github.com\/philippoo66\/optolink-splitter\/wiki\/010-Command-Syntax\" target=\"_blank\" rel=\"noopener\">Github.<\/a><\/p>\n<p>Soweit, so gut. Jetzt beginnt das gro\u00dfe Such- und Ratespiel. Die Datenpunkt Datei ist alles andere als \u00fcbersichtlich. Zudem ist sie generisch aufgebaut. Das hei\u00dft, dein Ger\u00e4t kann ja auf vielerlei Weise konfiguriert und gebaut werden. Mal hat es drei Heizkreise, mal einen, mal ist Solarthermie dabei, mal nicht und so weiter.<\/p>\n<p>Diese Spezifikationen sind mit HIDDEN gekennzeichnet. Zum Beispiel so: <span class=\"lang:default decode:true crayon-inline\">HIDDEN:(00_WWS=\"7 M2 + M3\" OR 00_WWS=\"8 M2 + M3 + WW\" OR 00_WWS=\"3 M2\" OR 00_WWS=\"4 M2 + WW\")<\/span><\/p>\n<p>Dieser spezielle HIDDEN Eintrag\u00a0 zieht sich bei meiner Datapoint Datei durch die ganze Liste. F\u00fcr Laien absolut unl\u00f6sbar, wenn man nicht wei\u00df, dass WWS f\u00fcr \"Warmwasserschema\" steht. Das Warmwasserschema steht an Adresse 0x7700 im Kapitel Inbetriebnahme. Je nachdem, welchen Wert das Byte an dieser Stelle hat, greift HIDDEN oder nicht. Bei mir steht an dieser Stelle eine \"8\". Das hei\u00dft, die Werte von Heizkreis A1 (und M1) kann ich ignorieren. Da soll mal einer draufkommen. Bei W\u00e4rmepumpen d\u00fcrfte das noch komplexer werden. Ein Glossar w\u00e4re nett, damit man sich nicht immer im Wald verirrt&#8230;<\/p>\n<p>Also: Nicht verzagen, Trial und Error. Parameter mit dem MQTT Explorer ausprobieren und schauen, ob etwas Vern\u00fcnftiges dabei herauskommt. Hilfreich sind auch die Beispielwerte, in Phil's Original <a class=\"Link--primary\" title=\"poll_list.py.example\" href=\"https:\/\/github.com\/philippoo66\/optolink-splitter\/blob\/main\/poll_list.py.example\" aria-label=\"poll_list.py.example, (File)\" data-discover=\"true\">poll_list.py<\/a>. Ich habe da eine Menge draus gelernt.<\/p>\n<p><strong>\u00dcbrigens<\/strong>: Nach jeder \u00c4nderung an der Datenpunkt Liste inpoll_list.py muss der Splitter mit <span class=\"lang:default decode:true crayon-inline \">sudo service optolink-splitter restart<\/span> neu gestartet werden, damit neue Datenpunkte gepollt werden.<\/p>\n<p><strong>Und noch etwas:<\/strong> Habt ihr einen Fehler in der Pollingliste &#8211; zum Beispiel ein Semikolon als Trenner anstatt eines Kommas, versagt der Splitter komplett seinen Dienst. Auch Vicare funktioniert dann nicht.<\/p>\n<p>Nachfolgend noch Phil's Tabelle, die ich um meine eigenen Datenpunkte (f\u00fcr die Vitodens 200) angereichert habe.<\/p>\n<pre class=\"lang:python decode:true \">    # meine Viessdata Tabelle\r\n    #088E;0800;0802;0804;0808;5525;5523;5527;0A82;0884;5738;088A;08A7;0A10;0C20;0A3C;0C24;555A;A38F;55D3;A152;6500;6513;6515;0xFFF4;0xFFFd;\r\n    (\"Anlagenzeit\", 0x088E, 8, 'vdatetime'),\r\n\r\n    (\"AussenTemp\", 0x0800, 2, 0.1, True),\r\n    (\"KesselTemp\", 0x0802, 2, 0.1, False),\r\n    (\"SpeicherTemp\", 0x0804, 2, 0.1, False),\r\n    (\"AbgasTemp\", 0x0808, 2, 0.1, False),\r\n    (\"AussenTemp_fltrd\", 0x5525, 2, 0.1, True),\r\n    (\"AussenTemp_dmpd\", 0x5523, 2, 0.1, True),\r\n    (\"AussenTemp_mixed\", 0x5527, 2, 0.1, True),\r\n#    (\"Eingang STB-Stoerung\", 0x0A82, 1, 1, False),\r\n#    (\"Fehlerstatus Brennersteuergeraet\", 0x5738, 1, 1, False),\r\n    (\"Brennerstarts\", 0x088A, 4, 1, False),\r\n    (\"Betriebsstunden\", 0x08A7, 4, 2.7777778e-4, False),  # 1\/3600\r\n#    (\"Stellung Umschaltventil\", 0x0A10, 1, 1, False),\r\n#    (\"Ruecklauftemp_calcd\", 0x0C20, 2, 0.01, False),\r\n#    (\"Pumpenleistung\", 0x0A3C, 1, 1, False),\r\n#    (\"Volumenstrom\", 0x0C24, 2, 0.1, False),  # eigentlich scale 1 aber f\u00fcr Viessdata Grafik\r\n    (\"KesselTemp_soll\", 0x555A, 2, 0.1, False),\r\n    (\"BrennerLeistung\", 0xA38F, 1, 0.5, False),\r\n    (\"BrennerModulation\", 0x55D3, 1, 1, False),\r\n#   (\"Status\", 0xA152, 2, 1, False),\r\n    (\"SpeicherTemp_soll_akt\", 0x6500, 2, 0.1, False),\r\n    (\"Speicherladepumpe\", 0x6513, 1, 1, False),\r\n    (\"Zirkulationspumpe\", 0x6515, 2, 1, False),\r\n    # bis hierher meine Viessdata Tabelle --------\r\n    # ab hier CaCicala\r\n    (\"WWTemp\", 0x0812, 2, 0.1, False),\r\n    (\"KollektorTemp\", 0x6564, 2, 0.1, True),\r\n    (\"GemVorlaufTemp\", 0x081A, 2, 0.1, False),\r\n    (\"FBHVorlaufTemp\", 0x3900, 2, 0.1, False),\r\n    (\"FBHPumpeStatus\", 0x3906, 1, 1, False),\r\n    (\"HKPumpeStatus\", 0x4906, 1, 1, False),\r\n    (\"HKVorlaufTemp\", 0x4900, 2, 0.1, False),\r\n    (\"WWSolar\", 0x6566, 2, 0.1, False),\r\n    (\"SolarpumpeStatus\", 0x6552, 1, 1, False),\r\n    (\"SolarBetriebsstunden\", 0x6568, 2, 1, False),\r\n    (\"OperatingModeHK1\", 0x2323, 1, 1, False),\r\n    (\"OperatingModeFBH\", 0x3323, 1, 1, False),\r\n    (\"OperatingModeHK\", 0x4323, 1, 1, False),\r\n    (\"SollTempTagFBH\", 0x3306, 1, 1, False),\r\n    (\"SollTempRedFBH\", 0x3307, 1, 1, False),\r\n    (\"SollTempTagHK\", 0x4306, 1, 1, False),\r\n    (\"SollTempRedHK\", 0x4307, 1, 1, False),\r\n    (\"HeizgVerbrTag\", 0x9000, 32, 'raw'),\r\n    (\"WWVerbrTag\", 0x9134, 32, 'raw'),\r\n    (\"StromVerbrTag\", 0x9268, 32, 'raw'),\r\n    (\"Frostgefahr\", 0x2500, 22, 'b:16:16::raw'),\r\n    (\"Frostgefahr_HK2\", 0x4500, 22, 'b:16:16::raw'),\r\n    (\"RTS_akt_HK2\", 0x3500, 22, 'b:12:13', 0.1, False),\r\n    (\"RTS_akt_HK3\", 0x4500, 22, 'b:12:13', 0.1, False),\r\n<\/pre>\n<p>Bei Schwierigkeiten im <a href=\"https:\/\/github.com\/philippoo66\/optolink-splitter\/discussions\" target=\"_blank\" rel=\"noopener\">Diskussionsforum<\/a> nachfragen.<\/p>\n<p>Das <a href=\"https:\/\/community.viessmann-climatesolutions.de\/t5\/Konnektivitaet\/Optolink-Switch-Splitter-Vitoconnect-MQTT-amp-TCP-IP\/td-p\/439982\" target=\"_blank\" rel=\"noopener\">Viessmann Forum<\/a> zu durchforsten ist ebenfalls hilfreich.<\/p>\n<h3>Weitere Datenquellen<\/h3>\n<p>f\u00fcr Datenpunkte von verschiedene Ger\u00e4tetypen gibt es noch ein paar. Basiswerte wie Temeraturen etc. scheinen bei allen Ger\u00e4tefamilien gleich zu sein, ebenso bei den neueren OneBase (3E) Ger\u00e4ten.<\/p>\n<ul>\n<li>Ggf. k\u00f6nnt ihr in der Viessmann Community den User FransOv auf englisch bitten, euch die Datenpunkte als <strong>Excel<\/strong> zu generieren. Diese Liste ist \u00fcbersichtlicher und vollst\u00e4ndiger. Der aktuelle Stand <a href=\"https:\/\/github.com\/philippoo66\/optolink-splitter\/wiki\/310-Parameter-Addresses\" target=\"_blank\" rel=\"noopener\">findet sich unter diesem Link.<\/a><\/li>\n<li>\"openv\" ist generell ein interessantes Projekt. Unter anderem auch eine <a href=\"https:\/\/github.com\/openv\/openv\/wiki\/Adressen\" target=\"_blank\" rel=\"noopener\">Tabelle, die\u00a0Datenpunkte<\/a> f\u00fcr eine Vielzahl von Ger\u00e4tetypen enth\u00e4lt &#8211; auch W\u00e4rmepumpen. Zus\u00e4tzlich eine Linksammlung zu einer gro\u00dfen Anzahl von Viessmann Projekten.<\/li>\n<li><span style=\"color: #808080;\"><span style=\"color: #000000;\"><strong>Achtung<\/strong>: Es gibt ein Viessmann Programm namens <em>Vitosoft<\/em>, in dessen SQL Datenbank und XML Tabellen die Werte drinstehen, die FransOv ins Excel \u00fcberf\u00fchrt. Aber Vorsicht: Phil r\u00e4t stark davon ab, dieses \"Programmmonster\" auf dem eigenen, produktiven PC zu installieren. Es handelt sich dabei um sehr alte SW Technologie (Windows 3.1) und es besteht die Gefahr, dass man sich seinen PC zerschie\u00dft<\/span>.<\/span><\/li>\n<\/ul>\n<p>Wie man die MQTT Daten in Node-Red verwurschtelt habe ich im <a href=\"https:\/\/www.rustimation.eu\/index.php\/viessmann-ohne-api-optolink-splitter-3\/\">n\u00e4chsten Kapitel<\/a> beschrieben.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Letztes Update:\u00a0Januar 2026 Hat man erst einmal die ganze Infrastruktur zum Laufen gebracht, geht es ans Eingemachte. Identifikation des Ger\u00e4ts Es gibt einen einfachen und einen deutlich aufw\u00e4ndigeren Weg, die Identifikation vorzunehmen: Der einfachere erfordert einen Account bei Viessmann &#8211; das ist aber derselbe, den du schon hast, wenn du das Vitoconnect K\u00e4stchen mit der &hellip; <a href=\"https:\/\/www.rustimation.eu\/index.php\/viessmann-ohne-api-optolink-splitter-2\/\" class=\"more-link\"><span class=\"screen-reader-text\">Viessmann ohne API &#8211; Optolink Splitter (2)<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,10,198],"tags":[96,99,126,194,206],"class_list":["post-2990","post","type-post","status-publish","format-standard","hentry","category-python","category-raspberry-pi","category-viessmann-ohne-api","tag-api","tag-mqtt","tag-node-red","tag-optolink-splitter","tag-viessmann"],"_links":{"self":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/2990","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/comments?post=2990"}],"version-history":[{"count":1,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/2990\/revisions"}],"predecessor-version":[{"id":3804,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/2990\/revisions\/3804"}],"wp:attachment":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/media?parent=2990"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/categories?post=2990"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/tags?post=2990"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}