Ankündigung

Einklappen
Keine Ankündigung bisher.

Anbindung Modbus / Nibe

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #76
    Das kann natürlich sein, hattest Du mal in dem Schweden-Forum geguckt?

    Kommentar


      #77
      Ich habe mal ein generisches php Script geschrieben bzw. ein existierendes angepasst, das alle Daten von nibeuplink im json Format ausliest.
      PHP-Code:
      <?
      /*
       * 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>";
      }
      ?>
      Zuletzt geändert von paphko; 17.09.2016, 13:20. Grund: Login post vereinfacht

      Kommentar


        #78
        Hey!
        Ich würde auch gerne meine Novelan/Nibe Split 8 auslesen. Allerdings verwende ich FHEM zur Steuerung.
        Dieser Thread hier scheint der einzige im ganzen Netz zu sein in dem sich Leute mit der Entschlüsselung des Protokolls beschäftigt haben
        Gibt es hier neue Fortschritte?
        @ctr: Konntest du bzgl. "Senden" von Nachrichten Fortschritte machen?
        Vielen Dank und LG
        Toby

        Kommentar


          #79
          Nein, ich habe noch nichts gesendet, aber ich werde die Tage mal wieder mit Basteln anfangen.
          Vermutlich werde ich jedoch die C-Version einstampfen und dafür das ganze als nodejs Projekt oder als node-red Flow weiter vorantreiben.

          Kommentar


            #80
            Zitat von brandst Beitrag anzeigen
            Hallo,

            ich bin ebenfalls interessiert an dieser Anbindung, da ich eine Nibe Split LWP besitze und diese in smarthome.py als Plugin implementieren möchte. Ihr habt geschrieben, dass ihr euch über die Serviceschnittstelle am Display anhängt. Habt ihr da ein ganz normale Cat6 Netzwerkkabel mit Standard RJ45 PIN-Belegung genommen? Wenn ja, kann ich da zB. dann diesen Adapter für den Anschluss auf meinem Raspberry verwenden:

            USB 2.0 USB2.0 to RS-485 RS485 RJ45 RJ-45 Interface: Amazon.de: Computer & Zubehör

            oder muss ich bei der PIN-Belegung über RJ45 etwas besonderes beachten?

            Vielen Dank für dieses Projekt - ich dachte schon ich kann die Daten meiner nie auswerten.

            lg Thomas
            Hallo,
            Mich würde auch interessieren, ob es jemand bereits geschafft hat mit einem Raspberrypi die NIBE F1145 oder ähnliche abzufragen ?
            Kann man so einen USB to RS485 Adapter dafür verwenden ?
            Bitte um Info.
            Danke,

            Kommentar


              #81
              Die physische Anbindung geht damit, auch mit einem USB-RS485 Adapter (ob jetzt genau mit dem kann ich nicht sagen, ich nehme diesen hier https://shop.wiregate.de/wiregate/us...x-1333vis.html
              Das Problem ist eher das Protokoll und das Datenformat...
              Ich habe da etwas rudimentäres (aber nur lesend) für Nibe Split (für die es Nibe Uplink nicht gibt), weiß nicht (mehr) wie ähnlich das F1145 Protokoll ist.

              Kommentar


                #82
                Hallo ctr,

                Ich wäre auch an einer Anbindung interessiert. Ich hab allerdings eine ca. 12 Jahre alte Fighter 1135. Dafür gab es seinerzeit mal RCU10 und 20 direkt von Nibe. Ich möchte auch nur lesend auf die WP zugreifen. Insbesondere wenn die WP in Kühlbetrieb geht wegen der Ansteuerung der einzelnen Stellantriebe. Habe bisher mit einem Raspi und OpenHAB 2 ein bißchen rumexperimentiert, allerdings ohne Erfolg.

                Wenn Du schon rausbekommen hast, welche Adern des RJ45 Anschlusses auf dem Board die richtigen sind, wäre es schön, wenn Du das hier postest.

                Danke und Gruß

                Jan

                Kommentar


                  #83
                  Hallo Jan,

                  erkundige dich doch mal bei Nibe ob deine WP nicht einen Schaltausgang für den Kühlbetrieb hat. Meine Nibe F1245 hat so einen speziellen Schaltkontakt den ich auf einen Binäreingang genau für den Zweck des Umschaltens Heiz/Kühlbetrieb geschaltet habe.

                  VG
                  Thorsten

                  Kommentar


                    #84
                    JaLu Post 18 hast Du aber schon gesehen oder?

                    Kommentar


                      #85
                      Hallo ctr,

                      lese doch nochmal die Nachricht von Jan. Wenn ich das richtig lese, möchte er seine Heizung/Stellantriebe in den Kühlmodus umschalten sobald die WP in den Kühlbetrieb geht. Dafür ist es ggf. gar nicht notwendig die Register aus der WP über komplexe Logiken auszulesen. Evtl. hat hat seine WP ja ebenfalls einen Schaltkontakt wo genau dieser Status anliegt. Dann kann er sich den umständlichen Kram über RS485 etc. sparen.

                      PS: Ich hatte (ist schon 5 Jahre her) mal ein Testprogramm geschrieben um die Nibe mittels RS485 Adapter abzufragen.Ich hatte eigentlich vor den COP (Leistungszahl) der WP zu berechnen. Dazu benötigt man den Wert des Wärmemengenzählers. Dieser Wert kann aber leider nicht über die RS485 Schnittstelle abgefragt werden, daher habe ich dann die Lust an dem Projekt verloren...

                      Kommentar


                        #86
                        katoth er hat geschrieben "insbesondere" für den Kühlbetrieb, mich aber gleichzeitig persönlich nach dem Pinout gefragt...
                        Wenn es eine einfachere Möglichkeit für eine spezifische Anforderung gibt, ist das ja gut.

                        Kommentar


                          #87
                          Zitat von ctr Beitrag anzeigen
                          JaLu Post 18 hast Du aber schon gesehen oder?
                          Hatte ich schon gelesen, nur gibt es anscheinend unterschiedliche Sichtweisen, wo Pin1 ist. Ich meine, wenn man auf den RJ45 Stecker von oben schaut, ob man von links oder rechts anfängt (Hinweis: Ich bin kein Elektroniker oder dergl.!). Ich mach mal ein Bild von meiner CPU-Karte. Getestet hatte ich die Einstellungen von Post 18 schon, nur leider ohne Erfolg. Das kann aber auch daran liegen, dass mir auch nicht klar ist, wie mein RS485 Adapter intern weiter beschaltet ist. Da scheint es keinen Standard zu geben...

                          Auf der CPU Karte ist es der linke Anschluss, welchen ich verwende. Und da ist jetzt die Frage: Sind die beiden Datenleitungen die ganz Linke oder die ganz rechts?!

                          RS485 Adapter.JPGCPU Karte.JPG
                          Zuletzt geändert von JaLu; 18.11.2017, 14:05.

                          Kommentar


                            #88
                            Hallo zusammen,

                            ich habe es gestern geschafft eine F1255-6 per Arduino UNO, W5100 Ethernet Shield und MAX 485 ein paar Modbus Register per UDP an openHAB zu schicken. Die Auswertung sollte dann auch im HS/FS oder anderen funktionieren. Mein Problem aktuell: Nicht alle Register enthalten Daten:

                            Code:
                            Number  Nibe_BF1_Flowsensor { nibeheatpump="40072" } -->OK
                            Number  Nibe_BT1_OutdoorTemp { nibeheatpump="40004" } -->OK
                            Number  Nibe_BT2_SupplyTemp { nibeheatpump="40008" } -->OK
                            Number  Nibe_BT6_HotWaterLoad { nibeheatpump="40014" } -->OK
                            Number  Nibe_BT7_HotWaterTop { nibeheatpump="40013" } -->OK
                            Number  Nibe_BT3_ReturnTemp { nibeheatpump="40012" } -->OK
                            Number  Nibe_BT10_BrineInTemp { nibeheatpump="40015" } -->OK
                            Number  Nibe_BT11_BrineOutTemp { nibeheatpump="40016" } -->OK
                            Number  Nibe_DegreeMinutes { nibeheatpump="43005" } -->OK
                            Number  Nibe_CompressorState { nibeheatpump="43427" } -->leer
                            Number  Nibe_BrinePumpSpeed { nibeheatpump="43439" } -->leer
                            Number  Nibe_EnergyAccSystem { nibeheatpump="42504" } -->leer
                            Number Nibe_HotWaterEnergyAcc { nibeheatpump="42437" } -->leer
                            Number Nibe_HeatEnergyAcc { nibeheatpump="42439" } -->leer
                            Number Nibe_BrinePumpSpeed2 { nibeheatpump="47418" } -->OK
                            Number Nibe_CompressorFreq { nibeheatpump="43136" } -->leer
                            Number Nibe_Alarm { nibeheatpump="45001" } -->leer
                            Zumindest Compressor Frequency (43136) sollte etwas liefern, tut es aber leider nicht :-( Hat jemand von Euch Erfahrung damit welche Register was liefern? Die Doku im NIBE Modbus Manager ist ja mehr als dürftig...

                            VG,
                            Klayman

                            Kommentar


                              #89
                              Lösung gefunden: Das openhab Nibe Heatpump Binding mit dem Modbus Emluator (arduino an RS485) unterstützt von Hause aus nur die F750 und die F1145/1245. Hier aber auch nicht alle möglichen Register, sondern nur einen Teil. Leider wirft das Binding aber keinen Fehler wenn man ein nicht unterstützes Register in die Items-Datei schreibt. Um das zu umgehen muss man die fehlenden Register in NibeHeatPumpDataParser.java hinzufügen und das Binding dann neu kompilieren. Wie das genau geht sollte man googeln ;-) Hier aber die wesentlichen Schritte auf nem Debian System:

                              - Nibe Heatpump binding deinstallieren
                              - openhab service neu starten
                              - git clone des bindings
                              - maven runterladen und installieren (apt-get install...)
                              - NibeHeatPumpDataParser.java mit gewünschten Registern anpassen
                              - neu kompilieren (mvn package)
                              - jar file aus dem Target-Verzeichnis in /usr/share/openhab2/addons kopieren
                              - openhab service neu starten
                              - wie gehabt konfigureren

                              Damit und in Verbindung mit Grafana lassen dann sich schicke Grafen erzeugen die Nibe Uplink in nix nachstehen. Außerdem bekommt man auch noch Statusmeldungen und Alarme auf den Bus.

                              Viele Grüße,
                              Klayman

                              Kommentar


                                #90
                                Übrigens: Die Arduino-Lösung aus Arduino Uno, Ethernet Shield und RS485 auf 232 Wandler kostet um die 50 €. Dann einfach A/B an der F1255 an Klemmen 10+11 und die WP mit dem Nibe Modbus Manager (Windows Programm) konfigurieren. Arduino Code gibts auf der github Seite.

                                Kommentar

                                Lädt...
                                X