Ankündigung

Einklappen
Keine Ankündigung bisher.

eBus->USB->Plugin->KNX

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

    #61
    Aktueller Stand ?

    Hi Mirko,

    ob Du bitte mal Deinen aktuellen Stand posten könntest. Mein eBus Adapter ist heute gekommen (danke den netten Nachbarn :-) und das wär schon genial, wenn ich heute Abend vielleicht schon was auslesen könnte.

    Vielleicht klappts ja. Danke jedenfalls!

    Gruß Moritz

    Kommentar


      #62
      Aktueller Stand ist dass ich das Wochenende mal richtig gefeiert habe und nichts weiter passiert ist .

      Mein eBus-Adapter wird gerade getauscht da er nicht gesendet hat (Hardwarefehler) und wird sicherlich erst morgen versendet. D.h. also vor Donnerstag Abend wird es bei mir nicht weitergehen und am Wochenende wieder nicht zu Hause

      Auslesen und senden kannst Du ja einfach erstmal mit hterm (2400 Baud).
      Senden kannst Du auch mit hterm (alles auf HEX umstellen). Für den Zeilenumbruch: Options -> Modify Newline at -> New -> Item name "AA" -> Line-End-Marker (HEX) "AA".

      Was für ein Gerät steht denn bei Dir? Für die CRC-Berechnung hab ich ein Perl-Script zusammenkopiert...poste ich später.

      Vielleicht hast Du ja Lust Dich mit dem Socket zu befassen? Für Mich hat aber erstmal Priorität das Protokoll zu entschlüsseln bzw. die richtigen Befehle zu sammeln. Von einem richtigen Plugin sind wir noch weit entfernt.
      Umgezogen? Ja! ... Fertig? Nein!
      Baustelle 2.0 !

      Kommentar


        #63
        Hört sich doch gut an

        Danke, das ist ein Anfang. Werde ich mal schauen, was ich am Wiregate rauskriege. Von daher brauche ich den Socket - andere PCs stehen zu weit weg...

        Ach ja, eine Wolf Gastherme.

        Gruß

        Kommentar


          #64
          Ich hab mir den eBus über Cat und Patchfeld direkt auf den Schreibtisch geholt ... sehr geil da liegt auch mein Hauptbedienteil seit einer Woche rum.

          Was mich jetzt mal interessieren würde wären die unterschiedlichen Geräte die angesprochen werden sollen. Daher mal die Bitte dass alle sich mal öffentlich mit Ihrem Gerät melden. Wenn dann sollten wir das Plugin so aufziehen dass es für Vaillant Wolf etcc. funktioniert und man die entsprechenden Parameter nur ändern muss. So einen richtigen Ansatz habe ich da allerdings noch nicht. Weiterhin wäre interessant auf welche Befehle der Fokus gesetzt werden soll (Betriebsmodus, Heizkurve, etc.). Ich fürchte auch pro hersteller und Modell noch unterschiedliche Befehlssätze (Therme, Sole-WP, Luft-WP, Öl).

          Also bitte mal Hersteller, Modell und Wünsche äußern ... und dann mitmachen !!!

          Hier mal ein Perl-Script für die Konsole und CRC-Berechnung. Dazu muss aber noch die EBus.pm von hier: / - ebus - eBus Adapter and Software to access eBus-Heating-Systems - Google Project Hosting nach /usr/lib/perl/5.10.0 kopiert werden. Das Projekt auf google lädt sowieso noch zum Tips finden ein.
          crc.pl
          Code:
          use EBus;
          use warnings;
          use strict;
          
          print "Enter eBus-Message: ";
          my $string = <STDIN>;
          chomp $string;
          #$deinString =~ s/([a-fA-F0-9][a-fA-F0-9])/chr(hex($1))/eg; ### geht!
          my $deinString = pack("H*","$string"); ### geht auch!
          
          my $crc = new EBus();
          my $check = $crc->calcCrcExpanded($deinString);
          
          my $crcfinal = uc(sprintf("%02x", $check));
          my $finalStr = $string.$crcfinal;
          
          print ("CRC-Byte = $crcfinal","\n"); ### CRC-Byte
          print ("Sendecode = $finalStr","\n"); ### Endausgabe
          Für das Umrechnen der Hex-Werte sind wir ja hier dran, aber mir fehlt im Moment ein Adapter um die Berechnungen zu verifizieren.
          Umgezogen? Ja! ... Fertig? Nein!
          Baustelle 2.0 !

          Kommentar


            #65
            Guten Abend,

            mein Adapter ist tatsächlich heute gekommen. Er hängt jetzt am Wiregate und spuckt fleissig irgendwelche Werte aus.
            Um mal zu testen was so übertragen wird, habe ich einfach mal das Perl Skript von LinuxKonnektor < EBus < TWiki verwendet. Nur das Device angepasst und das Schreiben in die DB mit einem print ersetzt.

            Jedenfalls kommen da Sachen bei rum wie:
            Code:
            SummeErtragH 32768 checkSum 9 ErtragTagL 32768 ErtragTagH 32768 Solarleistung 128 SummeErtragL 32768 service 5018 SummeErtragM 32768 _splitBytes 0 to 254 text 71fe50180e00800080008000800080008009 from 1131003080008000500158001002d8eaaf1fe0800080005331a0000002d1910
            oder:
            Code:
            checkSum 238 SolarPumpe 0 service 5017 KollektorTemp 32.1875 _splitBytes 0 to 254 text 71fe501710000103029b03ee from 113 WWSolarTemp 57.6875 unknown1 130715023094c660000005d0100008800aa307150230910130026025d0100
            Soweit für heute Abend - schauen wir die Tage mal wie wir den Socat zum laufen kriegen...

            Gruß

            Kommentar


              #66
              Hersteller: Wolf

              Modell: Gastherme CGB(-K)-20 mit Solarmodul

              Wünsche: erstmal will ich die aktuellen Werte auf dem Bus haben. Später wäre schön wenn man Warmwasserzeiten und Heizung nach Anwesendheit und Weckzeiten stellen könnte.

              Grüße

              Kommentar


                #67
                Bist du mit den sockets schon weitergekommen? Mein eBus Adapter ist mittlerweile zurück und via hterm (windows7) kann ich schon eine Menge an die Heizung schreiben:

                - Heizungsmodu (Eco,Auto,Ein,Aus)
                - WW-Modus (Ein,Aus,Auto)
                - Solltemperatur Raum
                - Absenktemperatur WW
                - Solltemperatur WW
                - min. Temperatur WW
                - WW-Speicherladung
                - Party-Modus
                - Heizkurve

                Damit sind eigentlich alle meine Wünsche erfüllt
                Jetzt fehlt mir nur noch ein stabiles Wiregate

                Macht es Sinn das Lesen und Schreiben auf den Bus in getrennte Plugins zu packen?

                Gruß Mirko
                Umgezogen? Ja! ... Fertig? Nein!
                Baustelle 2.0 !

                Kommentar


                  #68
                  Hi,

                  nicht wirklich. Es gab leider zu viele andere Dinge, die ich machen musste...

                  Gruß

                  Kommentar


                    #69
                    Ich muss nochmal nach Perl fragen, ich hab es jetzt ne Woche probiert aber das mit den Bytes raff ich einfach nicht ... da fehlen mir die großen Informatik Basics.

                    Beim Datentyp DATA1c hab ich den Code von Robert angewendet und komme auf schlüssige Ergebnisse:

                    Code:
                    print &d2c ("20","02"); ### lowbyte first, 0x20 0x02 entspricht 34 °C
                    print "\n";
                    print &c2d ("50"); ### 50 °C gibt 0x20 0x03 aus
                    print "\n";
                    
                    ### DATA2c ###
                    
                    ## from eBus
                    sub d2c{
                    my $high = $_[1];
                    my $low = $_[0];
                    return unpack("s",(pack("H4", $low.$high)))/16;
                    #7fff#2047.9375###weiteres Beispiel
                    }
                    
                    ## to eBus 
                    sub c2d{
                    my $val = $_[0];
                    my $temp_hex = unpack("H4", pack("n", ($val)*16));
                    # change lowbyte/highbyte -> lowbyte first
                    return substr($temp_hex,2,4).substr($temp_hex,0,2);
                    #2047,9#7fff###weiteres Beispiel
                    }
                    Ehrlich gesagt verstehe ich aber immernoch nicht was da vor sich geht. Vielleicht hilft mir jemand Stück für Stück durch.

                    Die nächste wichtige Funktion wäre DATA1b:
                    Die Doku sagt dass es einen Wertebereich von -128 bis 127 gibt mit folgenden Beispielen:
                    0x00 = 0
                    0x01 = 1
                    0x7f = 127
                    0x81 = -127
                    0x80 = 0

                    Zur Berechnung gibt es in Perl schon die wilde Formel:
                    Code:
                    sub d1b {
                    if (((hex ($_[0])) & 0x80) == 0x80) {
                    		my $y = -((~hex($_[0]) & 255) + 1);
                    		return $y;
                    	}
                    	else {
                    my $y = hex ($_[0]);
                    return $y;
                    }
                    return;
                    }
                    Das geht doch bestimmt auch kürzer ? Vor allem der Weg zurück ist wieder interessant. Also aus dem Integer "25" z.B. wieder 0x19 zu machen.

                    Besten Dank voraus
                    Mirko
                    Umgezogen? Ja! ... Fertig? Nein!
                    Baustelle 2.0 !

                    Kommentar


                      #70
                      pack
                      unpack

                      Schau dir mal die En/Decode der DPT's im wiregated.pl an, da wird exakt das gemacht (DPT5 vs DPT6 z.B.)

                      Edit: Im Kern könnte man dafür auch einfach den en/decode von DPT6 verwenden, ist dasselbe..

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

                      Kommentar


                        #71
                        Der decode_dpt5 klappt ja super

                        Code:
                        ## from eBus
                        sub d1b{ #1byte signed 
                            my $val = hex(shift);
                            return $val > 127 ? $val-256 : $val;
                        }
                        
                        ## to eBus
                        sub b1d{
                        
                        }
                        aber einen encode_dpt6 hab ich nicht gefunden ... oh mann
                        Umgezogen? Ja! ... Fertig? Nein!
                        Baustelle 2.0 !

                        Kommentar


                          #72
                          encode_dpt6 gibts auch nicht, ist (wie das meiste) ein Einzeiler in knx_write:

                          Code:
                                    when (/^6/)              { $bytes = pack ("CCc", 0, $apci, $value); }
                          Also in deinem Fall
                          Code:
                          my $Wert = 15;
                          my $byte = pack("c", $Wert);
                          Das kleine "c" sagt signed char: pack - perldoc.perl.org

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

                          Kommentar


                            #73
                            Das hatte ich schon probiert, aber bei mir bleibt die Ausgabe leer:

                            Code:
                            my $Wert = "15"; ### my $Wert = 15; auch
                            my $byte = pack("c", $Wert);
                            print $byte;
                            Gruß Mirko
                            Umgezogen? Ja! ... Fertig? Nein!
                            Baustelle 2.0 !

                            Kommentar


                              #74
                              Naja, 15 (shift in) war kein gutes Beispiel, weil es kein anzeigbares Zeichen ist.. 65 gibt ein grosses A aber darum gehts ja nicht:
                              printf("%X", $Wert);

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

                              Kommentar


                                #75
                                Ich werd noch blöde, ich hab mich wirklich bemüht und einiges ausprobiert
                                aber:

                                Code:
                                &b1d(xx);
                                
                                sub b1d{
                                    my $val = (shift);
                                    $val = int($val);
                                    return printf("%X", $val);
                                }
                                bringt mir bei

                                xx = 127 -> 7F1
                                xx = -127 -> FFFFFF811

                                Richtig wären da 7F und 81 ...

                                Gruß Mirko

                                P.S.: Wenigstens hab ich jetzt dynamische Subroutinen erstellen können
                                Umgezogen? Ja! ... Fertig? Nein!
                                Baustelle 2.0 !

                                Kommentar

                                Lädt...
                                X