sebilm / ioBroker.nibeuplink

This ioBroker adapter receives data from a Nibe heat pump from Nibe Uplink.
MIT License
9 stars 4 forks source link

Schreibzugriff über die API einbauen #6

Closed m-s-b closed 2 years ago

m-s-b commented 5 years ago

Hallo, würdest du den Schreibzugriff über die API implementieren? Die API gibt das wohl her, meine Programmierkenntnisse reichen dafür leider nicht aus.

sebilm commented 5 years ago

Hallo, ich programmiere normalerweise nicht in JavaScript und hab den Nibe-Teil auch nur übernommen und abgeändert. Mit bisschen Einarbeitung bekomme ich das sicher hin, aber das wird erst was im Winter - dann habe ich mehr Zeit. Verschiedene Systeme haben sicher auch verschiedene Parameter - da muss man dann auch irgendwie rausfinden, welches System welche Parameter unterstützt und wie die zu benennen sind.

m-s-b commented 5 years ago

Perfekt, Winter ist völlig ausreichend. Hoffe meine Heizung steht dann schon... Zum testen und ggf. Parameter anpassen reichen meine Programmierkenntnisse dann schon noch.

ioBroker-Starter commented 4 years ago

Erstmal vielen Dank für die Entwicklung des Adapters! Ich hänge mich mal an diesen Thread, da meine Anfrage in dieselbe Richtung geht.

Mega wäre es, wenn Du die "Luxury Mode" Ansteuerung implementieren könntest, also das Aktivieren eines temporären Warmwasser-Boosts.

Beim Suchen bin ich auf folgende Seite gestossen, die sich mit der Ansteuerung von Nibe Anlagen unter openHAB beschäftigt. Da sind unter anderem auch die Funktionen gruppiert aufgeführt, die für alle Anlagen verfügbar sind: https://www.openhab.org/addons/bindings/nibeuplink/

Vielleicht hilft das ja als Orientiertung, denn meine Programmierkenntnisse sind leider auch viel zu schwach, um ansatzsweise was umsetzen zu können.

Liebe Grüsse

BerndKaeseler commented 3 years ago

Ich fände die Möglichkeit Einfluss auf den Sollwert zu nehmen auch super. Ich nutze den Nibe Uplink über Iobroker und bin begeistert, von der Stabilität. Gruß Bernd

m-s-b commented 3 years ago

Hallo @sebilm,

mit gut anderthalb Jahren Verspätung ist meine Nibe jetzt endlich in Betrieb und die Daten kommen dank deines Adapters sauber in den iobroker. Hast du noch Interesse den Schreibzugriff einzubauen? Ansonsten würde ich mich mal mit den AUX Eingängen beschäftigen. Gruß Martin

sebilm commented 3 years ago

Hallo @m-s-b,

prinzipiell will ich den Adapter schon weiter entwickeln und wenn ich mir hier die Issues so anschaue, wäre der Schreibzugriff wohl das nächste. Momentan fehlt mir noch die Zeit, also in den nächsten 2 Monaten wird da nicht allzuviel passieren - vermutlich. Ich selbst hab auch bisher das Geld für den schreibenden Fernzugriff nicht bezahlt, da ich es nicht brauche. Für mich macht das bei einer Fußbodenheizung wenig Sinn, da viel ändern zu wollen. Ich tune die schon, aber dann geh ich halt mal kurz hin. Aber das wird sicher noch kommen.

Was meinst du mit AUX-Eingänge? Also meine nibe hat AUX-Ein-/Ausgänge, aber damit kann man, glaube ich, nicht viel anfangen. Es gibt wohl noch die Möglichkeit über ein Modbus-Modul, das man inzwischen auch preiswerter selbst bauen kann. Leider ist meine nibe hinten mit Dämmung zugeklebt und steht so in der Ecke, dass ich da kaum ran komme. Sonst hätte ich das auch mal versucht und nen Adapter dafür geschrieben. So werde ich wohl bei der Cloud bleibden, auch wenn es da ab und zu (meist kurze) Verbindungsprobleme gibt.

Grüße seb

m-s-b commented 3 years ago

Hi @sebilm , das Feintuning mach ich auch direkt an der Nibe. Den Schreibzugriff bzw. die AUX-Eingänge wollte ich eigentlich eher für die Lüftung nehmen. Also x Fenster länger als y min offen, dann Lüftung aus z.B. Auch temporär den Luxusmodus im Brauchwasser aktivieren wäre nett. Bei "nur" vier AUX-Eingängen lässt sich Lüftung AN/AUS/reduziert/volle Leistung und Luxus/Sparmodus Brauchwasser nicht komplett abbilden. An das selbstgebaute Modbus-Modul hab ich mich noch nicht rangewagt, das wird evtl. nen Winterprojekt.

