hab mal was gegoogelt und dabei folgendes Java Script gefunden:

http://lexikon.astronomie.info/zeitg...ng/source.html

Code:
<!-- KOMMENTAR ZUM SCRIPT 
     Wir freuen uns selbstverstaendlich wenn Sie sich
     fuer die Details unseres kleinen Skripts interessieren. 
     Es bringt jedoch nichts, wenn Sie dieses Script auf Ihre Seite kopieren. 
     Ein einfacher Link beweist genau so gut, dass Sie das Script gefunden haben.
     Kopieren Sie deshalb diese Script nicht auf Ihre 'private' Hompage.
     Roland Brodbeck/Arnold Barmettler, Verein astroinfo, www.astronomie.info, Version 2008
-->
<SCRIPT LANGUAGE="JavaScript">
pi = 3.1415926536;
RAD = pi/180.0; // Umrechnungsfaktor von Grad nach Radians
h   = -(50.0/60.0)*RAD; // Höhe des Sonnenmittelpunkts bei Aufgang: Radius+Refraktion


function sqr(x)
{
	// Quadrat von x
	return x*x;
}

function sonnendeklination(T)
{
	// Deklination der Sonne in Radians
	// Formula 2008 by Arnold(at)Barmettler.com, fit to 20 years of average declinations (2008-2017)
	return 0.409526325277017*Math.sin(0.0169060504029192*(T-80.0856919827619)); 
}

function zeitdifferenz(Deklination)
{
	// Dauer des halben Tagbogens in Stunden: Zeit von Sonnenaufgang (Höhe h) bis zum höchsten Stand im Süden
	return 12.0*Math.acos((Math.sin(h) - Math.sin(B)*Math.sin(Deklination)) / (Math.cos(B)*Math.cos(Deklination)))/pi;
}

function zeitgleichung(T)
{
	// Differenz zwischen wahrer und mittlerer Sonnenzeit
	// formula 2008 by Arnold(at)Barmettler.com, fit to 20 years of average equation of time (2008-2017)
	return -0.170869921174742*Math.sin(0.0336997028793971 * T + 0.465419984181394) - 0.129890681040717*Math.sin(0.0178674832556871*T - 0.167936777524864);
}

function aufgang(T)
{
	DK = sonnendeklination(T);
	return 12 - zeitdifferenz(DK) - zeitgleichung(T);
}

function untergang(T)
{
	DK = sonnendeklination(T);
	return 12 + zeitdifferenz(DK) - zeitgleichung(T);
}



// Berechnung von Azimut und Höhe des Sonnenmittelpunkts über Horizont

function AzimutHoehe(B, T, ZeitSeitMittag)
{
	// Azimut und Höhe der Sonne (ohne Refraktion)
 	DK = sonnendeklination(T);
	cosdec = Math.cos(DK);
	sindec = Math.sin(DK);
	lha = ZeitSeitMittag*(1.0027379-1./365.25)*15*RAD; // Stundenwinkel seit wahrem Mittag in Radians
	// 1.0027379: Faktor für Sternzeitkorrektur, 1./365.25: Fortschreiten der Rektaszension der Sonne in einem Tag in Grad
	coslha = Math.cos(lha);
	sinlha = Math.sin(lha);
	coslat = Math.cos(B);
	sinlat = Math.sin(B);
	N = -cosdec * sinlha;
	D = sindec * coslat - cosdec * coslha * sinlat;
	var coor = new Object();
	coor.azimut = Math.atan2(N, D); if (coor.azimut<0) coor.azimut += 2*pi; // Azimut. Norden=0, Osten=pi/2, Westen=3/4pi
	coor.hoehe  = Math.asin( sindec * sinlat + cosdec * coslha * coslat ); // Höhe des Sonnenmittelpunkts
	return coor;
}

