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

    #46
    Heute ist der eBus Adapter gekommen und man kann fleißig mitlesen. Ein paar Befehle der Steuerung konnte ich auch schon abgreifen aber noch nicht senden, hier hakt es irgendwie. Gibt es eine Alternative zu hterm ? Will einfach mal testen ob's an der Software liegt oder der Hardware.
    Steuerbefehle gesehen und verstanden und theoretisch auch reproduzierbar:
    Auto/Eco/Absenkung/Aus/Heizen
    Solltemperatur WW/Absenkung/Raum

    Auslesen klappt von Vorlauf, Datum, Uhrzeit, Außentemperatur ... Naja zumindest weiß ich wo es steht .

    Da es kein CRLF gibt dient hier HEX "AA" als Trennzeichen. Da ist aber auch im Ruhezustand ziemlich viel los auf dem Bus. Das sniffen der richtigen Pakete macht es leider nicht leichter.
    Am Ende ist das wohl mit einem Socket am saubersten, aber erstmal müssen die richtigen Telegramme ermittelt werden und das senden auf den eBus funktionieren.

    Also nochmal zum Schluss, Alternativen zu hterm ?

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

    Kommentar


      #47
      hterm ist da schon bei den vorderen dabei..
      Ich mache sowas mit socat ( dann delim=170 = 0xAA hilfreich ist) - weil die GUI-Tools verlassen einen da schnell - und (unter Windows mit den UDP-Tools von Alfred, hier in den Downloads), sonst eben nc oder socat selbst bzw. bei komplexerem einem kleinen Perl/PHP/Python/Bash - je nach Gusto - zum verstehen..

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

      Kommentar


        #48
        Ich such grad im IPS Forum nach Hilfe. Die Adapter sind leider nicht sonderlich verbreitet und Leute die sich damit auseinandersetzen noch viel weniger.

        Ich hänge also jetzt am status quo nur lesen zu können und das ist relativ unbefriedigend.

        Mittlerweile gibt es einiges an Doku zum Protokoll im Netz so dass ein passendes Plugin da nicht allzu fern scheint. Umso ärgerlicher ...
        Eilt zwar nicht wirklich, aber wenn der Ehrgeiz erstmal geweckt ist .... und das ist er
        Umgezogen? Ja! ... Fertig? Nein!
        Baustelle 2.0 !

        Kommentar


          #49
          Hallo zusammen,
          ich verfolge das hier gebannt, denn mein Heizungsregler soll ja im Winter zum Einsatz kommen! Und ich habe auch eine dieser klasse Wolf-Thermen (sind ja überall Testsieger) mit USB-Interface :-) übrigens hab ich auch Pufferspeicher, Solarkollektoren und Lüftungsanlage mit Wärmerückgewinnung von Wolf.
          Mein einziges Problem, sonst würde ich hier mitmachen: dank meinem §$%&-Dachbauer verlängert sich gerade eine Bauverzögerung von vorher 2,5 auf wahrscheinlich 4-5 Monate. Diese Probleme halten mich davon ab, voll bei euch mitzumischen, denn ich will wenigstens im Februar/März einziehen (frühere Planung: Oktober).
          Also macht mal Jungs, ich drücke die Daumen und bin schon jetzt ein dankbarer Abnehmer der Ergebnisse.
          VG
          Fry

          Kommentar


            #50
            Ich hab hier 3 Subs die ich zwar "irgendwie" von perl/php und Protokollbeschreibung portiert bekommen habe so dass sie mit einem simplem Hexwert gefüttert werden können und dann die Daten ausgeben. Ich benötige das für das eBus-Plugin. Bei Bits und Bytes zählen hörts bei mir aber wirklich auf.

            Das einzige schöne waren die "nibble" in der Protokollbeschreibung...das brachte mich auf andere Gedanken :P

            Jetzt geht es daran das Schreiben auf den eBus vorzubereiten und dazu muss ich den herrlichen Prozess ja wieder umkehren.

            Ich häng mal die Protokollbeschreibung und den Hinweg unten an. Es wird also aus einem bzw. zwei Bytes (HEX) ein Dezimalwert gemacht. Wenn wir irgendwann mal über KNX was auf den eBus schreiben wollen müssten wir das ganze ja umkehren. Aus der DATA2B müsste also noch eine 2BDATA gemacht werden

            Ist doch bestimmt gaaaaanz easy ?????

            Danke und Gruß
            Mirko

            value.pl
            Code:
            #use EBus;
            use warnings;
            use strict;
            
            print "Value 1: ";
            my $val1 = <STDIN>;
            chomp $val1;
            print "Value 2: ";
            my $val2 = <STDIN>;
            chomp $val2;
            
            print ("bcd: ".bcd($val1),"\n");
            print ("d1b: ".d1b($val1),"\n");
            print ("d1c: ".d1c($val1),"\n");
            print ("d2b: ".d2b($val1,$val2),"\n");
            print ("d2c: ".d2c($val1,$val2),"\n");
            
            ### Subs der Datenkonvertierung. 
            # Übergabe als "FF" und ausgabe als Dezimalzahl zur Weiterverarbeitung.
            # 
            
            ### DATA2C
            sub d2c {
            my $lb = $_[0];
            my $hb = $_[1];
            my $z = hex($hb)*256 + hex($lb);
            if (($z & 0x8000) == 0x8000) {
            my $y = -((~hex($hb) & 255)*16 + ((~hex($lb) & 255) >> 4 ) + ((((~hex($lb) & 255) & 15)+1)/16));
            }else{
            my $y = ((hex($hb)) *16) + ((hex ($lb)) >> 4 ) + (((hex($lb)) & 15) / 16)
            }
            }
            
            
            
            ### DATA1B
            sub d1b {
            if (((hex ($_[0])) & 0x80) == 0x80) {
            		my $y = -((~hex($_[0]) & 255) + 1);
            		return $y;
            	}
            	else {
            my $y = hex ($_[0]);
            return $y;
            }
            return;
            }
            #####
            
            
            
            ### DATA2B
            sub d2b {
            my $lb = $_[0];
            my $hb = $_[1];
            my $z = hex($hb)*256 + hex($lb);
            if (($z & 0x8000) == 0x8000) {
                            my $y = -((~hex($hb) & 255) + ((~hex($lb) & 255) + 1)/256);
            				return $y;
                    }
                    else {
            my $y = hex($hb) + ((hex($lb))/256);
            return $y;
            }
            return;
            }
            #####
            
            
            
            ### DATA1C
            sub d1c {
            my $y = hex ($_[0])/2;
            return $y;
            }
            #####
            
            
            
            ### BCD
            sub bcd {
                    my $z = $_[0];
                    my $high = hex($z) >> 4;
                    my $low  = hex($z) & 15;
                    return $high * 10 + $low;
            }
            ####

            P.S.: Mein eBus-Adapter ist gerade zur Überprüfung eingesendet, bislang konnte ich also noch nichts auf den Bus senden.
            Angehängte Dateien
            Umgezogen? Ja! ... Fertig? Nein!
            Baustelle 2.0 !

            Kommentar


              #51
              Hallo Mirko,

              Bleib bitte dran :-)

              Gestern hab mich mei eBus Adapter bestellt. Ich bin gespannt, was bald alles auf meinem Bus landet...

              Gruß Moritz

              Kommentar


                #52
                hilft das?

                ich möchte auch meine wolf therme anbinden, hab aber gerade keine zeit.
                ich hatte mal zwei links gefunden, die recht informativ sind.

                Anbindung WOLF Therme mittels eBus-Adapter und eBus-Modul

                eBus Telegramme auswerten / Heizung / Solar - Seite 5

                gruß
                andreas

                Kommentar


                  #53
                  Das sieht lustig aus Was war jetzt die Frage?

                  Ich meine das sollte auch mit pack/unpack teils etwas leserlicher gehen aber es führen ja bekanntlich immer viele Wege nach Rom; hab mich jetzt aber nicht im Detail ins Protokoll eingelesen..
                  Für Ferndiagnose hilfreich wären Beispielwerte, was rauskommen soll.

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

                  Kommentar


                    #54
                    O.K. Dann fangen wir mal bei DATA2C an

                    Eingabewert sind 2Bytes ($lb,$hb) und ausgabe wird dann $y (return fehlt grad).

                    Die Doku sagt:

                    $lb $hb -> $y

                    00 00 -> 0
                    00 01 -> 1/16
                    FF FF -> -1/16
                    FF F0 -> -1
                    80 00 -> -2048
                    80 01 -> -2047,9
                    7F FF -> 2047,9


                    Code:
                    ### DATA2C
                    sub d2c {
                    my $lb = $_[0];
                    my $hb = $_[1];
                    my $z = hex($hb)*256 + hex($lb);
                    if (($z & 0x8000) == 0x8000) {
                    my $y = -((~hex($hb) & 255)*16 + ((~hex($lb) & 255) >> 4 ) + ((((~hex($lb) & 255) & 15)+1)/16));
                    }else{
                    my $y = ((hex($hb)) *16) + ((hex ($lb)) >> 4 ) + (((hex($lb)) & 15) / 16)
                    }
                    }
                    Weiterhin: DATA2C contains in low nibble of lowbytes the post comma digits in 1/16. vgl. vorheriges pdf.

                    Das funktioniert soweit ja auch, aber nun soll das umgedreht werden. Also ich möchte z.B. den Eingaebwert 2047,9 in die sub schicken und hinten kommt dann 7F FF raus .

                    Ich weiß zwar was Nippel sind, aber bei nibble bin ich überfragt
                    Umgezogen? Ja! ... Fertig? Nein!
                    Baustelle 2.0 !

                    Kommentar


                      #55
                      Ein Nibble sind 4Bit, ich werd da leider nicht mehr heiss

                      Zitat von JuMi2006 Beitrag anzeigen
                      Also ich möchte z.B. den Eingaebwert 2047,9 in die sub schicken und hinten kommt dann 7F FF raus .
                      Ok.. Also eigentlich hatte ich die AW schon angefangen aber nach dieser Doku komme ich in keinem Fall für 2047,9 auf 0x7FFF sondern höchstens auf 0x07F6 oder 0x7FF9 (oder Endianess umgekehrt), noch umgekehrt mit d2c, irgendwas stimmt da nicht..

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

                      Kommentar


                        #56
                        Hallo Makki,

                        ich glaub ich gab den Fehler gefunden. Man müss das Array vertauschen. Ich tippe hier auf einen Fehler in der Doku.
                        • Der Wert setzt sich aus Lowbyte und Highbyte zusammen.
                        • Lt. Doku wir das LowByte zuerst übertragen, in unserem Falle also lb = 0x7F und hb = 0xFF *


                        Das passte jetzt weder bei DATA2B und DATA2C !!!
                        Da muss ich nochmal in die Telegramme sehen warum. Entweder sind die Beispielwerte der Doku murks oder es wird eben erst das Highbyte und dann das Lowbyte übertragen.

                        Vertausche ich nun als Lowbyte und Highbyte passt es

                        my $lb = $_[1];
                        my $hb = $_[0];

                        Jetzt passt auch die Ausgabe:

                        0x7FFF -> 2047.9375
                        0x7FF9 -> 2047.5625

                        Das letzte bisschen Quark kommt sicherlich von der Auflösung in 1/16.

                        Hier also nochmal die richtige Sub.
                        Code:
                        sub d2c {
                        my $lb = $_[1];
                        my $hb = $_[0];
                        my $z = hex($hb)*256 + hex($lb);
                        if (($z & 0x8000) == 0x8000) {
                        my $y = -((~hex($hb) & 255)*16 + ((~hex($lb) & 255) >> 4 ) + ((((~hex($lb) & 255) & 15)+1)/16));
                        }else{
                        my $y = ((hex($hb)) *16) + ((hex ($lb)) >> 4 ) + (((hex($lb)) & 15) / 16)
                        }
                        }
                        
                        
                        sub d2b {
                        my $lb = $_[1];
                        my $hb = $_[0];
                        my $z = hex($hb)*256 + hex($lb);
                        if (($z & 0x8000) == 0x8000) {
                                        my $y = -((~hex($hb) & 255) + ((~hex($lb) & 255) + 1)/256);
                        				return $y;
                                }
                                else {
                        my $y = hex($hb) + ((hex($lb))/256);
                        return $y;
                        }
                        return;
                        }
                        #####

                        *
                        "With all 16bit types (2-byte), the lowbyte is always transmitted first."
                        http://www.google.de/url?sa=t&rct=j&...DU0TK0wadrafcg Seite 8
                        Umgezogen? Ja! ... Fertig? Nein!
                        Baustelle 2.0 !

                        Kommentar


                          #57
                          Ist normales Zweierkomplement...

                          perl -e 'my $val = 2047.95; print unpack("H4", pack("n", ($val)*16)),"\n"'
                          7fff

                          perl -e 'my $val = 0; print unpack("H4", pack("n", ($val)*16)),"\n"'
                          0000

                          perl -e 'my $val = -2048; print unpack("H4", pack("n", ($val)*16)),"\n"'
                          8000

                          Kommentar


                            #58
                            Danke Robert, würde der "Hinweg" auch in so kurz gehen ?

                            Wenn euch das sol aus dem Ärmel fällt darf ich dann nochmal bitten?

                            Das hier in einfach und zurück:

                            Code:
                            sub bcd {
                                    my $z = $_[0];
                                    my $high = hex($z) >> 4;
                                    my $low  = hex($z) & 15;
                                    return $high * 10 + $low;
                            }
                            Code:
                            sub d1b {
                            if (((hex ($_[0])) & 0x80) == 0x80) {
                            		my $y = -((~hex($_[0]) & 255) + 1);
                            		return $y;
                            	}
                            	else {
                            my $y = hex ($_[0]);
                            return $y;
                            }
                            return;
                            }
                            Code:
                            sub d1c {
                            my $y = hex ($_[0])/2;
                            return $y;
                            }
                            Code:
                            sub d2b {
                            my $lb = $_[1];
                            my $hb = $_[0];
                            my $z = hex($hb)*256 + hex($lb);
                            if (($z & 0x8000) == 0x8000) {
                                            my $y = -((~hex($hb) & 255) + ((~hex($lb) & 255) + 1)/256);
                            				return $y;
                                    }
                                    else {
                            my $y = hex($hb) + ((hex($lb))/256);
                            return $y;
                            }
                            return;
                            }

                            Code:
                            sub d2c {
                            my $lb = $_[1];
                            my $hb = $_[0];
                            my $z = hex($hb)*256 + hex($lb);
                            if (($z & 0x8000) == 0x8000) {
                            my $y = -((~hex($hb) & 255)*16 + ((~hex($lb) & 255) >> 4 ) + ((((~hex($lb) & 255) & 15)+1)/16));
                            }else{
                            my $y = ((hex($hb)) *16) + ((hex ($lb)) >> 4 ) + (((hex($lb)) & 15) / 16)
                            }
                            }
                            Umgezogen? Ja! ... Fertig? Nein!
                            Baustelle 2.0 !

                            Kommentar


                              #59
                              Einer geht zum Wochenende noch:

                              perl -e 'my $low = "ff"; my $high = "7f"; print unpack("s",(pack("H4", $low.$high)))/16,"\n"'
                              2047.9375

                              den Rest schaffste schon selber ;-)

                              Kommentar


                                #60
                                Das klingt mir schlüssig, versuch das von Robert mal, ist richtig (es kommt trotzdem nicht das oben beschriebene raus), wenn nicht versuche ich es nochmal mit Bits-schieben..
                                Aber wiegesagt: dafür brauchts Soll/Ist-Beispiele, die o.g. ergeben keinen Sinn..

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

                                Kommentar

                                Lädt...
                                X