Ankündigung

Einklappen
Keine Ankündigung bisher.

Steuerung der KWL Cofoair mit diesem Protokol möglich?

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    KWL Donnerstag_cycle30KWL Donnerstag_debug_reciv
    KWL Donnerstag_debug_transmit0x7 0xf0 0x0 0x69 0x0 0x16 0x7 0xf KWL Donnerstag_last1338492967.90056KWL Donnerstag_result1KWL Donnerstag_runtime0KWL Donnerstag_timeout_err0
    Angehängte Dateien

    Kommentar


      Ok. Danke

      Das bedeutet für mich, dass ich nochmal über die Bücher muss Das Problem scheint, dass der ComfoAir kein normales "Endzeichen" sendet. es fehlt also ein LF, CR, EOT oder sonst was. Ich muss nochmal den Protokollmitschnitt zwischen ComfoAir und Ease ansehen. Vieleicht kommt da die Erleuchtung.

      @makki Würde das CR in $fh auftauchen, wenn der ComfoAir von sich aus sendet? Oder wird das vom socket verschluckt?
      Gruss Patrik alias swiss

      Kommentar


        Wäre noch zu testen ob es funktioniert wenn wir die Zeile 93 gegen diese ersetzen:

        Code:
        syswrite($socket[$socknum], $command . "\r");
        -> Also doch mit CR als standard Steuerzeichen.
        Gruss Patrik alias swiss

        Kommentar


          die KWL sendet nichts zurück

          Kommentar


            So ein mist Ich werd aus dem doofen Ding nicht schlau. Wenn ich doch nur mal das Konfigurationsprogramm an's laufen bekommen würde. Oder selber eine ComfoAir zum testen hätte...

            Ich lasse mir auf jeden Fall was einfallen. Leider kommt bei dem Projekt an dem ich gerade beruflich arbeite keine ComfoAir zum einsatz. Sonst hätte ich mich schon längst mit dem Laptop davor gesetzt

            PS: Das return; hast du aber vorher wieder entfernt? Sonst geht nix
            Gruss Patrik alias swiss

            Kommentar


              2012-05-31 22:08:40.780,KWL Donnerstag,transmit:0x7 0xf0 0x0 0x69 0x0 0x16 0x7 0xf 2012-05-31 22:09:10.842,KWL Donnerstag,transmit:0x7 0xf0 0x0 0x69 0x0 0x16 0x7 0xf 2012-05-31 22:09:41.199,KWL Donnerstag,transmit:0x7 0xf0 0x0 0x69 0x0 0x16 0x7 0xf 2012-05-31 22:10:11.607,KWL Donnerstag,transmit:0x7 0xf0 0x0 0x69 0x0 0x16 0x7 0xf 2012-05-31 22:10:42.373,KWL Donnerstag,transmit:0x7 0xf0 0x0 0x69 0x0 0x16 0x7 0xf 2012-05-31 22:11:12.759,KWL Donnerstag,transmit:0x7 0xf0 0x0 0x69 0x0 0x16 0x7 0xf 2012-05-31 22:12:13.006,Thread,WARNING Thread exited TIMEOUT running PLUGIN KWL Donnerstag ! 2012-05-31 22:12:30.478,KWL Donnerstag,opened Socket 129,0s, 2012-05-31 22:13:01.223,KWL Donnerstag,transmit:0x7 0xf0 0x0 0x69 0x0 0x16 0x7 0xf 2012-05-31 22:13:01.333,KWL Donnerstag,reciv: 2012-05-31 22:13:01.334,KWL Donnerstag,1,0s, 2012-05-31 22:13:32.237,KWL Donnerstag,transmit:0x7 0xf0 0x0 0x69 0x0 0x16 0x7 0xf 2012-05-31 22:13:32.347,KWL Donnerstag,reciv: 2012-05-31 22:13:32.348,KWL Donnerstag,1,0s,



              Mal den Stecker der KWL gezogen

              Kommentar


                ...ich hätte da noch einer Solarthermie-Anlage...
                Sogar mit PERL-Vorlage

                Kommentar


                  Und was, wenn du einfach die Ease paralell zum PC anschliesst, und wir mal das senden einstellen? dan können wir mal etwas lauschen und sehen ob die Daten korrekt vom Socket empfangen werden

                  Ich baue das Plugin mal kurz dafür um

                  EDIT: So. Hier das minimal geänderte Plugin:

                  Code:
                  # Plugin zur Ansteuerung einer Zender ComfoAir
                  # Version 0.04 31.05.2012 Pre ALPHA
                  # Copyright: swiss (https://knx-user-forum.de/members/swiss.html)
                  # Die Vorlage für die Datenübertragung via socat stammt von makki (https://knx-user-forum.de/members/makki.html)
                  # Aufbau möglichst so, dass man unterhalb der Einstellungen nichts verändern muss!
                  #
                  #
                  
                  
                  ####################
                  ###Einstellungen:###
                  ####################
                  
                  my $socknum = 129; # Eindeutige Nummer des Sockets +1
                  
                  
                  #Diese Einstellungen können normalerweise so belassen werden!
                  my $send_ip = "localhost"; # Sendeport (UDP, siehe in Socket-Einstellungen)
                  my $send_port = "50108"; # Sendeport (UDP, siehe in Socket-Einstellungen)
                  my $recv_ip = "localhost"; # Empfangsport (UDP, siehe in Socket-Einstellungen)
                  my $recv_port = "50107"; # Empfangsport (UDP, siehe in Socket-Einstellungen)
                  
                  ######################
                  ##ENDE Einstellungen##
                  ######################
                  
                  
                  $plugin_info{$plugname.'_cycle'} = 30; 
                  # Zyklischer Aufruf nach restart und alle 300 sek.
                  
                  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; # subscribe plugin
                      return "opened Socket $socknum";
                      plugin_log($plugname,'Soket verbunden. Soketnummer: ' . $socknum);
                  }
                  
                  if ($fh) { # Wenn der ComfoAir ein Antworttelegramm sendet, wird ab hier der entsprechende Status ausgelesen.
                      my $buf = <$fh>;
                      my $bufhex = unpack("H*",$buf);
                      
                      if ($bufhex eq "07F3"){
                          plugin_log($plugname,'reciv:' . $bufhex . 'ACK');
                      }else{
                          $bufhex =~ s/(.)/sprintf("0x%x ",ord($1))/eg;
                          plugin_log($plugname,'reciv:' . $bufhex);
                          $plugin_info{$plugname.'_debug_reciv'} = $bufhex;
                      }
                  }else{
                  
                      my $data = "006900";
                  
                      #my $return_value2 = command_senden($data);
                      return;
                  }
                  
                  
                  # Ab hier wird das Datenpaket inklusive Checksumme zusammengestellt und an die ComfoAir übertragen
                  sub command_senden{
                      my $checksum = 0;
                      my $data = $_[0];
                      
                      my $datasum = $data . "AD"; #+173 für die Checksummenberechnung
                      my @hex  = map { hex($_) } ($datasum =~ /(..)/g);
                      
                      
                      my $x07warschon = 0;
                      
                      foreach (@hex) {
                          $checksum += ($_) unless $x07warschon; # unless ist dasselbe wie if not/!
                          if ($_ == 0x07) { $x07warschon = 1; }
                      }
                  
                      $checksum = sprintf "%x\n" , $checksum; #Mache aus Integer wieder HEX
                      $checksum = substr($checksum,length($checksum)-3,2); #Verwede nur die letzten beiden stellen
                      my $command = pack("H*","07F0" . $data . $checksum . "070F");
                      
                      my $commandhex = $command;
                      $commandhex =~ s/(.)/sprintf("0x%x ",ord($1))/eg;
                      
                      $plugin_info{$plugname.'_debug_transmit'} = $commandhex;
                      plugin_log($plugname,'transmit:' . $commandhex);
                      syswrite($socket[$socknum], $command);
                  }
                  Dieses mal nur höhrend um nicht die Kommunikation zu stören
                  Gruss Patrik alias swiss

                  Kommentar


                    Naja das solarthermieprojekt wäre schon interessant. Die Frage ist, wie sich die Kommunikation unterscheidet. Wenn diese Steuerung wie alle anderen mir bekannten auch mir CR und vieleicht noch LF arbeiten, ist es kein Problem Beim ComfoAir scheint dieser "Standard" aber nicht zu zutreffen
                    Gruss Patrik alias swiss

                    Kommentar


                      ne, also da kommt nichts.
                      Aber, wenn die 2 Schnittstellen physikalisch sowieso nicht miteinander verbunden sind, werden sie sich doch auch nicht gegenseitig hören?!?

                      Kommentar


                        Ich bin mir immer noch nicht ganz sicher, ob es mit der Sub-D wirklich geht Ich lese immer nur von Leuten die es mit der Ease schnittstelle am laufen haben. Naja paralell zur Ease wäre für's erste mal nicht schlecht. Einfach mal zum mithöhren.
                        Gruss Patrik alias swiss

                        Kommentar


                          achso-sorry-mein fehler-ich klemme nochmal um...

                          Kommentar


                            Ok. Ich versuche mal an weitere Infos zu komen.

                            @makki: Gibt es in Perl für IO::Socket::INET auch eine Art:

                            Code:
                            ReceiveTerminator = serial.hextobyte("070F"
                            Also ein internes Komando von Perl an den Socket, dass die Übertragung zu ende ist?
                            Gruss Patrik alias swiss

                            Kommentar


                              Also scheinbar ist es so, dass das Zender Tool als ersten Befehl 07 F0 00 9B 03 4B 07 0F sendet. Das hat laut Protokollbeschreibung mit dem umschalten des Kommunikationsmodus zutun. Die frage ist, ob das auch damit zusammen hängt, ob die Sub-D verwendet werden kann oder nicht. Am sichers wäre die Kommunikation ober vorerst über die Ease Schnittstelelle. Später wäre dann das Ziel die Sub-D zu nutzen um das ganze anwendertauglich zu machen. Weil ich mir auch immer noch nicht sicher bin ob man für die Verbindung über die Sub-D des ComfoAir ein Nullmodemkabel braucht oder die Schnittstelle schon ausgekreuzt ist. Das finde ich aber noch heraus.
                              Gruss Patrik alias swiss

                              Kommentar


                                musst Du das denn zum programmieren wissen?
                                Die Verbindung klappt ja mit dem Comfo-Programm.

                                Mithorchen klappt scheinbar auch nicht.
                                Versuche mal morgen rx und tx umzuklemmen-heut wird das nix mehr.

                                Kommentar

                                Lädt...
                                X