function Refraktion(hoehe)
{
	// Näherungslösung für die Refraktion für ein Objekt bei Höhe hoehe über mathematischem Horizont
	// Refraktion beträgt bei Sonnenaufgang 34 Bogenminuten = 0.56667°
	// Falls die Höhe der Sonne nicht genauer als auf 0.5° gewünscht ist, kann diese Funktion ignoriert werden
	P=1013.25; // Luftdruck der Standard-Atmosphäre in hPa (=mbar)
	T=15; // Temperatur der Standard-Atmosphäre in °C 
	R = 0;
	if (hoehe>=15*RAD) R = 0.00452*RAD*P/Math.tan(hoehe)/(273+T); // über 15° - einfachere Formel
	else if (hoehe>-1*RAD) R = RAD*P*(0.1594+0.0196*hoehe+0.00002*sqr(hoehe))/((273+T)*(1+0.505*hoehe+0.0845*sqr(hoehe)));
	return R; // Refraktion in Radians
}


function compute(form)
{
	Laenge     = eval(form.Laenge.value.replace(/,/,'.'));
	Breite     = eval(form.Breite.value.replace(/,/,'.'));
	Zone       = eval(form.Zone.value.replace(/,/,'.'));
	T          = eval(form.T.value.replace(/,/,'.'));
	B = Breite*RAD; // geogr. Breite in Radians
	
	// Berechnung von Sonnenauf- und -Untergang
	Aufgang    = aufgang(T); // Sonnenaufgang bei 0° Länge
	Untergang  = untergang(T);// Sonnenuntergang bei 0° Länge
	
	Aufgang    = Aufgang   - Laenge /15.0 + Zone; // Sonnenaufgang bei gesuchter Länge und Zeitzone in Stunden
	Untergang  = Untergang - Laenge /15.0 + Zone; // Sonnenuntergang bei gesuchter Länge und Zeitzone in Stunden
	
	form.Aufgang.value = Aufgang;
	form.Untergang.value = Untergang;
	form.Zeitgleichung.value = 60.0*zeitgleichung(T);
	form.Deklination.value = sonnendeklination(T)/RAD;


	// Ab hier Berechnung von Azimut und Höhe zu gegebener Zeit
	Zeit       = eval(form.Zeit.value); // Zeit in Stunden (Dezimal-Minuten!); nur für die Berechnung von Azimut und Höhe

	ZeitSeitMittag = Zeit+Laenge/15.0-Zone -12 +zeitgleichung(T);  // Zeit in Stunden seit Sonne im Süden
	coor = AzimutHoehe(B, T, ZeitSeitMittag); // Azimut/Höhe über mathematischem Horizont des Sonnenmittelpunkts
	
	form.Azimut.value = coor.azimut/RAD; // Azimut in Grad: 0°-Norden, 90°-Osten, 180°-Süden, 270°-Westen
	form.Hoehe.value  = (coor.hoehe+Refraktion(coor.hoehe))/RAD; // Höhe mit Refraktionskorrektur in Grad
}

function init(form)
{	
	// Startwerte
	form.Laenge.value = "10.0";	
	form.Breite.value = "50.0";
	form.Zone.value ="1";	
	form.T.value ="1";
	
	form.Zeit.value ="8"; // Zeit nur für die Berechnung von Aziumt und Höhe verwendet
	
	// Ausgabewerte zurücksetzen	
	form.Aufgang.value ="0";
	form.Untergang.value ="0";
	form.Zeitgleichung.value = "0";
	form.Deklination.value ="0";		
	
	form.Azimut.value ="0";		
	form.Hoehe.value ="0";		
}
müsste man dann nur noch in Deine gewünschte Programmiersprache
adaptieren und gut ist.
10° wären aber ne Menge Holz ... es sollte sich doch schon mal ein
Kompas finden lassen um das Ding gescheit einzunorden.
Was bei der Sensorvariante auch noch ist; was machste wenn sich
n Vogel auf das Ding hockt oder ggf noch drauf kackt?