Ankündigung

Einklappen
Keine Ankündigung bisher.

ComfoAir Steuerung über RS232

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

    BTW: Wenn die KWL Bypass 100% sendet, bedeutet das der Bypass aktiv ist?

    GL

    Kommentar


      Zitat von mfd Beitrag anzeigen
      Gibt es schon Neuigkeiten was das WG-Plugin angeht - also die "zusammengeführte" Version?
      Formulieren wir das mal positiv: Ich hab angefangen...
      Aktuell ist das Problem das ich auf Arbeit recht viel zu tun hab und meist erst spät zu Hause bin. Wenn ich mich jetzt im Arbeitszimmer verstecke wo die Terrasse angelegt werden will, hätte das ca. 0% WAF. Daher geht's mit dem Plugin leider eher schleppend voran. Aber ich bin dran!

      Zitat von mfd Beitrag anzeigen
      Besteht damit theoretisch auch die Möglichkeit den Bypass manuell zu setzen?
      Nach Durchsicht des bisher bekannten Protokolls muss ich gestehen fehlt mir noch der Ansatz dafür. Ich glaub es gibt auch keinen Sensor für Klappenstellung, das vereinfacht die Regelung nicht gerade. Ich denke mal aus dem Grund macht das Teil aktuell nur ganz auf und ganz zu. Die beiden Positionen kann man recht sicher definiert anfahren, alles andere wäre grob geschätzt.
      Endlich umgezogen. Fertig? Noch lange nicht... ;-)

      Kommentar


        100% Bypass heißt aktiv = offen

        Und zur zweiten Frage: Laut Protokoll kann man den Bypass direkt ansteuerun, aber nur im Testmodus -> keine zufriedenstellende Lösung.
        Gruß Matthias
        EIB übersetzt meine Frau mit "Ehepaar Ist Beschäftigt"
        - PN nur für PERSÖNLICHES!

        Kommentar


          Also bei meiner ComfoAir 200 scheint der Bypass sofort umzuschalten...

          hab mal testweise die Komforttemperatur auf 15°C gesenkt, beim nächsten Abruf der Daten durch das WG-Plugin war dann der Bypass auf 100%. Ausserdem wurde auch der Abluft Ventilator automatisch um 5% gedrosselt, obwohl ohne Bypass beide auf 70% standen

          Hier mal noch die Logeinträge:

          Code:
          2013-06-25 00:28:26.821,ComfoAir_kwl.pl,Schnittstelle: /dev/usbserial-1-4 erfolgreich ge�ffnet
          2013-06-25 00:28:26.822,ComfoAir_kwl.pl,Temperatur abrufen
          2013-06-25 00:28:26.886,ComfoAir_kwl.pl,AUL: 14�C, ZUL:21.5�C, ABL: 23�C, FOL: 15�C, Komforttemp: 25�C
          2013-06-25 00:28:26.886,ComfoAir_kwl.pl,Ventilator Status abrufen
          2013-06-25 00:28:26.913,ComfoAir_kwl.pl,ZUL: 70% ABL: 70%
          2013-06-25 00:28:26.920,ComfoAir_kwl.pl,Bypass Zustand abrufen
          2013-06-25 00:28:26.947,ComfoAir_kwl.pl,Bypass: 0%
          2013-06-25 00:28:26.952,ComfoAir_kwl.pl,Betriebsstunden abrufen
          2013-06-25 00:28:26.995,ComfoAir_kwl.pl,Betriebsstunden: 1799h
          2013-06-25 00:28:27.000,ComfoAir_kwl.pl,Bin�reing�nge abrufen
          2013-06-25 00:28:27.024,ComfoAir_kwl.pl,Zustand Badezimmerschalter: 0
          2013-06-25 00:28:27.029,ComfoAir_kwl.pl,Ventilationsstufe abrufen
          2013-06-25 00:28:27.068,ComfoAir_kwl.pl,AKT_STUFE: 2
          2013-06-25 00:28:27.077,ComfoAir_kwl.pl,St�rungen abrufen
          2013-06-25 00:28:27.124,ComfoAir_kwl.pl,Aktueller Fehlercode: keiner
          2013-06-25 00:29:42.716,ComfoAir_kwl.pl,Schnittstelle: /dev/usbserial-1-4 erfolgreich ge�ffnet
          2013-06-25 00:29:42.720,ComfoAir_kwl.pl,Komforttemp auf: 15�C setzen
          2013-06-25 00:29:42.990,ComfoAir_kwl.pl,Checksumme fehlerhaft! Gelesen:  Berechnet: ad
          2013-06-25 00:33:28.808,ComfoAir_kwl.pl,Schnittstelle: /dev/usbserial-1-4 erfolgreich ge�ffnet
          2013-06-25 00:33:28.809,ComfoAir_kwl.pl,Temperatur abrufen
          2013-06-25 00:33:28.863,ComfoAir_kwl.pl,AUL: 14.5�C, ZUL:16�C, ABL: 23�C, FOL: 21.5�C, Komforttemp: 15�C
          2013-06-25 00:33:28.863,ComfoAir_kwl.pl,Ventilator Status abrufen
          2013-06-25 00:33:28.896,ComfoAir_kwl.pl,ZUL: 70% ABL: 65%
          2013-06-25 00:33:28.905,ComfoAir_kwl.pl,Bypass Zustand abrufen
          2013-06-25 00:33:28.931,ComfoAir_kwl.pl,Bypass: 100%
          2013-06-25 00:33:28.938,ComfoAir_kwl.pl,Betriebsstunden abrufen
          2013-06-25 00:33:28.982,ComfoAir_kwl.pl,Betriebsstunden: 1799h
          2013-06-25 00:33:28.996,ComfoAir_kwl.pl,Bin�reing�nge abrufen
          2013-06-25 00:33:29.020,ComfoAir_kwl.pl,Zustand Badezimmerschalter: 0
          2013-06-25 00:33:29.026,ComfoAir_kwl.pl,Ventilationsstufe abrufen
          2013-06-25 00:33:29.064,ComfoAir_kwl.pl,AKT_STUFE: 2
          2013-06-25 00:33:29.071,ComfoAir_kwl.pl,St�rungen abrufen
          2013-06-25 00:33:29.116,ComfoAir_kwl.pl,Aktueller Fehlercode: keiner
          2013-06-25 00:37:47.564,ComfoAir_kwl.pl,Schnittstelle: /dev/usbserial-1-4 erfolgreich ge�ffnet
          2013-06-25 00:38:03.330,ComfoAir_kwl.pl,Komforttemp auf: 24�C setzen
          2013-06-25 00:38:04.008,ComfoAir_kwl.pl,Checksumme fehlerhaft! Gelesen:  Berechnet: ad
          2013-06-25 00:38:31.400,ComfoAir_kwl.pl,Schnittstelle: /dev/usbserial-1-4 erfolgreich ge�ffnet
          2013-06-25 00:38:31.401,ComfoAir_kwl.pl,Temperatur abrufen
          2013-06-25 00:38:31.449,ComfoAir_kwl.pl,AUL: 14.5�C, ZUL:15.5�C, ABL: 23�C, FOL: 22�C, Komforttemp: 24�C
          2013-06-25 00:38:31.449,ComfoAir_kwl.pl,Ventilator Status abrufen
          2013-06-25 00:38:31.479,ComfoAir_kwl.pl,ZUL: 70% ABL: 65%
          2013-06-25 00:38:31.486,ComfoAir_kwl.pl,Bypass Zustand abrufen
          2013-06-25 00:38:31.512,ComfoAir_kwl.pl,Bypass: 100%
          2013-06-25 00:38:31.515,ComfoAir_kwl.pl,Betriebsstunden abrufen
          2013-06-25 00:38:31.560,ComfoAir_kwl.pl,Betriebsstunden: 1799h
          2013-06-25 00:38:31.565,ComfoAir_kwl.pl,Bin�reing�nge abrufen
          2013-06-25 00:38:31.588,ComfoAir_kwl.pl,Zustand Badezimmerschalter: 0
          2013-06-25 00:38:31.591,ComfoAir_kwl.pl,Ventilationsstufe abrufen
          2013-06-25 00:38:31.628,ComfoAir_kwl.pl,AKT_STUFE: 2
          2013-06-25 00:38:31.634,ComfoAir_kwl.pl,St�rungen abrufen
          2013-06-25 00:38:31.674,ComfoAir_kwl.pl,Aktueller Fehlercode: keiner
          2013-06-25 00:40:47.488,ComfoAir_kwl.pl,Schnittstelle: /dev/usbserial-1-4 erfolgreich ge�ffnet
          2013-06-25 00:40:50.476,ComfoAir_kwl.pl,Komforttemp auf: 25�C setzen
          2013-06-25 00:40:50.747,ComfoAir_kwl.pl,Checksumme fehlerhaft! Gelesen:  Berechnet: ad
          2013-06-25 00:43:32.972,ComfoAir_kwl.pl,Schnittstelle: /dev/usbserial-1-4 erfolgreich ge�ffnet
          2013-06-25 00:43:32.973,ComfoAir_kwl.pl,Temperatur abrufen
          2013-06-25 00:43:33.024,ComfoAir_kwl.pl,AUL: 14�C, ZUL:20.5�C, ABL: 23�C, FOL: 16�C, Komforttemp: 25�C
          2013-06-25 00:43:33.024,ComfoAir_kwl.pl,Ventilator Status abrufen
          2013-06-25 00:43:33.054,ComfoAir_kwl.pl,ZUL: 70% ABL: 70%
          2013-06-25 00:43:33.062,ComfoAir_kwl.pl,Bypass Zustand abrufen
          2013-06-25 00:43:33.088,ComfoAir_kwl.pl,Bypass: 0%
          2013-06-25 00:43:33.091,ComfoAir_kwl.pl,Betriebsstunden abrufen
          2013-06-25 00:43:33.137,ComfoAir_kwl.pl,Betriebsstunden: 1799h
          2013-06-25 00:43:33.141,ComfoAir_kwl.pl,Bin�reing�nge abrufen
          2013-06-25 00:43:33.166,ComfoAir_kwl.pl,Zustand Badezimmerschalter: 0
          2013-06-25 00:43:33.171,ComfoAir_kwl.pl,Ventilationsstufe abrufen
          2013-06-25 00:43:33.208,ComfoAir_kwl.pl,AKT_STUFE: 2
          2013-06-25 00:43:33.212,ComfoAir_kwl.pl,St�rungen abrufen
          2013-06-25 00:43:33.253,ComfoAir_kwl.pl,Aktueller Fehlercode: keiner
          Wäre es möglich nach dem Ändern der Stufe auch den Ventilatorstatus zu aktualisieren und nach Ändern der Temperatur den Bypass- und Ventilatorstatus? Somit wären die Werte sofort aktuell...
          cu Yfkt5A
          DALI(ABB DG/S1.1), KODI Odroid, TrueNAS, Zehnder ComfoAir 200 L Luxe
          microk8s-Cluster: HomeAssistant, MusicAssistant, mosquitto, TVHeadend, jellyfin

          Kommentar


            Soo... Hier mal ein Update für euch

            Leider kämpfe ich immer noch mit Tortoisesvn und der Pfadumstellung von SourceForge wesshalb ich das Plugin momentan nicht in's SVN hochladen kann


            Ich will euch das Update aber nicht vorenthalten wesshalb ich es nun erstmal hier einstelle...

            Was ist neu?...

            - direktes setzen der Stufe über eine gemeinsame GA
            - getrennte Ansteuerung der Zuluft und Abluftdrehzahl in % von Netsrac80

            Bugfix...

            - Betriebsstunden des Filters sollten nun passen (0707 problem gelöst)
            - Fehlerausgabe mit keine0 behoben

            Neue Optionen die in der Conf.d hinzuzufügen sind...
            Code:
            my $ga_stufe_setzen = ''; # GA DPT 5.005 zum direkten setzen der Stufe (0=A, 1=Stufe1, 2=Stufe2, 3=Stufe3)
            my $ga_drehzahl_ventilator_zul = ''; #GA DPT 5.001 zum setzen der Zuluftdrehzahl
            my $ga_drehzahl_ventilator_abl = ''; #GA DPT 5.001 zum setzen der Abluftdrehzahl
            Und hier nun die aktuelle Version:
            Code:
            # Plugin zur Ansteuerung einer Zender ComfoAir
            # Version 1.6.7b 17.07.2013 BETA
            # Copyright: swiss (https://knx-user-forum.de/members/swiss.html)
            # Aufbau moeglichst so, dass man unterhalb der Einstellungen nichts veraendern muss!
            # - Neu mit der Moeglichkeit zur Anbindung über einen Moxa NPort von Fechter65 (https://knx-user-forum.de/members/fechter65.html)
            # - Neustrukturierung des Codes von Fechter65 (https://knx-user-forum.de/members/fechter65.html)
            # - Besseres Fehlerhandling bei der Verarbeitung der Reuckmeldungen von swiss (https://knx-user-forum.de/members/swiss.html)
            # - Neu nun mit direktem abfragen der Stufe nach dem setzen und auswerten der Komforttemperatur von swiss (https://knx-user-forum.de/members/swiss.html)
            # - Neu mit der Möglichkeit die Ventilationsstufe direkt zu setzen von swiss (https://knx-user-forum.de/members/swiss.html)
            # - Neu mit der Möglichkeit die Ventilatorstufe für Zuluft und Abluft getrennt zu setzen (0% - 100%) von Netsrac80 (https://knx-user-forum.de/members/netsrac80.html)
            
             
            
            ####################
            ###Einstellungen:###
            ####################
            
            #BITTE ab sofort die Einstellungen unter conf.d vornemen. Damit bleiben die Einstellungen auch bei einem Update erhalten.
             
            
            ######################
            ##ENDE Einstellungen##
            ######################
            
            
            #Ab hier nichts mehr aendern.
            #Hauptverarbeitung
            
            
            #Erzeuge Variablen fuer die Zuordnung der Steuerfunktionen zu den Gruppenadressen:
            my $ga_stufeabwesend = ''; #1bit Trigger fuer Stufe "Abwesend". 1=Aktivieren
            my $ga_stufe1 = ''; #1bit Trigger fuer Stufe1. 1=Aktivieren
            my $ga_stufe2 = ''; #1bit Trigger fuer Stufe2. 1=Aktivieren
            my $ga_stufe3 = ''; #1bit Trigger fuer Stufe3. 1=Aktivieren
            my $ga_stufe_setzen = ''; # GA DPT 5.005 zum direkten setzen der Stufe (0=A, 1=Stufe1, 2=Stufe2, 3=Stufe3)
            my $ga_komforttemp = ''; #GA DPT 9.001 zum setzen der Komforttemperatur
            my $ga_drehzahl_ventilator_zul = ''; #GA DPT 5.001 zum setzen der Zuluftdrehzahl
            my $ga_drehzahl_ventilator_abl = ''; #GA DPT 5.001 zum setzen der Abluftdrehzahl
            my $ga_reset_filter = ''; #1bit Trigger fuer das Zuruecksetzen des Betriebsstundenzaehlers des Filters. 1=Reset
            my $ga_reset_error = ''; #1bit Trigger fuer das zuruecksetzen der KWL nach einem Fehler. 1=Reset
             
            
            #Hier werden die Gruppenadressen fuer die Rueckmeldungen vergeben: (Nich vergeben = inaktiv)
            my $ga_status_ventilator_zul = ''; #GA DPT 5.001 fuer Status Ventilator Zuluft %
            my $ga_status_ventilator_abl = ''; #GA DPT 5.001 fuer Status Ventilator Abluft %
            my $ga_status_bypass_prozent = ''; #GA DPT 5.001 fuer Status Bypassklappe %
            my $ga_betriebsstunden_filter = ''; #GA DPT 16.000 fuer die Rueckmeldung der Betribsstunden des Filters
            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
            my $ga_aktstufe = ''; #GA DPT 5.005 liefert den Wert für die aktuelle Stufe (0=A, 1=Stufe1, 2=Stufe2, 3=Stufe3)
             
            #Hier werden die Gruppenadressen für die Rückmeldung der Temperaturen vergeben: (Nicht vergeben=inaktiv)
            my $ga_aul_temp = ''; #GA DPT 9.001 für die Aussenlufttemperatur
            my $ga_zul_temp = ''; #GA DPT 9.001 für die Zulufttemperatur
            my $ga_abl_temp = ''; #GA DPT 9.001 für die Ablufttemperatur
            my $ga_fol_temp = ''; #GA DPT 9.001 für die Fortlufttemperatur
            my $ga_komfort_temp = ''; #GA DPT 9.001 für die Komforttemperatur
             
            #Zuordnung der Namen fuer die RRD's:
            my $Name_rrd_AUL = 'KWL_Aussenluft'; #Name RRD Aussenluft
            my $Name_rrd_ZUL = 'KWL_Zuluft'; #Name RRD Zuluft
            my $Name_rrd_ABL = 'KWL_Abluft'; #Name RRD Abluft
            my $Name_rrd_FOL = 'KWL_Fortluft'; #Name RRD Fortluft
             
            #Pfad zur seriellen Schnittstelle oder dem USB-Seriell-Wandler:
            my $schnittstelle = '/dev/ttyUSB-2-4';
             
            
            #Angaben für die Kommunikation über den UDP-Port einer MOXA [diese Einstellungen reichen aus, d.h. auf dem Wiregate muss unter "Seriell/LAN/Socketverbindungen" KEINE Socketverbindung erstellt werden
            my $socknum = ""; # Eindeutige Nummer des Sockets
            my $send_ip = ""; # SendeIP (UDP)
            my $send_port = ""; # Sendeport (UDP)   
            my $recv_ip = ""; # EmpfangsIP (UDP)
            my $recv_port = ""; # Empfangsport (UDP)
             
            
            # Kommunikationsart
            my $Kom_Art = "S"; # "S" = seriell; "M" = Moxa
             
            
            # Dauer einer Abfrage
            my $Zaehler = "2500"; #Mit dieser Variable Zaehler wird beeinflusst, wie lange das Plugin auf den Abschluss einer Rückmeldung der KWL wartet; empfohlener Wert für seriell: 2500; für Moxa: 250
             
            # Debug level 0 = nur die wichtigsten Infos, 1 = Alle Zustaende, 2 = Rohdaten (nur für Fehlersuche)
            my $debug=0;
             
             
            #Weitere Variablen die benoetigt werden -> NICHT veraendern!
            my $seriel;
            my $sin; #Serial Input = Empangener Datenstrom
            my $cin; #Counter Input =  Länge des Datenpackets
            my $laenge; #Länge des empfangenen Datenstrings nachdem kürzen
             
            my $checksum = 0; #Checksumme
            my @hex; #Hilfsarray für die Checksummenberechnung
            my $x07warschon; #Hilfsvariable für die Checksummenberechnung
             
            &readConf(); #conf.d einlesen
             
            my $return_value2;
            my $daten;
            my $reciv;
            my $reciv_all;
            my $ack = pack("H*","07F3");
            my $rcv_checksum;
             
            # Zyklischer Aufruf nach restart, empfang GA oder 1/2 der einstellung rrd (typisch 150sek).
            $plugin_info{$plugname.'_cycle'}  = 150;
            
            use Device::SerialPort;
            use Time::Local;
            
             
            #Einrichten der Seriellen Schnittstelle fuer die Kommunikation mit der ComfoAir falls die Schnittstelle auf "S" steht
            if ($Kom_Art eq "S"){
                         $seriel = Device::SerialPort->new($schnittstelle) || die "Kann $schnittstelle nicht öffnen! ($!)\n";
                         $seriel->baudrate(9600);
                         $seriel->parity("none");
                         $seriel->databits(8);
                         $seriel->stopbits(1);
                         if($debug>=1){plugin_log($plugname,'Schnittstelle: ' . $schnittstelle . ' erfolgreich geöffnet')};
            }elsif ($Kom_Art eq "M"){
                if (!$socket[$socknum]) { # socket erstellen
                        $socket[$socknum] = IO::Socket::INET->new(LocalPort => $recv_port,
                                                  Proto => "udp",
                                                  LocalAddr => $recv_ip,
                                                  PeerPort  => $send_port,
                                                  PeerAddr  => $send_ip,
                                                  ReuseAddr => 1
                                                   )
                    or return ("open of $recv_ip : $recv_port failed: $!");
                    $socksel->add($socket[$socknum]); # add socket to select
                    $plugin_socket_subscribe{$socket[$socknum]} = $plugname; # Plugin an Socket "anmelden"
                    if($debug>=1){plugin_log($plugname,'Socket: ' . $socknum . ' erfolgreich geöffnet')};
                    return "opened Socket $socknum";
                }
            }
            
            
            ###############################################################################################
            ###############################################################################################
            ## Ab hier werden die Befehle die vom KNX kommen für die ComfoAir uebersetzt und gesendet... ##
            ###############################################################################################
            ###############################################################################################
             
             
            if ($msg{'apci'} eq "A_GroupValue_Write"){
                if ($msg{'dst'} eq $ga_stufeabwesend && knx_read($msg{'dst'},0,1) == 1) {
                    $daten = "00990101";
                    plugin_log($plugname,'Stufe abwesend setzen');
                    $return_value2 = command_senden($daten);
                        if($ga_aktstufe){ #Nur wenn die GA vergeben ist, die Ventilationsstufe abfragen
                            $daten = "00CD00";
                            if($debug>=1){plugin_log($plugname,'Ventilationsstufe abrufen');}
                            $return_value2 = command_senden($daten);
                        }
                }elsif ($msg{'dst'} eq $ga_stufe1 && knx_read($msg{'dst'},0,1) == 1) {
                    $daten = "00990102";
                    plugin_log($plugname,'Stufe 1 setzen');
                    $return_value2 = command_senden($daten);
                        if($ga_aktstufe){ #Nur wenn die GA vergeben ist, die Ventilationsstufe abfragen
                            $daten = "00CD00";
                            if($debug>=1){plugin_log($plugname,'Ventilationsstufe abrufen');}
                            $return_value2 = command_senden($daten);
                        }
                }elsif ($msg{'dst'} eq $ga_stufe2 && knx_read($msg{'dst'},0,1) == 1) {
                    $daten = "00990103";
                    plugin_log($plugname,'Stufe 2 setzen');
                    $return_value2 = command_senden($daten);
                        if($ga_aktstufe){ #Nur wenn die GA vergeben ist, die Ventilationsstufe abfragen
                            $daten = "00CD00";
                            if($debug>=1){plugin_log($plugname,'Ventilationsstufe abrufen');}
                            $return_value2 = command_senden($daten);
                        }
                }elsif ($msg{'dst'} eq $ga_stufe3 && knx_read($msg{'dst'},0,1) == 1) {
                    $daten = "00990104";
                    plugin_log($plugname,'Stufe 3 setzen');
                    $return_value2 = command_senden($daten);
                        if($ga_aktstufe){ #Nur wenn die GA vergeben ist, die Ventilationsstufe abfragen
                            $daten = "00CD00";
                            if($debug>=1){plugin_log($plugname,'Ventilationsstufe abrufen');}
                            $return_value2 = command_senden($daten);
                        }
                }elsif ($msg{'dst'} eq $ga_stufe_setzen) {
                    my $stufenwert = knx_read($msg{'dst'},0,5.005);
                    $daten = "0099010" . (1 + $stufenwert);
                    plugin_log($plugname,'Stufe direkt setzen auf: ' . $stufenwert);
                    $return_value2 = command_senden($daten);
                        if($ga_aktstufe){ #Nur wenn die GA vergeben ist, die Ventilationsstufe abfragen
                            $daten = "00CD00";
                            if($debug>=1){plugin_log($plugname,'Ventilationsstufe abrufen');}
                            $return_value2 = command_senden($daten);
                        }
                }elsif ($msg{'dst'} eq $ga_komforttemp) {
                    my $komforttemp = knx_read($msg{'dst'},0,9.001);
                    plugin_log($plugname,'Komforttemp auf: ' . $komforttemp . '°C setzen');
                    my $temphex = ($komforttemp + 20)*2; #Rechne die Temperatur fuer die ComfoAir um
                    $temphex = sprintf "%x" , $temphex; # Mache aus Integer HEX
                    $daten = "00D301" . $temphex;
                    $return_value2 = command_senden($daten);
                }elsif ($msg{'dst'} eq $ga_reset_filter && knx_read($msg{'dst'},0,1) == 1) {
                    $daten = "00DB0400000001";
                    plugin_log($plugname,'Filter zuruecksetzen');
                    $return_value2 = command_senden($daten);
                }elsif ($msg{'dst'} eq $ga_reset_error && knx_read($msg{'dst'},0,1) == 1) {
                    $daten = "00DB0401000000";
                    plugin_log($plugname,'Fehler zuruecksetzen');
                    $return_value2 = command_senden($daten);
                }elsif ($msg{'dst'} eq $ga_drehzahl_ventilator_zul) {
                    my $drehzahl_zul = knx_read($msg{'dst'},0,5.001);
                    plugin_log($plugname,'Drehzahl Zuluftluefter auf: ' . $drehzahl_zul . '% setzen');
                    $plugin_info{$plugname."_zuluftdrehzahl_1"} = $drehzahl_zul;
                   
                    my $temp_abluftdrehzahl = sprintf "%x",$plugin_info{$plugname."_abluftdrehzahl_1"};
                    my $hex_zuluftdrehzahl = sprintf "%x" , $drehzahl_zul; # Mache aus Integer HEX
                    $daten = "00CF090F" . $temp_abluftdrehzahl.'0F0F'. $hex_zuluftdrehzahl.'0F0F0F0F';
                    $return_value2 = command_senden($daten);
                }elsif ($msg{'dst'} eq $ga_drehzahl_ventilator_abl) {
                    my $drehzahl_abl = knx_read($msg{'dst'},0,5.001);
                    plugin_log($plugname,'Drehzahl Abluftluefter auf: ' . $drehzahl_abl . '% setzen');
                    $plugin_info{$plugname."_abluftdrehzahl_1"} = $drehzahl_abl;
                    
                    my $temp_zuluftdrehzahl = sprintf "%x",$plugin_info{$plugname."_zuluftdrehzahl_1"};
                    my $hex_abluftdrehzahl = sprintf "%x" , $drehzahl_abl; # Mache aus Integer HEX
                    $daten = "00CF090F" . $hex_abluftdrehzahl.'0F0F'. $temp_zuluftdrehzahl.'0F0F0F0F';
                    $return_value2 = command_senden($daten);
                    if($debug>=2){plugin_log($plugname,'Drehzahl Abluftlüfter DATEN: ' . $daten . ' mit '. $drehzahl_abl. ' setzen! Antwort:'.$return_value2); }
                }
                if($debug>=2){plugin_log($plugname,'ENDE Aufruf durch GA');}
                return;
                        
            } else { # zyklischer Aufruf
                if(($plugin_info{$plugname.'_time'}+$plugin_info{$plugname.'_cycle'}) >= $plugin_info{$plugname.'_last'}){
                    return;
                }
                $plugin_info{$plugname.'_time'} = time();
               
                # Plugin an Gruppenadresse "anmelden", hierdurch wird das Plugin im folgenden bei jedem eintreffen eines Telegramms auf die GA aufgerufen und der obere Teil dieser if-Schleife durchlaufen
                $plugin_subscribe{$ga_stufeabwesend}{$plugname} = 1;
                $plugin_subscribe{$ga_stufe1}{$plugname} = 1;
                $plugin_subscribe{$ga_stufe2}{$plugname} = 1;
                $plugin_subscribe{$ga_stufe3}{$plugname} = 1;
                $plugin_subscribe{$ga_stufe_setzen}{$plugname} = 1;
                $plugin_subscribe{$ga_komforttemp}{$plugname} = 1;
                $plugin_subscribe{$ga_reset_filter}{$plugname} = 1;
                $plugin_subscribe{$ga_reset_error}{$plugname} = 1;
               
            
            ####################################################################################################
            ####################################################################################################
            ## Ab hier werden zyklisch diverse Werte von der ComfoAir abgefragt und an das KNX uebertragen... ##
            ####################################################################################################
            ####################################################################################################
            
              
                $daten = "00D100";
                plugin_log($plugname,'Temperatur abrufen');
                $return_value2 = command_senden($daten);
               
                if($ga_status_ventilator_zul && $ga_status_ventilator_abl){ #Nur wenn beide GA's vergeben sind, dann die Zustaende der Ventilatoren abfragen
                    $daten = "000B00";
                    if($debug>=1){plugin_log($plugname,'Ventilator Status abrufen');}
                    $return_value2 = command_senden($daten);
                }
                        
                if($ga_status_bypass_prozent){ #Nur wenn die GA vergeben ist, dann Zustand Bypassklappe abfragen
                    $daten = "000D00";
                    if($debug>=1){plugin_log($plugname,'Bypass Zustand abrufen');}
                    $return_value2 = command_senden($daten);
                }
                        
                if($ga_betriebsstunden_filter){ #Nur wenn die GA vergeben ist, die Betriebsstunden des Filters abfragen
                    $daten = "00DD00";
                    if($debug>=1){plugin_log($plugname,'Betriebsstunden Filter abrufen');}
                    $return_value2 = command_senden($daten);
                }
                        
                if($ga_zustand_badschalter){ #Nur wenn die GA vergeben ist, die Binaereingaenge abfragen
                    $daten = "000300";
                    if($debug>=1){plugin_log($plugname,'Binäreingänge abrufen');}
                    $return_value2 = command_senden($daten);
                }
                        
                if($ga_aktstufe){ #Nur wenn die GA vergeben ist, die Ventilationsstufe abfragen
                    $daten = "00CD00";
                    if($debug>=1){plugin_log($plugname,'Ventilationsstufe abrufen');}
                    $return_value2 = command_senden($daten);
                }
                        
                #Hier werden die Stoermeldungen abgefragt
                $daten = "00D900";
                if($debug>=1){plugin_log($plugname,'Störungen abrufen');}
                $return_value2 = command_senden($daten);
            
            
                if($debug>=2){plugin_log($plugname,'ENDE Zyklische Abfrage');}
                return;
            }
             
             
            # Ab hier wird das Datenpaket inklusive Checksumme zusammengestellt und an die ComfoAir uebertragen
            sub command_senden{
                my $data = $_[0];
                if($debug>=2){plugin_log($plugname,'data: ' . $data);}
                $checksum = checksum_berechnen($data);
                if($debug>=2){plugin_log($plugname,'Checksumme aus der Subroutine: '.$checksum);}
                my $command = pack("H*","07F0" . $data . $checksum . "070F");
                my $commandhex = $command;
               
                $commandhex =~ s/(.)/sprintf("0x%x ",ord($1))/eg;
                if($debug>=2){plugin_log($plugname,'transmit: ' . $commandhex);} #Zeigt im Pluginlog das fertige Datenpaket, dass uebertragen wird
                         if ($Kom_Art eq "S"){   
                                         $seriel->write($command); #Befehl an die ComfoAir senden
                         } elsif ($Kom_Art eq "M"){   
                                         $plugin_info{$plugname.'_debug'} = $command;
                                         syswrite($socket[$socknum], $command);
                         }
                $reciv = '';
                $cin = '';
                $sin = '';
                   
                $|=1;
                my $exit=0;
                while($exit < $Zaehler)
                {
                    if ($Kom_Art eq "S"){
                         ($cin, $sin) = $seriel->read(45);
                    }elsif ($Kom_Art eq "M"){
                                             $sin ='';
                                             if ($fh) { # Antwort auslesen
                                                            recv($fh,$sin,80,0);
                                             }
                                             $cin = length($sin);
                    }
                    if($cin > 0){
                        $sin = unpack "H*", $sin;
                        $reciv .= $sin;
                        $exit=0;
                    }else{
                        $exit++
                    }
                   
                    if($debug>=2){plugin_log($plugname,'reciv-direkt:     ' . $sin);}
                
                        if($reciv =~ /070f/i){ 
                            if (substr($reciv,(length($reciv)-6),6) ne '07070f'){            
                                last;
                            }
                        }
                }#Ende While  
            
                if ($Kom_Art eq "S"){
                    $seriel->write($ack); #ACK senden
                    if($debug>=2){plugin_log($plugname,'ACK senden');}
                } elsif ($Kom_Art eq "M"){
                    syswrite($socket[$socknum], $ack); #ACK senden
                    if($debug>=2){plugin_log($plugname,'ACK senden');}
                }
            
                if($reciv eq ""){
                    if($debug>=2){plugin_log($plugname,'FEHLER: Keine Daten empfangen!');}
                    return;
                }
               
                while ((length($reciv) > 3) && (substr($reciv,(length($reciv)-4),4) ne '070f')) #solange das Ende nicht 070f lautet
                {
                                if($debug>=2){plugin_log($plugname,'String vor Kuerzung Ende: '.$reciv);}
                                $reciv = substr($reciv,0,-2); #String um die letzten zwei Zeichen kürzen
                                if($debug>=2){plugin_log($plugname,'String nach Kuerzung Ende: '.$reciv);}
                }  
               
             
                    #Hier wird der empfangene String um Start- und Endbyte gekürzt
                    $laenge = length($reciv); #Laenge des Antworttelegramms ermitteln
                    $reciv = substr($reciv,0,($laenge-4)); #Entferne 07f0 vom Ende
                   
                    if(substr($reciv,(length($reciv)-4),4) eq '07f3'){
                        $reciv = substr($reciv,0,($laenge-4));
                        if($debug>=2){plugin_log($plugname,'String ohne 07f3: '.$reciv);}
                    }
            
                    if($debug>=2){plugin_log($plugname,'Erste 4 Byte des Datenpakets: '.(substr($reciv,0,4)));}
            
                                                       
                    while ((length($reciv) > 3) && (substr($reciv,0,4)) ne '07f0'){
                        $reciv = substr($reciv,2); #falls noch falsche Zeichen am Anfang des Strings enthalten sind, werden diese hier entfernt.
                        if($debug>=2){plugin_log($plugname,'reciv gekuerzt: '.$reciv);}
                    }
                   
                    $reciv = substr($reciv,4);
                    if($debug>=2){plugin_log($plugname,'String ohne 07f0 am Anfang: '.$reciv);}
                   
                    #Test einer Methode falls aussversehen mehrere Datenpakete auf einmal im Datenstring enthalten sind...
                    if($reciv =~ /07f307f0/i){
                        my @dataarray=split(/07f307f0/,$reciv);
                        $reciv = @dataarray[1];
                    }
            
                                        
                    #Nun wird die Checksumme gelesen und aus dem Datenstring entfernt
                    $checksum = 0;
                    $checksum = substr($reciv,-2,2);
                    if($debug>=2){plugin_log($plugname,'Checksumme gelesen: '.$checksum);}
                    $laenge = length($reciv); #Laenge des Antworttelegramms ermitteln
                    $reciv = substr($reciv,0,($laenge-2));
                    if($debug>=2){plugin_log($plugname,'Datenpaket ohne Checksumme: '.$reciv);}
            
                    #Hier wird die Subroutine für die Berechnung der Checksumme aufgerufen und das Ergebnis in $rcv_checksum zurück gegeben
                    $rcv_checksum = checksum_berechnen($reciv);
            
                    
            #######################################################################
            #######################################################################
            ## Ab hier werden die Rueckmeldungen von der ComfoAir ausgewertet... ##
            #######################################################################
            #######################################################################
            
            
                    if($rcv_checksum eq $checksum){ #Hier wird geprüft ob die Checksumme korrekt ist
                        if($debug>=2){plugin_log($plugname,'Checksumme OK ');}
                        
                        #Hier werden die doppelten 07 aus dem Antwortstring entfernt.
                        if($debug>=2){plugin_log($plugname,'String vor 07 bereinigung:  '.$reciv);}
                        while ($reciv =~ s/0707/07/) {}
                        if($debug>=2){plugin_log($plugname,'String nach 07 bereinigung: '.$reciv);}
                        
                        if($reciv =~ /00D209/i){ #Wenn die Temperaturen empfangen wurden
                            my $t1 = substr($reciv,6,2);
                            my $t2 = substr($reciv,8,2);
                            my $t3 = substr($reciv,10,2);
                            my $t4 = substr($reciv,12,2);
                            my $t5 = substr($reciv,14,2);
                                                                                      
                            #Hier werden die Temperaturen "decodiert" damit sie einen Sinn ergeben
                            $t1 =  (hex($t1)/2)-20;
                            $t2 =  (hex($t2)/2)-20;
                            $t3 =  (hex($t3)/2)-20;
                            $t4 =  (hex($t4)/2)-20;
                            $t5 =  (hex($t5)/2)-20;
            
                            #Wenn die GA's vergeben wurde, die Temperaturen auf die GA's senden
                            if($ga_komfort_temp ne ''){knx_write($ga_komfort_temp,$t1,9.001);}
                            if($ga_aul_temp ne ''){knx_write($ga_aul_temp,$t2,9.001);}
                            if($ga_zul_temp ne ''){knx_write($ga_zul_temp,$t3,9.001);}
                            if($ga_abl_temp ne ''){knx_write($ga_abl_temp,$t4,9.001);}
                            if($ga_fol_temp ne ''){knx_write($ga_fol_temp,$t5,9.001);}
                           
                            #Ab hier werden die RRD's mit den aktuellen Temperaturen aktualisiert:
                            update_rrd($Name_rrd_AUL,"",$t2);
                            update_rrd($Name_rrd_ZUL,"",$t3);
                            update_rrd($Name_rrd_ABL,"",$t4);
                            update_rrd($Name_rrd_FOL,"",$t5);
                           
                            plugin_log($plugname,'AUL: ' . $t2 . '°C, ZUL:' . $t3 . '°C, ABL: ' . $t4 . '°C, FOL: ' . $t5 . '°C, Komforttemp: ' . $t1 . '°C');
            
                        }elsif($reciv =~ /000C06/i){ #Wenn der Status fuer die Ventilatoren empfangen wurden
                            my $vent_zul = substr($reciv,6,2);
                            my $vent_abl = substr($reciv,8,2);
                            plugin_log($plugname,'ZUL: ' . hex($vent_zul) . '% ABL: ' . hex($vent_abl) . '%');
                            knx_write($ga_status_ventilator_zul,hex($vent_zul),5.001);
                            knx_write($ga_status_ventilator_abl,hex($vent_abl),5.001);   
                           
                        }elsif($reciv =~ /00CE0E/i){ #Wenn Status Ventilatorenstufe empfangen wurden
                            my $akt_stufe = substr($reciv,22,2);
                            if(hex($akt_stufe) == 1){
                                plugin_log($plugname,'AKT_STUFE: A');
                            }else{
                                plugin_log($plugname,'AKT_STUFE: ' . (hex($akt_stufe)-1));
                            }
                            knx_write($ga_aktstufe,hex($akt_stufe),5.005);                                                                               
            
                        }elsif($reciv =~ /000E04/i){ #Wenn der Status fuer die Bypassklappe empfangen wurden
                            my $bypass_prozent = substr($reciv,6,2);
                            plugin_log($plugname,'Bypass: ' . hex($bypass_prozent) . '%');               
                            knx_write($ga_status_bypass_prozent,hex($bypass_prozent),5.001);
            
                        }elsif($reciv =~ /00DE14/i){ #Wenn die Rueckmeldung der Betriebsstunden  des Filters empfangen wurden
                            my $betriebsstunden_filter = substr($reciv,36,4);
                            if($debug>=3){plugin_log($plugname,'Betriebsstunden Filter Roh: '.$betriebsstunden_filter);}
                            plugin_log($plugname,'Betriebsstunden Filter: ' . hex($betriebsstunden_filter) . 'h');                
                            knx_write($ga_betriebsstunden_filter,hex($betriebsstunden_filter) . 'h',16.000);
                           
                        }elsif($reciv =~ /000402/i){ #Wenn die Rueckmeldung der Binaereingaenge empfangen wurden
                            my $zustand_badschalter = substr($reciv,8,1);
                            plugin_log($plugname,'Zustand Badezimmerschalter: ' . $zustand_badschalter);                
                            knx_write($ga_zustand_badschalter,$zustand_badschalter,1.001);
                           
                        }elsif($reciv =~ /00DA11/i){ #Wenn die Rueckmeldung der Stoermeldungen empfangen wurden
                            my $fehlerAlo = substr($reciv,6,2);
                            my $fehlerAhi = substr($reciv,30,2);
                            my $fehlerE = substr($reciv,8,2);
                            my $fehlerFilter = substr($reciv,22,2);
                            my $fehlerEA = substr($reciv,24,2);
                           
                            my $numAlo = 'A';
                            my $numAhi = 'A';
                            my $numE = 'A';
                            my $numEA = 'A';
                           
                            $numAlo .= unpack("B*",pack("H*",$fehlerAlo));
                            $numAhi .= unpack("B*",pack("H*",$fehlerAhi));
                            $numE .= unpack("B*",pack("H*",$fehlerE));
                            $numEA .= unpack("B*",pack("H*",$fehlerEA));
                           
                           
                            $fehlerAlo = reverse($numAlo); #Wandle den Wert in Binaer und drehe die Reihenfolge um. z.B 0x02 = 00000010 = 010000000
                            $fehlerAlo = index($fehlerAlo,'1')+1; # Zaehle an welcher Stelle die 1 auftaucht (von links gelesen) z.B. 01000000 = INDEX 2 = Fehler2
                           
                            if($fehlerAhi ne '00'){
                                $fehlerAhi = index(reverse($numAhi),'1')+9;
                            }else{
                                $fehlerAhi = '';
                            }
                           
                            $fehlerE = index(reverse($numE),'1')+1;
                            $fehlerEA = index(reverse($numEA),'1')+1;
                                                                                       
                            if($fehlerAhi == 16){$fehlerAhi = 0;}
                                                                                       
                            if($ga_fehlercode){ #Wenn die GA fuer das uebertragen den Fehlercodes eingertagen wurde, ab hier auswerten
                                if($fehlerAlo > 0){
                                    plugin_log($plugname,'Aktueller Fehlercode: A' . $fehlerAlo);
                                    knx_write($ga_fehlercode,'A' . $fehlerAlo,16.001);
                                }elsif($fehlerAhi ne ''){
                                    plugin_log($plugname,'Aktueller Fehlercode: A' . $fehlerAhi);
                                    knx_write($ga_fehlercode,'A' . $fehlerAhi,16.001);                       
                                }elsif($fehlerE > 0){
                                    plugin_log($plugname,'Aktueller Fehlercode: E' . $fehlerE);
                                    knx_write($ga_fehlercode,'E' . $fehlerE,16.001);
                                }elsif($fehlerEA > 0){
                                    plugin_log($plugname,'Aktueller Fehlercode: EA' . $fehlerEA);
                                    knx_write($ga_fehlercode,'EA' . $fehlerEA,16.001);
                                }else{
                                    plugin_log($plugname,'Aktueller Fehlercode: keiner' );
                                    knx_write($ga_fehlercode,'keiner',16.001);
                                }   
                            }
                           
                            if(hex($fehlerFilter) > 0){
                                plugin_log($plugname,'Aktueller Fehler: Filter Voll');
                                knx_write($ga_fehler_filter,1,1);
                            }else{
                                knx_write($ga_fehler_filter,0,1);
                            }              
                        }
                    }else{
                        if($debug>=1){plugin_log($plugname,'Checksumme fehlerhaft! Gelesen: '.$checksum.' Berechnet: '.$rcv_checksum);}
                    }
            } #ENDE Sub command_senden
            
            sub checksum_berechnen {   
                my $chk_datasum = $_[0];
                $rcv_checksum =0;
                my $i;
                 $chk_datasum = $chk_datasum . "AD"; #+173 fuer die Checksummenberechnung
                    if($debug>=2){plugin_log($plugname,'String für die Berechnung der Checksumme: '.$chk_datasum);}
                $x07warschon = 0;
                $laenge = length($chk_datasum);
                    for($i = 0; $i< $laenge; $i++) {
                        my $wertstring = substr($chk_datasum,$i,2);
                        if($debug>=3){plugin_log($plugname,'Zahl: '.$wertstring);}
                        my $wertbetrag = hex($wertstring);
                        if ($wertbetrag == 7) {
                            if ($x07warschon == 1) {
                                $x07warschon = 0;
                                $i++;
                                next;
                            } else {
                                $x07warschon = 1;
                            }
                        }
                    $rcv_checksum += $wertbetrag;
                        if($debug>=3){plugin_log($plugname,'Summe: '.$rcv_checksum);}
                    $i++;
                }
                        if($debug>=3){plugin_log($plugname,'Summe def: '.$rcv_checksum);}
            
                if($debug>=2){plugin_log($plugname,'Checksumme vor der Umwandlung: '.$rcv_checksum);}
                $rcv_checksum = sprintf "%x\n" , $rcv_checksum; #Mache aus Integer wieder HEX
                if($debug>=2){plugin_log($plugname,'Checksumme vor der Kürzung: '.$rcv_checksum);}
                $rcv_checksum = substr($rcv_checksum,-3,2); #Verwende nur die letzten beiden Stellen
                if($debug>=2){plugin_log($plugname,'Checksumme nach der Kürzung: '.$rcv_checksum);}
                return $rcv_checksum;
            } #Ende checksum_berechnen
            
             
            
            sub readConf
            {
                my $confFile = '/etc/wiregate/plugin/generic/conf.d/'.basename($plugname,'.pl').'.conf';
                if (! -f $confFile)
                {
                    plugin_log($plugname, " no conf file [$confFile] found!");
                }
                else
                {
                    if($debug>=1){plugin_log($plugname, " reading conf file [$confFile].");}
                    open(CONF, $confFile);
                    my @lines = <CONF>;
                    close($confFile);
                    my $result = eval("@lines");
            #        ($result) and plugin_log($plugname, "conf file [$confFile] returned result[$result]");
                    if ($@)
                    {
                        if($debug>=2){plugin_log($plugname, " conf file [$confFile] returned:");}
                        my @parts = split(/\n/, $@);
                        if($debug>=2){plugin_log($plugname, " --> $_") foreach (@parts);}
                    }
                }
            } # readConf
            Ich würde mich über Rückmeldungen freuen

            So... Und nun viel Spass beim Testen.
            Gruss Patrik alias swiss

            Kommentar


              Hab den neuen Code mal eingespielt, jedoch weder die Ansteuerung über eine GA noch die getrennte der Lüfter getestet, aber der Rest funktioniert weiterhin...

              Die beiden Bugfixes sehen auch gut aus...
              Code:
              2013-07-24 00:51:40.523,ComfoAir_kwl.pl,Schnittstelle: /dev/KWL erfolgreich geöffnet
              2013-07-24 00:51:40.524,ComfoAir_kwl.pl,Temperatur abrufen 
              2013-07-24 00:51:40.585,ComfoAir_kwl.pl,AUL: 19.5°C, ZUL:20.5°C, ABL: 24.5°C, FOL: 24.5°C, Komforttemp: 15°C 
              2013-07-24 00:51:40.585,ComfoAir_kwl.pl,Ventilator Status abrufen 
              2013-07-24 00:51:40.615,ComfoAir_kwl.pl,ZUL: 70% ABL: 65% 
              2013-07-24 00:51:40.623,ComfoAir_kwl.pl,Bypass Zustand abrufen 
              2013-07-24 00:51:40.649,ComfoAir_kwl.pl,Bypass: 100% 
              2013-07-24 00:51:40.652,ComfoAir_kwl.pl,Betriebsstunden Filter abrufen 
              2013-07-24 00:51:40.697,ComfoAir_kwl.pl,Betriebsstunden Filter: 2500h 
              2013-07-24 00:51:40.704,ComfoAir_kwl.pl,Binäreingänge abrufen 
              2013-07-24 00:51:40.731,ComfoAir_kwl.pl,Zustand Badezimmerschalter: 0 
              2013-07-24 00:51:40.736,ComfoAir_kwl.pl,Ventilationsstufe abrufen 
              2013-07-24 00:51:40.776,ComfoAir_kwl.pl,AKT_STUFE: 2 
              2013-07-24 00:51:40.780,ComfoAir_kwl.pl,Störungen abrufen 
              2013-07-24 00:51:40.824,ComfoAir_kwl.pl,Aktueller Fehlercode: keiner 
              2013-07-24 00:53:40.001,ComfoAir_kwl.pl,Schnittstelle: /dev/KWL erfolgreich geöffnet 
              2013-07-24 00:53:40.004,ComfoAir_kwl.pl,Stufe abwesend setzen 
              2013-07-24 00:53:40.331,ComfoAir_kwl.pl,Checksumme fehlerhaft! Gelesen:  Berechnet: ad
              2013-07-24 00:53:40.331,ComfoAir_kwl.pl,Ventilationsstufe abrufen 
              2013-07-24 00:53:40.368,ComfoAir_kwl.pl,AKT_STUFE: A 
              2013-07-24 00:53:48.466,ComfoAir_kwl.pl,Schnittstelle: /dev/KWL erfolgreich geöffnet 
              2013-07-24 00:53:48.473,ComfoAir_kwl.pl,Stufe 1 setzen 
              2013-07-24 00:53:48.919,ComfoAir_kwl.pl,Checksumme fehlerhaft! Gelesen:  Berechnet: ad 
              2013-07-24 00:53:48.919,ComfoAir_kwl.pl,Ventilationsstufe abrufen 
              2013-07-24 00:53:48.956,ComfoAir_kwl.pl,AKT_STUFE: 1 
              2013-07-24 00:53:54.402,ComfoAir_kwl.pl,Schnittstelle: /dev/KWL erfolgreich geöffnet 
              2013-07-24 00:53:54.409,ComfoAir_kwl.pl,Stufe 2 setzen
              2013-07-24 00:53:54.838,ComfoAir_kwl.pl,Checksumme fehlerhaft! Gelesen:  Berechnet: ad 
              2013-07-24 00:53:54.838,ComfoAir_kwl.pl,Ventilationsstufe abrufen 
              2013-07-24 00:53:54.874,ComfoAir_kwl.pl,AKT_STUFE: 2
              Was mir in meiner Visu noch nicht gefällt ist die Anzeige des Bypasses... liegts an meiner Visu-Confi?
              Code:
              <info>
               <label>
                <icon name="control_home"/> Bypassklappe
               </label>
               <address transform="DPT:16.000" mode="read" variant="">6/7/23</address>
              </info>
              Nochmal danke für das tolle Plugin

              Und jetzt schnell ab ins Bett...
              Angehängte Dateien
              cu Yfkt5A
              DALI(ABB DG/S1.1), KODI Odroid, TrueNAS, Zehnder ComfoAir 200 L Luxe
              microk8s-Cluster: HomeAssistant, MusicAssistant, mosquitto, TVHeadend, jellyfin

              Kommentar


                Bei mir läuft das Plugin bis jetzt auch bestens.
                Ansteuerung der Lüftungsstufe über gemeinsame GA ist bisher absolut zuverlässig.
                Direktes Ansteuern der einzelnen Ventilatoren muss ich noch Testen.
                Gruß -mfd-
                KNX-UF-IconSet since 2011

                Kommentar


                  Vielen Dank für die Rückmeldungen

                  @nEiMi: Ja die Anzeige des Bypass hat den DPT 5.001 und du hast in der CometVisu Config 16.000 stehen. Sollte also mit dieser kleinen änderung auf DPT:5.001 funktionieren

                  -> Desshalb steht in der Config auch hinter jeder Einstellung der richtige DPT
                  Gruss Patrik alias swiss

                  Kommentar


                    Zitat von swiss Beitrag anzeigen
                    Vielen Dank für die Rückmeldungen
                    Hallo -- hier dann auch noch eine: ich habe den neuen Stufen-Umschalter probiert, und er funktioniert

                    Was mir noch gefallen würde, wäre eine Status-GA für die Stufe - dann kann ich je nach Lust und Laune entweder mit den alten individuellen GA's oder dem neuen Umschalter schalten und krieg' immer die richtige Stufe zurück für die Visu

                    Kommentar


                      Hallo

                      Eine separate GA die den Wert der aktuellen Stufe zurück meldet gibt es schon länger

                      Code:
                      $ga_aktstufe = ''; #GA [URL="http://redaktion.knx-user-forum.de/lexikon/DPT/"][U][COLOR=#0000ff]DPT[/COLOR][/U][/URL] 5.005 liefert den Wert für die aktuelle Stufe (0=A, 1=Stufe1, 2=Stufe2, 3=Stufe3)
                      Gruss Patrik alias swiss

                      Kommentar


                        Zitat von swiss Beitrag anzeigen
                        Hallo

                        Eine separate GA die den Wert der aktuellen Stufe zurück meldet gibt es schon länger

                        Code:
                        $ga_aktstufe = ''; #GA [URL="http://redaktion.knx-user-forum.de/lexikon/DPT/"][U][COLOR=#0000ff]DPT[/COLOR][/U][/URL] 5.005 liefert den Wert für die aktuelle Stufe (0=A, 1=Stufe1, 2=Stufe2, 3=Stufe3)

                        Mea Culpa - die hatte ich erfolgreich verdrängt.

                        Kann es allerdings sein, dass die Rückmeldung 1,2,3,4 liefert und nicht 0,1,2,3? Oder ich hab' etwas schief in meiner Visu...

                        Kommentar


                          Hallo

                          Oo... Ja das ist richtig bzw. falsch... Ich habe direkt den von der ComfoAir zurückgemeldeten Wert an den KNX weitergegeben. Laut Protokollbeschreibung ist also:

                          1= Auto
                          2=Stufe1
                          3=Stufe2
                          4=Stufe3

                          -> ...wer denkt sich nur immer solchen Käse aus

                          Nun habe ich aber ein kleines Problem... Der Wert lässt sich sehr einfach im Plugin korrigieren. Doch stimmen dann die Anzeigen bei allen nicht mehr, die ein Mapping dafür gebaut haben.

                          Ich könnte die Korrektur aber z.B. als zusätzliche Option anbieten die man aktivieren kann... Dann hätte ich kein Problem mit dem Bestandschutz.

                          ...Ausser die Breite Masse der Nutzer ist der Meinung, dass der Wert per default korrigiert werden sollte. Da müssten sich dann aber einige finden, die dieser Meinung sind
                          Gruss Patrik alias swiss

                          Kommentar


                            Warum nicht ein zweites alternatives Objekt?
                            Gruß Matthias
                            EIB übersetzt meine Frau mit "Ehepaar Ist Beschäftigt"
                            - PN nur für PERSÖNLICHES!

                            Kommentar


                              Stimmt... Dass wäre auch noch eine Option
                              Gruss Patrik alias swiss

                              Kommentar


                                Der neue Umschalter ist sicher noch nicht so viel in Gebrauch, vielleicht ist es einfacher, den umzustellen?

                                Kommentar

                                Lädt...
                                X