pr0t0m1 commented 3 years ago

Hi @sebilm, ich beschäftige mich jetzt erst seit ein paar Tagen mit ioBroker und github. Ich habe eine NIBE S-1255. Nibe nutzt dort eine neue Verbindung. Es heißt jetzt nicht mehr Nibe Uplink sondern myUplink. Die API scheint auf den ersten Blick die gleiche zu sein. Auch der Schritt mit erzeugen des Authentifizierungscode funktioniert wenn man die URL von api.nibeuplink.com auf api.myuplink.com ändert. Wie aufwendig wäre es die URLs in den Quellen anzupassen? Auf den ersten Blick habe ich nur den Eintrag in nibe-fetcher.js gefunden. Meinst du man könntest den Eintrag über die Weboberfläche parametrierbar machen?

m-s-b commented 3 years ago

@pr0t0m1 Auf das S bin ich neidisch ;-) Dieses oben genannte Modbus-Modul, ob original oder Nachbau, ist bei dir schon drin. Evtl. kannst du auslesen und steuern auch gleich über iobroker und Modbus machen.

sebilm commented 3 years ago

@pr0t0m1 Ich hab grad mal kurz auf die API vom myUplink geschaut. Also Teile sehen zumindest ähnlich aus. Ob man aber einfach nur eine URL ersetzt und dann funktioniert es, müsste man schauen. Das zu erweitern wäre nicht das Problem, aber testen kann ich das dann leider nicht. Eventuell könnte ich das in einem Feature-Branch implementieren, du installierst den bei dir und schaust, ob es funktioniert. Andererseits habe ich auch schon gehört, dass die neuen S-Nibe-Heizungen ein Modbus-TCP schon drin haben - das könntest du direkt ansteueren und auf die Cloud verzichten, das wäre der wesentlich schönere Weg für dich - die Cloud geht nicht immer.

sebilm commented 3 years ago

@m-s-b Es stehen ja grad noch ein paar Änderungen bei ioBroker an, wegen denen ich auf jeden Fall demnächst mal wieder was machen muss. Ich hab auch Lust, den Schreibzugriff zu machen - mal schauen. Wenn meine Nibe nicht so in der Ecke stehen würde und so zugebaut wäre, würde ich mir auch gern selbst ein Modbus-Modul bauen und dafür vielleicht sogar einen Adapter schreiben. Aber das ist leider physisch nicht so einfach.

sebilm commented 2 years ago

So, Version 1.0.0 ist jetzt mit diesem Feature im "latest" - die Liste wird allerdings nur einmal am Tag aktualisiert - kann also noch dauern, bis sie euch angezeigt wird. Um die Funktion zu nutzen, muss man die neue Version ne halbe Stunde laufen lassen und dann in den Settings vom Adapter einen neuen AuthCode eintragen (über den Link dort generieren lassen). Unten in den Settings kann man dann die Parameter-IDs eintragen, die man abfragen und ändern will. Falls beim Ändern ein Fehler auftritt, wird ein Datenpunkt in den Objekten mit dem Namen des Datenpunktes und "_ERROR" am Ende angelegt. Da steht dann drin, was NibeUplink zurück gegeben hat. Die Parameter-ID muss man sich leider im Internet zusammen suchen. Sehr viele stehen hier im Code: https://github.com/sebilm/ioBroker.nibeuplink/blob/master/nibe-fetcher.js#L41 Aber die wenigsten davon sind schreibbar. Das hängt halt auch von der jeweiligen Nibe ab.

Rückmeldung erbeten.

m-s-b commented 2 years ago

@sebilm Erstmal vielen Dank!!! Gerade "leider" im Urlaub und Internet ist hier selbst mitzubringen... Ausgiebige Rückmeldung daher erst von zu Hause möglich. Installation problemlos, Ein neuer AuthCode ist zwingend notwendig?
Hab via Handy (mit altem AuthCode) eine ID der Ventilation eingetragen. Es wird eine zehnstellige Zahl als Datenpunkt angelegt. Ob und wie das richtig umgerechnet werden müsste kann ich noch nicht nachvollziehen.

sebilm commented 2 years ago

