Heizung: Nibe F750 -> Nibe Uplink auslesen / auswerten

Hallo,

ich habe zu Hause eine Heizung: Nibe F750, die über einen Ethernet-Anschluss verfügt.
Zurzeit ist die Heizung mit dem Web-Portal https://www.nibeuplink.com/ verbunden und sendet dort Daten hin.
Mit einem Aufpreis kann man das Web-Portal auch zum Steuern der Heizung nutzen.

Ich würde gerne die Daten im IPS habe und auch gerne vom IPS aus die HEizung steuern.

Gibt es schon jemanden, der so eine Art von Heizung im IPS implementiert hat oder Ideen, wie man soetwas implementieren könnte?

Vielen Dank für Tipps/Lösungen/Hinweise.

Gruß Dominik

Hallo Dominik,

die gleiche Frage stelle ich mir gerade auch, allerdings hab ich hier eine Nibe 1245 stehen. Das Loggen diverser Werte auf einen USB-Stick funktioniert super, aber damit kommt man natürlich nicht an Live-Daten heran. Eine WiFi-SD-Karte in einem USB-Cardreader funktioniert leider auch wieder nur ohne Zugriff auf Live-Daten, da die Logdateien scheinbar erst beim Beenden geschrieben werden.

Mit Basteln kommt man wohl auch über den Modbus der Nibe an aktuelle Werte. Hier mal ein paar Links dazu:

http://knx-user-forum.de/knx-eib-forum/19877-anbindung-modbus-nibe.html
http://www.haustechnikdialog.de/Forum/t/101382/Nibe-Fighter-1240?page=22
http://husdata.se/produkter.asp?curr=EURO

Zu Nibeuplink: Die WP schickt regelmäßig Werte an den Nibe-Server, mit dem Premium-Dienst „Erweiterter Verlauf“ können geloggte Werte als CSV auch wieder herunter geladen werden. Über IPS und PHP hab ich’s leider nicht direkt geschafft, da man sich vorher auf der Seite einloggen muss. Mit wget (unter Windows) hat’s dann funktioniert.

Hier der komplette Befehl:

wget.exe --post-data "Email=xxx&Password=xxx" --no-check-certificate -p "https://www.nibeuplink.com/LogIn?ReturnUrl=%2fSystem%2fzzz%2fHistoryToCsv%2f43424.10007.40014.10006.43420.40019.40018.43439.40017.40015.40016.40008.43437.43416.40022.43005.43009.40012.44304.44298.40004.40013.44306.44308.44300.40072?startDate=yyy&stopDate=yyy" -O d:	est.csv

xxx durch EMail-Adresse bzw. Passwort ersetzen yyy ist ein Unix-Timestamp wie er auch von IPS genutzt wird. zzz ist die Systemnummer bei Nibe.

Die Daten kann man dann z.B. alle 5 Minuten abfragen und ins IPS einpflegen.

Eine Lösung ohne Hardwaregebastel, ohne Nibe-Server (und jährliche Kosten) wäre mir aber lieber.

Gruß
T.

Hallo zusammen,

nach langem Stöbern und Probieren habe ich zumindest eine Lösung parat um die Standardwerte aus dem Nibe-Uplink zu bekommen ohne den Premium-Account.

Steuern lassen tut sich die Heizung leider nur mit dem ModBus für über 800 Schleifen oder per Premium-Account.

Derzeit lese ich per CURL die Info-Seite aus, auf der für mich alle wichtigen Daten stehen die ich benötige.

Der nächste Schritt ist spaßeshalber den Premium-Zugang für ein Jahr zu buchen und zu schauen wie viel ich an der Heizung stelle oder was für Werte er mir zusätzlich ausspuckt.

Wenn interesse besteht kann ich gern meinen Laienhaften Code zur Verfügung stellen.

Gruß speedr1

hallo,

Ich habe auch iene Heizung: Nibe F750 und wäre sehr an deinem Code interessieert.
Würdest du diesen bitte hier im Forum zu verfügung stellen.

Gruß

Hallo zusammen,

