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

    #76
    Hi,


    Zitat von nEiMi Beitrag anzeigen
    eine Frage noch, zwar Offtopic, aber wenn ich den Profi schon mal da hab...
    Ich habe SmartHome.py nach dieser Anleitung auf Ubuntu 14.04 installiert, leider schaff ich es hier nicht den debug-Modus(smarthome.py -d) zu starten. Beim Aufruf des Befehls erhalte ich "command not found".
    Mit "service smarthome start" lässt sich SmartHome.py starten bzw. mit "service smarthome restart" neustarten, jedoch scheint es hier keine Debug-Option zu geben.
    Muss ich noch etwas nachinstallieren damit dies funktioniert?

    wie hast du denn hierzu den Befehl auf der Kommandozeile so eingegeben?

    Code:
    smarthome.py -d
    Ist der Pfad zum Programm in der Umgebungsvariable PATH eingetragen?

    Versuche mal den vollständigen Pfad.

    Code:
    /usr/local/smarthome/bin/smarthome.py -d
    Gruß
    Zuletzt geändert von lucipher; 19.11.2015, 22:36.

    Kommentar


      #77
      Also danke nochmal für den Tip mit dem fehlenden Paket... das Plugin läuft soweit.

      Allerdings ist mir aufgefallen, da ich ja meine KWL vorher übers WIregate/CometVisu laufen hatte, das es noch mind. 3 Rückmeldungen gibt die nicht im Plugin implementiert sind.

      Auszug aus dem Wiregate-Plugin-Code:
      Code:
      my $ga_zustand_badschalter = ''; #GA DPT 1.001 fuer die Rueckmeldung des Zustandes des Badezimmerschalters
      my $ga_fehler_filter = ''; #GA DPT 1.001 fuer den Zustand des Filters. 0=OK, 1=Filter Voll
      my $ga_fehlercode = ''; #GA DPT 16.000 fuer die Ausgabe des Fehlercodes als Text
      Vorallem der Filterstatus und Fehlercode wäre interessant...

      Wäre toll wenn sich dem jemand annehmen könnte... hab mir den Code schon angesehen, aber da Blick ich leider nicht durch...

      Hier noch der Link zum Wiregate-Plugin



      Zum Thema Debug-Modus unter Ubuntu gibts nen neuen Thread
      cu Yfkt5A
      DALI(ABB DG/S1.1), KODI Odroid, TrueNAS, Zehnder ComfoAir 200 L Luxe
      microk8s-Cluster: HomeAssistant, MusicAssistant, mosquitto, TVHeadend, jellyfin

      Kommentar


        #78
        Hallo,

        also Paul hat in den Geräten Atmels drin, bei denen wird 9Bit anstatt den üblichen 8Bit verwendet, siehe Bild vom Logikanalysator.
        Das 9. Bit gibt an ob es sich um eine Adresse handelt.
        Ich habe mal alle Adressen der Geräte ermittelt: 0x100, 0x101, 0x102, 0x104
        Ich habe ein Novus 300 mit TFT.
        Ich hab gerade meine Unterlagen nicht bei der Hand aber ich hab auch schon die Uhrzeit und Lüfterstufen identifiziert.
        Dazu hab ich ein kleines PC-Programm per quick und dirty geschrieben um dies zu visualisieren.
        Hatte allerdings größere Probleme mit den 9Bit somit hab ich eine Platine gebastelt. Rs485 zu Atmel und mit RS232 wieder raus zum PC. image_41062.jpg
        Werde morgen mehr posten.

        Kommentar


          #79

          Hallo,

          hier mal eine Liste mit den Adressen und Daten für die Anzeige (TFT) beim Novus 300.

          Können die Rs232/485 auf IP Umsetzer 9Bit oder nur 8Bit?
          Adressen.jpg Memory_Map_Disp.jpg
          Angehängte Dateien
          Zuletzt geändert von johnson; 01.12.2015, 13:13.

          Kommentar


            #80
            Ah! Du bist bei der Novus einen interessanten Schritt weiter gekommen. An ein 9. Datenbit für eine Adressmarkierung hatte ich bisher nicht gedacht. Es ist also 9N1, korrekt? Ich fürchte CS9 wird von keinem Serial-Konverter supported. Man findet auch diverse Diskussionen dazu per Google. Das einzige wird wohl eine emulation per Mark/Space-Parity sein (also 8M1 für die Adresse bzw. 8S1 für Daten). Ist es dir schon gelungen eine Lüfterstufenumschaltung zu senden? Das wird wohl das häufigste Anwendungsszenario sein und das Senden per Mark/Space-Emulation ist wohl erheblich einfacher als das Enpfangen über die Erkennung von Parityfehler. Was ich nur weiterhin nicht kapiere... warum kann ich von der Novus per rs232 Adapter (!) und 8N1 Daten empfangen ohne Framingfehler? Uhrzeit, Datum und Lüfterstufe sehe ich auch in der Kommunikation. Eigentlich müsste es Fehler ohne Ende geben... immerhin fehlt ein Bit... wo liegt mein Gedankenfehler?

            Kommentar


              #81
              Ja das sind 9 Bit und ein Stop. Bei den Atmels nennt sich das MPCM Multi Processor Communication Mode.
              Ich bin am Anfang auch mit Rs485 Adapter und HTerm gestartet dort hab ich dann auch Daten bekommen aber irgendwann hab ich Show Error angeschalten und da kamen dann hin und wieder Fehler. Dann bin ich stutzig geworden und hab den Analyzer angeschlossen.
              Nachdem mir dann klar war, dass es hier 9Bit sind hab ich alles probiert was es so an Software gibt aber auf dem PC gibt es nichts was 9Bit kann. Dann hab ich ein PC Programm geschrieben mit 8Bit und Parity Mark oder Space weiß ich jetzt nicht mehr genau und Stop. Immer bei einem Parity Error war eine Adresse da und ich musste nur die Daten bis zum nächsten Parity Error lesen. Das hat aber nie richtig funktioniert, bin aber auch kein PC Programmierer, hab immer wieder Pakete verloren.
              Dann bin ich umgestiegen und hab einen Atmel an den Rs485(9600) ran und hier die besagte MPCM genutzt und dazu eine Soft-Serial (57600) da die kleinen Atmels nur eine Hardware Serial haben. Dann hab ich eine Kennung an das Ende der Nachricht gehängt und raus an den PC. So konnte ich herausfinden, dass der Master immer pollt und die Slaves Antworten. Somit ist es wahrscheinlich nicht möglich per RS485 die Stufe zu ändern. Denn der Master fragt den Slave der Antwortet solange mit der Standard-Antwort bis die Lüfterstufe geändert wird. Wenn die Änderungsantwort kommt fragt der Master nochmal und dann übermittelt der Slave was sich geändert hat.
              Also wenn man es selber steuern will muss man auf die Frage des Masters antworten aber das macht der echte Slave auch somit sind zwei Antworten auch dem Bus!?
              Ich kann morgen mal so ein Szenario posten.
              Ich wollte eigentlich nicht das Gerät steuern sondern ich wolllte ursprünglich nur die Temperaturen mitlesen, da es mich interessiert wie Zuluft, Abluft, Fortluft und Außenluft sind. Das hab ich damals Paul auch als Verbesserungsvorschlag durchgegeben. Soweit ich jetzt mitbekommen hab haben die neuen Geräte das Feature drin.

              Kommentar


                #82
                Falls es jemanden Interessiert der Hersteller der Steuerung ist KD Elektronik
                http://www.kd-elektroniksysteme.de/h...mlueftung.html
                Hat evtl. einer von euch einen Insider-Kontakt?

                Kommentar


                  #83
                  Hier mal ein log in hex für Umschaltung von von Stufe 1 auf 2, bei den Bytes fehlt immer das 9. Bit, das erste ist die Adresse, Master=01 und Bedienteil=02
                  020001FD Frage an Slave
                  0102020210ED Std Antwort an Master
                  020001FD Frage an Slave
                  01020282106D Antwort es hat sich was geändert
                  0202030010ED Frage was hat sich geändert
                  01110400021622110407080F0201000000000000CA Die 02 zeigt die neue Lüfterstufe

                  Jetzt mal Umschaltung von 2 nach 3
                  020001FD Frage an Slave
                  0102020210ED Std Antwort
                  020001FD Frage an Slave
                  01020282106D Antwort es hat sich was geändert
                  0202030010ED Frage was hat sich geändert
                  01110400021822110407080F0301000000000000C5 Die 03 zeigt die neue Lüfterstufe

                  Angaben ohne Gewähr, so sehe ich das Protokoll. Was 16 und 18 in den letzen Paketen bedeuten weiß ich auch nicht.
                  Ich vermute das letzte Byte ist eine Prüfsumme konnet aber noch nicht herausfinden wie sie berechnet wird.
                  Zuletzt geändert von johnson; 04.12.2015, 09:33.

                  Kommentar


                    #84
                    Ich hatte bisher gehofft, dass diese 020001FD eher nicht "Frage an Slave" sondern ein "ACK" wäre. Dann müsste man es andersherum lesen und man könnte jederzeit steuernd eingreifen. Die 2015er Novus können übrigens mit mehreren TFTs umgehen (s. neue Handbücher auf der Homepage von Paul). Ich kann mir zur Zeit nicht vorstellen, dass die alle nacheinander gepollt werden. Ich kenne solche Protokolle aus der Vergangenheit immer nur mit "ACK", nie mit Polling... ist aber auch schon fast 30 Jahre her

                    Das zweite Byte ist übrigens immer die Länge der enthaltenen Daten:

                    01110400021822110407080F0301000000000000C5 -> 0x11, bzw. 17 Byte an Daten

                    Der Aufbau ist vermutlich:

                    Adresse Länge Daten....Daten ?? Prüfbyte

                    Das vorletzte Byte konnte ich auch noch nicht interpretieren. Es gehört m.E. NICHT zur Prüfsumme. Vielleicht sowas wie "erwarte Rückmeldung" oder so. Das Prüfbyte könnte eine Summe ge-xor-t mit irgendwas sein. Verstanden habe ich das aber auch noch nicht.

                    Mühsam ernährt sich das Eichhörnchen

                    Kommentar


                      #85
                      Das mit Std Antwort sehe ich so, dass der Master prüft ob die Teilnehmer noch da sind, also könnte man dies auch als ein ACK sehen.
                      Welche Tools benutzt du?
                      Hast du evtl per Zufall die Temperaturen auf dem Bus erkennen können?

                      Das mit dem 2. TFT wäre eine Option, wir müssen somit eines simulieren!?
                      Ich werde mal wenn ich Zeit hab die Daten bei einem Start-Up loggen, da müsste der Master ja alle Adressen abfragen um zu sehen welche Teilnehmer auf dem Bus sind.


                      Kommentar


                        #86
                        Ich bin ganz rudimentär mit einem RS232/USB-Adapter unterwegs, den ich nur mit A verbinde. Funktioniert zum Lesen ganz brauchbar:

                        Code:
                        stty -F /dev/ttyUSB1 raw inpck -ignpar -parmrk 9600 cs8 -cstopb -parenb ; od -v -w35 -t x1 -A n /dev/ttyUSB1
                        That's it

                        Danach schau ich mit einem Texteditor, was mir die Novus geliefert hat. Da mir das 9. Bit gefehlt hatte, musste ich von Hand erkennen, wo die Adresse gesendet wird, aber im Endeffekt war ich beim gleichen Ergebnis wie du.

                        Noch was Interessantes... Ich sehe häufiger folgende Pakete vom Master zum Slave gehen:

                        04 11 04 00 02 01 00 04 7f 00 00 02 00 c0 a8 00 01 01 00 00 fd
                        01 00 0f f0
                        04 11 04 10 28 32 50 09 00 00 00 11 00 0f 0f 5a 02 64 01 00 90
                        01 00 0f f0
                        04 11 04 20 c8 00 b4 00 05 06 00 a4 5d 12 64 28 c8 00 00 11 ce
                        01 00 0f f0
                        04 11 04 30 32 00 05 82 00 01 00 00 ec ff 00 00 00 00 00 00 78
                        01 00 0f f0
                        04 11 04 40 11 14 50 50 32 14 be 50 03 00 00 00 00 00 00 00 61
                        01 00 0f f0
                        04 11 04 50 11 1d 29 35 41 4a 64 00 00 00 00 00 00 00 00 00 c0
                        01 00 0f f0

                        Ich interpretiere diese Pakete so:

                        04: adresse von Slave
                        11: Insg. 17 Datenbytes
                        04: Kommando Schreibe oder Empfange Werte
                        00: Index welche Werte kommen (grün markiert)
                        02: Wert 1 (Lüfterstufe, rot markiert)
                        01 00 04 ... 14 weitere Werte ... 01 01 00: Werte 2 - 15
                        00: ?? Wert 16???
                        fd: Checksumme

                        Bzgl. Wert 16 bin ich echt nicht sicher, da der meistens (nicht immer) 00 ist. Außerdem passt der Index nicht, wenn der 16. Wert nicht im Array enthalten wäre. Warum sollte der Index immer Hex 0, 10, 20, 30, ... sein, wenn nicht jeweils 16 Werte kommen sollten!? Andererseits sehen die anderen Pakete (01 00 0f f0) immer so aus, als wenn das vorletzte Byte nicht Bestandteil der Daten wäre.

                        Wie auch immer... ich glaube in diesen größeren Datenpaketen wird man auch irgendwo die Temperaturen finden. Wäre aber echt schwer zu identifizieren. Man müsste mal schauen, ob es da leicht veränderliche Werte über größere Zeiträume gibt. Mal die Heizung ausschalten und schauen, was in der Nacht passiert. Da werden aber sicherlich auch Luftmengen etc. enthalten sein, die sich auch verändern. Schwierig.

                        Wo sind denn die Sensoren angebracht? Mal nen Föhn reinhalten und beobachten, was sich dann tut...?

                        Mein nächster Versuch (vielleicht am Wochenende) wäre es wieder den RS485 Adapter raus zu kramen und nochmal zu versuchen mit Parityfehlern das 9. Bit zu erkennen.








                        Kommentar


                          #87
                          Hab nochmal den RS485 Adapter raus geholt und versucht damit Daten zu lesen, bekomme aber nur Datenmüll. Ich verwende 8 Datenbits, ein ignoriertes Paritybit und ein Stopbit (also mehr oder weniger 9N1). Wäre doch eigentlich richtig, wenn ich deinen Analyzer-Screenshot richtig deute!? Oder? Ich blick nicht durch, warum es mit einem RS232 Adapter und 8N1 (=ein Bit weniger!) funktioniert...

                          Kommentar


                            #88
                            Warum das mit Rs485 nicht funktioniert aber mit dem Rs232 kann ich dir leider nicht sagen.
                            Die Adresse 04 ist der Lüfterslave an dem sind die 4 Tempsensoren, Hallsensor, Motorsteuerung und Bypasssteuerung dran.
                            Diese Daten hab ich auch schon gesehen, aber in der Antwort müssten die Temperaturen drin sein, da ja der Slave die Temperaturen via NTC ermittelt. Konnte diese aber bisher nicht erkennen.

                            Bin gerade am Überlegen wie man die Steuerung faken kann.
                            Bin jetzt zu der Idee gekommen einen Rs485 Repeater zu bauen dort sitzt ein AVR drin, der gibt die Daten 1:1 durch.
                            Der kann aber auch die Daten manipulieren und somit ein drücken auf dem TFT faken.
                            Bin mir nur nicht ganz sicher ob das Timing ein Problem wird beim Durchreichen der Daten, falls der Master ein sehr enges Timeout hat und somit einen Fehler bringt.
                            Wenn das funktioniert könnte man den AVR anzapfen und dort über Rs232 oder was auch immer eigene Steuerbefehle einleiten.
                            Bin gerade dabei die Bauteile zu sichten. Hab den mega2560 (Arduino Mega) gefunden der hat 4 UART Schnittstellen und das Arduino Board ist über ebay in China für 9€ zu haben. 2 UART für den Repeater und dann hätte man noch eine für das Einschleifen der eigenen Befehle.

                            Kommentar


                              #89
                              Hi,

                              also meine Comfoair 350 mit CCEase gibt keinen Mucks von sich.

                              CCEase ist abgeklemmt.

                              Der USB Seriell Adapter hat einen FTDI Chip
                              Code:
                              Bus 001 Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
                              Code:
                              2015-12-12 16:52:32,327 INFO     ComfoAir-cyclic ComfoAir: Triggering cyclic read command: ReadExtractAirPercentage -- __init__.py:log_info:498
                              2015-12-12 16:52:32,329 INFO     ComfoAir-cyclic ComfoAir: Preparing command ReadExtractAirPercentage with value None (transformed to value byte '') to be sent. -- __init__.py:log_info:498
                              2015-12-12 16:52:32,339 INFO     ComfoAir-cyclic ComfoAir: Successfully sent packet: 07:f0:00:0b:00:b8:07:0f -- __init__.py:log_info:498
                              2015-12-12 16:52:32,340 DEBUG    ComfoAir-cyclic ComfoAir: Trying to receive 5 bytes for the first part of the response. -- __init__.py:log_debug:495
                              2015-12-12 16:52:32,829 DEBUG    Scheduler    ComfoAir-cyclic next time: 2015-12-12 16:53:02+01:00 -- scheduler.py:_next_time:289
                              2015-12-12 16:52:34,344 INFO     ComfoAir-cyclic ComfoAir: Received 0 bytes chunk of response part 1:  -- __init__.py:log_info:498
                              2015-12-12 16:52:34,363 ERROR    ComfoAir-cyclic ComfoAir: send_command failed: error receiving first part of packet: Received 0 bytes chunk - ignoring packet! -- __init__.py:log_err:501
                              2015-12-12 16:52:34,365 INFO     ComfoAir-cyclic ComfoAir: Triggering cyclic read command: ReadExtractAirTemperature -- __init__.py:log_info:498
                              2015-12-12 16:52:34,366 INFO     ComfoAir-cyclic ComfoAir: Preparing command ReadExtractAirTemperature with value None (transformed to value byte '') to be sent. -- __init__.py:log_info:498
                              2015-12-12 16:52:34,367 ERROR    ComfoAir-cyclic ComfoAir: send_command failed: No connection to ComfoAir. -- __init__.py:log_err:501
                              2015-12-12 16:52:38,370 INFO     Connections  ComfoAir: connected to /dev/ttyUSB0 -- __init__.py:log_info:498
                              Angeschlossen haben ich das in verschiedenster Form.

                              - Den Adapter direkt auf den RS232PC Anschluss an der Comfoair
                              - Den Adapter über Pin2 gekreuzt auf Pin3 und Pin3 auf Pin2. Pin5 GND auf RS232PC
                              - Den Adapter verbunden mit DB9 P2->Tx,P3->Rx und P5->GND der CCEase Klemmleiste

                              Der Adapter empfängt auch das Sende-Kommando aber er bekommt nichts zurück.

                              Das Plugin ist direkt aus dem develop-port und die item.conf das Beispiel aus
                              https://github.com/mknx/smarthome/bl...oair/README.md

                              Woran könnte es denn noch liegen?

                              Gruß
                              Zuletzt geändert von lucipher; 12.12.2015, 18:14.

                              Kommentar


                                #90
                                So, die Comfoair spricht. Es liegt wirklich am verwendeten Chipsatz.

                                Der nun verwendete USB-Seriell Wandler hat einen Prolific PL-2303RA Chip. Damit klappt es auch mit der Lüftung. Angeschlossen über die Klemmleiste der CC Ease und nun antwortet sie.

                                Bei einer Antwort erhalten ich aber einen Checksum Error.

                                Die erhaltene Antwort lautet:
                                Code:
                                07:f0:00:0c:06:3e:3e:03:dc:03:ea:07:07:07:0f
                                Nach der Protokollbeschreibung ist es das Kommando "Ventilatorstatus abrufen" (0x0B). Der Fehler wird nur bei diesem Kommando gemeldet.

                                Was mich wundert ist, dass ich im Bereich der Checksumme zweimal 07 erhalte.
                                07:f0:00:0c:06:3e:3e:03:dc:03:ea:07:07:07:0f

                                Im Protokoll steht dass bei einer 07 im Datenbereich eine weitere 07 angefügt wird, aber nur eine 07 zur Berechnung der Checksumme herangezogen wird. Kann es sein, dass die Anlage sich auch so bei der Checksumme verhält?

                                Schon jemand diese Erfahrung gemacht?

                                Gruß

                                Zuletzt geändert von lucipher; 21.12.2015, 13:56.

                                Kommentar

                                Lädt...
                                X