Tabla de contenido
Los datos del GPS cambian constantemente mientras viaja. Registrarlos y, si es necesario, actualizar otros parámetros que dependen de ellos se debe lograr aquí usando SmartHome en HomeMatic o RaspberryMatic.
Por supuesto, podría determinar continuamente la ubicación y así acceder siempre a los datos meteorológicos en función de la ubicación, pero esto generaría tráfico en línea y carga del procesador innecesarios. Por lo tanto, sólo se comprueba un cambio de posición y sólo cuando se detecta un cambio de ubicación se determinan los datos meteorológicos basándose en la ubicación actual y se actualizan los datos en consecuencia.
Ajuste de datos GPS para comparación.
Dado que las coordenadas GPS siempre fluctúan en los dos últimos dígitos de la información de longitud y latitud debido a la inexactitud intencionada de los proveedores de servicios GPS, incluso si permanece sin cambios en el mismo lugar, solo se tienen en cuenta cuatro decimales para la comparación. Un cambio de ubicación sólo se reconoce cuando cambia al menos el cuarto decimal.
Adición de guión (Datos_GPS)
Las siguientes líneas de script son: aquí guión discutido Datos_GPS adjunto. Las líneas que comienzan con un signo de exclamación representan comentarios. Las declaraciones WriteLine solo se usan para el control de salida y se pueden eliminar.
Se deben crear como nuevas variables de tipo STRING las siguientes:
- W_Lat_short_akt (Para guardar la latitud geográfica actual acortada a cuatro decimales)
- W_Lon_short_akt (Para guardar la longitud geográfica actual acortada a cuatro decimales)
- W_Lat_short_alt (Para salvar la antigua latitud geográfica acortada a cuatro decimales)
- W_Lon_short_alt (Para guardar la antigua longitud geográfica acortada a cuatro decimales)
guion
! Guarde los geodatos acortados a 4 decimales (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);
! Comparación de ubicaciones actuales y antiguas
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);
si ((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);
! Componiendo la URL con las actuales. Datos de GPS: el AppID “.. xxx ..” debe completarse con su propia identificación
var url = “https://api.openweathermap.org/geo/1.0/reverse?lat=”#Latitude#”&lon=”#Longitude#”&limit=5&appid=[xxxxxxxxxxxxxxxxxxxxxxxx]”;
WriteLine(“nueva URL para nuevos datos geográficos”);WriteLine(url);
! Envío de la solicitud de URL
var posValueStart;
var posValueEnd;
pos var;
datos variables;
var posInicio;
var posEnd; cadena estándar; salida estándar de cadena;
system.Exec(“wget -q -O – ‘“#url#“‚”, &stdout, &stderr);
WriteLine(salida estándar);
! Extrayendo los datos
! nombre_ciudad
posición = 0;
posInicio = 'nombre“:“‚;
posEnd = '","nombres_locales';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
cadena nombre_ciudad = stdout.Substr(posValueStart, posValueEnd);
WriteLine(“nombre_ciudad”);WriteLine(nombre_ciudad);
dom.GetObject(“W_nombre_ciudad”).State(nombre_ciudad);
! Código del país
posición = 0;
posInicio = 'país":"';
posEnd = '","estado';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
cadena country_code = stdout.Substr(posValueStart, posValueEnd);
WriteLine(“código_país”);WriteLine(código_país);
dom.GetObject(“W_código_país”).Estado(código_país);
! región
posición = 0;
posInicio = 'estado“:“‚;
posEnd = '"}]';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
cadena W_region = stdout.Substr(posValueStart, posValueEnd);
WriteLine(“W_region”);WriteLine(W_region);
dom.GetObject(“W_region”).State(W_region);
}
! La rama ELSE se puede omitir y solo se usa para verificar que el script se haya ejecutado hasta el final si la ubicación no ha cambiado.
demás
{
WriteLine(“Datos iguales”);
}