Skocz do zawartości

r.ziomber

Społeczność Astropolis
  • Postów

    2 751
  • Dołączył

  • Ostatnia wizyta

Odpowiedzi opublikowane przez r.ziomber

  1. Wybaczcie za off-topic, ale moze sie komus przyda do sterowania zdalnym obserwatorium. Obsluga Dynamic DNS dla https://freedns.42.pl w Pythonie. Nieco zmodyfikowalem skrypt z tej strony. Moze obslugiwac wlasna domene.

    '''
    crontab -e
    
    @reboot sleep 80 && python3 /home/pi/freedns-dyndns.py &
    @hourly python3 /home/pi/freedns-dyndns.py &
    '''
    import xmlrpc.client, getopt, sys, socket
    
    params = \
    {       "user"          : "",
            "password"      : "",
            "zone"          : "domain.com",
            "name"          : "subdomain",
            "oldaddress"    : "*",
            "ttl"           : "120",
            "updatereverse" : "0",
    }
    
    server = "https://freedns.42.pl/xmlrpc.php"
    
    def usage():
            print("""
    freedns-dyndns.py [-h|--help                      ] 
                      [-u|--user       <user>         ] 
                      [-p|--password   <password>     ] 
                      [-z|--zone       <zone>         ] 
                      [-r|--recordname <record name>  ] 
                      [-o|--oldaddress <old address>  ] 
                      [-n|--newaddress <new address>  ] 
                      [-t|--ttl        <ttl>          ] 
                      [--updatereverse <1|0>          ]
                      [-s|--server     <xmlrpc server>] 
    
    Inserts can be performed by leaving "oldaddress" empty.
    Deletes can be performed by leaving "newaddress" empty.
    Updates are performed by giving both old and new addresses.
    Old address can be wildcard '*'.
    New address can be "<dynamic>", server will use IP you're connecting from.
    Be careful about proxies with this!
    
                    """)
    
    def main():
            global server, params
            opts, args = getopt.getopt(sys.argv[1:], "hu:p:z:r:o:n:s:t:", ["help", "user=", "password=","zone=", "recordname=", "oldaddress=", "newaddress=", "server=", "ttl="])
            for o, a in opts:
                    if o in ("-u", "--user"):
                            params["user"] = a
                    elif o in ("-p", "--password"):
                            params["password"] = a
                    elif o in ("-z", "--zone"):
                            params["zone"] = a
                    elif o in ("-r", "--recordname"):
                            params["name"] = a
                    elif o in ("-o", "--oldaddress"):
                            params["oldaddress"] = a
                    elif o in ("-n", "--newaddress"):
                            params["newaddress"] = a
                    elif o in ("-s", "--server"):
                            server = a
                    elif o in ("-t", "--ttl"):
                            params["ttl"] = a
                    elif o in ("--updatereverse"):
                            params["updatereverse"] = a
                    else:
                            usage()
                            sys.exit()
    
            # print("p: %s" % params)
            from urllib.request import urlopen
            my_ip = urlopen("http://ip.42.pl/raw").read().decode('utf-8')
            addr1 = socket.gethostbyname(params["name"]+'.'+params["zone"])
            if (my_ip != addr1):
                    params["newaddress"] = my_ip
                    client = xmlrpc.client.Server(server)
                    try:
                      print(("result: %s" % client.xname.updateArecord(params)))
                    except xmlrpc.client.Fault as e:
                      print(e)
    
    if __name__ == "__main__":
            main()

     

    Oryginal https://freedns.42.pl/freedns-dyndns.py po prostu mi nie dzialal w trybie freedns-dyndns.py --newaddress <dynamic>, wiec go zmodyfikowalem.

    • Lubię 1
  2. Ja bym w ogole nie zasilal Arduino z 12V. Tam jest stabilizator napiecia, ktory bedzie sie przez to grzal. Stosuje tanie plytki na LM2596, ktore od razu ustawiam na 5V lub 3.3V i podaje to napiecie na stosowne piny.

    DSLR mozna chyba bezposrednio podlaczyc pod Raspberry, bo w koncu nie pobiera zasilania z portu USB. To sluzy jedynie do sterowania urzadzeniem.

    Synchronizujesz zegar z GPS? :)

    • Lubię 1
  3. 30 minut temu, coy_coyote napisał:

    wszystkie kalkulatory pokazują zgodność czasu z tą funkcją, natomiast drugi algorytm proponowany przez @majer śpieszy o niecałą godzinę. Będę go jeszcze testował posiłkując się teorią z podlinkowanego sposobu. Proszę nie szukajcie przyczyny, muszę do tego dojść sam :flirt:

    Nie wolno zagladac Ci do ramki ponizej ;-)

    Spoiler

    Czas UTC+1h? Specjalnie uzylem funkcji timegm(), by liczyc czas w UTC.

     

    • Lubię 1
  4. 43 minuty temu, coy_coyote napisał:

    Wrzuciłem Twój kod tak na szybko do DEV C++ ale wyrzuca mi błąd " [Error] 'timegm' was not declared in this scope" pomimo że zaimportowałem dodatkowo <time.h>.

    Przed chwila sprawdzilem, moj kod kompiluje sie poprzez g++ sideral.cpp

    Nawet nie trzeba flag dla linkera.

    Zwroc uwage na linijke

      sideral = sideral - (double)24 * (floor)(sideral / 24);

    usuwam tu "pelne obroty nieba" i pozostawiam reszte. Brakuje tego w Twoim kodzie.

    PS. Gdy pisze proste rzeczy nawet nie uruchamiam ich u siebie na komputerze. Wiele krotkich algorytmow testowalem na "kompilatorach online". Z drugiej strony specjalnie ich nie polecam, bo po zawieszeniu sie przegladarki (czasem nawet z ich powodu) tracilem swoja prace.

    https://www.onlinegdb.com/online_c++_compiler

    http://cpp.sh

    PPS. DevC++ jest taki sobie. Code::Blocks jest lepszy, a i jego pokonuje Qt Creator czy Eclipse C++.

    • Lubię 1
  5. Licz roznice dni w UNIX time. Stosowne "kalendarze" powinny juz byc zaimplementowane w jezyku programowania.

    4 godziny temu, Behlur_Olderys napisał:

    dodatkowo, co to są za liczby:

    280.16?

    360.9856235?

    Przeliczenie rektascensji na miare katowa?

    Napisalem na szybko i troche niestarannie w C++. Wynik podany jest w minutach. Rezultat sprawdzalem na http://tycho.usno.navy.mil/sidereal.html

    #include <iostream>
    #include <cmath>
    
    double daysSinceJan12000();
    double siderealTime(double);
    
    main()
    {
      double longitude = 20;
      std::cout << "Days since 1/1/2000 12:00: " << daysSinceJan12000() << "\nSideral time: " << siderealTime(longitude) << " minutes\n";
    }
    
    double daysSinceJan12000()
    {
      time_t rawtime;
      struct tm* timeinfo;
    
      int year = 2000, month = 1, day = 1, hour = 12, min = 0, sec = 0;
    
      time(&rawtime);
      timeinfo = localtime(&rawtime);
    
      timeinfo->tm_year = year - 1900;
      timeinfo->tm_mon = month - 1; // months since January - [0,11]
      timeinfo->tm_mday = day;      // day of the month - [1,31]
      timeinfo->tm_hour = hour;     // hours since midnight - [0,23]
      timeinfo->tm_min = min;       // minutes after the hour - [0,59]
      timeinfo->tm_sec = sec;       // seconds after the minute - [0,59]
    
      unsigned long date = timegm(timeinfo);
      double days = (double)(time(NULL) - date) / (double)(24 * 60 * 60);
      return days;
    }
    
    double siderealTime(double lng)
    {
      double sideral = (double)18.697374558 + (double)24.06570982441908 * (double)daysSinceJan12000() + (double)12*lng/180.0;
      sideral = sideral - (double)24 * (floor)(sideral / 24);
      return 60*sideral;
    }
    • Lubię 2
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.