Vai al contenuto

SmartHome: modifiche ai dati GPS

Momento della lettura 2 minuti

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");
}

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

it_ITItalian
We've detected you might be speaking a different language. Do you want to change to:
en_US English
de_DE German
en_US English
fr_FR French
sv_SE Swedish
es_ES Spanish
pt_PT Portuguese
it_IT Italian
nl_NL Dutch
nb_NO Norwegian
fi Finnish
da_DK Danish
cs_CZ Czech
hu_HU Hungarian
el Greek
ru_RU Russian
tr_TR Turkish
ja Japanese
lt_LT Lithuanian
lv Latvian
sl_SI Slovenian
sk_SK Slovak
Close and do not switch language