sorry für die späte Antwort. In den letzten Tagen hatte ich einiges um die Ohren.

Anbei mein Script zur Auswertung. Da ich nicht der Experte in PHP bin müssen alle Variablen einzeln angelegt und im Script angepasst werden.

Das Script liest eigentlich nur den Quellcode der Info-Seite aus, zerlegt diesen und schreibt es in die Variablen als Float bzw. Integer. Es sind nicht alle Werte die angezeigt werden, aber für mich sind das die interessantesten. Wer noch weitere braucht einfach kurz melden.

Was im Premium-Account noch angezeigt wird kann ich nicht sagen. Das werde ich wohl erst nächstes Jahr ausprobieren.

Als nächstes Suche ich noch eine nette Grafik, damit ich es visualisieren kann.

<?

// Create temp file to store cookies
$ckfile = tempnam ("/tmp", "CURLCOOKIE");

// URL to login page
$url = "https://www.nibeuplink.com/LogIn";

// Get Login page and its cookies and save cookies in the temp file
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Accepts all CAs
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); // Stores cookies in the temp file
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);

#Now you have the cookie, you can POST login values (check the source of the login page to check if you need any other fields too)
$fields = array(
'Email' => '[i]hier Login eMail[/i]',
'Password' => '[i]hier Passwort[/i]',
);
$fields_string = '';
foreach($fields as $key=>$value) {
$fields_string .= $key . '=' . $value . '&';
}
rtrim($fields_string, '&');

// Post login form and follow redirects
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); //Uses cookies from the temp file
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Tells cURL to follow redirects
$output = curl_exec($ch);

// evetnuell muss in der folgenden Adresse die Nummer geändert werden
// diese seht ihr wenn ihr euch einloggt und die Adressleiste auslest
curl_setopt($ch, CURLOPT_URL,"https://www.nibeuplink.com/System/13039/Status/ServiceInfo");
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt($ch, CURLOPT_POST, 0);
$result = curl_exec($ch);

### Stauts
# Brauchwasser oben
$erg = preg_match("/ID40014\">(.*?)Â/",$result, $display);
SetValue(45454 /*[Heizungssteuerung\Wärmepumpe\Brauchwasser oben]*/, (float)$display[1]);
#echo "Brauchwasser oben ".$display[1]." °C<br>";
# Brauchwasser
preg_match("/ID40013\">(.*?)Â/",$result, $display);
SetValue(26911 /*[Heizungssteuerung\Wärmepumpe\Brauchwasser]*/, (float)$display[1]);
#echo "Brauchwasser ".$display[1]." °C<br>";
# Außentemperatur
preg_match("/ID40004\">(.*?)Â/",$result, $display);
SetValue(48226 /*[Heizungssteuerung\Wärmepumpe\Außentemperatur]*/, (float)$display[1]);
#echo "Außentemperatur ".$display[1]." °C<br>";

### Verdichter
# Betriebszeit Verdichter Brauchwasser
preg_match("/ID43424\">(.*?)h</",$result, $display);
SetValue(15543 /*[Heizungssteuerung\Wärmepumpe\Betriebszeit Verdichter Brauchwasser]*/, (int)$display[1]);
#echo "Betriebszeit Verdichter Brauchwasser ".$display[1]." h<br>";
# Betriebszeit Verdichter
preg_match("/ID43420\">(.*?)h</",$result, $display);
SetValue(15459 /*[Heizungssteuerung\Wärmepumpe\Betriebszeit Verdichter]*/, (int)$display[1]);
#echo "Betriebszeit Verdichter ".$display[1]." h<br>";
# Verdichterstarts
preg_match("/ID43416\">(.*?)</",$result, $display);
SetValue(25392 /*[Heizungssteuerung\Wärmepumpe\Verdichterstarts]*/, (int)$display[1]);
#echo "Verdichter startet ".$display[1]."<br>";
# Verdichter Zeitfaktor Brauchwasser
preg_match("/ID43305\">(.*?)kWh</",$result, $display);
SetValue(19466 /*[Heizungssteuerung\Wärmepumpe\Verdichter Zeitfaktor Brauchwasser]*/, (int)$display[1]);
#echo "Verdichter Zeitfaktor Brauchwasser ".$display[1]." kWh<br>";
# Verdichter Zeitfaktor
preg_match("/ID43144\">(.*?)kWh</",$result, $display);
SetValue(30430 /*[Heizungssteuerung\Wärmepumpe\Verdichter Zeitfaktor]*/, (int)$display[1]);
#echo "Verdichter Zeitfaktor ".$display[1]." kWh<br>";

