Sommario
I dati GPS cambiano costantemente durante il viaggio. La registrazione di questi ed eventualmente l'aggiornamento di altri parametri che dipendono da essi può essere effettuata qui utilizzando SmartHome su HomeMatic o RaspberryMatic.
Naturalmente si potrebbe determinare continuamente la posizione e quindi accedere sempre ai dati meteorologici in base alla posizione, ma ciò genererebbe traffico online e carico del processore non necessari. Pertanto, viene controllato solo un cambiamento di posizione e solo quando viene rilevato un cambiamento di posizione, i dati meteorologici vengono determinati in base alla posizione corrente e i dati aggiornati di conseguenza.
Regolazione dei dati GPS per il confronto
Poiché le coordinate GPS variano sempre nelle ultime due cifre delle informazioni di longitudine e latitudine a causa dell'imprecisione voluta dai fornitori di servizi GPS, anche se si rimane invariati nella stessa posizione, per il confronto vengono prese in considerazione solo quattro cifre decimali. Un cambio di ubicazione viene riconosciuto solo quando cambia almeno la quarta cifra decimale.
Aggiunta di script (Dati_GPS)
Le seguenti righe di script sono: Qui sceneggiatura discussa Dati_GPS allegato. Le righe che iniziano con un punto esclamativo rappresentano commenti. Le istruzioni WriteLine vengono utilizzate solo per il controllo dell'output e possono essere eliminate.
Come nuove variabili di tipo STRING devono essere create:
- W_Lat_short_akt (Per salvare la latitudine geografica attuale abbreviata a quattro cifre decimali)
- W_Lon_short_akt (Per salvare la lunghezza geografica attuale abbreviata a quattro cifre decimali)
- W_Lat_short_alt (Per salvare la vecchia latitudine geografica abbreviata a quattro cifre decimali)
- W_Lon_short_alt (Per salvare la vecchia lunghezza geografica abbreviata a quattro cifre decimali)
sceneggiatura
! Salva i dati geografici abbreviati a 4 cifre decimali (ToString(4)).
var lat_short_akt = lat.ToString(4);
WriteLine("lat_short_akt");WriteLine(lat_short_akt);
dom.GetObject('W_Lat_short_akt').State(lat_short_akt);
var lon_short_akt = lon.ToString(4);
WriteLine(“lon_short”);WriteLine(lon_short_akt);
dom.GetObject('W_Lon_short_akt').State(lon_short_akt);
! Confronto tra luoghi attuali e vecchi
var W_lat_short_alt = dom.GetObject(“W_Lat_short_alt”).Value();WriteLine(W_lat_short_alt);
var W_lon_short_alt = dom.GetObject(“W_Lon_short_alt”).Value();WriteLine(W_lon_short_alt);
if ((lat_short_akt <> W_lat_short_alt) && (lon_short_akt <> W_lon_short_alt))
{
dom.GetObject(“W_Lat_short_alt”).State(lat_short_akt);
dom.GetObject(“W_Lon_short_alt”).State(lon_short_akt);
! Comporre l'URL con quelli attuali. Dati GPS – l'AppID “.. xxx ..” deve essere compilato con il proprio ID
var url = “https://api.openweathermap.org/geo/1.0/reverse?lat=”#Latitude#”&lon=”#Longitude#”&limit=5&appid=[xxxxxxxxxxxxxxxxxxxxxxxx]”;
WriteLine("nuovo URL per nuovi geodati");WriteLine(url);
! Invio della richiesta URL
var posValueStart;
var posValueEnd;
var pos;
dati var;
var posStart;
var posEnd; stringa standard; stringa stdout;
system.Exec(“wget -q -O – ‘“#url#“‚”, &stdout, &stderr);
WriteLine(stdout);
! Estrazione dei dati
! Nome della città
posizione = 0;
posStart = 'nome“:“‚;
posEnd = '","local_names';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string city_name = stdout.Substr(posValueStart, posValueEnd);
WriteLine(“nome_città”);WriteLine(nome_città);
dom.GetObject(“W_nome_città”).State(nome_città);
! Prefisso internazionale
posizione = 0;
posStart = 'paese":"';
posEnd = '","stato';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string country_code = stdout.Substr(posValueStart, posValueEnd);
WriteLine(“codice_paese”);WriteLine(codice_paese);
dom.GetObject(“W_codice_paese”).State(codice_paese);
! regione
posizione = 0;
posStart = 'stato“:“‚;
posEnd = '"}]';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string W_region = stdout.Substr(posValueStart, posValueEnd);
WriteLine("W_regione");WriteLine(W_regione);
dom.GetObject(“W_region”).State(W_region);
}
! Il ramo ELSE può essere omesso e viene utilizzato solo per verificare che lo script sia stato eseguito fino alla fine se la posizione non è cambiata
altro
{
WriteLine("dati uguali");
}