Índice
Os dados do GPS mudam constantemente durante a viagem. O registro destes e, se necessário, a atualização de outros parâmetros que deles dependem devem ser feitos aqui usando SmartHome no HomeMatic ou RaspberryMatic.
É claro que você poderia determinar continuamente a localização e, assim, sempre acessar os dados meteorológicos com base na localização, mas isso geraria tráfego on-line desnecessário e carga do processador. Portanto, apenas uma mudança na posição é verificada e somente quando uma mudança na localização é detectada os dados meteorológicos são determinados com base na localização atual e os dados são atualizados adequadamente.
Ajuste de dados GPS para comparação
Como as coordenadas GPS sempre flutuam nos dois últimos dígitos das informações de longitude e latitude devido à imprecisão pretendida pelos provedores de serviços GPS, mesmo que você permaneça inalterado no mesmo local, apenas quatro casas decimais são levadas em consideração para comparação. Uma mudança de localização só é reconhecida quando pelo menos a quarta casa decimal muda.
Adição de script (GPS_Dados)
As seguintes linhas de script são: aqui roteiro discutido GPS_Dados apegado. As linhas que começam com um ponto de exclamação representam comentários. As instruções WriteLine são usadas apenas para controle de saída e podem ser excluídas.
O seguinte deve ser criado como novas variáveis do tipo STRING:
- W_Lat_short_akt (Para salvar a latitude geográfica atual reduzida para quatro casas decimais)
- W_Lon_short_akt (Para salvar o comprimento geográfico atual reduzido para quatro casas decimais)
- W_Lat_short_alt (Para salvar a antiga latitude geográfica reduzida para quatro casas decimais)
- W_Lon_short_alt (Para salvar o antigo comprimento geográfico reduzido para quatro casas decimais)
roteiro
! Salve geodados reduzidos para 4 casas decimais (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);
! Comparação de locais atuais e antigos
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);
! Compondo a URL com as atuais. Dados GPS – o AppID “.. xxx ..” deve ser preenchido com seu próprio ID
var url = “https://api.openweathermap.org/geo/1.0/reverse?lat=”#Latitude#”&lon=”#Longitude#”&limit=5&appid=[xxxxxxxxxxxxxxxxxxxxxxxx]”;
WriteLine(“nova URL para novos geodados”);WriteLine(url);
! Enviando a solicitação de URL
var posValueStart;
var posValueEnd;
var pos;
var dados;
var posStart;
var posEnd; string stderr; string stdout;
system.Exec(“wget -q -O – ‘“#url#“‚”, &stdout, &stderr);
WriteLine(stdout);
! Extraindo os dados
! Cidade_nome
posição = 0;
posStart = 'nome“:“‚;
posEnd = '","nomes_locais';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string nome_cidade = stdout.Substr(posValueStart, posValueEnd);
WriteLine(“nome_cidade”);WriteLine(nome_cidade);
dom.GetObject(“W_nome_cidade”).Estado(nome_cidade);
! Código do país
posição = 0;
posStart = 'país":"';
posEnd = '","estado';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string country_code = stdout.Substr(posValueStart, posValueEnd);
WriteLine(“código_país”);WriteLine(código_país);
dom.GetObject(“W_código_país”).State(código_país);
! região
posição = 0;
posStart = 'estado“:“‚;
posEnd = '"}]';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string W_region = stdout.Substr(posValueStart, posValueEnd);
WriteLine(“W_região”);WriteLine(W_região);
dom.GetObject(“W_region”).State(W_region);
}
! A ramificação ELSE pode ser omitida e só é usada para verificar se o script foi executado até o fim se o local não tiver mudado
outro
{
WriteLine(“Dados iguais”);
}