Table des matières
En voyage, les données GPS sont constamment modifiées. La saisie de ces données et, le cas échéant, l'actualisation d'autres paramètres qui en dépendent, doivent être réalisées ici au moyen de SmartHome sur HomeMatic ou RaspberryMatic.
On pourrait bien sûr déterminer en permanence l'emplacement et consulter ainsi les données météorologiques en fonction du lieu, mais cela générerait un trafic en ligne et une charge du processeur inutiles. C'est pourquoi le système se contente de vérifier les changements de position et, lorsqu'il détecte un changement de lieu, il détermine les données météorologiques en fonction du lieu actuel et actualise les données en conséquence.
Adaptation des données GPS pour comparaison
Comme les coordonnées GPS varient toujours sur les deux derniers chiffres de la latitude et de la longitude en raison de l'imprécision voulue par les prestataires de services GPS, même si l'on reste inchangé au même endroit, seuls quatre chiffres après la virgule sont pris en compte pour la comparaison. Un changement de lieu n'est donc détecté que si au moins le quatrième chiffre après la virgule change.
Complément de script (GPS_Data)
Les lignes de script suivantes sont ajoutées au ici script discuté GPS_Data sont ajoutés. Les lignes commençant par un point d'exclamation sont des commentaires. Les instructions WriteLine servent uniquement à contrôler la sortie et peuvent être supprimées.
Les nouvelles variables de type CHAINE DE CARACTERE doivent être créées :
- W_Lat_short_akt (Pour enregistrer la latitude - actuelle - réduite à quatre chiffres après la virgule)
- W_Lon_short_akt (Pour enregistrer la longitude - actuelle - réduite à quatre chiffres après la virgule)
- W_Lat_short_ancien (Pour l'enregistrement de la latitude - ancienne - réduite à quatre chiffres après la virgule)
- W_Lon_short_ancien (Pour enregistrer l'ancienne longitude, réduite à quatre chiffres après la virgule)
scénario
! Enregistrer les données géographiques raccourcies à 4 chiffres après la virgule (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) ;
! Comparaison entre l'ancien et le nouveau site
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) ;
! Composer l'URL avec les données GPS actuelles - l'AppID "... xxx .." doit être remplie avec son propre ID
var url = "https://api.openweathermap.org/geo/1.0/reverse?lat="#Latitude#"&lon="#Longitude#"&limit=5&appid=[xxxxxxxxxxxxxxxxxxxxx]" ;
WriteLine("nouvelle URL pour les nouvelles données géographiques");WriteLine(url) ;
! Envoi de la demande d'URL
var posValueStart;
var posValueEnd;
var pos;
données var ;
var posStart;
var posEnd; chaîne stderr ; chaîne sortie standard ;
system.Exec("wget -q -O – '"#url#"‚", &stdout, &stderr);
WriteLine(stdout);
! Extraire les données
! nom_ville
pos = 0 ;
posStart = 'nom" :"' ;
posEnd = '", "local_names' ;
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string city_name = stdout.Substr(posValueStart, posValueEnd) ;
WriteLine("nom_ville");WriteLine(nom_ville) ;
dom.GetObject("W_city_name").State(nom_ville) ;
! Code de pays
pos = 0 ;
posStart = 'pays" :"' ;
posEnd = '", "state' ;
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string country_code = stdout.Substr(posValueStart, posValueEnd) ;
WriteLine("code_pays");WriteLine(code_pays) ;
dom.GetObject("W_country_code").State(code_pays) ;
! Région
pos = 0 ;
posStart = 'état" :"' ;
posEnd = '"}]' ;
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string W_region = stdout.Substr(posValueStart, posValueEnd) ;
WriteLine("W_region");WriteLine(W_region) ;
dom.GetObject("W_region").State(W_region) ;
}
! La branche ELSE peut être supprimée et ne sert qu'à vérifier que le script a été exécuté jusqu'à la fin si l'emplacement n'a pas changé.
autre
{
WriteLine("Données égales") ;
}