Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin ComfoAir (KWL Wohnraumlüftung Zehnder, Paul, Wernig)

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

    hallo johnson,

    mir freut dass du so weit gekommen bist. ich nehme an du hast inzwischen auch das "terrmierungsproblem" gelöst. Ich nutze die MAX485 so wie die sind, habe keine Anpassungen vorgenommen.

    Ich habe versucht die Temperaturen herauszulesen, für mich sieht es aber so aus, dass Slave (0x04) diese aber überhaupt nicht an bus schickt. Ich habe ein logger sketch für mega board geschrieben, welches die daten nachrichten 0x04 an miniSD karte loggt. Mehrere Stunde lang geloggt, nix. nicht mal einzige bit ändert sich. Es gibt ein paar Zählerwerte aber die korrelieren mit der Uhrzeit.

    Schade, die Temperaturwerte wären interessant zu sehen.

    Was ich noch beobachtet habe:
    * Kein einzige Nachricht(mit Daten) von Slave an Master!!
    * Master schickt dem Bedienteil nur Register 0x20 und 0xF0
    * Master bombardiert den Slave alle 5 Sekunden mit Daten für alle Register
    *LED Bedienteil signalisiert Änderung von Lüfterstufe über Page 0x20 - Data12 - Werte 1 bis 7 , 0 = aus

    Zusammenfassung von Zähler(Werte, die sich ändern):
    * Master an Bedienteil
    Page 0x20 - Wert in Data9 erhöht sich jede 3 Minuten um 1, bei Änderung 0xFF -> 0x00 , erhöht sich Data10 um 1 (in Excel steht Frostschutz aktiv?)
    Page 0xF0 - wie im Excel beschrieben - keine Abweichungen
    * Master an Slave
    Page 0x40 - Data8 - Wert ändert sich zufällig zwischen 1 und 2, ich kann kein Muster erkennen.

    Megaboard stoßt bei diesem Sketch (logging auf miniSD-Karte) auf ihre performance Grenzen , ich habe nicht geschafft wirklich alle Messages zu loggen, es fehlen dann einfach viele pakete, aber es kann auch auf meinem "nicht-performanten" program liegen, oder an dem fakt dass ich "software-serial" nutze.

    LG Pavol

    Kommentar


      hallo,

      anbei das "arduino-in-the-middle" Konzept für Funktion "Änderung von Lüfter-stufe"


      1. Relay-mode (arduino verbringt die meiste Zeit in diesem modus):
      ============

      Was geschieht an beiden Leitungen?

      Bus-Master-Arduino("BMA") - arduino spielt die Rolle von Bedienteil auf der Adresse 0x02, alle andere Komponente hängen auf diesem bus (außer echten Bedienteil)

      arduino relays folgende nachrichten an BACP bus
      02-00-01 - query on control panel
      02-02-03-XX-10 - request - get changed data
      02-11-04-XX-YYYYY... - data to control panel


      arduino relays broadcast nachricht an BACP bus
      00-0A-00-00-SS-MI-HH-XX-DD-MM-YY-XX-XX - broadcast

      Bus-Arduino-Control-Panel("BACP") - arduino spielt die Rolle von Master auf der Adresse 0x01, auf diesem bus hängt sonst nur Bedienteil(TFT/LED)

      arduino relays alle empfangene nachrichten(vom BT) zurück an BMA bus, es gibt keine weitere Aufgaben



      2. Fan-speed-change-mode(Bedarf von extern, die Lüfter-stufe zu ändern):
      =====================

      In diesem Fall soll arduino (auf dem BMA bus) folgend reagieren
      Anfrage 02-00-01 nicht auf BACP weiterleiten, sondern gleich mit 01-02-02-82-10 TFT / 01-02-02-92-10 LED beantworten
      Request 02-02-03-XX-XX nicht auf BACP weiterleiten, sondern gleich mit daten aus Page 00 (TFT) oder 20 (LED) beantworten
      Nach dieser Aktion kehrt arduino zurück ins "Relaymode"

      Um die korrekte Daten aus Page 00/20 an master zu schicken zu können, soll sich arduino in "relaymode" Daten aus entsprechender Page merken!(TFT: 16 bytes aus Page 00 merken, anhand von gewünschter Lüfterstufe ist das 9.byte zu ädern, LED: 16 bytes aus Page 20 merken, zu ändern ist 13.byte)

      @johnson: ich nehme an, dein program funktioniert irgendwie ähnlich

      LG Pavol


      Kommentar


        Hallo,

        ja, kann ich bestätigen Master schickt 0x20 und 0xF0 in regelmässigen Abständen an Bedienteil.
        Ja, Master schickt alle 5sek alle Pages.
        Evtl. schickt er F0 nicht an LED-Bedienteil da diese Werte nicht angezeigt werden können.

        20 und 40 werde ich mal beobachten und mit deinen Erkenntnissen vergleichen.


        Ja, es werden nur Daten auf Anfrage gesendet.
        Beim TFT geht das wie folgt: Es wird nicht mehr die Std-Antwort (0101 02 02 02 10 ED) geschickt sondern (0101 02 02 82 10 6D).
        Die 8 signalisiert eine Änderung. Danch schickt der Master die Aufforderung (0102 02 03 00 10 ED) jetzt schickt das TFT die Konfiguration Typ=04.

        Hab ich auch schon beim Lüfterslave gesehen als z.B die Außluft zu kalt war, dann schickte der nicht mehr die Std-Antort. Dann fragte der Master die Konfig ab, die hat dann der Lüfterslave geschickt. Nur so werden Daten vom Slave zum Master übertragen.

        Sonst sind Statusmeldungen in der Rückmeldung z.B Lüfterslave zu Master
        0101 03 02 04 06 15 E9, 101=Adr, 03=Länge, 02=Typ,04=oberes Nibble ist 8 bei Änderung siehe oben im Text, unteres Nibble ist Senderadresse, 06=??, 15= das sind einzelne Bits die Anzeigen ob Lüfter laufen, ob Drehzahl erreicht ist, und ich glaube ob Bypass offen oder nicht.

        Kommentar


          Hallo

          mein Programm besteht hauptsächlich aus 2 UART-Empfangs-ISR.
          Sobald Bytes vom Master kommen springt er in die Rx0-ISR und schickt sofort in der ISR die Bytes an das TFT bis alle durch sind, gilt für Adresse 0x102 und für 0x100, ich habe MPCM aktiviert.
          Wenn alle Bytes durch sind wird auf Empfang zum TFT geschalten. Wenn dort Bytes kommen springt er in dieRx1-ISR und schickt in der ISR gleich die Bytes an den Master, so läuft das System ganz normal, lässt sich mit dem TFT ganz normal bedienen.
          Wenn ich umschalten will modifiziere ich einfach in der Nachricht 0101 02 02 02 10 ED das ober Nibble zu 8 und setze die neue Checksum (6D)ein. Dann kommt automatisch diese Nachricht 0102 02 03 00 10 ED vom Master welche ich wieder 1:1 zum TFT durchreiche.
          Das TFT Anwortet dann auf diese Nachricht (was für ein Glück) mit z.B 0101 11 04 00 02 1C 29 16 05 02 01 10 01 01 00 00 00 00 00 00 DD hier muss nur das Byte der Lüfterstufe geändert werden und die Checksum neu ausrechnet werden, da diese Nachricht nicht statisch ist weil hier die Uhrzeit drin ist. Dann läuft das System mit der neuen Stufe.

          Dann läuft das System ganz normal als 1:1 Repeater weiter, gibt auch sonst nichts zu tun.

          Kommentar


            Hallo Pavol,
            deine Idee gefällt mir auch gut.
            Hast du eine Idee wie man den BACP Bus verwenden könnte um über diesen die Steuerungsbefehle zu realisieren, so könnte man sich die dritte UART oder was auch immer sparen. Evtl. müsste man mal prüfen wie langsam man die Kommunikation laufen lassen kann damit das TFT nicht aussteigt und in den Pausen die Kommunikation zur Haussteuerung durchführt.
            Ich arbeite nicht mit Arduino weil ich nicht wusste wie man hier mit der Hardware-USART das 9. Bit und MPCM realisieren kann.
            Es wäre gut wenn wir uns auf eine Entwicklungsplattform einigen könnten so können wir alle hier uns gut ergänzen. Ich habe kein Problem mit Arduino nur müssten wir klären wie wir die 9 Bit-USART dort klar bekommen. Auch könnten dies dann andere auch einfach nutzen da es die Arduinos überall zu kaufen gibt.

            Kommentar


              Hallo Johnson, ich arbeite mit pooling und nicht direkt mit Interrupts, Ich habe mit dem arduino viel zeit am we verbraucht, aber bin nicht viel weit gekommen. Irgendwie schaffe ich nicht rechtzeitig dem Master zu beantworten. Ich nutze eine angepasste HardwareSerial Klasse, diese unterstützt auch 9N1. Laut meiner Auswertung sind es cca. 19ms zwischen 2 Abfragen von Master,(0x102 02 01 0xFD), Das LED Bedienteil schafft antworten in 8ms , mir gelingt es in 11ms. Es ist nicht so großes Unterschied, oder mir ist irgendwo andres ein Fehler unterlaufen. Ich sehe mir es heute abend wieder an

              LG Pavol

              Kommentar


                hi, master akzeptiert jetzt meine Antworten, ich kann die Lüfterstufe von arduino regulieren. Ich simuliere den Bedienteil. Ich habe noch herausgefunden , wie sich LED Bedienteil dem Master identifiziert. Er setzt Data14 in Page 20 auf 1.

                Ich habe eine neue Idee, wie ist es noch einfacher umzusetzen wäre. Lassen wir den master und Bedienteil direkt reden , und schalten wir von Bedienteil auf controller nur für den kurzen Moment, wenn ein Parameter zu ändern ist. Mit einem relay dem Bedienteil den bes "wegnehmen" , Änderung an master schicken und dann zurück auf Bedienteil schalten.

                Kommentar


                  Hallo,

                  Wann wird Data 14 in Page 20 auf 1 gesetzt? Nachdem der Master deine Antworten akzeptiert hat?

                  Ich hab Probleme mit meiner Softserial, die funzt nicht zuverlässig.
                  Diese reagiert momentan (wenn sie funzt) auf die Eingaben "1", "2" und "3" dann wird die entsprechende Lüfterstufe gesetzt und "ok" zurückgemeldet. Mit "?" wird die aktuelle Lüfetrstufe zurückgemeldet.
                  Ich hab mir jetzt auch ein Mega2560 (4 Hardware UARTs, da die Softserial nicht zuverlässig funzt) und einen ESP8266 bestellt.
                  Mit dem ESP8266 will ich einen kleinen Webserver laufen lassen und per Web-Interface die Daten darstellen und die Anlage steuern.
                  Muss aber noch ein wenig warten da ich erst letzte Woche in China bestellt hab, mal schauen wann die Teile eintreffen.

                  Kommentar


                    Hi, gleich nach dem start-up.

                    master: 102 0 1 FD
                    cp: 1 2 2 92 10 7D
                    master: 2 2 3 20 10 CD
                    cp: 1 11 4 20 1 1 5A 0 7F 0 0 1 0 6F 1 0 1 1 1 0 81

                    anbei auch ganze log in excel (siehe Reiter rawdata, ab Zeile 70) , ich habe zu jedem command auch aktuelles milliswert gespeichert

                    Super, so du bist schon "fast fertig" Mit SoftwareSerial habe ich nur zugehört und "master" für den Bedienteil gespielt. Mit HW-Serial sollte es einfacher sein. Mit dem WIFI Module habe ich noch nicht gespielt :-)

                    und anbei auch noch ein Foto von meiner Bastler-ecke :-) Das war noch das Vorhaben "arduino-in-the-middle-attack". Davon bin schon weggekomen die, Idee mit dem Relais finde ich einfacher und ich kann dann mega auch für andere zwecke nutzen und nicht nur Vollzeit bytes von a nach b zu schieben

                    LG





                    Angehängte Dateien
                    Zuletzt geändert von pavol; 23.03.2016, 23:23. Grund: Ich habe das log datei vergessen.

                    Kommentar


                      Ist so eine Idee von mir mit dem ESP8266, hab auch noch nie mit dem Ding gespielt nur sehr viel gelesen.
                      Jetzt hab ich eine konkrete Idee wo ich das einsetzen kann und will mal spielen.
                      Wenn das funzt könnt man vom jedem Tablet oder Smartphone die Lüfterstufe ändern auch sollte es dann möglich sein es in eine VISU einzubinden.
                      Ich will den ESP nehmen da ich keine LAN-Dose in der Nähe vom Lüftungsgerät hab.

                      Kommentar


                        Hallo zusammen.

                        Kann mir mal einer erklären, was die letzen Einträge mit der eigentlichen Überschrift zum Thema (ausser dass ihr offensichtlich eine der genannten KWL habt und fleissig daran rumbastelt) zu tun haben? Habe eine Comfoair und verwende erfolgreich das dazu passende Smarthome-Plugin. Jedoch sehe ich hier die letzte Zeit keinerlei Bezug mehr zu diesem oder SmarthomeNG. Ehrlich gesagt wenn ich als Anfänger in dieses Thema einsteigen möchte, wäre ich bei diesem Thread schon lange raus, würde den Raspberry in die Ecke schmeissen und die Comfoair manuell bedienen. Glücklicherweise stand bei mir die Implementierung an, bevor dieser Thread gekapert wurde. Ich finde daher auch (wie Marcus schon vor längerem geschrieben hat), dass diese Diskussion ins DIY-Forum gehört. Mit der aktuellen Diskussion ist niemandem der sich mit SmarthomeNG und dem dazugehörenden Comfoair-Plugin beschäftigen möchte geholfen. Falls ihr jedoch an der Weiterentwicklung des dazugehörenden Plugins arbeitet, wäre es sicherlich interessant wenn es dazu mal wieder was zu lesen gäbe.

                        Beste Grüße,
                        Markus

                        Kommentar


                          Hallo an alle,

                          ich habe nichts dagegen, ein neues Thread in DIY Bereich für Thema "Anbindung KWL Paul Novus 300 / Focus 200" anzulegen. Ich kann es machen. Wäre es möglich die Kommentare in das neue Thread zu übernehmen? Zb ab nummer #78?

                          Kommentar


                            Zitat von lucipher Beitrag anzeigen
                            Hi,

                            die Daten werden im Plugin nicht korrekt extrahiert wenn die Prüfsumme eine 07 ist.

                            Code:
                            2015-12-23 19:10:50 ERROR ComfoAir-cyclic ComfoAir: Ignored command: 07:f0:00:0c:06:3e:3e:03:da:03:ec:07:07:07:0f
                            2015-12-23 19:10:50 ERROR ComfoAir-cyclic ComfoAir: Corresponding read command: 00:0b:00, decoded data: 3e:3e:03:da:03:ec:07 (raw: 3e:3e:03:da:03:ec:07)
                            2015-12-23 19:10:50 ERROR ComfoAir-cyclic ComfoAir: Calculated checksum of 14 does not match received checksum of 7! Ignoring reponse.
                            Die Datenlänge sind 6 Bytes und es werden 7 extrahiert.

                            Code:
                            # Remove begin and checksum to get the data
                            rawdatabytes = response[5:-3]
                            Das kann man aber über eine Selektion abfangen. Muss ich mal umschreiben. Aber nicht in den Weihnachtstagen. Sonst gibts von der Frau mecker.


                            Gruß
                            Hallo,

                            bei mir taucht dieser Fehler auch immer wieder im Log auf. Hast Du eine Idee, wie man das Problem mit der Prüfsummenvalidierung bei Prüfsummenwert 07 fixen kann?

                            Greetinx,
                            Udo

                            Kommentar


                              Hi,

                              ich poste heute Abend mal die Änderung.

                              Gruß

                              Sascha

                              Kommentar


                                Hi Udo,

                                hab nun mal Zeit gefunden den Code noch einmal zu öffnen. Stelle derzeit meinen Visu auf Symcon um, da smarthome.py für derzeit keine Option mehr ist. Callidomus ist ebenfalls für mich kein Weg. Daher zurück auf null und weiter mit einem komerziellen Produkt.

                                Zu smarthome.py (__init__.py des Plugins comfoair)
                                Ich habe lediglich das Auslesen der Checksumme etwas vorgezogen. Dann vergleiche ich auf den Specialcharacter "07" und verändere den Ausschnitt der Databytes.

                                Anbei noch ein Screenshot über den diff und das Codebeispiel. Hoffe das hilft. Bei mir hat er daraufhin keine Fehler mehr auf Checksumme gebracht.

                                Bildschirmfoto vom 2016-06-19 15-08-56.png

                                PHP-Code:
                                 # Get Received Checksum
                                        
                                receivedchecksum response[len(response) - len(self._packetend) - 1]

                                        
                                # Remove begin and checksum to get the data
                                        
                                if receivedchecksum != self._controlset['SpecialCharacter']:
                                            
                                rawdatabytes response[5:-3]
                                        else:
                                            
                                rawdatabytes response[5:-4
                                Gruß

                                Sascha
                                Zuletzt geändert von lucipher; 19.06.2016, 14:20.

                                Kommentar

                                Lädt...
                                X