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

    genau

    Kommentar


      Du hast eine ParameterSoftware? Könnte ich die eventuell zum testen bekommen? Würde gerne meine Test's noch etwas vertiefen.

      Welches Plugin hast du nun im Einsatz? Hat es in der Zeile 89 noch ein \r? Dann ist es nicht das aktuelle. Das \r funktioniert nicht.

      @makki:Wie bekomme ich denn die rohen Hexdaten von command in's Log geschrieben? Möchte gerne mal nachsehen ob das pack richtig arbeite.
      Gruss Patrik alias swiss

      Kommentar


        schick mir mal per pn Deine email


        kein /r in Zeile 89

        Kommentar


          Zitat von swiss Beitrag anzeigen
          @makki:Wie bekomme ich denn die rohen Hexdaten von command in's Log geschrieben? Möchte gerne mal nachsehen ob das pack richtig arbeite.
          Entweder dur horchst mit
          nc -l -u 50011 | hexdump
          einfach selber auf den port (socat darf dann aber nicht laufen)

          oder im Plugin (aus cul868)
          my $bufhex = $buf;
          $bufhex =~ s/(.)/sprintf("0x%x ",ord($1))/eg;

          Makki
          EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
          -> Bitte KEINE PNs!

          Kommentar


            Danke

            Hab es gerade nachgetragen. Jetzt werden die Tx Daten als Hex gelogt. damit kann man später (wenn die Kommunikation mal steht) verfolgen ob auf Transmit auch dir richtigen Daten empfangen werden.

            PS: Ist das Ergebnis normal? ->
            2012-05-30 23:05:40.919,KWL.pl,transmit:0x7 0xf0 0x0 0x69 0x0 0x16 0x7 0xf
            Werden die führenden Nullen immer weggelassen? Nicht dass es am Ende an so einer Kleinigkeit scheitert

            @Lio: Mach ich morgen Ich gehe mal in's bett muss morgen wieder früh raus
            Gruss Patrik alias swiss

            Kommentar


              ja ok, hab da sicherlich was nützliches-

              und danke nochmals für Deine Bemühungen, vorallem, weil Du so gar nichts davon hast...

              Kommentar


                @Patrick: ja das ohne führende ist ok bzw. steht so in der RE..

                Makki
                EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                -> Bitte KEINE PNs!

                Kommentar


                  Ok. Dann habe ich jetzt ehrlich gesagt das eol des socket im verdacht. Hier ist das Problem, dass die Kommunikation mit 07 0F endet. Also ein BEL gefolgt von einem Shift In. Die Frage ist, ob man an eol beide Zeichen übergeben kann? Weil nur eol=15 wäre gefährlich da 0F theoretisch auch im Datenbereich auftauchen könnte

                  @Lio: Gerngeschehen Ich hätte ja gerne den ComfoAir Simulator getesten aber der läuft bei mir nicht
                  Gruss Patrik alias swiss

                  Kommentar


                    Hmmm... Schwierige Sache...

                    Ich bin bei menen Tests eine Erkentnis schlauer geworden. -> Hoffe ich.

                    Also noch einen Versuch...

                    Unter Socket1 alle Optionen löschen. raw scheint in diesem Fall nicht gut zu sein.


                    Dann bitte mal das folgende Plugin ein paar Minuten laufen lassen und das PluginLog auf transmit und reciv überprüfen:

                    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);
                        $plugin_info{$plugname.'_debug_reciv'} = $bufhex;
                        
                        if ($bufhex eq "07F3"){
                            plugin_log($plugname,'reciv:' . $bufhex . 'ACK');
                        }else{
                            $bufhex =~ s/(.)/sprintf("0x%x ",ord($1))/eg;
                            plugin_log($plugname,'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);
                    }
                    Bitte einen Ausschnitt des PluginLog posten damit ich mir den Verlauf mal ansehn kann.
                    Gruss Patrik alias swiss

                    Kommentar


                      Alle optionen für socket1 gelöscht

                      Kabel dazwischen mal wieder von Ease Anschluss auf PC anschluss umverkabelt.

                      KWL Donnerstag_cycle30KWL Donnerstag_debug_transmit0x7 0xf0 0x0 0x69 0x0 0x16 0x7 0xf KWL Donnerstag_last1338491355.11131KWL Donnerstag_result
                      KWL Donnerstag_runtime0KWL Donnerstag_timeout_err0
                      Angehängte Dateien

                      Kommentar


                        Hallo

                        Sehr gut Lass dass mal ein paar Minuten weiter laufen. die Anfrage wird nur alle 30 sekunden gesendet. Wie bist du jetzt verbunden SubD oder Ease-Schnittstelle?
                        Gruss Patrik alias swiss

                        Kommentar


                          Sehr gut? ok?!

                          Wie geschrieben über sub-d

                          die Ease ist aber nicht angeschlossen

                          Kommentar


                            Ok.

                            Sehr gut... -> Endlich wieder jemand leidensfähiger, der sich an die nächste Testrunde wagt
                            Gruss Patrik alias swiss

                            Kommentar


                              datt ding muss halt auch mal wieder laufen-langsam wirds muffig.

                              Wie war nochmal der Trick Plugins zu stoppen-ohne zu löschen?
                              Leerzeile als erste Zeile, oder so?

                              Kommentar


                                einfach ein return; in die erste Zeile

                                PS: Was meint das log?
                                Gruss Patrik alias swiss

                                Kommentar

                                Lädt...
                                X