Ankündigung

Einklappen
Keine Ankündigung bisher.

eibd groupwrite hex

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    eibd groupwrite hex

    Hi,
    hab nun ein Script gebastelt welches mir den Sonnenstand auf den Bus sendet um dann mit dem Linknx die Beschattung zusteuern.

    Leider bekomm ich nicht die richtige Werte ins Linknx...


    Code:
    #!/usr/bin/perl
    
    my ($lat, $lon, $elev) = (
        0.111111, # breitengrad in radians
        0.1111, # läengrad in radians
        511 / 1000 # Höhe über normalnull in meter 
        );
        
    use Astro::Coord::ECI;
    use Astro::Coord::ECI::Sun;
    use Astro::Coord::ECI::TLE;
    use Astro::Coord::ECI::Utils qw{rad2deg deg2rad};
    
    my $time = time ();
    my $loc = Astro::Coord::ECI->geodetic($lat, $lon, $elev);
    my $sun = Astro::Coord::ECI::Sun->universal($time);
    my ($azimuth, $elevation, $range) = $loc->azel($sun);
    
    @args = ("/usr/bin/groupwrite", "ip:127.0.0.1", "15/0/0", sprintf("%02X", sprintf("%.0f", rad2deg($elevation)/1.406)));
    system(@args) == 0 or die "system @args failed: $?";
    
    @args = ("/usr/bin/groupwrite", "ip:127.0.0.1", "15/0/1", sprintf("%02X", sprintf("%.0f", rad2deg($azimuth)/1.406)));
    system(@args) == 0 or die "system @args failed: $?";
    
    print "Azimuth: " . rad2deg($azimuth) . " Grad\nElevation: ". rad2deg($elevation)." Grad\n";
    Damit halbwegs der richtige Wert im Linknx auftaucht muss ich diese Rechung mit 1.406 machen.

    Kann jemand mir weiterhelfen wie ich die Daten so nach HEX umwandele dass die Werte richtig auf den Bus bzw Linknx gehen?

    Gruss,

    Chris

    #2
    du musst den winkel auf 8bit-integer umrechnen also durch 1,41... teilen (360/1,41... = 255). groupwrite weiss nichts von winkeln oder anderen DPT. Die DPT sind nur eine vereinbarung zwischen sender und empfänger und werden in keinster weise in den telegrammen codiert.

    Kommentar


      #3
      Zitat von SebastianFey Beitrag anzeigen
      du musst den winkel auf 8bit-integer umrechnen also durch 1,41... teilen (360/1,41... = 255). groupwrite weiss nichts von winkeln oder anderen DPT. Die DPT sind nur eine vereinbarung zwischen sender und empfänger und werden in keinster weise in den telegrammen codiert.
      ok danke! dann gehts also nicht besser wie das was ich jetzt gemacht habe mit dem teilen durch 1,406 bzw 1,41 dann.

      thx,

      Chris

      Kommentar

      Lädt...
      X