Es gibt beim Zugriff auf die API 2 Scopes: READSYSTEM und WRITESYSTEM. Bisher hatte ich immer nur READSYSTEM geholt. Wenn du nen neuen AuthCode holst, wird dir das von Nibe auch angezeigt, ob du zustimmt, dass die Anwendung eben diese 2 Scopes bekommt (ein bisschen anders formuliert). Man benötigt also einen neuen AuthCode, um Werte zu schreiben. Das Abrufen funktioniert auch ohne neuen AuthCode. Sobald du aber einen Wert änderst, kommt als Fehler ne 403 (Forbidden) zurück. Wenn du nur als Unit 0 und als Parameter die Parameter-ID angibst, aber selbst keinen Namen für den Datenpunkt vergibst, wird als Datenpunkt "0_XXXXX_NAME" automatisch angelegt - mit XXXXX = Parameter ID und der Name wird aus der Liste, die ich im letzten Kommentar verlinkt habe, genommen. Wenn man eine ID angibt, die nicht in der Liste steht, dann wird der Name aus dem gebildet, was die API da zurück gibt. Also wenn da was deutsches zurück kommt, dann eben das, nur eben alles groß geschrieben und mit Unterstrich als Leerzeichen usw. Hals als Fallback. Du kannst natürlich auch selber einfach einen Namen angeben. Man kann dort sogar Punkte "." angeben, um Unter-Punkte in der Objektstruktur anzulegen. Und als letzten Kommentar noch: Ich habe bei mir bisher nur einen Parameter gefunden, den ich schreiben konnte (ich denke, es war temp. Lux.). Bei anderen Parametern (Holiday, Wasser Komfort-Mode) kam immer 400 (Bad Request) mit Fehler 14 zurück. Also die konnte ich nicht schreiben - ich weiß nicht wieso.

sebilm commented 2 years ago

Ich hab grad mal bisschen rumgespielt und geschaut, was die NibeUplink-App so übers Netzwerk schickt. Die benutzt einen Endpunkt, der für den sterblichen Nibe-Kunden mit seinem eigenen Api-Zugriff wohl nicht erlaubt ist ("The client is not allowed to access this resource"). Ich hab so die blöde Befürchtung, dass nur die paar Parameter funktionieren, die hier aufgelistet sind: https://api.nibeuplink.com/docs/v1/Parameters Die dort aufgeführte ID "hot_water_boost" ist übrigens die 48132 - zumindest bei mir. Die kann ich auch schreiben. Dirt dort aufgeführten Temperatur-Endpunkte kann ich schreiben, sind aber sehr "lustig". Wenn man die Parameter ausliest, bekommt man ja als raw value sowas wie "200" für "20 °C". Also dachte ich, man muss da dann auch "200" hin senden, um 20 Grad zu bekommen. Deshalb funktionieren die aktuell nicht, weil wenn man den Endpunkt 47398 hinzufügt und dort den Wert z.B. auf 19 ändert, schickt der Adapter ne 190 hin. Die API will hier aber ne 19. Nunja. Das muss ich mal noch ändern. Aber wenn es so ist, wie ich das jetzt vermute, dann hab ich mir wohl hier sehr viel Arbeit für sehr wenig Nutzen gemacht. OK, man kann damit zuätzliche Parameter abrufen, aber ändern kann man wohl leider nur sehr wenig.

sebilm commented 2 years ago

Ich hab mal noch ne neue Version 1.0.1 gemacht, die den "Bug" mit den Temperaturen fixt. Außerdem hab ich in die Readme mal noch was zu dem Thema geschrieben.

m-s-b commented 2 years ago

@sebilm So, wenigstens mal kurze Rückmeldung. Die 48132 kann ich auch schreiben. Andere bis jetzt noch nicht, bin aber noch nicht wirklich zum testen gekommen. Bekomme dann auch Fehler 14 mit data "null". Macht es einen Unterschied für die API ob der Datenpunkt "number" oder "string" ist? Weitere Rückmeldungen hier oder im Forum?

ioBroker-Starter commented 2 years ago

Ich möchte mich zumindest mal kurz für Deine Weiterentwicklung bedanken. Alleine die Möglichkeit, den Water-Boost aktivieren zu können, ist grossartig!

Zum Testen bin ich leider noch nicht gekommen, werde ich aber nächste Woche nachholen, wenn ich wieder zu Hause bin.

sebilm commented 2 years ago

@m-s-b Laut NIBE-API muss man die Werte als String schicken. Das macht der Adapter auch - egal welchen Typ der Datenpunkt hat. Aber: Auf die Idee kam ich auch und hatte es zwischenzeitlich auf number umgestellt, habs also quasi ohne Anführungszeichen an die API geschickt. Das Ergebnis war gleich: Man konnte nur die gleichen Datenpunkte schreiben - egal ob String oder number. Ich fürchte, das ist eine Beschränkung von Nibe. Im Prinzip stehts ja so auch dort in der Doku, dass man genau diese dort aufgeführten PropertyIds schreiben kann. Ich hätte nicht gedacht, dass es wirklich NUR diese sind, aber es scheint so zu sein.

