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

    #31
    Ich habs jetzt ehrlichgesagt nicht alles gelesen aber wennste mir sagst wo das mit der CRC steht und was rauskommen sollte geht sowas normalerweise flüssig von der Hand

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

    Kommentar


      #32
      Hallo Makki,

      hier mal ein paar Anhaltspunkte. Mein IT-Wissen hört bei expandierenden Bytes dann wirklich auf

      Wikipedia bestätigt das Generator-Polynom: x^8 + x^7 + x^4 + x^3 + x + 1
      http://en.wikipedia.org/wiki/EBUS_(serial_buses)

      Ein Code in was für einer Sprache auch immer findet sich hier:
      eBus CRC Berechnung nachvollziehen - Mikrocontroller.net

      Und just in diesem Moment hab ich folgendes sehr interessantes gefunden:

      PERL !!! -> /trunk/Software/eBusMonitor-Perl/ - ebus - eBus Adapter and Software to access eBus-Heating-Systems - Google Project Hosting

      Vor allem die EBusCRC.pm !

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

      Kommentar


        #33
        Dann ist doch alles da - auch wenns sehr "classish", also OO für mich bei sowas banalem eher umständlich/unverständlich, auf der anderen Seite aber mit einem Lookup-Array das man auch berechnen könnte - geschrieben ist, was mir daran nicht passt würde ich einem Plugin dann evtl. als "Anregung" mitgeben aber das ist nichts wirklich kriegsentscheidendes weil es führen immer viele Wege nach Rom und die meisten davon sind gut solange sie zum Ziel führen

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

        Kommentar


          #34
          @makki

          D.h. man könnte diese CRC auch berechnen statt des Arrays? Ich komme damit nämlich nie auf die Werte die die Checksum eigentlich haben sollte.

          Ich hab mir jetzt mal die EBus.pm integriert und das mit ein paar Beispielstrings durchgespielt:

          Code:
          use EBus;
          use warnings;
          use strict;
          
          #my $deinString = "0008B5040100"; #18
          #my $deinString = "70515014074100050017005A"; #0D
          my $deinString = "30505014086100088015080000"; #B2
          
          
          
          my $crc = new EBus();
          my $check = $crc->calcCrcExpanded($deinString);
          my $finalStr = $deinString.$check;
          
          my $crcfinal = uc(sprintf("%x", $check));
          print ($crcfinal,"\n");
          print ($check,"\n");
          Umgezogen? Ja! ... Fertig? Nein!
          Baustelle 2.0 !

          Kommentar


            #35
            An dem Array nörgelt nur rum wer ... ;-)

            Auch in PERL wird ein Lookup effizienter sein als 8 Schiebe- und XOR-Operationen. Das Ergebnis bleibt im übrigen gleich - egal ob mit Lookup oder on-demand gerechnet.

            Grüße
            Robert

            Kommentar


              #36
              Heißt das soviel wie: Das passt schon ?

              by the way ... mag hier jemand mal Aufklärungsarbeit betreiben und erklären was da so gemacht wird ?
              Umgezogen? Ja! ... Fertig? Nein!
              Baustelle 2.0 !

              Kommentar


                #37
                Es wird (praktischerweise binär) durch das Polynom dividiert - der "Rest" ist die CRC. Binär dividiert man durch Schiebe- und XOR-Operationen. Pro Byte 8x. Da man aber bei vorher bekannten Polynom (=Teiler) das Ergebnis dieser Teiloperation für die möglichen 256 Eingangswerte kennt kann man diese auch praktischerweise in einer Tabelle abspeichern.

                Ich durchschaue das Perl -Script gerade nicht - evtl. mal ohne "expanded"? Du hast ja eine hexadezimale Darstellung, also nur 4bit pro ASCII-Char, müsstest also zwei Chars zusammentüddeln. Da sind meine Perl-Kenntnisse nicht ausreichend was der wo konvertiert.

                Kommentar


                  #38
                  Also ich kapier es immer noch nicht ganz

                  Aber egal... man könnte einfach die perlfunktion pack verwenden und das gesammte Datenpaket in einen Binärstring umwandeln. Dann noch in Byte's zerteilen und darüber die crc (die funktion erschliesst sich mir immer noch nicht) bilden.

                  Für die Lookuptabelle müsste man ja eine Art Index bilden. Wie das gemacht wird, und ob das in perl viel effizienter ist als direkt die crc Summe zu berechenen weiss ich nicht.
                  Gruss Patrik alias swiss

                  Kommentar


                    #39
                    Mein Problem ist gerade dass die ganzen Berechnungen nicht mir den Beispielen ausm Netz übereinstimmen. Leider ist eservice-online nicht der schnellste im Versand und so warte ich immer noch auf produktive Tests.

                    Naja wäre ja zu schön wenn es schnell gehen würde aber für die Anbindung der Heizung ist es mir das Wert....wird bestimmt ein langes Thema hier
                    Umgezogen? Ja! ... Fertig? Nein!
                    Baustelle 2.0 !

                    Kommentar


                      #40
                      Ja, noch mal - weil ich denke dass du deinen HEX-String falsch der Funktion übergibts. Schätze!!!! mal dass dein String ein ASCII-String ist und die Funktion eben einen "Binärstring" wie von swiss gesagt erwartet. Denn die Routine greift sich einzelne Zeichen und ermittelt den ASCII-Wert (ord). d.h. aber auch dass bei dir aus z.B. 0x0A zwei Bytes, nämlich 48(dez) und 58(dez) werden, und eben NICHT 10(dez).

                      Kommentar


                        #41
                        Was fehlt denn um 0A oder 3F korrekt zu übergeben ? Ziel muss die primäre Eingabe als 2 stelliger Wert sein.

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

                        Kommentar


                          #42
                          Google "hex string perl"

                          The world is amazing: Perl: Convert HEX string into character string

                          Grüße
                          Robert

                          Kommentar


                            #43
                            Da wird unten auch der gebrauch der pack-funktion beschrieben

                            Code:
                            pack("H*","0A");
                            Sollte z.B. decimal 10 ergeben.
                            Gruss Patrik alias swiss

                            Kommentar


                              #44
                              Yes!
                              Neues Problem im comment ;-) - Das sollte aber lösbar sein. EDIT: erledigt mit %02x
                              Code:
                              use EBus;
                              use warnings;
                              use strict;
                              
                              #my $deinString = "70515014074100050017005A";
                              # Ausgabe sollte "0D" sein -> ist aber nur "0"
                              
                              my $deinString = "7051501407410005001A005A";
                              # Ausgabe sollte "F3" sein und ist "F3" ;) 
                              
                              $deinString =~ s/([a-fA-F0-9][a-fA-F0-9])/chr(hex($1))/eg;
                              
                              my $crc = new EBus();
                              #print $crc;
                              my $check = $crc->calcCrcExpanded($deinString);
                              my $finalStr = $deinString.$check;
                              
                              my $crcfinal = uc(sprintf("[COLOR="Red"]%02x[/COLOR]", $check));
                              print ($crcfinal,"\n"); ### CRC-Byte
                              print ($check,"\n");
                              Umgezogen? Ja! ... Fertig? Nein!
                              Baustelle 2.0 !

                              Kommentar


                                #45
                                Wie schon erläutert.. Ich könnte mir jetzt auch vorstellen, das man sich ein Ei drauf pellt und das Array nimmt, solange das nicht alle 500ms aufgerufen/genutzt wird..

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

                                Kommentar

                                Lädt...
                                X