Monitor - google maps - trafic - gps

Forum dédié aux interfaces personnalisables : Custom Pages, Reacticz, Domoboard...
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Monitor - google maps - trafic - gps

Message par vil1driver »

ajout de la page google trafic (en statique swipe oblige)

coordonnées et zoom à renseigner dans la page trafic.html

actualisation toutes les 10 minutes ou par click sur la carte.

Image
Dernière modification par vil1driver le 16 janv. 2016, 16:55, modifié 4 fois.
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
lestatcrog
Messages : 38
Inscription : 19 janv. 2016, 20:47
Localisation : Niort

Monitor - page trafic (google maps)

Message par lestatcrog »

Salut,

Je suis nouveau sur le site mais je regarde ton post quasi tous les jours pour voir les nouveautés. Bravo pour le boulot !!! J'utilise d'ailleurs ton dashboard chez moi.
J'ai réalisé un script lua afin d'interroger icloud pour connaitre ma géolocalisation après avoir vu la carte du traffic sur monitor.
Plusieurs buts :
- lancer la recherche quand je pars du boulot pour ouvrir (dans un rayon de 500m) le portail quand j'arrive (ça sert à rien mais c'est rigolo :lol: )
- Suivre mes enfants sur le retour de l'école et me dire qu'ils sont bien rentrés par notification (ce n'est pas bien de suivre ces enfants :? )
- Et Peut être d'autres idées vont me venir après ...

jusqu'à la pas trop de soucis enfin presque ...

j'ai modifié la page traffic.html afin de rajouter un marker dessus en fonction d'une position en variable (en dure pour le moment : var MyPosition = {lat: Latitude, lng: -Longitude};) après j'ai créé un device virtuelle text me donnant mes coordonnées mais je ne sais pas comment les pousser dans le InitMap de la page ?
Comme c'est une frame static je ne dois pas pouvoir avoir d'intéraction avec la carte ? libellé du marker, zomm sur la carte ? c'est bien ça ?

Peux tu m'aider au moins pour passer ma variable après un refresh (à la main) quand je souhaite voir la position évoluer devrait suffire?

D'avance merci
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: custom page

Message par vil1driver »

Code : Tout sélectionner

function initMap() {

  var map = new google.maps.Map(document.getElementById('map'), {
	disableDefaultUI: true,
    zoom: 14,
    center: {lat: 48.0761279, lng: -1.7084094}
  });

  var trafficLayer = new google.maps.TrafficLayer();
  trafficLayer.setMap(map);
  
  var marker = new google.maps.Marker({
    position: {lat: 48.0761279, lng: -1.7084094},
    map: map,
	icon: 'http://google-maps-icons.googlecode.com/files/car.png',
    title: 'miss'
  });
  marker.setMap(map);
  
  setInterval(initMap, 600000);
  
}
https://developers.google.com/maps/docu ... pt/markers
par statique j'entends, que l'interaction est désactivée.. mais si tu veux tu peux passer
dans trafic.html
disableDefaultUI à false
et dans trafic.css
pointer-events à auto
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
lestatcrog
Messages : 38
Inscription : 19 janv. 2016, 20:47
Localisation : Niort

Re: custom page

Message par lestatcrog »

Bonjour vil1driver,
Merci pour tes réponses.
- Pour la mise en place des Markers j'avais réussi.
- Pour le coté statique et refresh, je vais tester tout ça se soir
Ma problématique se porte sur la récupération de ma position avec la fonction Ajax. J'ai voulu faire comme toi dans ta page logs.html
En gros IDX 21 --> Device text avec dans « Data » = "{lat: 48.0761279, lng: -1.7084094}"

et le code suivant :

Code : Tout sélectionner

    $.ajax({
        url: $.domoticzurl + "/json.htm?type=devices&rid=21"
    }).done(function(data) {
        var arrData = [];
        $.each(data.result, function(i, item) {
            var x = [item['Data']];
            arrData.push(x);
        });
        var Myposition = arrData[1][1];
        console.log(Myposition);
    });
Mais je pense que j'ai pas trop compris le fonctionnement et ça marche pas :(
Je suis en train de regarder sur le net comment on code cette fonction Ajax et surtout la partie récupération de la donnée "Data" dans Json. (Fonctionnement différent que JQ en lua utilisé pour mon script)
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: custom page

Message par vil1driver »

avec les coordonnées en variables ou en capteur texte stockées sous cette forme "48.0761279,-1.7084094" ça donne ça

Code : Tout sélectionner

function initMap() {

// define map area

  var map = new google.maps.Map(document.getElementById('map'), {
	disableDefaultUI: true,
    zoom: 14,
    center: {lat: 48.0761279, lng: -1.7084094}
  });

// define traffic layer
  var trafficLayer = new google.maps.TrafficLayer();
  trafficLayer.setMap(map);
  

  
  	// get olivier gps from variable
	$.ajax({
            url: [$.domoticzurl,'/json.htm?type=command&param=getuservariable&idx=38'].join('')
        }).done(function(data) {
		
			if (typeof data.result !== 'undefined') {
		 
				var olivier = new google.maps.LatLng(parseFloat(data.result[0].Value.split(',')[0]),parseFloat(data.result[0].Value.split(',')[1]));
				console.log('olivier: '+olivier);
				
				// define olivier marker  
				var marker_olivier = new google.maps.Marker({
					position: olivier,
					map: map,
					icon: 'http://maps.google.com/mapfiles/ms/micons/green-dot.png',
					title: 'olivier'
				});
				// set marker
				marker_olivier.setMap(map);
			}
		});	
		
	// get delphine gps from text sensor
	$.ajax({
            url: [$.domoticzurl,'/json.htm?type=devices&rid=21'].join('')
        }).done(function(data) {
		
			if (typeof data.result !== 'undefined') {
		 
				var delphine= new google.maps.LatLng(parseFloat(data.result[0].Data.split(',')[0]),parseFloat(data.result[0].Data.split(',')[1]));
				console.log('delphine: '+delphine);
				
				// define delphine marker
				var marker_delphine = new google.maps.Marker({
					position: delphine,
					map: map,
					icon: 'http://maps.google.com/mapfiles/ms/micons/pink-dot.png',
					title: 'delphine'
				});
				// set marker
				marker_delphine.setMap(map);
			}
		});	
		
		
  setInterval(initMap, 600000);
  
}	

sinon tu te sers de quoi pour envoyer ta position à domoticz ?
Dernière modification par vil1driver le 22 janv. 2016, 16:08, modifié 2 fois.
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
lestatcrog
Messages : 38
Inscription : 19 janv. 2016, 20:47
Localisation : Niort

Re: custom page

Message par lestatcrog »

Super merci !! C'est exactement l'exemple que je voulais !! Je teste tout ça ce soir !! et je te tiens au courant !!

--> tu te sers de quoi pour envoyer ta position à domoticz ?

A la maison nous avons pour le moment que des téléphones Apple, donc j'ai écrit un script en LUA qui interroge l'API icloud d'apple.
Le script récupère les coordonnées du téléphone, test si les coordonnées sont présente à 300 m des coordonnées de la maison (soustraction de la latitude et longitude de 0.03) et si dans le périmètre alimente un swith on/off pour dire que je suis à la maison.
par la même occasion à chaque récupération des coordonnées du téléphone je pousse la latitude et longitude dans un device Texte (comme pour les saints).
Je me suis inspiré de iPhoneLocator Plugin pour Vera, en bon informaticien j'invente rien j'adapte.

--> Contrainte ça doit bouffer de la batterie (j'ai pas vu une grosse différence pour le moment vu la résistance de la batterie d'un iphone ...)
--> Comme je ne l'exploite pas le script il tourne 1 fois toutes les 15 minutes : Je dois réfléchir sur un à déclencheur pour réduire le temps entre chaque interrogation quand on s'approche du domicile
--> Evolution prendre en compte les appareils android (j'ai vu des API pour Google)

Je ne l'ai pas sous la main le script car je suis au boulot mais je peux le déposer ce soir si tu veux. (comme je suis pas un pro il est optimisable) :D
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: custom page

Message par vil1driver »

full android ici mais je suis curieux, je prends ton partage avec plaisir :D
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
lestatcrog
Messages : 38
Inscription : 19 janv. 2016, 20:47
Localisation : Niort

Re: custom page

Message par lestatcrog »

Re
Alors pour le script d'accès à icloud :

Code : Tout sélectionner

--~/domoticz/scripts/lua/script_time_localisation.lua
commandArray = {}
 -- ==============================
-- Cherche la position iphone sur icloud
-- ==============================
--Uservariables
--- horaire de déclanchement
ReportHour=21
ReportMinute=00
ReportMinute2=15
ReportMinute3=30
ReportMinute4=45
--- User icloud
username = "XXXXXX.XXXXX@gmail.com"
--- Mdp icloud
password = "XXXXXXXXXX"
--- Nom de iphone / Ipad visible sous icloud
device = "iPhone de XXXXX"
--- Position de la maison
homelatitude = 46.34118765250665
homelongitude = -0.32796710729599
--- Périmètre de considération de la maison
skew = 0.003
--- IDX du device Text
idxText = '21'

 -- Time to run?
time = os.date("*t")
--if time.hour == ReportHour and time.min == ReportMinute then
if time.min == ReportMinute or time.min == ReportMinute2 or time.min == ReportMinute3  or time.min == ReportMinute4 then
--	   print('******************* Début du script *******************')
--- Faire un premier appel pour recherche la partition
---	Premiere URL pour rechercher la partition 
	   UrlCloud1 = "curl -s -X POST -D - -o /dev/null -L -u '" .. username .. ":" .. password .. "' -H 'Content-Type: application/json; charset=utf-8' -H 'X-Apple-Find-Api-Ver: 2.0' -H 'X-Apple-Authscheme: UserIdGuest' -H 'X-Apple-Realm-Support: 1.0' -H 'User-agent: Find iPhone/1.3 MeKit (iPad: iPhone OS/4.2.1)' -H 'X-Client-Name: iPad' -H 'X-Client-UUID: 0cf3dc501ff812adb0b202baed4f37274b210853' -H 'Accept-Language: en-us' -H 'Connection: keep-alive' https://fmipmobile.icloud.com/fmipservice/device/" .. username .."/initClient"
	   local handle = io.popen(UrlCloud1)
       local result = handle:read("*a")
	   handle:close()
	   
---	   Récupération de la partion dans le resultat de la premiere URL
	   stageserver = string.match(result, "X%-Apple%-MMe%-Host%:%s(.*%.icloud%.com)")
---  Faire la deuxième url en cherchant le nom du tel / ipad ou autre avec jq  
	   UrlCloud2 = "curl -s -X POST -L -u '" .. username .. ":" .. password .. "' -H 'Content-Type: application/json; charset=utf-8' -H 'X-Apple-Find-Api-Ver: 2.0' -H 'X-Apple-Authscheme: UserIdGuest' -H 'X-Apple-Realm-Support: 1.0' -H 'User-agent: Find iPhone/1.3 MeKit (iPad: iPhone OS/4.2.1)' -H 'X-Client-Name: iPad' -H 'X-Client-UUID: 0cf3dc501ff812adb0b202baed4f37274b210853' -H 'Accept-Language: en-us' -H 'Connection: keep-alive' https://" .. stageserver .. "/fmipservice/device/" .. username .."/initClient | jq -r .content[].name,.content[].location.latitude,.content[].location.longitude"
	   
	   local handle = io.popen(UrlCloud2)
-- Récupération des résultats posible plusieurs téléphone ou ipad
-- partie à optimiser avec fonction JQ 
       local count = 1
	   local lines = {}
       while true do
          local result = handle:read("*l")
          if result == nil then break end
		     lines[count]=result
             count = count + 1
       end
       handle:close()
		
	
-- Recherche du device et alimentation de l'interrupteur On/OFF dans Périmètre de considération de la maison 
-- Alimentation de un device text de la longitude et latitude
-- partie à optimiser une fois que resultat optimisé

	   NbreTelephone = ((count-1)/3)
	   for i = 1, NbreTelephone do
			if lines[i] == device then
				if homelongitude - skew < tonumber(lines[i+(2*NbreTelephone)]) and homelongitude + skew > tonumber(lines[i+(2*NbreTelephone)]) and homelatitude - skew < tonumber(lines[i+NbreTelephone]) and homelatitude + skew > tonumber(lines[i+NbreTelephone]) then
					commandArray['Geolocalisation_Richard']='On'
					action = ('' .. (tonumber(lines[i+NbreTelephone])) ..','.. (tonumber(lines[i+(2*NbreTelephone)])) ..'') 
					commandArray['UpdateDevice']=idxText.."|0|"..action
					
				else
					commandArray['Geolocalisation_Richard']='Off'
					action = ('' .. (tonumber(lines[i+NbreTelephone])) ..','.. (tonumber(lines[i+(2*NbreTelephone)])) ..'') 
					commandArray['UpdateDevice']=idxText.."|0|"..action
		  		end
			end
	   end 	
end
	    
 --Fin du script
return commandArray
--> J'ai fait les premiers tests sur le marker avec récupération position de mon device text : OK Merci :D

--> disableDefaultUI à false : Ok posiblité de zoom présent Re Merci :D

-->trafic.css : pointer-events à auto : Pour le moment je sais pas trop ou mettre ça faut que je cherche :roll:
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: custom page

Message par vil1driver »

dans le dossier css tu trouveras ce fichier.. mais ça ne semble pas suffire, peut être également supprimer la fonction pour actualiser au click... :(

Code : Tout sélectionner

$('#reload').click(function(){
    initMap();
});
bons essais..


de mon côté j'ai trouvé une app qui me mets à jour une variable.. avec du php en intermédiaire.. pas idéal mais bon ça fonctionne.
j'aurais bien aimé une méthode comme la tienne mais google sur ce coups n'aide pas... tampis
à voir la batterie..

merci pour le code en tout cas, si un jour je passe du côté obscure..
Dernière modification par vil1driver le 22 janv. 2016, 20:08, modifié 1 fois.
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
lestatcrog
Messages : 38
Inscription : 19 janv. 2016, 20:47
Localisation : Niort

Re: custom page

Message par lestatcrog »

Je comprends Je suis pas fan d'une application tiers pour me suivre partout (déjà apple ou google c'est déjà pas mal !! en plus avec l'historique :o )

merci pour le code en tout cas, si un jour je passe du côté obscure.. --> C'est le moins que je puisse faire !! Merci à toi

Bon la dessus je vais faire les essais ...
Répondre