Nobby87 commented 2 years ago

@sebilm auch von mir ein herzliches Danke für deine Arbeit. Würde hier auch gerne testen, allerdings bekomme ich immer folgende Fehlermeldung: "httpStatusCode": 404, "errorCode": 12, "details": [ "Für diese Funktion benötigen Sie einen Premium-Zugang"

Brauche ich den PremiumZugang trotzdem? Oder wo könnte mein Fehler liegen?

Ist das so korrekt? grafik

sebilm commented 2 years ago

@Nobby87 Ja, also wenn man über die Cloud von Nibe "schreiben" will, also was einstellen möchte, muss man 25 Euro pro Jahr bezahlen. Über deren App kann man dann mehr einstellen, die hat mehr Rechte.

Nobby87 commented 2 years ago

@sebilm vielen Dank für die schnelle Antwort, ich dachte das könnte man mit deiner Arbeit umgehen :) wollte mir allerdings den Premium Uplink dieses Jahr sowieso zum Testen kaufen.

ioBroker-Starter commented 2 years ago

Jetzt bin ich auch endlich mal dazu gekommen, es zu testen. Vielen Dank nochmal für die Weiterentwicklung!

Ich hab den Parameter 48132 hinzugefügt, um bei Bedarf (Überschuss PV Produktion) den Luxus-Modus zu triggern. Klappt auch, allerdings läuft der dann für drei Stunden und ich kann ich nicht manuell stoppen, indem ich den Wert des Objekts wieder auf 0 setze. (Laut NIBE Doku: "Start a hot water boost, i.e. temporary lux, lasting 3 hours. Set to 1 to start, 0 to stop.")

Hat das von euch mal jemand getestet? Klappt das Deaktivieren bei euch?

ioBroker-Starter commented 2 years ago

Seltsam, jetzt klappt auch das aktivieren von temporary lux nicht mehr...

Ich ändere am Objekt den Wert von 0 auf 1 und dann ruft der Adapter den Wert via API ausm Internet ab und überschreibt den Objektwert mit 0.

Im Log erscheint auch kein PUT-Command, nur das GET-Command wird abgesetzt. Vor einer viertel Stunde hatte es noch geklappt, dann hatte ich über die App den Temp Lux Modus wieder deaktiviert...

ioBroker-Starter commented 2 years ago

Okay, ich glaube, ich bin der Ursache auf der Spur.

Ich habe über ein (Blockly) Script den Wert des Objekts lediglich via "update" geändert. Nun habe ich anstelle von "update object ID" ein "control object ID" verwendet, um den Wert zu ändern. Dies scheint dann auch das PUT-Command zu triggern.

Kannst Du das bestätigen, ist das mein Fehler gewesen?

sebilm commented 2 years ago

@ioBroker-Starter Ich denke, als ich das (temporary lux) einmal testweise an geschaltet hatte, lief es auch einmal zuende und konnte nicht abgebrochen werden. Der Unterschied beim Ändern mittels "control" und "update" soll genau so sein - so sollte sich jeder ioBroker-Adapter verhalten, der Geräte steuert.

m-s-b commented 2 years ago

@sebilm Nochmals vielen Dank für deine Umsetzung. Ich kann momentan "nur" 48132 WWBoost und 47260 Ventilatorgeschwindigkeit steuern. Bei beiden kommt im LOG aber nichts an wenn ich "0" zum deaktivieren setze. Kann es sein das der Adapter keine 0 rausschickt? Hat noch jemand weitere ID´s (schreibend) zum laufen gebracht? Wenn ja, welche? Am spannendsten wäre für mich noch der Holiday/Away Mode. Der sollte laut Fetch vom Adapter eigentlich funktionieren, weigert sich aber. Bad Request: { "httpStatusCode": 400, "errorCode": 1, "timestamp": "2022-04-01T12:26:41.8076178Z", "details": [ "Fehler 14: 48043" ], "data": null }

sebilm commented 2 years ago

@m-s-b Bei der 0 hast du wohl leider recht. Da hab ich wohl nicht beachtet, dass dem JavaScript der Unterschied zwischen 0 und null nicht immer klar ist. Ich hab mal nen Issue angelegt: #128 Bei dem, was man setzen kann und was nicht, kann ich wenig machen - das hängt von Nibe ab. Du kannst dich ja gerne an Nibe wenden und anfragen, ob sie das nicht freigeben können. Wenn der Fehler 14 zurück kommt, dann ist das meiner Meinung nach der Hinweis, dass es eben nicht erlaubt ist.