Ankündigung

Einklappen
Keine Ankündigung bisher.

Anlagenstatus einer Alpha Innotec Wärmepumpe (Luxtronik 2.0)

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

    Anlagenstatus einer Alpha Innotec Wärmepumpe (Luxtronik 2.0)

    Hallo Zusammen,

    aufgrund der Resonanz auf das Alpha Innotec Wärmepumpen Gateway für die Steuerung Luxtronik 1.0 mit RS232 Schnittstelle, würde ich den Code auch gerne an die Luxtronik 2.0 anpassen.

    Viele besitzen schon die neuere Wärmepumpensteuerung, welche eine Ethernet-Schnittstelle und einen integrierten Java Webserver besitzt.

    Der aufwendige Parser-Teil kann leicht angepaßt werden.

    Ich benötige jedoch Hilfe beim Start Procedere, das wie folgt abläuft:

    1. TCP Verbindung zum Port 8888 der Luxtronik öffnen
    2. Request 3004 (4 Bytes) senden (da die Codierung im Big Endian Format erfolgt, Dezimal 3004 entspricht 0x00 0x00 0x0b 0xbc)
    3. Request mit 0 (1 Byte) abschließen
    4. Wärmepumpe bestätigt den Request mit 3004 (4 Byte), wenn dieser korrekt empfangen wurde
    5. Wärmepumpe sendet eine Information ob sich die Datenwerte geändert haben (4 Byte)
    6. Wärmepumpe sendet die Anzahl der folgenden 4Byte Datenwerte, max. 158
    7. Wärmepumpe sendet die 4 Byte Datenwerte, max. also 158 x 4 Byte

    Mir ist vor allem nicht klar wie ich die einzelnen Empfangsschritte 4. bis 7. sauber voneinander abgrenze (event oder after) und wie ich auf eine fehlerhafte Bestätigung des Request durch die Wärmepumpe reagiere.

    Hier der 1. Entwurf für das Start Procedere:

    [highlight=epc]
    // Variablen definieren
    WP_Port=8888u16
    WP_IP=0u32
    TCP_Session=0b0
    Request1=0b0
    Request2=0b0
    Rawdata1=$$
    Rawdata2=$$
    Rawdata3=$$
    RequestFeedback=$$
    Datenstatus=$$
    Datenanzahl=$$
    Daten=$$
    StartPos=0u16
    EndPos=0u16
    // TCP Verbindung zu Port 8888 alle 5 Minuten öffnen
    if cycle(5,0) then \\
    TCP_Session=EIN;\\
    connecttcp(WP_Port,WP_IP) \\
    endif
    // TCP Request senden (Dezimal: 3004, also 4 Bytes)
    if (after(Startabfrage,1000u64) == EIN) then \\
    Request1=EIN; \\
    sendtcp(WP_Port, WP_IP,0x00,0x00,0x0b,0xbc) \\
    endif
    // TCP Request senden (Dezimal: 0, also 1 Byte)
    if (after(Request1,1000u64) == EIN) then \\
    Request2=EIN; \\
    sendtcp(WP_Port, WP_IP,0x00) \\
    endif
    // Empfang der Request Bestätigung (Dezimal: 3004, also 4 Bytes, wenn Request korrekt empfangen wurde)
    if event(readtcp(WP_Port, WP_IP,Rawdata1)) then \\
    RequestFeedback=Rawdata1; \\
    /* Prüfen, ob der 3400er Request von der WP korrekt bestätigt wurde */
    <tbd>
    else
    /* wenn nicht korrekt, dann <tbd> */
    <tbd>
    endif
    // Empfang des Datenstatus (4 Bytes, gibt an ob sich Werte verändert haben)
    if event(readtcp(WP_Port, WP_IP,Rawdata2)) then \\
    Datenstatus==Rawdata2 \\
    endif
    // Empfang der Datenanzahl (Datenanzahl gibt die Anzahl der folgenden 4 Byte Werte an, max. 158 x 4Byte)
    if event(readtcp(WP_Port, WP_IP,Rawdata3)) then \\
    Datenanzahl==Rawdata3 \\
    endif
    // Empfang des TCP Pakets
    if event(readtcp(WP_Port, WP_IP,Rawdata)) then \\
    Buffer=Rawdata
    endif
    // TCP Verbindung schliessen
    if after(TCP_Session,10000u64) then \\
    closetcp(WP_Port, WP_IP); \\
    TCP_Session=AUS \\
    endif
    // Parsen der einzelnen Informationsblöcke der Wärmepumpendaten
    <tbd>
    [/highlight]

    Möglicherweise hilft für Anregungen auch die Umsetzung eines anderen AI Wärmepumpenbesitzers in C (siehe Anhang).

    Freue mich über jede Anregung.

    Ebenso benötige ich Hilfe beim Testen, da ich bisher nur die Luxtronik 1.0 besitze.

    Viele Grüße

    Michael
    Angehängte Dateien

    #2
    Habe auch eine Luxtronic 2.0 und waere sehr interessiert an einer Einbindung. Verstehe von Schnittstellen leider nur Bahnhof.

    Kommentar


      #3
      Die Wolf WP BWS 01 ist doch baugleich mit AI oder? Dann bin ich auch interessiert :-)
      www.knx-Hausblog.de

      Kommentar


        #4
        Soweit ich weiß produziert Alpha Innotec auch die Wärmepumpen/Steuerung für Siemens und Wolf.

        Die Luxtronik ist unter anderem an Ihrem Dreh/Drück-Bedienknopf zu erkennen.

        Vergleiche einfach einmal die Steuerung mit dieser Beschreibung:

        http://www.dalcalor.ch/download/down...ux_2.0_U_D.pdf

        Viele Grüße

        Michael

        Kommentar


          #5
          Als Tester stehe ich gerne zur Verfügung. Gebe normal auch flott Rückmeldung

          Kommentar


            #6
            Hallo,

            ich hatte mich vor einiger Zeit schon mal daran versucht. Leider ist mir keine stabile Kommunikation mit der Luxtronic 2.0 gelungen, daher habe ich das direkt in HomeControl in python realisiert.

            Ein Problem bestand darin, dass die Kommunikation mit dem HomeControl Makro kollidierte, ich glaube das ist inzwischen behoben.

            Die Grundidee:
            Das Makro fragt im regelmäßigen Zeitabstand den Zustand der Wärmepumpe ab (Hex: 00000BBC00000000).
            Über readtcp wird die Antwort nun 4Byte-Weise ausgelesen und der Variablenindex entsprechend um eins erhöht.
            Weitere Makros verknüpfen nun den Variablenindex mit einer eibPC Variable, bzw. Gruppenadresse. Beispielmakros sind für Integer und Floatvariablen realisiert.

            Leider funktioniert das 4Byte-Weise (binäre) auslesen über readtcp nicht, zumindest habe ich das nie hinbekommen. Das Debugging ist für solche Dinge im eibPC eher ein Alptraum.

            Hier der Makrocode als Ansetzpunkt für die weitere Arbeit:
            [highlight=epc]
            //----------------------------------------------------------------------
            // Makros für den Enertex EiBPC
            //
            // Anbindung an Luxtronic 2.0 / WP-NET Steuerung für Wärmepumpen
            //
            // Version : v1.000
            //
            // License : Verwendung nur für die Nutzung mit dem
            // Enertex EibPC gestattet
            //
            // (C) Copyright : Dr.-Ing. Arno Pernozzoli. All rights reserved.
            //
            // Author : Dr.-Ing. Arno Pernozzoli
            //
            // Dat.Rev. : $Date: 2011/05/10 11:08:00 $
            // Version : $Revision: 1.0 $
            //----------------------------------------------------------------------

            :begin Luxtronic_WPNET(Name, PortLux, IPLux, IntervalLux)
            :info $Dieses Makro liest die aktuellen Informationen einer Luxtronic Wärmepumpensteuerung aus. \\
            Über das Makro Luxtronic_Var und Luxtronic_GA können ausgelesene Werte in Variablen oder Gruppenadressen geschrieben werden.\\
            Zur Dokumentation der Ereignisnummern siehe beigelegtes Readme.txt.\\
            Makro nur einmal in Ihrem System pro WP-Steuerung. Wenn Sie mit mehr als einer WP-Steuerung arbeiten wollen, vergeben Sie entsprechend weitere Namen.$\\
            $Vergeben Sie einen Namen für Ihre Anbindung, ohne Leerzeichen, z.B WP$\\
            $Geben Sie an, an welchem Port die WP-Steuerung erreichbar ist, i.d.R. 8888.$\\
            $Geben Sie an, an welcher IP-Adresse die WP-Steuerung erreichbar ist.$\\
            $Geben Sie an, in welchem Intervall die Daten aktualisiert werden sollen (in Minuten, max. 255)$
            :shortinfo $Auslesen aktueller Informationen aus Luxtronic 2.0 / WP-NET Steuerung für Wämepumpen.$

            Name_Connected = AUS
            Name_Protocol = 0u08
            Name_Length = 99u32
            Name_Entry = 0u32
            Name_Response = 0u32
            Name_Message = 0u32
            Name_Message2 = 0u32
            Name_Message3 = 0u32
            Name_MQueue = $ABCD$
            Name_Send = $ABCD$
            Name_S0 = 0u32
            Name_R0 = 0u08
            Name_R1 = 0u08
            Name_R2 = 0u08
            Name_R3 = 0u08
            Name_Port = 0u16
            Name_IP = 0u32
            Name_ReceivedTcp = 0u32

            if (cycle(0,20) and !Name_Connected) then \\
            connecttcp(PortLux,IPLux); \\
            Name_Protocol = 2u08; \\
            Name_Connected = EIN \\
            endif

            if (delay(Name_Connected,2000u64)) then \\
            sendtcp(PortLux,IPLux, 0x00, 0x00, 0x0B, 0xBC, 0x00, 0x00, 0x00, 0x00) \\
            endif

            if event(readtcp(Name_Port, Name_IP, Name_Message, Name_Message2, Name_Message3)) and Name_Connected and (Name_IP == IPLux) and (Name_Port == PortLux) then \\
            Name_ReceivedTcp = Name_ReceivedTcp+1u32; \\
            stringset(Name_MQueue,Name_Message,0u32); \\
            stringset(Name_MQueue,Name_Message2,4u32); \\
            stringset(Name_MQueue,Name_Message3,8u32); \\
            Name_R3 = stringcast(Name_MQueue,0u08,0u16); \\
            Name_R2 = stringcast(Name_MQueue,0u08,1u16); \\
            Name_R1 = stringcast(Name_MQueue,0u08,2u16); \\
            Name_R0 = stringcast(Name_MQueue,0u08,3u16); \\
            Name_Response = convert(Name_R3,0u32)*16777216u32+convert(Name_R2, 0u32)*65536u32+convert(Name_R1,0u32)*256u32+conver t(Name_R0,0u32); \\
            if ((Name_Length > 0u32) and (Name_Protocol == 5u08)) then Name_Entry = Name_Entry + 1u32; Name_Length = Name_Length - 1u32 endif; \\
            if (Name_Protocol == 4u08) then Name_Length = Name_Response; Name_Protocol = 5u08 endif; \\
            if (Name_Protocol == 3u08) then Name_Protocol = 4u08 endif; \\
            if (Name_Protocol == 2u08) and (Name_Response == 3004u32) then Name_Protocol = 3u08 endif \\
            endif

            if ((Name_Length == 0u32) and Name_Connected) then \\
            closetcp(PortLux,IPLux); \\
            Name_Length = 99u32; \\
            Name_Connected = AUS \\
            endif

            :end

            :begin Luxtronic_Var(Name, Index, Var)
            :info $Dieses Makro schreibt einen ausgelesenen Wert mit gegebenem Index in die angegebene Variable. \\
            Zur Dokumentation der Ereignisnummern siehe beigelegtes Readme.txt.$\\
            $Namen der Anbindung$\\
            $Index des zu schreibenden Wertes.$\\
            $Zu beschreibende Variable.$
            :shortinfo $Schreiben eines aktuellen Werts aus der WP-Steuerung in eine Variable.$
            if (Name_Entry == convert(Index,Name_Entry)) then Var = convert(Name_Response, Var) endif
            :end

            :begin Luxtronic_VarFloat(Name, Index, Var)
            :info $Dieses Makro schreibt einen ausgelesenen Wert mit gegebenem Index in die angegebene Variable. \\
            Der ausgelesene Wert (z.B. Temperaturen) ist in zehntel angegeben und muss daher konvertiert werden. \\
            Zur Dokumentation der Ereignisnummern siehe beigelegtes Readme.txt.$\\
            $Namen der Anbindung$\\
            $Index des zu schreibenden Wertes.$\\
            $Zu beschreibende Variable.$
            :shortinfo $Schreiben eines aktuellen Float-Werts aus der WP-Steuerung in eine Variable.$
            if (Name_Entry == convert(Index,Name_Entry)) then Var = convert(Name_Response, Var) / convert(10u08,Var) endif
            :end

            :begin Luxtronic_GAVar(Name, Index, GA, Var)
            :info $Dieses Makro sendet einen ausgelesenen Wert mit gegebenem Index an die angegebene Gruppenadresse. \\
            Zur Dokumentation der Ereignisnummern siehe beigelegtes Readme.txt.$\\
            $Namen der Anbindung$\\
            $Index des zu schreibenden Wertes.$\\
            $Zu beschreibende Gruppenadresse.$
            :shortinfo $Senden eines aktuellen Werts aus der WP-Steuerung an eine Gruppenadresse.$
            if (Name_Entry == convert(Index,Name_Entry)) then write(GA,convert(Name_Response, GA)) endif
            :end

            :begin Luxtronic_GAFloat(Name, Index, GA)
            :info $Dieses Makro sendet einen ausgelesenen Wert mit gegebenem Index an die angegebene Gruppenadresse. \\
            Der ausgelesene Wert (z.B. Temperaturen) ist in zehntel angegeben und muss daher konvertiert werden. \\
            Zur Dokumentation der Ereignisnummern siehe beigelegtes Readme.txt.$\\
            $Namen der Anbindung$\\
            $Index des zu schreibenden Wertes.$\\
            $Zu beschreibende Gruppenadresse.$
            :shortinfo $Senden eines aktuellen Float-Werts aus der WP-Steuerung an eine Gruppenadresse.$
            if (Name_Entry == convert(Index,Name_Entry)) then write(GA, convert(Name_Response, GA) / convert(10u08,GA)) endif
            :end
            [/highlight]

            Gruss
            Arno

            Kommentar


              #7
              Hallo Arno,

              vielen Dank für Dein Feedback.

              Ich selber habe nur die Luxtronik 1.0, aber habe in den letzten Tagen einige erste Tests mit Joggi2222 gemacht, der auch die 2.0 besitzt.

              Ich habe noch einige grundsätzliche Fragen:

              Die bisherigen Realisierungen in C oder Phyton lesen die Rückmeldung der Wärmepumpe immer auf Basis einer 4-Byte Prozedur aus. Was spricht eigentlich dagegen die komplette Rückmeldung der Anlage in einen Buffer zu schreiben und diesen anschließend 4-Byte weise zu zerlegen?

              Bei unseren ersten Tests haben wir mit folgendem Code offensichtlich eine Verbindung zur Luxtronik hinbekommen, jedoch empfangen wir Parameternamen und Werte (z.B. in Dezimal: p=ok, Code_WP_akt=3, Temperatur_TFB1=29.8), was mich sehr verwundert.

              [highlight=epc]
              // Variablen definieren
              WP_Port=8888u16
              WP_IP=192.168.178.102
              TCP_Session=AUS
              TCP_Request=AUS
              Rawdata=$$
              WP_Buffer=$$
              // TCP Verbindung zur Wärmepumpe (IP Adresse 192.168.178.102 Port 8888) alle 5 Minuten öffnen
              if cycle(5,0) then \\
              TCP_Session=EIN;\\
              connecttcp(WP_Port,WP_IP) \\
              endif
              // TCP Request senden (Dezimal: 3004, 4 Byte, Big Endian Format)
              if (after(TCP_Session,1000u64)==EIN) then \\
              TCP_Request=EIN; \\
              sendtcp(WP_Port,WP_IP,0x00,0x00,0x0b,0xbc) \\
              endif
              // TCP Request abschließen (Dezimal: 0000, 4 Byte, Big Endian Format)
              if (after(TCP_Request,1000u64)==EIN) then \\
              sendtcp(WP_Port,WP_IP,0x00,0x00,0x00,0x00) \\
              endif
              // Empfang des Wärmepumpen Feedbacks
              if event(readtcp(WP_Port,WP_IP,Rawdata)) then \\
              WP_Buffer=Rawdata \\
              endif
              // TCP Verbindung schliessen
              if after(TCP_Session,10000u64) then \\
              closetcp(WP_Port,WP_IP); \\
              TCP_Session=AUS; \\
              TCP_Request=AUS \\
              endif
              [/highlight]

              Ich hätte als Antwort (analog zur Luxtronik 1.0) nur eine Aneinanderreihung von 4-Byte Werten erwartet, also z.B. in Dezimal (natürlich ohne die Beschreibung in < >):

              3400 <Bestätigung Request>
              x <Datenwerte geändert j/n>
              158 <Anzahl Datenwerte>
              250 <Temperatur_TVL>
              230 <Temperatur_TRL>
              ...

              Desweiteren verweist Du in Deinem Makro auf eine Readme.txt Datei. Kannst Du uns diese auch zur Verfügung stellen?

              Viele Grüße

              Michael

              Kommentar


                #8
                Hallo Zusammen,

                kleine Zwischenmeldung an alle Luxtronik 2 Besitzer: Dank der Test-Unterstützung von Jogi2222 haben wir nun das erste Mal erfolgreich den kompletten Datensatz der Luxtronik 2 anzapfen können.

                Jetzt steht die Programmierung der Datensatzauswertung und die Zuweisung der Werte zu den Parametern an.

                Wenn alles gut geht können wir Mitte Februar die Auswertung des Datensatzes testen.

                Joachim, vielen Dank noch einmal für die Test-Unterstützung.

                Viele Grüße

                Michael

                Kommentar


                  #9
                  Hallo zusammen,

                  durch Zufall bin ich gerade auf diesen Thread gestossen. Ich hatte im letzten Jahr mehrere Fragen zu dem Thema gepostet und dann ein Stück Perl Code geschrieben, das alle WP-Parameter ausliest und den für mich interessanten Teil über den EIBD auf den Bus (und auch noch in eine mysql db) schreibt. Das ganze läuft bei mir auf einem NAS.

                  Wenn Interesse besteht dann lade ich den Code mal in den download-Bereich

                  Viele Grüße
                  -boxerfahrer

                  Kommentar


                    #10
                    Hallo Stefan,

                    für dieses Projekt hilft mir dies nicht weiter, weil der EibPC ein Linux Hutschienen-PC mit einer Art Basic ist.

                    Neben Deiner Lösung habe ich noch eine Pyton und eine C+ Lösung gesehen, aber diese setzen alle einen herkömmlichen PC voraus. Der EibPC ist an dieser Stelle jedoch unter anderem aufgrund seiner Leistungsaufnahme <2W unschlagbar.

                    Aber vielleicht kannst Du mir aufgrund Deiner Erfahrung meine Fragen zu dem Luxtronik2 Datensatz beantworten:

                    a) In welcher Maßeinheit sind die Werte der Ablaufzeiten im Datensatz angegeben (Sekunden, Minuten) ?

                    b) Wie läßt sich aus den Parametern SoftStand im Datensatz die aktuelle Software-Version berechnen (Testanlage hat v1.60 und den Wert SoftStand1=86)?

                    c) In welcher Maßeinheit sind die Wärmemengenzähler-Werte angegeben?

                    Ich habe nur die Luxtronik 1 und kann dies daher nicht selbst vergleichen. Die Temperaturdaten werden ja beispielsweise sowohl bei der Lux1 als auch der Lux2 mit dem Faktor 10 angegeben.

                    Außerdem scheint sich bei der v1.60 der Datensatz vergrößert zu haben. Ich empfange 177 4-Byte Werte. In anderen Projekten war immer von 168 4-Byte Werten die Rede.

                    Viele Grüße

                    Michael

                    Kommentar


                      #11
                      Hallo Michael,

                      2W sind in der Tat unschlagbar. Ich habe halt das NAS eh in Betrieb, und habe dann auch direkt mistereib drauf gepackt.

                      Zu Deinen Fragen:

                      a) es sind Sekunden seit Inbetriebnahme
                      b) habe ich noch nicht gemacht weil's mich bisher nicht interessiert hat
                      c) die ausgelesenen Werte (Feldindex 151 und 152) musst Du genau wie die Temperaturen durch 10 teilen, dann hast Du kWh

                      Ich komme auf 173 Werte, komisch ... aber alles was mich interessiert ist dabei.

                      Hier noch ein paar Infos zur Kodierung der aktuellen Betriebsart in Feld 119,

                      # 0 : Heizbetrieb
                      # 1 : Keine Anforderung
                      # 2 : Netz-Einschaltverzoegerung
                      # 3 : SSP Zeit
                      # 4 : Sperrzeit
                      # 5 : Brauchwasser
                      # 6 : Estrich-Programm
                      # 7 : Abtauen
                      # 8 : Pumpenvorlauf
                      # 9 : Thermische Desinfektion
                      # 10: Kuehlbetrieb
                      # 11: ?
                      # 12: Schwimmbad
                      # 13: Heizen Ext.
                      # 14: Brauchwasser Ext.
                      # 15: ?
                      # 16: Durchflussueberwachung
                      # 17: ZWE Betrieb

                      - boxerfahrer

                      Kommentar


                        #12
                        Hallo Stefan,

                        vielen Dank für Dein Feedback.

                        Welche Software Version hat denn Deine Anlage?

                        v1.60 scheint die aktuellste Version zu sein.

                        Viele Grüße

                        Michael

                        Kommentar


                          #13
                          Habe ich auch, Michael. Am Datenformat hat sich dabei aber nichts geändert. Auf der Datenseite ist BACNet dazu gekommen.

                          Kommentar


                            #14
                            Hallo Arno,

                            Zitat von pernozzoli Beitrag anzeigen
                            ich hatte mich vor einiger Zeit schon mal daran versucht. Leider ist mir keine stabile Kommunikation mit der Luxtronic 2.0 gelungen, daher habe ich das direkt in HomeControl in python realisiert.
                            der gepostete Code ist aber kein Python!? Könntest du mir mal dein Python Programm schicken oder hier im Forum posten?

                            EDIT: wenn ich das richtig sehe lassen sich somit Werte der Steuerung auslesen aber keine Fehler, oder? Besonders interessant fände ich es feststellen zu können, wenn die WP wegen eines Fehlers steht und am besten noch welcher Fehler das ist (leider aus aktuellem Anlass interessant).
                            Mit freundlichen Grüßen
                            Niko Will

                            Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
                            - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

                            Kommentar


                              #15
                              Über den TCP Request siehst Du alle Statusinformationen welche Du auch über den Webserver sehen kannst. Also auch Abschaltungen und Fehler.

                              Diese können dann natürlich für Logiken verwendet werden oder z.B. per Email gesendet werden.

                              Kommentar

                              Lädt...
                              X