### Ventilation
# Abluft
preg_match("/ID40025\">(.*?)Â/",$result, $display);
SetValue(48118 /*[Heizungssteuerung\Wärmepumpe\Abluft]*/, (float)$display[1]);
#echo "Abluft ".$display[1]." °C<br>";
# Fortluft
preg_match("/ID40026\">(.*?)Â/",$result, $display);
SetValue(57608 /*[Heizungssteuerung\Wärmepumpe\Fortluft]*/, (float)$display[1]);
#echo "Fortluft ".$display[1]." °C<br>";
# Lufteintrittstemperatur
preg_match("/ID40101\">(.*?)Â/",$result, $display);
SetValue(41787 /*[Heizungssteuerung\Wärmepumpe\Lufteintrittstemperatur]*/, (float)$display[1]);
#echo "Lufteintrittstemperatur ".$display[1]." °C<br>";
# Ventilatordrehzahl
preg_match("/ID10001\">(.*?)</",$result, $display);
SetValue(29106 /*[Heizungssteuerung\Wärmepumpe\Ventilatordrehzahl]*/, (int)$display[1]);
#echo "Ventilatordrehzahl ".$display[1]."<br>";

### Klimatisierung
# berechnete Vorlauftemperatur
preg_match("/ID43009\">(.*?)Â/",$result, $display);
SetValue(20841 /*[Heizungssteuerung\Wärmepumpe\berechnete Vorlauftemperatur]*/, (float)$display[1]);
#echo "Raumtemperatur ".$display[1]." °C<br>";
# Raumtemperatur
preg_match("/ID40033\">(.*?)Â/",$result, $display);
SetValue(56801 /*[Heizungssteuerung\Wärmepumpe\Raumtemperatur]*/, (float)$display[1]);
#echo "Raumtemperatur ".$display[1]." °C<br>";
# Rücklauftemperatur
preg_match("/ID40048\">(.*?)Â/",$result, $display);
SetValue(35730 /*[Heizungssteuerung\Wärmepumpe\Rücklauftemperatur]*/, (float)$display[1]);
#echo "Rücklauftemperatur ".$display[1]." °C<br>";
# Vorlauftemperatur
preg_match("/ID40047\">(.*?)Â/",$result, $display);
SetValue(56629 /*[Heizungssteuerung\Wärmepumpe\Vorlauftemperatur]*/, (float)$display[1]);
#echo "Vorlauftemperatur ".$display[1]." °C<br>";

### Zusatzheizug
# Heizstab
preg_match("/ID43084\">(.*?)kW</",$result, $display);
SetValue(36167 /*[Heizungssteuerung\Wärmepumpe\Heizstab]*/, (float)$display[1]);
#echo "Heizstab ".$display[1]." kW<br>";
# Heizstab Zeitfaktor
preg_match("/ID43081\">(.*?)h</",$result, $display);
SetValue(24012 /*[Heizungssteuerung\Wärmepumpe\Heizstab Zeitfaktor]*/, (int)$display[1]);
#echo "Heizstab Zeitfaktor ".$display[1]." h<br>";
?>

Hallo zusammen,
läuft das Script noch? Bekomme es nicht zum laufen.
Username + PW sind eingegeben und auch die URL geändert.

Hallo,
bin auch an diesem Script interessiert…ist es möglich eine kleine Beschreibung zur Installation hier zu erstellen:-D

Danke schon im Voraus:-D

Gibts hier was neues? gibt es eine Möglichkeit die Nibeuplink Seite als externe Seite in IPS zu integriereren? Frage wegen Anmelden usw…

