Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [Projekt] Comfoair CA350 - Adapter

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Projekt] Comfoair CA350 - Adapter

    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      claus @forelleblau last edited by

      @forelleblau
      Funktioniert super, auf Anhieb. Das Einzige, was ich nicht finden konnte, ist Bypassbetrieb ja oder nein.

      Außerdem zeigt der Enthalpie Sensor -20°C an, was sicher nicht stimmt. Die restlichen Werte sehen recht gut und auch korrekt aus.

      1 Reply Last reply Reply Quote 0
      • F
        forelleblau last edited by

        @claus Hallo claus. Den Bypassbetrieb gibt es nicht, der Bypass kann nicht direkt angesteuert werden - hab jedenfalls noch nicht rausgefunden wie. Den müsstest du über ein extremes Setzen der Komforttemperatur übersteuern.
        Hast du denn überhaupt einen Enthalpie-Tauscher? Wenn die anderen Werte 0 sind, dann wohl keinen 😉
        Danke für die Rückmeldung.
        Grüsse
        Forelleblau

        C 2 Replies Last reply Reply Quote 0
        • C
          claus @forelleblau last edited by claus

          @forelleblau
          Ich hätte den Bypass nur gerne ausgelesen, im Log finde ich folgende Meldung ...

          State "comfoair.0.status.bypass" has no existing object, this might lead to an error in future versions
          

          Einen Enthalpietauscher habe ich zumindest gekauft 🙂
          Warum da nun keine Werte rauskommen, weiß ich auch nicht genau.

          Ergänzung, der bypass ist jetzt da und auch viele andere Objekte, das dauerte wohl nur etwas. Ich warte jetzt mal etwas ab und schau was so weiter passiert.

          1 Reply Last reply Reply Quote 0
          • C
            claus @forelleblau last edited by

            Ich habe es mir jetzt nochmal im PC Tool angesehen. Es gibt ja einen Parameter "P97 - Enthalpietauscher aktiv?" , der kann drei Werte enthalten.

            Anwesend
            Abwesend
            Ohne Fühler

            Bei mir war "Ohne Fühler" eingestellt. Ob man die nachrüsten kann, muss ich mal bei Zehnder anfragen. Sonst scheint nun alles zu funktionieren, super Adapter, danke dafür!

            F 1 Reply Last reply Reply Quote 0
            • F
              forelleblau @claus last edited by

              @claus Danke für die Info, freut mich, wenn der Adapter dient.

              C 1 Reply Last reply Reply Quote 0
              • C
                claus @forelleblau last edited by

                @forelleblau

                Eine Sache habe ich beim Testen gefunden. Wenn man Stosslüftung aktiviert, dann läuft diese auch korrekt an, beendet sich auch nach der eingestellten Zeit wieder. Allerdings setzt sich nach Ablauf der Zeit "comfoair.0.control.boost" nicht mehr auf false zurück.

                F 1 Reply Last reply Reply Quote 0
                • F
                  forelleblau @claus last edited by

                  @claus Danke für den umfangreichen Test. Ich schau das der boost-Trigger mit der nächsten Version zurückgestellt wird.

                  Grüsse forelleblau

                  C 2 Replies Last reply Reply Quote 0
                  • C
                    claus @forelleblau last edited by

                    @forelleblau

                    Ich hatte noch folgende Meldungen im Log.

                    State value to set for "comfoair.0.status.filterw" has to be type "number" but received type "string"
                    

                    Es scheint so, als fehlte da ein parseInt.

                    --- main.js.orig        2022-08-09 11:49:50.658543470 +0200
                    +++ main.js     2022-09-18 14:05:38.868928589 +0200
                    @@ -912,7 +916,8 @@
                           case 202:
                             //polling
                             verzoegerungen = buffarr;
                    -        adapter.setState("status.filterw", buffarr[11], true);
                    +        adapter.setState("status.filterw", parseInt(buffarr[11]), true);
                             break;
                    
                    1 Reply Last reply Reply Quote 0
                    • C
                      claus @forelleblau last edited by

                      @forelleblau

                      Erster Versuch, sei umsichtig, das sind meine ersten Codeänderungen bei ioBroker 🙂
                      Manchmal führt er bei Aktivierung von Boost aber das Kommando

                      callcomfoair(setfanstate[3]);
                      

                      nicht aus. Ich vermute, es gibt da Kollisionen im Parallelmodus.

                      --- main.js.orig        2022-08-09 11:49:50.658543470 +0200
                      +++ main.js     2022-09-18 15:41:51.458462775 +0200
                      @@ -92,7 +92,7 @@
                             clearInterval(polling);
                             clearTimeout(polling);
                             clearTimeout(pcmaster);
                      -      clearTimeout(boostrun);
                      +      clearBoostTimeout();
                             client.destroy();
                             adapter.log.info('[END] Stopping comfoair adapter...');
                             adapter.setState('info.connection', false, true);
                      @@ -440,7 +440,7 @@
                             case "control.stufe":
                               adapter.log.debug("Setzte Stufe: " + state);
                               callcomfoair(setfanstate[state]);
                      -        clearTimeout(boostrun);
                      +        clearBoostTimeout()
                               break;
                      
                             case "control.comforttemp":
                      @@ -510,8 +510,12 @@
                               break;
                      
                             case "control.boost":
                      -        adapter.log.debug("Starte boost");
                      -        boost();
                      +        if (state == true) {
                      +          adapter.log.debug("Starte boost");
                      +          boost();
                      +        } else {
                      +          clearBoostTimeout();
                      +        }
                               break;
                      
                      @@ -1593,7 +1597,7 @@
                             adapter.getState('control.boosttime', function(err, state) {
                               if (state) {
                                 adapter.log.debug("Starte Boostmodus für " + state.val + " Minuten, kehre danach auf Stufe " + boostlevelold + " zurück");
                      -          callcomfoair(setfanstate[3]);;
                      +          callcomfoair(setfanstate[3]);
                                 boostrun = setTimeout(function() {
                                   adapter.log.debug("Boost Ende");
                                   adapter.setState('control.stufe', boostlevelold, false);
                      @@ -1607,6 +1611,16 @@
                      
                       } //end function boost
                      
                      +function clearBoostTimeout() {
                      +  adapter.log.debug("boostrun Timeout zurückgesetzt")
                      +  clearTimeout(boostrun);
                      +  adapter.getState('control.boost', function (err, state) {
                      +    if (state.val == true) {
                      +      adapter.setState('control.boost', false, false);
                      +    }
                      +  });
                      +} //end function clearBoostTimeout
                      +
                       function restartAdapter() {
                         adapter.getForeignObject('system.adapter.' + adapter.namespace, (err, obj) => {
                           if (obj) adapter.setForeignObject('system.adapter.' + adapter.namespace, obj);
                      
                      F 1 Reply Last reply Reply Quote 0
                      • F
                        forelleblau @claus last edited by

                        @claus Danke für den Vorschlag, claus.
                        Die Risiken des Parallelmodus hab ich beschrieben....das überlasse ich dir.

                        Deinen Lösungsvorschlag könnte das ganze stabiler machen. Könntest du mir den als PR auf Github senden?

                        Danke u herzliche Grüsse

                        Forelleblau

                        C 1 Reply Last reply Reply Quote 0
                        • C
                          claus @forelleblau last edited by

                          @forelleblau

                          Im Prinzip fehlt mir noch eine Funktion, ich weiß aber nicht genau, wie man die exakt implementiert. Man könnte z.B. den Boost früher manuell abbrechen, indem man den wieder abschaltet. Dann reicht es aber nicht aus, einfach den Timer zu löschen, sondern man müsste diesen forciert ausführen, damit die Stufe der Lüftung wieder auf den Ursprungswert zurückgesetzt wird. Mir ist allerdings unklar, wie man beispielsweise bei einem setTimeout den Timer auf 0 setzen kann, damit die Funktion sofort ausgeführt wird.

                          F 1 Reply Last reply Reply Quote 0
                          • F
                            forelleblau @claus last edited by

                            @claus Danke für den PR. Kurze Frage vor dem Merge: hast du die Anpassungen auf deinem System bereits so umgesetzt und getestet? Grüsse forelleblau

                            C 1 Reply Last reply Reply Quote 0
                            • C
                              claus @forelleblau last edited by

                              @forelleblau

                              Ja, das ist umgesetzt und im Einsatz. Ich habe einen Fehler beim Pull Request gesehen, habe aber keine weiteren Details dazu finden können. Das Logfile ist wohl nicht Public.

                              1 Reply Last reply Reply Quote 0
                              • O
                                odolino100 last edited by odolino100

                                Hallo,
                                ich habe eine ComfoD 350 mit einem 3 Stufenschalter und der Steuerung direkt am Gerät.

                                So wie ich es gesehen habe, hat meine Platine auch eine RS232 Schnittstelle in Form eine RJ45 Buchse.

                                Würde jetzt einen
                                https://www.amazon.de/U-S-R-USR-TCP232-302-Kleines-serielles-Ethernet/dp/B07RNCVHHK
                                und dieses Kabel kaufen
                                https://www.amazon.de/dp/B01M9COPMA/ref=emc_b_5_mob_t
                                Vom Kabel würde ich den RJ45 Stecker abmachen und neu belegen.

                                Funktioniert das dann. Was passiert mit dem 3 Stufenschalter? Der ist ganz normal an L1 L2 und L3 und N angeschlossen.

                                Danke schon mal

                                F G 2 Replies Last reply Reply Quote 0
                                • F
                                  forelleblau @odolino100 last edited by

                                  @odolino100 Hallo Odolino

                                  Sorry, aber von Ferne was zuzusichern ist etwas schwierig. Grundsätzlich könnte das Funkionieren. Ev. ist es einfacher, wenn du die RS232 - Seite vom Kabel mit sowas ersetzt:

                                  https://www.amazon.de/dp/B01M8JRDN0/ref=sspa_dk_detail_4?psc=1&pd_rd_i=B01M8JRDN0&pd_rd_w=QvEjw&content-id=amzn1.sym.f63cb723-41a5-4d60-97aa-9969c9663073&pf_rd_p=f63cb723-41a5-4d60-97aa-9969c9663073&pf_rd_r=90CGAVK93MYE7ZE25PFG&pd_rd_wg=VQJXj&pd_rd_r=de46b53e-9034-4a09-8c83-b3dc4337c00d&s=industrial&sp_csd=d2lkZ2V0TmFtZT1zcF9kZXRhaWw&smid=A17S319ECJ50FD.

                                  Ich hab mein Kabel damit gemacht, das macht es einfacher, TX und RX mal zu tauschen, und mal nur TX, RX und GND zu verbinden (2, 3 und 5). Einige User hatten auch schon Probleme mit vollständigen seriellen Kabeln.

                                  Wie der Adapter neben einem Stufenschalter funktioniert, kann ich dir nicht sagen. Mit dem Schalter wird nichts passieren ;-). Musst halt ausprobieren.

                                  Grüsse Forelleblau

                                  1 Reply Last reply Reply Quote 0
                                  • M
                                    mylan last edited by mylan

                                    Danke erstmal, super Sache!

                                    Ich versuche es bei einer Comfoair 160.

                                    Die hat einen CC ease Anschluss mit gnd, rx, tx, 12v.
                                    Gnd, Rx, Tx habe ich auf ein seriell-USB Kabel gehängt.
                                    Daten zu empfangen hat dann auch prompt funktioniert. Nur leider mag die Anlage gar nicht gehorchen wenn ich die Lüftungsstärke verstelle. Etwas herum gesteckt habe ich schon, aber viele sinnvolle Möglichkeiten gibt es ja nicht.

                                    Hat jemand einen Tipp?

                                    M 1 Reply Last reply Reply Quote 0
                                    • M
                                      mylan @mylan last edited by mylan

                                      Das wäre übrigens die Debug-Ausgabe wenn ich die Lüfterstärke ändere:

                                      comfoair.0
                                      2023-04-05 13:26:00.192	debug	serial port closed
                                      comfoair.0
                                      2023-04-05 13:25:59.418	debug	outarr: 7,240,0,153,1,4,75,7,15
                                      comfoair.0
                                      2023-04-05 13:25:59.417	debug	Daten sent: 07f0009901044b070f
                                      comfoair.0
                                      2023-04-05 13:25:58.914	debug	Connected to serial port
                                      comfoair.0
                                      2023-04-05 13:25:58.904	debug	ack is not set!
                                      comfoair.0
                                      2023-04-05 13:25:58.901	debug	Setzte Stufe: 3
                                      comfoair.0
                                      2023-04-05 13:25:58.899	debug	id=control.stufe
                                      comfoair.0
                                      2023-04-05 13:25:58.898	debug	stateChange comfoair.0.control.stufe {"val":3,"ack":false,"ts":1680693958890,"q":0,"from":"system.adapter.admin.0","user":"system.user.admin","lc":1680693958890}
                                      

                                      Ich kann die Prozentwerte unter Setvent ändern. Die Zahl wird zuerst kurz rot, dann grün, dann schwarz.

                                      Die Lüfterstufe bleibt aber rot nach Änderung. Ebenso wie die Wohlfühltemp. Der Boost-Knopf geht auch nicht.

                                      Grundsätzlich scheint aber also eine bidirektionale Kommunikation zu bestehen. Könnte es sein, dass für die Comfoair 160 die Kommandos für die Lüfterstufe anders sind? Wäre aber seltsam.

                                      EDIT:
                                      Oha, ich glaube jetzt bin ich dem Problema auf der Spur. Ich habe jetzt mitgehört, wie die Comfosense die Lüfterstärke steuert:
                                      Stufe 4: 07f0009901044b070f
                                      Stufe 3: 07f0009901034a070f
                                      Stufe 1: 07f00099010148070f

                                      (Eigentlicht wollte ich 4 und 1 hier angeben, aber 3 ist noch gut weil ich das oben mit dem Plugin auch gesendet hatte.)

                                      Laut deinem Plugin stimmt die Checksumme nicht.
                                      Für 4:
                                      Checksumme berechnet: 178
                                      Checksumme aus Datensatz: 75
                                      Für 3:
                                      Checksumme berechnet: 177
                                      Checksumme aus Datensatz: 74
                                      Für 1:
                                      Checksumme berechnet: 175
                                      Checksumme aus Datensatz: 72

                                      Jetzt das Gute. Wenn ich die kopierten Befehle per Terminalemulator an die Anlage schicke, dann schaltet sie korrekt. (Mit ComfoPC ging das nicht, das will einem immer mit den Befehlen helfen und ich habe keinen Weg gefunden Rohdaten zu schicken.)

                                      Daraus schließe ich, ich kann mit dem Plugin die Anlage nur deshalb nicht steuern, weil das Gerät eine andere Checksumme erwartet. Jetzt wäre nur interessant, wie diese berechnet wird, vielleicht finde ich es durch Probieren heraus, mal sehen. Checksummenfehler hatten wir hier ja schon, vielleicht haben mehr Leute das Problem.

                                      EDIT:
                                      Mein Gerät scheint die Checksumme ähnlich wie hier zu berechnen:
                                      https://www.haustechnikdialog.de/Forum/t/108357/Steuerung-der-ComfoAir-ueber-PC?page=2
                                      "alle Bytes ab Startbytes addiert + 0xad modulo 0xff"
                                      Wobei es bei mir B6 statt AD zu sein scheint.

                                      Vielleicht könnte es die Möglichkeit geben, diesen Wert als Parameter einzugeben?

                                      EDIT:
                                      Hmm, wobei in einem Fall wird das 7F0 mitgerechnet, in anderen nicht. Im Grunde ist das aber dann ja auch nur ein fixer Faktor, weil ja jeder Befehl mit 07F beginnt?

                                      F 1 Reply Last reply Reply Quote 0
                                      • F
                                        forelleblau @mylan last edited by

                                        @mylan Hallo mylan. Danke fürs Ausprobieren mit deiner Comfoair.

                                        Ein paar Hinweise meinerseits:

                                        • das gepostete Log enthält nur ausgehende Daten/Debug-Infos. Im Log ist keine (von der Comfoair) eingehende Meldung zu sehen.

                                        Die Checksummenberechnung ist in der entsprechenden Funktion in der main
                                        .js Datei hinterlegt (Zeile 1063ff, function checksumcmd). Du kannst die ja sonst mal lokal bei dir anpassen und schauen, ob du die richtige Checksumme für deine Lüftung hinkriegts. Dann könnten wir das einbauen, mit Auswahl des Lüftungstyps in den Einstellungen z.b..

                                        Grüsse
                                        Forelleblau

                                        M 1 Reply Last reply Reply Quote 0
                                        • M
                                          mylan @forelleblau last edited by

                                          Danke für die Hilfe!

                                          Es gibt grundsätzlich schon Meldungen von der Comfoair, ich habe da nur den Ausschnitt genommen der mit relevant schien.

                                          Es selbst testweise zu ändern habe ich schon überlegt. Könntest du mir nur bitte sagen, wo ich die Datein finde? Ich war nicht in der Lage dazu das rauszufinden...

                                          F 1 Reply Last reply Reply Quote 0
                                          • F
                                            forelleblau @mylan last edited by

                                            @mylan im Verzeichnis, wo deine ioBroker - Installation liegt, solltest du .../node_modules/iobroker.comfoair/main.js finden.

                                            Wenn es dann nur B6 statt AD zu addieren gibt, erstetzt du die +173 in der Zeile 1073:

                                              checksum = ((checksum + 173).toString(16)).slice(-2);
                                            

                                            mit 182.

                                            M 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            954
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            25
                                            153
                                            15907
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo