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

    #61
    Hallo lio

    Sehr seltsames Ergebniss Irgend etwas scheint mit der Komunikation nicht zu stimmen. Steht in debug_reciv das gleiche? Hast du das Bedienteil EASE noch dran oder ist das Ergebnis schon ohne?

    PS: Ich habe in der Zwischenzeit mal das skript etwas angepasst. Lade nochmal die geänderte Version aus dem vorherigen Beitrag. Da gab es irgendwie probleme mit der Variabel.
    Gruss Patrik alias swiss

    Kommentar


      #62
      Hi Patrick,

      ja das Panel ist noch dran-war auch gestern nicht mehr möglich das abzuklemmen.

      Ich hab' Dir ja die Screenshots geschickt-leider ist das das einzige was ich sehen kann. Wie sehe ich was in "debug_reciv" steht? Auf der Konsole? ???- Kenne mich da leider nicht aus- da musst D mich lotsen.

      Grüße,
      Lio

      Kommentar


        #63
        Hier auch nochmal die offensichtlich aktuelle Version des Protkolls:

        http://www.see-solutions.de/sonstige...g_ComfoAir.pdf


        und hier auch nochmal die aktvitäten zum Thema seltsames Verhalten mit dem Bedeinteil EASE Beitrag von 18.01.2012 11:01:20 :

        Steuerung der ComfoAir über PC - HaustechnikDialog

        Grüße,
        Lio

        Kommentar


          #64
          Hallo lio

          Das Ergebniss sollte unterhalb der Pluginübersicht auftauchen. Ist eine zweispaltige Tabelle. Dort sollte irgend wo PLUGINNAME_debug_reciv und PLUGINNAME_debug_transmit auftauchen.

          Was steht dort?


          @makki: Ich glaube dir gerne, dass die Ansteuerung in C einfacher wäre aber C kann ich überhaubt nicht, desshalb der Versuch in Perl. Das hat den Vorteil, dass jeder es selber leicht installieren und einrichten kann. Sobald du ein Daemon hast wie der russound daemon ist es wieder nur noch "invite only". Das bekommt die breite masse nicht an's laufen

          Wenn du nun print vorschlägst... welches ist der Filehandle? $socket[$socknum] oder <$fh>?
          Gruss Patrik alias swiss

          Kommentar


            #65
            Ich habe jetzt endlich die Checksummenberechnung verstanden. Nun mit dem neuen Dokument komme ich sogar auf das richtige Ergebnis *freu* Also sollte ich die automatische Berechnung in Perl doch noch selber hinbekommen.

            Die Frage jetzt ist, wie man print mit soket richtig einsetzt. Ich habe bis jetzt nur mit syswrite gearbeitet

            Versuche mal das neue... (Sind immer geringfügige Änderungen bis die Komunikation steht!)

            Code:
            # Plugin zur Ansteuerung einer Zender ComfoAir
            # Version 0.0 29.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 = 120; # 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'} = 300; 
            # 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{
                    plugin_log($plugname,'reciv:' . $bufhex);
                }
            }else{
            
                my $checksum = "16";
                my $data = "006900";
                    
                my $paket = pack("H*","07F0" . $data . $checksum . "070F");
                my $return_value2 = command_senden($paket);
                return;
            }
            
            sub command_senden{
                my $command = $_[0];
                $plugin_info{$plugname.'_debug_transmit'} = $command;
                plugin_log($plugname,'transmit:' . $command);
                syswrite($socket[$socknum], $command);
            }
            Nun werden die Daten auch in's Plugin_Log geschrieben. Dann lassen sich die Daten besser auswerten.
            Gruss Patrik alias swiss

            Kommentar


              #66
              hier der neue Code

              so, nun weiss ich auch was Du meinst mit debug und result!

              wie kann man die Einträge aus der Liste löschen?-Da steht verdammt viel aus den Versuchen mit SML- Stromzähler drinnen

              Kommentar


                #67
                So gehts mit syswrite natürlich auch, lassen wir das mit dem printf
                Wenn mit der checksumme noch hakt, einfach melden..

                @lio: PluginInfo_Cleanup

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

                Kommentar


                  #68
                  ööömmmm.... Danke. Aber da ist wohl was arg daneben. Kann sein, dass es mit dem angeschlossenen Bedienteil zu tun hat.

                  Versuch es doch bitte mal ohne angeschlossenes Bedienteil.

                  Und hänge bitte mal einen Ausschnitt des Plugin_log an. (Ist als Link unter der Liste der installierten Plugins zu finden. -> Plugin_Logdatei)

                  So kann man sehen wann was von der ComfoAir gesendet wurde.


                  @makki: Danke für die Unterstützung. Kann gut sein, dass ich die nochmal in Anspruch nehmen muss
                  Gruss Patrik alias swiss

                  Kommentar


                    #69

                    und Log Eintrag:

                    2012-05-29 21:41:05.123,KWL Test,transmit:ði


                    stimmen die Socketeinstellungen? habe ich ein paar threats zuvor getestet


                    Die Bedieneinheit ist an rx und tx abgeklemmt

                    Kommentar


                      #70
                      Hier mal die nächste Version. Dieses mal mit Checksummenberechnung. Das einzige was hier bei der Berechnung noch nicht berücksichtigt wird, ist die Besonderheit mit 0x07 im Datenbereich. Da muss ich nochmal über die Bücher...

                      Code:
                      # Plugin zur Ansteuerung einer Zender ComfoAir
                      # Version 0.01 29.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 = 120; # 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'} = 300; 
                      # 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{
                              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";
                          my @hex  = map { hex($_) } ($datasum =~ /(..)/g);
                          
                          
                          foreach (@hex) {
                              $checksum +=  ($_);
                          }
                      
                          $checksum = sprintf "%x\n" , $checksum;
                          $checksum = substr($checksum,length($checksum)-3,2);
                          my $command = pack("H*","07F0" . $data . $checksum . "070F");
                          
                          $plugin_info{$plugname.'_debug_transmit'} = $command;
                          plugin_log($plugname,'transmit:' . $command);
                          syswrite($socket[$socknum], $command);
                      }
                      PS: Achtung! Kleine änderungen vorgenommen. Bitte nochmals aktualisieren.
                      Gruss Patrik alias swiss

                      Kommentar


                        #71
                        2012-05-29 21:56:08.268,KWL Anlage,transmit:ði


                        -mach's nicht so spannend

                        Kommentar


                          #72
                          Meine Testergebnisse lassen noch etwas auf sich warten.
                          Habe heute abend versucht das Kabel anzuschliessen, aber irgendwie
                          hab ich da noch ein Problem auf dem Layer 1

                          Sobald die physikalische Verbindung funktioniert, kann ich dann das Plugin testen,
                          eingerichtet ist es schon auf dem WG.

                          luigi

                          Kommentar


                            #73
                            Hallo lio

                            Hmm... Ob die Soketeinstellungen stimmen bin ich mir nicht sicher. Im Pluginlog sollte aber neben dem transmit auch ein reciv auftauchen sonst funktioniert da warscheinlich schon soketseitig was nicht.

                            reciv sollte die Rohdaten enthalten, die von der ComfoAir als Antwort zurückgesendet werden. Wenn da nix auftaucht, harzt es irgend wo bei der Kommunikation.
                            Gruss Patrik alias swiss

                            Kommentar


                              #74
                              Kurze Zwischenfrage zur Sicherheit...

                              hast du Rx und Tx ausgekreutzt? -> Rx vom WG mit Tx der KWL?

                              Wenn ja...

                              @makki: Kann es sein, dass die Daten falsch an den socket übergeben werden? Wiso taucht im Log (auch bei mir) immer nur ði auf?
                              Gruss Patrik alias swiss

                              Kommentar


                                #75
                                F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 0 S root 28467 1 0 80 0 - 1075 - May28 ? 00:00:00 /usr/bin/socat /dev/usbserial-1-4, udp-datagram:192.168.2.255:50011,bind=:50012,reuseaddr ,broadcast


                                Hier nochmal die Socketeinstellung



                                rx und tx habe ich auf dem Bedienteil abgeklemmt-da das funktionierte, gehe ich davon aus, dass es auch so richtig war und ja, es war ur KWL hin gekreuzt.

                                Hast Du auf Haustechnikdialo (link im post von heute morgen) zwecks Kommunikationsstörung mal nachgelesen?

                                Aber da es ja ab ist- sollten wir zuerst den Socket überprüfen
                                Angehängte Dateien

                                Kommentar

                                Lädt...
                                X