Ich habe das php-Script mal etwas angepasst, um die Nibe Uplink Daten im JSON-Format auszulesen.
Als Parameter müsst ihr Password, Email, und den numerischen Code eurer WP übergeben:

<?
/*
 * read nibe heatpump values from nibeuplink status web page and return them in json format.
 * based on: https://www.symcon.de/forum/threads/25663-Heizung-Nibe-F750-Nibe-Uplink-auslesen-auswerten
 * to get the code which is required as parameter, log into nibe uplink, open status page of your heatpump, and check url:
 * https://www.nibeuplink.com/System/<code>/Status/Overview
 *
 * usage: nibe.php?email=<email>&password=<password>&code=<code>
 */

// to add additional debug output to the resulting page:
$debug = false;

// Create temp file to store cookies
$ckfile = tempnam ("/tmp", "CURLCOOKIE");

// URL to login page
$url = "https://www.nibeuplink.com/LogIn";

// Get Login page and its cookies and save cookies in the temp file
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Accepts all CAs
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); // Stores cookies in the temp file
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);

// Now you have the cookie, you can POST login values
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 2);
curl_setopt($ch, CURLOPT_POSTFIELDS, "Email=".$_GET['email']."&Password=".$_GET['password']);
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); // Uses cookies from the temp file
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Tells cURL to follow redirects
$output = curl_exec($ch);

curl_setopt($ch, CURLOPT_URL, "https://www.nibeuplink.com/System/".$_GET['code']."/Status/ServiceInfo");
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt($ch, CURLOPT_POST, 0);
$result = curl_exec($ch);


$pattern = '/<h3>(.*?)<\/h3>\s*<table[^>]*>.+?<tbody>(.+?)<\/tbody>\s*<\/table>/s';
if ($debug) echo "pattern: <xmp>".$pattern."</xmp><br>";

$pattern2 = '/<tr>\s*<td>(.+?)<span[^>]*>[^<]*<\/span>\s*<\/td>\s*<td>\s*<span[^>]*>([^<]*)<\/span>\s*<\/td>\s*<\/tr>/s';
if ($debug) echo "pattern2: <xmp>".$pattern2."</xmp><br>";

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

// build json format from matches
echo '{';
$first = true;
foreach ($matches[1] as $i => $title) {
        echo ($first ? '"' : ',"').trim($title).'":{';
        $content = $matches[2][$i];
        preg_match_all($pattern2, $content, $values);
        $nestedFirst = true;
        foreach ($values[1] as $j => $field) {
                echo ($nestedFirst ? '"' : ',"').trim($field).'":"'.$values[2][$j].'"';
                $nestedFirst = false;
        }
        echo "}";
        $first = false;
}
echo "}";

if ($debug) {
        echo "<pre><xmp>";
        echo print_r($matches);
        echo "<br><br>";
        echo $result;
        echo "</xmp></pre>";
}
?>

Hallo,
danke für das… kannst du noch sagen wo Email,PW und der Code eingegeben werden müssen?:confused::confused:

Danke Dir!

Hallo,

könntet ihr euer Webfront für die Heizung einmal posten um ein paar Anregungen zu bekommen, was man alles darstellen sollte/kann ?

Hat jemand von euch die Premium Funktion von Nibe mit implementiert, sprich die Steuerung in die Heizung?

Gruß Dominik

Hallo,

leider habe ich es erst jetzt geschafft dein Script zum Laufen zu kriegen. Das ist ja turboschnell, ich bin begeistert. Hast du es verfeinert und schreibst die Daten in Variablen?

Hast du da auch etwas Allgemeines geschrieben bei dem alle Variablen gezogen werden oder nur spezielle? In dem Punkt wäre ich noch über ein kurzes Script dankbar. Würde auch alle Daten übernehmen.

Leider habe ich keine Erfahrung mit JSON und selbst anlegbare Variablen usw.

Ansonsten gehe ich wieder bei und hole mir die einzelnen wichtigsten Daten aus der JSON.

Vielen Dank im Voraus.

Gruß Conrad