Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Auslesen der Viessmann Cloud für Heizung?!?

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Auslesen der Viessmann Cloud für Heizung?!?

    This topic has been deleted. Only users with topic management privileges can see it.
    • K
      kue.simongmail.com last edited by

      Hallo zusammen, bin bei der Suche nach einer Anbindung meiner Viessmann Heizung hier drüber gestolpert und wollte fragen, ob es hier Neuigkeiten gibt?

      Viele Grüße.

      1 Reply Last reply Reply Quote 0
      • Neuschwansteini
        Neuschwansteini last edited by

        Hi,

        ja, wurschtel gerade damit rum, bestimmte Werte abfragen funktioniert schon per bash, setze das jetzt in iobroker javascript um…

        also ist jetzt nur noch eine Frage der Zeit 🙂

        1 Reply Last reply Reply Quote 0
        • K
          kue.simongmail.com last edited by

          Das hört sich super an. Freue mich schon darauf 🙂

          1 Reply Last reply Reply Quote 0
          • R
            radierer last edited by

            Hallo,

            wie siehts denn so aus hier? Gibts evtl. schon was Neues? Ich bin ebenfalls sehr daran interessiert, meine Heizung (und damit einhergehend auch die Zirkulationspumpe) in iobroker zu integrieren. Und das Ganze - aus den vom TE genannten Gründen - ohne zusätzliche Hardware etc.

            Also denn .. würde mich ziemlich freuen, wenn das hier klappen könnte. 🙂

            Gruß

            1 Reply Last reply Reply Quote 0
            • Neuschwansteini
              Neuschwansteini last edited by

              Der nette Franzose hat seine Api dazu in den letzten Wochen weiterentwickelt und jetzt endlich eine Dokumentation dazu gemacht 🙂

              Also das kleine Licht am Horizont ist etwas heller geworden..

              Da Viessmann zur Zeit wohl auch noch an den Datenpunkten arbeitet und Änderungen vornimmt, ist es selbst, wenn die Api funktioniert nicht so einfach.

              Also wer sich das antun möchte, der kann ja auch schonmal auf einem Testsystem (am besten VM ) mal n Apache und php installieren, und sich die Api versuchen zu installieren, ohne diese wird es sowieso nicht gehen.

              Wenn das läuft, dann kann man per Javascript relativ einfach Werte abfragen und dann wandeln ( zur Zeit müssen einige Werte durch 8 geteilt werden, etc. damit sie stimmen..)

              Also einfach ist das nicht. :ugeek:

              1 Reply Last reply Reply Quote 0
              • R
                radierer last edited by

                Oh ha .. da bin ich leider raus .. wenn ich das könnte, würd ich das sofort machen, bin aber leider nur blöder User .. :oops:

                Mich würds aber trotzdem riesig freuen, wenns jemand hinbekommt und man das Ganze dann evtl. noch als Adapter zur Verfügung stellen könnte. 🙂

                1 Reply Last reply Reply Quote 0
                • R
                  radierer last edited by

                  Guten Morgen,

                  mal sone ganz blöde Frage: Wieso steht im entsprechenden Issue bei GitHub eigentlich, dass das schon released ist? Oder deute ich den Status dort falsch?

                  https://github.com/ioBroker/AdapterRequests/issues/117

                  OMCastle created this issue in ioBroker/AdapterRequests

                  closed Viessmann Cloud Adapter #117

                  1 Reply Last reply Reply Quote 0
                  • Neuschwansteini
                    Neuschwansteini last edited by

                    Das ist bestimmt verwechselt worden..

                    1 Reply Last reply Reply Quote 0
                    • R
                      radierer last edited by

                      @ilovegym:

                      Das ist bestimmt verwechselt worden.. `

                      Das denke ich auch, dass es mit dem bereits vorhandenen Adapter verwechselt wurde. Für den benötigt man ja aber zusätzliche Hardware, was hier ja auch aufgrund der Garantie der online- bzw. Cloudanbindung vermieden werden sollte.

                      1 Reply Last reply Reply Quote 0
                      • Neuschwansteini
                        Neuschwansteini last edited by

                        Hallo,

                        also, über den Umweg FHEM ist es möglich, die Werte in iobroker zu bekommen.

                        Hier ne kurze Beschreibung des Weges:

                        1. Raspian-x86-stretch.iso runtergeladen und in proxmox ne VM damit erstellt. Alle Befehle per root oder mit sudo ausführen!

                        2. apt-get update && apt-get upgrade

                        3. reboot

                        4. raspi-config aufrufen, location einstellen, ssh aktivieren, passwort und hostname setzen

                        5. reboot

                        6. per ssh auf die VM, und php7 und php curl installieren: apt-get install php anschliessend apt-get install php-curl

                        7. Jetzt installieren wir alles für FHEM:

                        8. apt-get install telnet

                        9. wget -qO - http://debian.fhem.de/archive.key | apt-key add -

                        10. nano /etc/apt/sources.list dort das einfügen: deb http://debian.fhem.de/nightly/ /

                        11. apt-get update && apt-get upgrade

                        12. apt-get install fhem

                        13. reboot tut gut

                        14. testen ob fhem läuft, über n webbrowser port 8083 aufrufen oder netstat -npl | grep tcp schauen nach port 8083 7072

                        15. jetzt Datei vissmann.php erzeugen, in /opt/fhem speichern und dieses script reinkopieren:

                        ( das Script habe ich im fhem-forum gefunden, vielen Dank an den Autor, hier der Link: https://forum.fhem.de/index.php/topic,8 … #msg849123 )

                        #!/usr/bin/php
                         $arg)
                        {
                        	debug_msg ("$argNo : $argv[$argNo]\n", $debug);
                        	switch ($argv[$argNo]) {
                        		case "--debug":
                        			$debug = true;
                        			break;
                        		case "-user":
                        			$isiwebuserid = $argv[$argNo + 1];
                        			break;
                        		case "-passwd":
                        			$isiwebpasswd = $argv[$argNo + 1];
                        			break;
                        	}
                        }
                        
                        debug_msg("isiwebuserid = $isiwebuserid\n", $debug); 
                        debug_msg("isiwebpasswd = $isiwebpasswd\n", $debug); 
                        
                        $callback_uri = "vicare://oauth-callback/everest"; 
                        $code = getCode(); 
                        debug_msg("code=$code\n", $debug); 
                        
                        $access_token = getAccessToken($code); 
                        debug_msg("access token= $access_token\n", $debug); 
                        
                        $resource = getResource($access_token, $apiURLBase . $general); 
                        debug_msg("resource: $resource\n", $debug); 
                        
                        $installation = json_decode($resource, true)["entities"][0]["properties"]["id"];
                        $gw = json_decode($resource, true)["entities"][0]["entities"][0]["properties"]["serial"];
                        debug_msg("gw: $gw\n", $debug); 
                        
                        $RequestList = array(
                            "heating.boiler.serial.value" 												=> "Kessel_Seriennummer",
                            "heating.boiler.sensors.temperature.main.status" 						=> "Kessel_Status",
                            "heating.boiler.sensors.temperature.main.value" 						=> "Kesseltemperatur",
                            "heating.burner.active" 														=> "Brenner_aktiv",
                            "heating.burner.automatic.status" 											=> "Brenner_Status",
                            "heating.burner.automatic.errorCode" 										=> "Brenner_Fehlercode",
                            "heating.circuits.enabled" 													=> "Aktive_Heizkreise",
                            "heating.circuits.0.active" 													=> "HK1-aktiv",
                            "heating.circuits.0.circulation.schedule.active" 						=> "HK1-Zeitsteuerung_Zirkulation_aktiv",
                            "heating.circuits.0.circulation.schedule.entries" 					=> "HK1-Zeitsteuerung_Zirkulation",
                            "heating.circuits.0.frostprotection.status" 							=> "HK1-Frostschutz_Status",
                            "heating.circuits.0.heating.curve.shift" 								=> "HK1-Heizkurve-Niveau",
                            "heating.circuits.0.heating.curve.slope" 								=> "HK1-Heizkurve-Steigung",
                            "heating.circuits.0.heating.schedule.active" 							=> "HK1-Zeitsteuerung_Heizung_aktiv",
                            "heating.circuits.0.heating.schedule.entries" 							=> "HK1-Zeitsteuerung_Heizung",
                            "heating.circuits.0.operating.modes.active.value" 					=> "HK1-Betriebsart",
                            "heating.circuits.0.operating.modes.dhw.active" 						=> "HK1-WW_aktiv",
                            "heating.circuits.0.operating.modes.dhwAndHeating.active" 			=> "HK1-WW_und_Heizen_aktiv",
                            "heating.circuits.0.operating.modes.forcedNormal.active" 			=> "HK1-Solltemperatur_erzwungen",
                            "heating.circuits.0.operating.modes.forcedReduced.active" 			=> "HK1-Reduzierte_Temperatur_erzwungen",
                            "heating.circuits.0.operating.modes.standby.active" 					=> "HK1-Standby_aktiv",
                            "heating.circuits.0.operating.programs.active.value" 				=> "HK1-Programmstatus",
                            "heating.circuits.0.operating.programs.comfort.active" 				=> "HK1-Solltemperatur_comfort_aktiv",
                            "heating.circuits.0.operating.programs.comfort.temperature" 		=> "HK1-Solltemperatur_comfort",
                            "heating.circuits.0.operating.programs.eco.active" 					=> "HK1-Solltemperatur_eco_aktiv",
                            "heating.circuits.0.operating.programs.eco.temperature" 			=> "HK1-Solltemperatur_eco",
                            "heating.circuits.0.operating.programs.external.active" 			=> "HK1-External_aktiv",
                            "heating.circuits.0.operating.programs.external.temperature" 		=> "HK1-External_Temperatur",
                            "heating.circuits.0.operating.programs.holiday.active" 				=> "HK1-Urlaub_aktiv",
                            "heating.circuits.0.operating.programs.holiday.start" 				=> "HK1-Urlaub_Start",
                            "heating.circuits.0.operating.programs.holiday.end" 					=> "HK1-Urlaub_Ende",
                            "heating.circuits.0.operating.programs.normal.active" 				=> "HK1-Solltemperatur_aktiv",
                            "heating.circuits.0.operating.programs.normal.temperature" 		=> "HK1-Solltemperatur_normal",
                            "heating.circuits.0.operating.programs.reduced.active"				=> "HK1-Solltemperatur_reduziert_aktiv",
                            "heating.circuits.0.operating.programs.reduced.temperature" 		=> "HK1-Solltemperatur_reduziert",
                            "heating.circuits.0.operating.programs.standby.active" 				=> "HK1-Standby_aktiv",
                            "heating.circuits.0.sensors.temperature.room.status" 				=> "HK1-Raum_Status",
                            "heating.circuits.0.sensors.temperature.supply.status"				=> "HK1-Vorlauftemperatur_aktiv",
                            "heating.circuits.0.sensors.temperature.supply.value" 				=> "HK1-Vorlauftemperatur",
                            "heating.configuration.multiFamilyHouse.active" 						=> "Mehrfamilenhaus_aktiv",
                            "heating.controller.serial.value" 											=> "Controller_Seriennummer",
                            "heating.device.time.offset.value" 										=> "Device_Time_Offset",
                            "heating.dhw.active" 															=> "WW-aktiv",
                            "heating.dhw.oneTimeCharge.active" 										=> "WW-onTimeCharge_aktiv",
                            "heating.dhw.sensors.temperature.hotWaterStorage.status" 			=> "WW-Temperatur_aktiv",
                            "heating.dhw.sensors.temperature.hotWaterStorage.value" 			=> "WW-Isttemperatur",
                            "heating.dhw.temperature.value" 											=> "WW-Solltemperatur",
                            "heating.dhw.schedule.active" 												=> "WW-zeitgesteuert_aktiv",
                            "heating.dhw.schedule.entries" 												=> "WW-Zeitplan",
                            "heating.errors.active.entries" 											=> "Fehlereinträge_aktive",
                            "heating.errors.history.entries" 											=> "Fehlereinträge_Historie",
                            "heating.gas.consumption.dhw.day" 											=> "Gasverbrauch_WW/Tag",
                            "heating.gas.consumption.dhw.week" 										=> "Gasverbrauch_WW/Woche",
                            "heating.gas.consumption.dhw.month" 										=> "Gasverbrauch_WW/Monat",
                            "heating.gas.consumption.dhw.year" 										=> "Gasverbrauch_WW/Jahr",
                            "heating.gas.consumption.heating.day" 									=> "Gasverbrauch_Heizung/Tag",
                            "heating.gas.consumption.heating.week" 									=> "Gasverbrauch_Heizung/Woche",
                            "heating.gas.consumption.heating.month" 									=> "Gasverbrauch_Heizung/Monat",
                            "heating.gas.consumption.heating.year" 									=> "Gasverbrauch_Heizung/Jahr",
                            "heating.sensors.temperature.outside.status" 							=> "Aussen_Status",
                            "heating.sensors.temperature.outside.statusWired" 					=> "Aussen_StatusWired",
                            "heating.sensors.temperature.outside.statusWireless" 				=> "Aussen_StatusWireless",
                            "heating.sensors.temperature.outside.value" 							=> "Aussentemperatur",
                            "heating.service.timeBased.serviceDue" 									=> "Service_fällig",
                            "heating.service.timeBased.serviceIntervalMonths" 					=> "Service_Intervall_Monate",
                            "heating.service.timeBased.activeMonthSinceLastService" 			=> "Service_Monate_aktiv_seit_letzten_Service",
                            "heating.service.timeBased.lastService" 									=> "Service_Letzter",
                            "heating.service.burnerBased.serviceDue" 								=> "Service_fällig_brennerbasier",
                            "heating.service.burnerBased.serviceIntervalBurnerHours" 			=> "Service_Intervall_Betriebsstunden",
                            "heating.service.burnerBased.activeBurnerHoursSinceLastService" 	=> "Service_Betriebsstunden_seit_letzten",
                            "heating.service.burnerBased.lastService" 								=> "Service_Letzter_brennerbasiert",
                        );
                        
                        // Erstmal alle Daten komplett abfragen
                        $resource = getResource($access_token, "https://api.viessmann-platform.io/operational-data/installations/$installation/gateways/$gw/devices/0/features/");
                        
                        $items = json_decode($resource, true)["entities"];
                        
                        $r = "";
                        
                        // Jetzt alle Werte in der Antwort checken und in ein Array schreiben
                        foreach ($items as $ItemNo => $Item)
                        { 
                        	$FieldName = strval($items[$ItemNo]["class"][0]);
                        	//echo "$FieldName\n";
                        
                        	if ( array_key_exists("properties", $items[$ItemNo] ) ) 
                        	{
                        		 $Properties=$items[$ItemNo]["properties"];
                        		 foreach ($Properties as $PropertyNo => $Property)
                        		 {
                        			$Typ = strval($Properties["$PropertyNo"]["type"]);
                        			switch($Typ) {
                        				case "string":
                        				case "number":
                        					$Wert = strval($Properties["$PropertyNo"]["value"]);
                        					break;
                        				case "boolean":
                        					if ($Properties["$PropertyNo"]["value"] != "")
                        					{$Wert = "1";} else {$Wert = "0";}
                        					break;
                        				case "array":
                        					$Wert = implode(",", $Properties["$PropertyNo"]["value"]);
                        					break;
                        				case "Schedule":
                        					$Entries = $Properties["$PropertyNo"]["value"];
                        					$Wert = "";
                        					foreach ($Entries as $EntryNo => $Entry)
                        					{
                        						$Wert = $Wert.$EntryNo.":";
                        						$Entries2 = $Entries["$EntryNo"][0];
                        						foreach ($Entries2 as $EntryNo2 => $Entry2)
                        						{
                        							$Wert = $Wert." ".$EntryNo2.":".$Entries2[$EntryNo2];
                        						}
                        						$Wert = $Wert.", ";
                        					}
                        					break;
                        				case "ErrorListChanges":	
                        					$Wert = "Wert ist ein ErrorListChanges";
                        					break;
                        		 	}
                        		 	$Description = $RequestList["$FieldName.$PropertyNo"];
                        			debug_msg ("$FieldName.$PropertyNo = $Description = $Wert ($Typ)", $debug);
                        			if($debug === false) {$r = "$r"."setreading vitoconnect100 $Description $Wert ;\n";}
                        		 } 
                        	} 
                        }
                        
                        debug_msg ("\n$r", $debug);
                        shell_exec('perl /opt/fhem/fhem.pl 7072 "'.$r.'"');
                        
                        return(0);
                        
                        function getCode() {
                        	 global $client_id, $authorizeURL, $callback_uri;
                        	 global $isiwebuserid, $isiwebpasswd;
                        	 $url = "$authorizeURL?client_id=$client_id&scope=openid&redirect_uri=$callback_uri&response_type=code";
                        	 $header = array("Content-Type: application/x-www-form-urlencoded");
                        	 $curloptions = array(
                                CURLOPT_URL => $url,
                                CURLOPT_HTTPHEADER => $header,
                                CURLOPT_SSL_VERIFYPEER => false,
                                CURLOPT_RETURNTRANSFER => true,
                                CURLOPT_USERPWD => "$isiwebuserid:$isiwebpasswd",
                                CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
                                CURLOPT_POST => true, 
                                );
                            $curl = curl_init();
                            curl_setopt_array($curl, $curloptions);
                            $response = curl_exec($curl);
                            curl_close($curl);
                            $matches = array();
                            $pattern = '/code=(.*)"/';
                            preg_match_all($pattern, $response, $matches);
                            return ($matches[1][0]);
                        }
                        
                        function getAccessToken($authorization_code) {
                            global $token_url, $client_id, $client_secret, $callback_uri;
                            global $isiwebuserid, $isiwebpasswd;
                            $header = array("Content-Type: application/x-www-form-urlencoded;charset=utf-8");
                            $params = array( 
                                "client_id" => $client_id,
                                "client_secret" => $client_secret,
                                "code" => $authorization_code,
                                "redirect_uri" => $callback_uri,
                                "grant_type" => "authorization_code");
                        
                            $curloptions = array(
                            	CURLOPT_URL => $token_url, 
                            	CURLOPT_HEADER => false, 
                            	CURLOPT_HTTPHEADER => $header, 
                            	CURLOPT_SSL_VERIFYPEER => false, 
                            	CURLOPT_RETURNTRANSFER => true, 
                            	CURLOPT_POST => true, 
                            	CURLOPT_POSTFIELDS => rawurldecode(http_build_query($params)));
                        
                            $curl = curl_init();
                            curl_setopt_array($curl, $curloptions);
                            $response = curl_exec($curl); 
                            curl_getinfo($curl); 
                            curl_close($curl);
                        
                             if ($response === false) {
                             	 echo "Failed\n"; echo curl_error($curl);
                           // } elseif (json_decode($response)->error) {
                           //     echo "Error:\n"; echo $authorization_code; echo $response;
                            }
                            return json_decode($response)->access_token;
                        }
                        
                        //    we can now use the access_token as much as we want to access protected resources
                        function getResource($access_token, $api) {
                            //echo "ok\n";
                            $header = array("Authorization: Bearer {$access_token}");
                            //var_dump($header);
                            $curl = curl_init(); 
                            curl_setopt_array($curl, array( 
                        	    CURLOPT_URL => $api, 
                           	 CURLOPT_HTTPHEADER => $header, 
                           	 CURLOPT_SSL_VERIFYPEER => false, 
                           	 CURLOPT_RETURNTRANSFER => true,
                            ));
                        
                            $response = curl_exec($curl); 
                            curl_close($curl);
                        
                            //return json_decode($response, true);
                            return ($response);
                        }
                        
                        function debug_msg($message, $debug) {
                        	if ($debug) {
                        		 echo "$message\n";
                                }
                        }
                        
                        ?>
                        
                        

                        Erstellt einfach mit "nano /opt/fhem/vissmann.php" die Datei, copy und paste, setzt noch bei den beiden Parametern euren Usernamen(Email) und das Kennwort, und speichert mit ctrl-o und verlasst den Editor mit crtl-x.

                        1. php script ausführbar machen mit chmod +x vissmann.php

                        2. php script dem user fhem zuweisen mit chown vissmann.php fhem

                        3. jetzt die restlichen Schritte, wie im FHEM-Forum beschrieben in FHEM ein Dummy anlegen und die Cron dazu einrichten(AT)

                        https://forum.fhem.de/index.php/topic,8 … #msg849123

                        1. jetzt kann man testen, ob das script funktioniert, es kann auch einfach in der console mit

                        sudo php7.0 vissmann.php --debug -user username -passwd geheimespasswort

                        aufgerufen werden

                        1. jetzt, falls noch nicht geschehen, den iobroker.fhem-adapter installieren, ip, port eintragen, und sich freuen.
                        1 Reply Last reply Reply Quote 0
                        • A
                          as15 last edited by

                          Mega! Wenn wir hierfür nen Adapter hinbekommen könnten ohne den Umweg über FHEM wäre das noch praktikabler…

                          Danke aber für die Anleitung!

                          1 Reply Last reply Reply Quote 0
                          • Neuschwansteini
                            Neuschwansteini last edited by

                            ja, das ist der Plan, da es vom Hersteller keine Api gibt, wollte ich erstmal was, das man überhaupt benutzen kann, und Viessmann hat in den letzten Monaten einiges an der Schnittstelle geändert, genau wie die App.

                            Aber jetzt scheint da eine gewisse Ruhe eingekehrt zu sein, und man kann sich an die Umsetzung machen.

                            1 Reply Last reply Reply Quote 0
                            • R
                              radierer last edited by

                              Wobei ich da Viessmann hinsichtlich der App auch nicht wirklich verstehe. Scheinbar wird ja die noch halbwegs brauchbare VitotrolPlus App gestrichen (im Play Store schon nicht mehr verfügbar) und stattdessen gibt es nur noch die ViCare Katastrophen App .. verstehe wer will. :roll:

                              @ilovegym: An dich auf jeden Fall schonmal ein großes Dankeschön für deine Mühe. 🙂

                              1 Reply Last reply Reply Quote 0
                              • Neuschwansteini
                                Neuschwansteini last edited by

                                ich schau mal die Tage, ob ich das php nicht nach iobroker-javascript portiert bekomme.. mir macht nur diese Authentifizierung kopfschmerzen…

                                1 Reply Last reply Reply Quote 0
                                • R
                                  radierer last edited by

                                  Das wäre sehr geil, wenn du das hinbekommen könntest. 😄

                                  Zumal ich auch denke, dass Viessmann Heizungen mit Vitoconnect doch recht verbreitet sind und son Adapter für viele nützlich sein könnte.

                                  1 Reply Last reply Reply Quote 0
                                  • A
                                    as15 last edited by

                                    Ich habe noch nie mit FHEM gearbeitet und habe in iobroker nun leider keine Werte in den States (States wurden aber generiert).

                                    Also meine Frage zur Funktionsweise. Wie kommen die Werte von dem php-Skript in den Dummy? Verstehe die Verknüpfung leider nicht.

                                    Edit: Habs nochmal nach der Anleitung gemacht. Jetzt geht’s <emoji seq="1f44d">👍</emoji> Danke

                                    1 Reply Last reply Reply Quote 0
                                    • Neuschwansteini
                                      Neuschwansteini last edited by

                                      Die Werte vom Script kommen über Telnet Port 7072 ( das ist so standard bei FHEM ), also prüfe, ob du telnet aktiv hast und port 7072 vom fhem offen ist ( das siehst du im fhem logfile, und mit netstat -npl kannst du das in der console sehen ).

                                      Sollte das alles ok sein, und die Werte werden nicht automatisch aktualisiert, ist vielleicht beim anlegen des TA was schiefgelaufen.

                                      Schaue da nochmal in den Beitrag von dem, der das Script geschrieben hat, der Absatz mit dem TA ist wichtig und da nicht vergessen, Username und Passwort anzugeben.

                                      ( TA steht wohl für Time Automatision, also cron 😉 )

                                      • befasse mich auch erst seit 3 Tagen mit fhem .. 🙂
                                      1 Reply Last reply Reply Quote 0
                                      • O
                                        OMCastle last edited by

                                        Hast Du schon Teile der Login-Routine nach JS versucht zu übersetzen?

                                        ToDo liegt aus meiner Sicht dabei, die folgenden 3 PHP-Funktionen nach JavaScript zu übersetzen?!?

                                        Gibt es hier einen JavaScript Spezi, der das umschreiben kann?

                                        function getCode() {

                                        global $client_id, $authorizeURL, $callback_uri;

                                        global $isiwebuserid, $isiwebpasswd;

                                        $url = "$authorizeURL?client_id=$client_id&scope=openid&redirect_uri=$callback_uri&response_type=code";

                                        $header = array("Content-Type: application/x-www-form-urlencoded");

                                        $curloptions = array(

                                        CURLOPT_URL => $url,

                                        CURLOPT_HTTPHEADER => $header,

                                        CURLOPT_SSL_VERIFYPEER => false,

                                        CURLOPT_RETURNTRANSFER => true,

                                        CURLOPT_USERPWD => "$isiwebuserid:$isiwebpasswd",

                                        CURLOPT_HTTPAUTH => CURLAUTH_BASIC,

                                        CURLOPT_POST => true,

                                        );

                                        $curl = curl_init();

                                        curl_setopt_array($curl, $curloptions);

                                        $response = curl_exec($curl);

                                        curl_close($curl);

                                        $matches = array();

                                        $pattern = '/code=(.*)"/';

                                        preg_match_all($pattern, $response, $matches);

                                        return ($matches[1][0]);

                                        }

                                        function getAccessToken($authorization_code) {

                                        global $token_url, $client_id, $client_secret, $callback_uri;

                                        global $isiwebuserid, $isiwebpasswd;

                                        $header = array("Content-Type: application/x-www-form-urlencoded;charset=utf-8");

                                        $params = array(

                                        "client_id" => $client_id,

                                        "client_secret" => $client_secret,

                                        "code" => $authorization_code,

                                        "redirect_uri" => $callback_uri,

                                        "grant_type" => "authorization_code");

                                        $curloptions = array(

                                        CURLOPT_URL => $token_url,

                                        CURLOPT_HEADER => false,

                                        CURLOPT_HTTPHEADER => $header,

                                        CURLOPT_SSL_VERIFYPEER => false,

                                        CURLOPT_RETURNTRANSFER => true,

                                        CURLOPT_POST => true,

                                        CURLOPT_POSTFIELDS => rawurldecode(http_build_query($params)));

                                        $curl = curl_init();

                                        curl_setopt_array($curl, $curloptions);

                                        $response = curl_exec($curl);

                                        curl_getinfo($curl);

                                        curl_close($curl);

                                        if ($response === false) {

                                        echo "Failed\n"; echo curl_error($curl);

                                        // } elseif (json_decode($response)->error) {

                                        // echo "Error:\n"; echo $authorization_code; echo $response;

                                        }

                                        return json_decode($response)->access_token;

                                        }

                                        // we can now use the access_token as much as we want to access protected resources

                                        function getResource($access_token, $api) {

                                        //echo "ok\n";

                                        $header = array("Authorization: Bearer {$access_token}");

                                        //var_dump($header);

                                        $curl = curl_init();

                                        curl_setopt_array($curl, array(

                                        CURLOPT_URL => $api,

                                        CURLOPT_HTTPHEADER => $header,

                                        CURLOPT_SSL_VERIFYPEER => false,

                                        CURLOPT_RETURNTRANSFER => true,

                                        ));

                                        $response = curl_exec($curl);

                                        curl_close($curl);

                                        //return json_decode($response, true);

                                        return ($response);

                                        }

                                        1 Reply Last reply Reply Quote 0
                                        • thovid
                                          thovid last edited by

                                          Hallo zusammen, bin vor kurzem auch auf die php Skripte zur Anbindung der Viessmann API gestoßen, und da ich wie andere hier die Garantieverlängerung mitnehmen wollte und daher die vitroconnect dran habe, habe eine erste Version für einen ioBroker Adapter geschrieben. Das ganze kann hier: https://github.com/thovid/ioBroker.viessmannapi auf github gefunden werden, die eigentliche Verbindung mit dem Viessmann Server ist in eine eigenen Lib ausgelagert (https://github.com/thovid/node-viessmann-api-client)

                                          Installation erfolgt über die github url, in den Einstellungen müssen Benutzername und Passwort des Viessmann Accounts eingetragen werden. Der Adapter fragt dann ein mal pro Minute die Werte der Heizung ab und legt diese in entsprechenden States ab.

                                          Derzeit kann man noch nichts schalten über den Adapter, d.h. alle Werte sind rein lesend. Würde mich über Feedback, Bugreports und Verbesserungsvorschläge freuen (gerne auf Github).

                                          Viele Grüße,

                                          Thomas

                                          1 Reply Last reply Reply Quote 0
                                          • Neuschwansteini
                                            Neuschwansteini last edited by

                                            Hallo,

                                            super, vielen Dank!! Ich hab ihn installiert, funktioniert auf Anhieb!

                                            Finde die Daten etwas unübersichtlich sortiert, da in unter-unter-unter Datenpunkten.. aber das liegt wohl bei Viessmann an der Struktur..

                                            ist mir auch egal, in welchem Pfad, Hauptsache, sie sind da 🙂 :mrgreen: :mrgreen:

                                            Super!!

                                            Achso, hab ihn auf Debug-Level installiert, und es treten auch keinerlei Fehler auf. Alles bestens hier. Kann leider kein Issue anlegen. :mrgreen: :mrgreen:

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            674
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            34
                                            109
                                            19892
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo