Viessmann VitoConnect API

Begonnen von ritschi, 22 März 2018, 06:53:24

Vorheriges Thema - Nächstes Thema

heiko73

Hi, vielen Dank an alle Vorarbeiter! Habe eine neue Ölheizung und mir nach Durchlesen des Threads die viessmann.php mal vorgenommen und etwas angepasst/aufgeräumt.

Änderungen:
- Daten werden nur einmal abgerufen und dann komplett
- Ein RequestList Array wird definiert, das die gewünschten Werte aus den Komplettdaten zieht und ausgibt

Dadurch weniger doppelter Code und weniger Zugriffe auf den Viessmann Server. Eventuell findet ja noch jemand interessante Werte in der Antwort. Ausserdem wird's schneller...

Jetzt muss ich das nur noch sauber in FHEM reinbekommen  8)


thetrueavatar

Zitat von: onkeloki am 09 Oktober 2018, 19:50:20
seit 16:30 geht "getActiveProgram" nicht mehr bei mir
Could you be more precise ? What kind of error ? Which version ? I wasn't able to reproduce it so I need to get more information.

Frini

Bei mir funktioniert die Abfrage noch.
@Heiko sehr cool. Ich bin das gerade noch mal überflogen. Hast du auch ein Set mit eingebaut? Also um die Betriebsart zu wählen oder die Solltemperatur anzupassen,? Mache das aktuell mit 4 verschiedenen phpDateien. 3°C, 20°C, 21°C, 22°C

heiko73

Wie geht das Setzen denn, kannst Du ein Beispiel posten?

Ich habe in meine Version jetzt mal schnell eingebaut, dass es über die Telnet Schittstelle direkt die Werte mit setreading in FHEM reinpusht. Konnte so über Nacht schon eine schöne Kurve malen und in FHEM selbst braucht es keinerlei System-Calls etc. Nur ein Dummy anlegen und das PHP füttert dann die Werte ein. Umgekehrt (setzen) geht das wahrscheinlich nicht so einfach ;-)

Meine ViCare App auf dem Android Smartphone geht seit gestern nicht mehr. Mir ist bei diesem Cloud Service basiertem Ansatz nicht so ganz wohl, weil Viessmann jederzeit ohne Vorwarnung was ändern kann bzw. uns aussperren könnte.

Hat mal jemand versucht, direkt das Vitoconnect Teil abzufragen? Oder gibts andere Möglichkeiten, da über USB oder seriell an die Anlage zu kommen und dann vielleicht einen kleinen Raspi davorzuschalten, der dann die Schnittstelle ins FHEM macht?

Frini

Ich habe mir kleine phps nach dem Vorbild von thetrueavatars phps gebastelt. Gebastelt deswegen, weil ich recht begrenztes KnowHow habe. Aber ers funktioniert.
Ich kann gerade nicht auf meinen Raspi zugreifen, daher hier die Originalen von TheTrueAvatar.
https://github.com/thetrueavatar/Viessmann-Api/tree/develop/example
Mit SystemCommand führe ich die phps aus. Ich bastel gerade an einer gesamten Steuerung, die über die Heizungsventilöffnungen gesteuert wird. Sprich, alle Ventile geschlossen, Raumsolltemperatur auf 3°C damit die Heizung gar nicht in Versuchung kommt zu takten. Ventilöffnung von über 70%, dann erhöhe die Raumsolltemperatur schrittweise bis Öffnung auf 70% ist. Aktuell echt rudimentär, ich versuche das gerade analog ein paar Informationen hier aus dem Forum (Elektrolurch) nach zu bauen. Ein einfaches Ein-und Ausschalten des Brenners wäre natürlich schöner, aber hier weiß ich nicht, wie das mit dem Brennwerteffekt und der Brennermodulation läuft. Da will ich eher nicht eingreifen.
Ich habe gestern noch einmal die Anleitung gewälzt, und gerade bei den Vidotens Geräten kann man über zwei potentialfreie Klemmen einen externen Betrieb aufzwingen. Heißt so viel wie Schnittstelle 58 geschlossen, dann reduzierter Betrieb. Die könnte man mit einem Homematic Aktor mit potentialfreiem Ausgang schließen  :D Gleiches gilt für die Heizkreislaufpumpe.

Also ich wäre an der Telnet-Lösung sehr interessiert  ;D. Klingt erst einmal einfacher.

ViCare klappt bei mir stand heute noch. Ich warte eigentlich sehnsüchtig auf ein neues Update der App, mit der Hoffnung auf weitere Funktionen.

Es gibt einen Lösungsansatz wo man mit dem OptoLink-Kabel direkt an einen Raspberry geht. https://www.schlocke.de/viessmann-heizungswerte-mit-openv-auslesen-und-mit-volkszaehler-darstellen/
Allerdings kann man dann die Viconnect100 Verbindung nicht mehr nutzen und somit (in meinem Fall wichtig) entfällt ebenfalls die Garantieverlängerung und der ServiceBetrieb kann die Heizung nicht mehr auslesen bei Fehlermeldungen. Daher hatte ich dies noch nicht weiter verfolgt.

onkeloki

Zitat von: thetrueavatar am 09 Oktober 2018, 20:57:48
Could you be more precise ? What kind of error ? Which version ? I wasn't able to reproduce it so I need to get more information.

i figured out that on all  values my heater did not support (eco program / supporttemperature.. )  i can not do the calls..
the php script get oauth errors..

//$getter[] = "getActiveProgram";
//$getter[] = "getComfortProgramTemperature";
//$getter[] = "getEcoProgramTemperature";
//$getter[] = "getExternalProgramTemperature";
//$getter[] = "getSupplyProgramTemperature";
//$getter[] = "isDhwModeActive";

the others works ;)

onkeloki

#96
Falls es jemanden etwas bringt hier ist mein php Schnippsel
ich habe es der einfachkeit halber in folgenden odner gelegt:

/home/pi/Viessmann-Api-master/example/SetInFhem.php
weil ich eh ein Example modifiziert habe bis es für mich geklappt hat..
Hier der code:

<?php
include __DIR__.'/bootstrap.php';
use 
Viessmann\API\ViessmannAPI;

function 
setTofhem($name,$val){
if(
$val == false){
$val "0"
}
$r =  "setreading ViessmannAPI ".$name." ".$val;
$addlog "trigger ViessmannAPI  ".$name.": ".$val."   << addLog";
echo 
$name.":".$val ."\n";
shell_exec('perl /opt/fhem/fhem.pl 7072 "'.$r.'"'); 
shell_exec('perl /opt/fhem/fhem.pl 7072 "'.$addlog.'"'); 
}

$getter = array();
$getter[] = "getOutsideTemperature";
$getter[] = "getBoilerTemperature";
$getter[] = "getSlope";
$getter[] = "getShift";
$getter[] = "getActiveMode";
$getter[] = "isHeatingBurnerActive";
$getter[] = "getNormalProgramTemperature";
$getter[] = "getReducedProgramTemperature";
$getter[] = "isInStandbyMode";

//$getter[] = "getActiveProgram";
//$getter[] = "getComfortProgramTemperature";
//$getter[] = "getEcoProgramTemperature";
//$getter[] = "getExternalProgramTemperature";
//$getter[] = "getSupplyProgramTemperature";
//$getter[] = "isDhwModeActive";

while (list($key$val) = each($getter))
  {
@
setTofhem($val$viessmannApi->$val());
  }






die "getter" welche bei mir seit gestern nicht mehr funktionieren (oauth error) sind auskommentier
ich vermute die gehen nicht mehr weil ich z.b. kein warm wasser habe und auch keinen eco mode


@thetrueavatar:
watch the commented rows.. this are the functions which stoped working for me
i think this is because my heater does not support this programs so maybe the vicare endpoint has changed .. yesterdey before 16:00 i got answers from this calls
now php runs into a oauth error ..
after oauth error the whole scrip breaks ;) so maybe its a good idea to catch the error or prevent the warning





die file rufe ich via "php -f /home/pi/Viessmann-Api-master/example/SetInFhem.php" auf   

das quellpaket ist hier zu finden
https://github.com/thetrueavatar/Viessmann-Api

Frini

Seit gestern funktioniert bei mir die Aussentemperaturabfrage nicht mehr.
Gibt mir folgende Fehlermeldung in der Konsole aus:

PHP Notice:  Undefined index: properties in /opt/fhem/viessmann.php on line 41
Aussentemperatur=

Im Getfeature() kriege ich ebenfalls keine Rückmeldung mehr.

In der Vicare App ist die Außentemperatur ebenfalls entfernt. Die scheinen dran zu Arbeiten :-)

heiko73

OK, hier mal ein Update.

Habe jetzt eingebaut, dass direkt per Telnet Zugriff die Readings eines Dummy Objects mit den in der Requestlist angegebenen Werten gefüllt werden.

Einfach ein Dummy Object XXX definieren und im php Code angeben:
$FHEMObject = "XXX";

Man kann ausserdem den FHEM Server und Port angeben (ist voreingestellt auf localhost:7072). Wird das FHEMObject leer definiert, wird keine Telnet Verbindung versucht. Wer also weiterhin nur die Ausgabe parsen möchte, setzt $FHEMObject = "";

Das Setzen von Werten (Danke für die Beispiele) verwendet dann doch das Viessmann API Projekt, da ist mehr umzubauen für mich. Ich schaue mir das bei Gelegenheit mal an, finde aber das aktuelle php ganz nett, weil es komplett eigenständig funktioniert. Das API schaut schon sehr aufgeräumt und gut organisiert aus, aber da muss ich mich dann erstmal einarbeiten.

So wie es aussieht, empfange ich die Aussentemperatur noch, liegt eventuell daran dass ich alle Daten abrufe und dann darin nach den passenden Werten suche. Aber interessanterweise funktioniert meine App nicht mehr, seitdem ich hier rumteste. Eventuell gibt es da einen Zusammenhang? Es wird durchgängig gemeldet, dass es ein Verbindungsproblem gibt und dass der Server nicht erreicht werden kann.

Strange ... ;)

CoolTux

Hab da mal eine Frage. Wieso wird hier nicht versucht ein FHEM Modul zu entwickeln statt die Ressourcen in eine externe Lösung zu stecken?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

heiko73

Gute Frage, meine (persönliche) Antwort:
a) ich kann php besser als PERL
b) ich habe auf den bereits existierenden PHP Code aufgesetzt, für PERL müsste ich "from Scratch" anfangen
c) ich weiß nicht, wie lange Viessmann seine API und seine Server noch so beibehält, da lohnt sich eventuell der Aufwand für einen kompletten Rewrite in PERL einfach nicht.

Aber generell bin ich bei Dir: Es wäre schon 10x einfacher und besser zu benutzen, wenn man das direkt als FHEM Modul aufsetzt. Da bin ich dann aber wohl raus, dafür reichts bei mir im Bezug auf PERL nicht.

Frini

Ist ganz einfach. Ich kanns einfach nicht. Das bisschen php Wissen, habe ich mir die letzten 2 Wochen angeeignet. Und bin froh, dass es irgendwie funktioniert.


Viessmann ist gerade dabei eine neue Version zu veröffentlichen. Dieses oder nächstes Quartal. Die Serverstruktur wurde bei Viessmann gerade erst umgestellt.


onkeloki

#102
bin auch eher PHPler ;)

habe auf die existierenden scripts aufgesetzt vorher hatte ich das vitodens fhem modul am start
Naja triggern tu ich mein scrhpt mit dem fhem modul HTTPMOD alle 2 min ;)

ansonsten habe ich die ein oder andere php Implementierung auf meinen Raspberry  welche ich dann ähnlich eingebaut habe
das ganze oauth zeugs wäre mir mit php aber auch selbst schon zu nervig
mein wissen ist noch von  php 7 seitdem bin ich berufluch  in node.js unterwegs

heiko73

Noch ein Update (sorry wegen der vielen Posts ...):

- unterstützt jetzt Kommandozeilen-Argumente:
   ./viessmann_hg.php --dump
       gibt alle vom Server gefundenen Daten formatiert aus, da findet man vielleicht für seine Anlage noch ein paar Schätzchen.
  ./viessmann_hg.php --get Aussentemperatur NUM:heating.sensors.temperature.outside:value
       ignoriert die RequestList und sucht nur nach dem einen angegebenen Wert

Das sollte es erstmal für heute sein. Gern testen und Feedback geben. @Frini: Du findest somit jetzt auch ein paar Beispiele, wie man einem PHP Kommandozeilenparameter übergibt. Eventuell hilft das ja, Deine drei Setz-Dateien in eine zu verwandeln und dann den gewünschten Wert als Parameter zu übergeben.


onkeloki