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

    Autotools

    Kann jemand den Anhang bitte testen, ob der so funktioniert.

    Code:
    # unzip ebusd_test.zip 
    # cd ebusd_test/
    # aclocal
    # autoheader
    # autoconf
    # automake
    --- wenn bis hierher ohne Fehler, dann sollte der Rest auch funktionieren. 
    # ./configure 
    # make
    EDIT: eventuell in configure.ac von AC_PREREQ([2.69]) auf Eure Version ändern

    Kommentar


      ausprobiert

      läuft soweit bis aclocal

      aclocal bringt bei mir command not found

      hab aber null ahnung was das bewirkt = eventuell mach ich irgendeinen fehler

      gruß
      andreas

      Kommentar


        Läuft, für WireGate-Besitzer ist ggf. noch ein:

        Code:
        apt-get install gcc make automake
        notwendig.

        EDIT: AC_PREREQ([2.61])
        Umgezogen? Ja! ... Fertig? Nein!
        Baustelle 2.0 !

        Kommentar


          bisher bekomme ich aufm Ubuntu und Wiregate noch

          Code:
          configure.ac:1: error: Autoconf version 2.69 or higher is required
          configure.ac:1: the top level
          autom4te: /usr/bin/m4 failed with exit status: 63
          aclocal: autom4te failed with exit status: 63
          Ich schau mal welche Versionen es noch gibt...

          Kommentar


            @Jumi
            jetzt hab ich Dein Edit mit autoconf 2.61 gesehen

            Kommentar


              Wenn das make durch ist, genügt ein make install bzw. make uninstall (eventuell als root)

              Das ganze wird dabei nach /usr/local/bin installiert.

              Kommentar


                autoconf 2.61

                wo bekomm ich autoconf 2.61 her und wo muß ich damit tun?

                gruß
                andreas

                Kommentar


                  mit
                  Code:
                  [B]AC_PREREQ([2.61])[/B]
                  läuft alles durch - Wiregate und Ubuntu.

                  Bevor ich nach /usr/local/bin schreibe, hoffe ich mal darauf, dass uns Makki noch das Debian Paket Zeugs gibt...

                  Gruß und DANKE

                  Kommentar


                    Zitat von Anders Beitrag anzeigen
                    wo bekomm ich autoconf 2.61 her und wo muß ich damit tun?

                    gruß
                    andreas
                    Du musst am besten build-essential und automake installieren. Welches System?

                    Kommentar


                      @Anders. Es muss nicht genau diese Version sein. Es geht auch eine größere.

                      EDIT: Die aktuelle Version ist nun im SVN.

                      Kommentar


                        So, ich hab das Plugin mal ein wenig optimiert. Ausführungszeiten liegen hier bei unter 2 Sekunden mit 10 Werten die abgefragt werden.
                        Senden geht auch. Ich denke mal das ist recht selbsterklärend. Das ist hier eher ein proof ... Fry, magst Du was dazu sagen? Mein Perl ist ja eher Spaghetti - funktioniert aber und ein guter Beweis dass das so simpel ist dass es in den Daemon gehört . Da kann man sicherlich noch deutlich was optimieren und sehen/lernen was für Funktionen fehlen. Die Werte aus @gets/@sets sind alles Werte die ohne Schmerz auch in der config stehen und daraus geparst werden können.

                        Gruß

                        Code:
                        #return; 
                        use warnings;
                        use strict;
                        
                        ### Pfad zum ebus_send incl. Parameter ###
                        my $ebus_send = "/root/ebus/tools/ebus_send -a 00 -r 5 -s /dev/usbserial-AEVO0GRK";
                        
                        $plugin_info{$plugname.'_cycle'} = 60;
                        
                        ### Konfiguration "get" ###
                        my @gets;
                        push @gets, { name => "eBus_AT",			telegramm => "08B509030D0600",	data => "decode_d2c", databytes => "1,2",	multi => "1",	ga => "0/5/200", dpt => 9};
                        push @gets, { name => "eBus_HK_VL_Soll",	telegramm => "15B509030D0500",	data => "decode_d2c", databytes => "1,2",	multi => "1",	ga => "0/5/202", dpt => 9};
                        push @gets, { name => "Modus",				telegramm => "15B509030D9700",	data => "integer",    databytes => "1",		multi => "1",	ga => "0/5/207", dpt => 9};
                        push @gets, { name => "Wochentag",			telegramm => "08B509030D2A00",	data => "integer",    databytes => "1",		multi => "1",	ga => "0/5/206", dpt => 9};
                        push @gets, { name => "eBus_HK_VL_Ist",		telegramm => "08B509030D0300",	data => "decode_d2c", databytes => "1,2",	multi => "1",	ga => "0/5/203", dpt => 9};
                        push @gets, { name => "eBus_Quelle_VL",		telegramm => "08B509030D0F00",	data => "decode_d2c", databytes => "1,2",	multi => "1",	ga => "0/5/204", dpt => 9};
                        push @gets, { name => "eBus_Quelle_RL",		telegramm => "08B509030D0800",	data => "decode_d2c", databytes => "1,2",	multi => "1",	ga => "0/5/205", dpt => 9};
                        push @gets, { name => "Heizkurve",			telegramm => "50B509030D3500",	data => "decode_d1b", databytes => "1",		multi => "0.01",	ga => "", dpt => 9};
                        push @gets, { name => "Energieertrag",		telegramm => "15B509030D8600",	data => "decode_d2b", databytes => "1,2",	multi => "256",	ga => "", dpt => 9};
                        push @gets, { name => "Raum Soll",			telegramm => "50B509030D3200",	data => "decode_d1c", databytes => "1",		multi => "1",	ga => "", dpt => 9};
                        
                        
                        ### Konfiguration "set" ###
                        my @sets;
                        push @sets, { name => "WW_mode",	GA => "0/5/120", telegramm => "25B509040E3B00",	data => "integer",		multi => "1",	post => ""};
                        push @sets, { name => "HK_mode",	GA => "0/5/110", telegramm => "50B509040E2B00",	data => "integer",		multi => "1",	post => ""};
                        push @sets, { name => "Speiche",	GA => "0/5/123", telegramm => "FEB5050206",		data => "integer",		multi => "1",	post => ""};
                        push @sets, { name => "Heizkurve",	GA => "0/5/131", telegramm => "50B509050E3500",	data => "encode_d1b",	multi => "100",	post => "00"};
                        push @sets, { name => "Raumtemp",	GA => "0/5/101", telegramm => "50B509040E3200",	data => "encode_d1b",	multi => "2",	post => ""};
                        
                        ### ENDE Konfiguration ###
                        
                        ###############
                        ### M A I N ###
                        ###############
                        
                        ### Plugin Subscribe ###
                        foreach my $set(@sets){
                        $plugin_subscribe{$set->{GA}}{$plugname} = 1;
                        }
                        
                        ### Senden per KNX-Telegramm / Empfangen zyklisch ###
                        foreach my $set(@sets){
                        if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $set->{GA} && defined $msg{'value'})   # Auf eintreffendes KNX-Telegramm reagiern + anhand der GA filtern
                        {
                        ### Senden ###
                        my $var = $msg{'value'};
                        $var *= $set->{multi};
                        my $subname = $set->{data}; 
                        my $subref = \&$subname;    
                        plugin_log($plugname, "Befehlsgruppe: $set->{name} Value: $var");
                        my $send = &$subref($var);
                        my $command = $set->{telegramm}.$send.$set->{post};
                        plugin_log($plugname, "Befehl: $command Wert:$send");
                        my $sended = qx ($ebus_send $command);
                        return $send;
                        }}
                        
                        ### Empfangen ###
                        foreach my $get (@gets) {
                        my $value = qx ($ebus_send $get->{telegramm});
                        #Fehlerbehandlung#
                        if ($value eq "") {return "Error"}
                        chomp $value;
                        plugin_log($plugname,"Vom Bus gelesen: $value");
                        my $subname = $get->{data}; 
                        my $subref = \&$subname; 
                        my @arr = split(/ /, $value);
                        my @data_arr = split(/,/, $get->{databytes});
                        plugin_log($plugname,"Datenbytes zur Auswertung: @data_arr[0],@data_arr[1]");
                        plugin_log($plugname,"Inhalt Datenbytes: @arr[@data_arr[0]+1],@arr[@data_arr[1]+1]");
                        my $val = &$subref(@arr[@data_arr[0]+1],@arr[@data_arr[1]+1]);
                        $val *= $get->{multi};
                        knx_write ($get->{ga},$val,$get->{dpt});
                        plugin_log($plugname,"Codierung: $get->{data}");
                        plugin_log($plugname,"Name und Wert: $get->{name} $val");
                        }
                        
                        return;
                        
                        ############################################
                        ### D A T E N K O N V E R T I E R U N G ####
                        ############################################
                        
                        sub integer{
                        my $val = (sprintf "%02d",$_[0]); 
                        return $val;
                        }
                        
                        ### BCD ###
                        #FIX ME !!!!!
                        
                        #sub decode_bcd {
                        #    return (unpack "H*", pack "C*",hex($_[0]));
                        #	#unpack "H*", $_[0]; ####?????
                        #}
                        
                        sub decode_bcd {
                                my $z = $_[0];
                                my $high = hex($z) >> 4;
                                my $low  = hex($z) & 15;
                                return $high * 10 + $low;
                        }
                        
                        sub encode_bcd {
                        	return pack 'H*', join '', $_[0];
                        }
                        
                        ### DATA1b ###
                        
                        sub decode_d1b{         #1byte signed 
                            my $val = hex(shift);
                            return $val > 127 ? $val-256 : $val;
                        }
                        
                        sub encode_d1b {        #### F I X M E !!!!!
                            my $y = shift;
                            $y *= 256;
                            $y = $y & 0xffff if ($y < 0);
                            my $hb = int $y/256;
                            return (sprintf("%0.2X", $hb));
                        }
                        
                        
                        ### DATA1c ###
                        
                        sub decode_d1c {
                        my $y = hex ($_[0])/2;
                        return $y;
                        }
                        
                        sub encode_d1c {
                            return sprintf "%x",(($_[0])*2);
                        }
                        
                        
                        ### DATA2b ###
                        
                        sub decode_d2b { 
                        	return unpack("s", pack("s", hex($_[1].$_[0]))) / 256; 
                        }
                        
                        sub encode_d2b {
                        	my ($hb, $lb) = unpack("H[2]H[2]", pack("s", $_[0] * 256));
                        	return $lb.$hb;
                        }
                        
                        
                        ### DATA2c ###
                        
                        sub decode_d2c{
                        my $high = $_[1];
                        my $low = $_[0];
                        return unpack("s",(pack("H4", $low.$high)))/16;
                        }
                        
                        sub encode_d2c{
                        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);
                        }
                        Umgezogen? Ja! ... Fertig? Nein!
                        Baustelle 2.0 !

                        Kommentar


                          Zitat von JuMi2006 Beitrag anzeigen
                          Fry, magst Du was dazu sagen? Mein Perl ist ja eher Spaghetti - funktioniert aber und ein guter Beweis dass das so simpel ist dass es in den Daemon gehört .
                          Auf die Schnelle (bin grad aufm Sprung und immer noch auf der anderen Seite der Welt):

                          1. Super und danke!

                          2. Dass dein Script in Perl und als WG-Plugin simpel ist, beweist eher, dass dies der richtige/einfachere Weg ist, als dass es in C und als eigenständiger Daemon oder Teil des ebusd auch so simpel wäre.

                          VG, Fry

                          Kommentar


                            Also nochmal ... wo soll welche Kommunikationsschicht liegen?
                            Das ebus_send läuft ja erstmal richtig gut.

                            Wollen wir mal sowas wie ein Pflichtenheft erstellen?
                            Umgezogen? Ja! ... Fertig? Nein!
                            Baustelle 2.0 !

                            Kommentar


                              Off Topic
                              =======
                              Zur Aufzeichnung der ebus-Signale soll in Zukunft ein Raspberry Pi zum Einsatz kommen. Von der alten Solarsteuerung sind noch zwei PT100 unterm Dach verbaut.
                              Wie kann ich diese Fühler am einfachsten in so eine Aufzeichnungssystem bringen? Was brauche ich alles dazu?

                              Kommentar


                                Zitat von kleinklausi Beitrag anzeigen
                                Bevor ich nach /usr/local/bin schreibe, hoffe ich mal darauf, dass uns Makki noch das Debian Paket Zeugs gibt...
                                Ey, gebt mir noch 24-48h -sieht gut aus

                                OT+ : @yuhu: da wirste schon etwas mehr details liefern müssen, der RPi ist für mich erstmal nur ein kurzer Hype - denn es gibt seit langem besser geeignete Geräte mit weniger Stromverbrauch usw. - die meisten sogar mit Gehäuse für unter 50€ - wenn man denn "basteln" will.. Die OpenWRT-TOH sagt es
                                Also, das geht sicherlich und was mir an Deiner Lösung gefällt, ist das ich die Phantasie habe, das man es auch für XYZ (cross-)kompilieren kann (daher mein gequängel zu auto*)
                                Aber das das in jedem Einzelfall von Erfahrung mit der Platform abhängt, sollte auch klar sein

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

                                Kommentar

                                Lädt...
                                X