Avançar para o conteúdo

SmartHome – alterações de dados GPS

Tempo de leitura 2 minutos

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

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

pt_PTPortuguese