et je suis tombé sur traccar, https://www.traccar.org/
traccar c'est :
une app cliente vraiment simple à installer et à configurer, https://www.traccar.org/client/
un serveur personnel (windows, linux, osx) tout aussi simple à installer (pas de conf). https://www.traccar.org/download/
le serveur est également compatible avec une palanquée de gps matériels à installer sur véhicules.. https://www.traccar.org/devices/
une jolie interface web pour suivre tout ça..

et du coups un petit script lua de ma conception pour envoyer les dernières coordonnées recueillies par le serveur traccar,
à domoticz dans des variables utilisateur (automatiquement créées par le script)..
Code : Tout sélectionner
--[[
name: GPS
type: time
description: ce script permet de se connecter au serveur tracCar,
de récupérer les dernières localisations gps des utilisateurs
et de renseigner les variables correspondantes dans domoticz
--]]
--------------------------------
------ Tableau à éditer ------
--------------------------------
-- import des fontions pour lire le JSON (http://regex.info/code/JSON.lua)
json = (loadfile "/home/vil1driver/domoticz/scripts/lua/JSON.lua")()
-- chemin vers cURL
local curl = '/usr/bin/curl'
-- liste des utilisateurs déclarés dans traccar et leurs id correspondants
local user={}
user['olivier'] = '1'
user['delphine'] = '2'
-- etc..
-- serveur traccar
local ip = '192.168.22.100'
local port = '8082'
local userName = 'admin'
local password = 'admin'
-- domoticz user:pass@ip:port
local domo = '192.168.22.100:8080'
--------------------------------
-- Fin du tableau à éditer --
--------------------------------
function url_encode(str)
if (str) then
str = string.gsub (str, "\n", "\r\n")
str = string.gsub (str, "([^%w %-%_%.%~])",
function (c) return string.format ("%%%02X", string.byte(c)) end)
str = string.gsub (str, " ", "+")
end
return str
end
local i = 0
local t = os.time()
-- il y a 10 minutes
local from = os.date("!%Y-%m-%dT%T.000Z", t - 600)
-- dans 2 minutes
local to = os.date("!%Y-%m-%dT%T.000Z", t + 120)
commandArray = {}
for name, id in pairs(user) do
i = i+1
if(uservariables['gps_'..name] == nil) then
-- création des variables utilisateur au besoin
commandArray[i]={['OpenURL']=domo..'/json.htm?type=command¶m=saveuservariable&vname=gps_'..url_encode(name)..'&vtype=2&vvalue=0,0'}
print('GPS '..name..' : création variable')
else
local url = 'http://'..ip..':'..port..'/api/positions?deviceId='..id..'&from='..url_encode(from)..'&to='..url_encode(to)..'&page=1&start=0&limit=25'
--print(url)
-- get data
local s=assert(io.popen(curl..' -u '..userName..':'..password..' "'..url..'"'))
local jsonData = s:read('*all')
s:close()
local gps = json:decode(jsonData)
local n = 0
for i, record in pairs(gps) do
n = i
end
gps = gps[n]
-- update variables
if (gps ~= nil) then
print('GPS '..name..' : '..gps['latitude']..','..gps['longitude']..' - '..gps['fixTime']:gsub('T',' - '):gsub('Z','')..' (UTC)')
commandArray['Variable:gps_'..name] = gps['latitude']..','..gps['longitude']
else
print('GPS '..name..' : pas de données récentes')
end
end
end
return commandArray