suivi colissimo avec domoticz ?

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
domotech
Messages : 57
Inscription : 21 janv. 2017, 15:41
Localisation : AJACCIO (2A)

suivi colissimo avec domoticz ?

Message par domotech »

bonjour,
je cherche a suivre un collisimo avec domoticz.
j'ai vu que la poste a créer un api pour suivre les colis(https://developer.laposte.fr/products/suivi/latest), j'ai tester ça marche nickel mais le seul problème est comment faire remonter les infos a domoticz.
avec un script vous me direz !
mais j'y connait rien en script.

merci d'avance.
le domotiseur fou :lol: !!!
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: suivi colissimo avec domoticz ?

Message par landaisbenj »

Il faut que tu t'appuie sur ce qui existe déjà dans les autres script, par exemple le script waze qui récupère les infos de trajet quand tu veux rentrer chez toi ou aller au domicile.

En gros il faut que tu créés un device texte, et que tu le mette a jour de temps en temps en appelant l'url de ton api, en parsant la réponse (en gros trier les informations retournées) et après tu n'as plus qu'a mettre les infos dans le device texte..

Si je me base sur le retour d'UN seul colis:
{
"code": "1111111111111",
"date": "06/09/2016",
"status": "PRIS_EN_CHARGE",
"message": "Envoi pris en charge par Chronopost chez l'expéditeur",
"link": "http://www.chronopost.fr/expedier/input ... 1111111111",
"type": "Chronopost"
}
De tête cela pourrait donner:

Code : Tout sélectionner

commandarray{}

--Condition de lancement. Ici toutes les x minutes
local m = os.date('%M')
local x = 15
if (m % x == 0) then

-- Parametre du script
local colis = "numéro du colis"
local apiKey = "numéro de la clef API de la poste"
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()

--Fonction de recuperation des informations
function colissimo(colis,apiKey)
	-- Appel a l'url
	local url = 'curl -u "https://api.laposte.fr/suivi/v1/'..colis..'" '
	.. '-H "Content-Type: application/json; charset=utf-8" '
	.. '-H "X-Okapi-Key: '..apiKey'" '
	-- Mise en variable du retour parsé
	local handle = assert(io.popen(url))
	local result = handle:read("*a")
	handle:close()
	output = json:decode(result)
	return output
end


	-- Si le code est egale au numéro de colis alors je met les informations voulu dans un device
        if colissimo(coli, apiKey).code == colis then
			local status = output.status
			local message = output.message
			--mettre les infos dans un device
			--[[ Par exemple: Si aucun device texte egale a "La Poste"..colis existe alors 
			le créer
			Ensuite inserer les information status et message dans le device texte egale a "La Poste"..colis
			mais ca je ne sais pas le faire de tete]]
	-- Sinon si le code est egale a 
		elseif output.code == "RESOURCE_NOT_FOUND" then
			print('Erreur: Aucun produit ne correspond à votre recherche')
	-- Sinon si le code est egale a 
		elseif output.code == "BAD_REQUEST" then
			print('Erreur: Mauvais format pour le numéro de code')
		end
		
return commandarray{}
Il faudrait que le code soit corrigé, agrementé de la fonction d'ajout dans le device text et testé. Mais deja si tu pars d'une base comme celle la tu peux peut etre arriver a quelque chose (sauf si vraiment tu n'y connais rien en script.
Apres tout depends de quelle informations tu veux et ou tu veux les mettres.
Si tu veux que j'aille plus loin faudra que tu attendes ce soir mais en attendant je pense que d'autre m'aurons corrigés.
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
domotech
Messages : 57
Inscription : 21 janv. 2017, 15:41
Localisation : AJACCIO (2A)

Re: suivi colissimo avec domoticz ?

Message par domotech »

landaisbenj a écrit :Il faut que tu t'appuie sur ce qui existe déjà dans les autres script, par exemple le script waze qui récupère les infos de trajet quand tu veux rentrer chez toi ou aller au domicile.

En gros il faut que tu créés un device texte, et que tu le mette a jour de temps en temps en appelant l'url de ton api, en parsant la réponse (en gros trier les informations retournées) et après tu n'as plus qu'a mettre les infos dans le device texte..

Si je me base sur le retour d'UN seul colis:
{
"code": "1111111111111",
"date": "06/09/2016",
"status": "PRIS_EN_CHARGE",
"message": "Envoi pris en charge par Chronopost chez l'expéditeur",
"link": "http://www.chronopost.fr/expedier/input ... 1111111111",
"type": "Chronopost"
}
De tête cela pourrait donner:

Code : Tout sélectionner

commandarray{}

--Condition de lancement. Ici toutes les x minutes
local m = os.date('%M')
local x = 15
if (m % x == 0) then

-- Parametre du script
local colis = "numéro du colis"
local apiKey = "numéro de la clef API de la poste"
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()

--Fonction de recuperation des informations
function colissimo(colis,apiKey)
	-- Appel a l'url
	local url = 'curl -u "https://api.laposte.fr/suivi/v1/'..colis..'" '
	.. '-H "Content-Type: application/json; charset=utf-8" '
	.. '-H "X-Okapi-Key: '..apiKey'" '
	-- Mise en variable du retour parsé
	local handle = assert(io.popen(url))
	local result = handle:read("*a")
	handle:close()
	output = json:decode(result)
	return output
end


	-- Si le code est egale au numéro de colis alors je met les informations voulu dans un device
        if colissimo(coli, apiKey).code == colis then
			local status = output.status
			local message = output.message
			--mettre les infos dans un device
			--[[ Par exemple: Si aucun device texte egale a "La Poste"..colis existe alors 
			le créer
			Ensuite inserer les information status et message dans le device texte egale a "La Poste"..colis
			mais ca je ne sais pas le faire de tete]]
	-- Sinon si le code est egale a 
		elseif output.code == "RESOURCE_NOT_FOUND" then
			print('Erreur: Aucun produit ne correspond à votre recherche')
	-- Sinon si le code est egale a 
		elseif output.code == "BAD_REQUEST" then
			print('Erreur: Mauvais format pour le numéro de code')
		end
		
return commandarray{}
Il faudrait que le code soit corrigé, agrementé de la fonction d'ajout dans le device text et testé. Mais deja si tu pars d'une base comme celle la tu peux peut etre arriver a quelque chose (sauf si vraiment tu n'y connais rien en script.
Apres tout depends de quelle informations tu veux et ou tu veux les mettres.
Si tu veux que j'aille plus loin faudra que tu attendes ce soir mais en attendant je pense que d'autre m'aurons corrigés.
merci c'est une bonne base ;) , je vais essayer de bidouiller ça cet apres midi.
le domotiseur fou :lol: !!!
jeanmarc
Messages : 1
Inscription : 17 déc. 2020, 11:24

Re: suivi colissimo avec domoticz ?

Message par jeanmarc »

Bonjour à tous les développeurs :)

Je viens de développer une interface en php de connexion aux systèmes de suivi proposés par pour avoir un suivi détaillé des expéditions :
- Chronopost,
- Colissimo,
- Autre numéros de suivi de La Poste.

Le principe est simple : je propose un formulaire dans lequel les utilisateurs entrent le numéro de colis dont ils veulent suivre l'expédition.
- 1 - Je teste ce numéro de suivi avec le webservice de Chronopost,
- 2 - S'il ne trouve rien, je teste alors ce numéro de suivi avec le webservice de Colissimo,
- 3 - S'il ne trouve rien, je teste alors ce numéro avec le webservice de suivi de La Poste.
- 4 - S'il ne trouve toujours rien, alors j'affiche le message "Ce numéro de suivi n'est pas reconnu"

On peut tester le fonctionnement à l'adresse suivante :
https://www.oliquide.com/page-tracking- ... nopost.php

En bas de la page, vous pouvez cliquer sur le lien "Espace développeur" pour accéder au code php que j'ai développé, ou-bien aller directement à la page suivante :
https://www.oliquide.com/page-developpe ... nopost.php

Le code proposé utilise du html standard, vous pouvez donc le réutiliser tel quel, ou-bien 'décorer la page' comme vous le souhaitez.

J'ai passé un peu de temps à développer tout ça, j'espère que vous en gagnerez en le réutilisant.

Bon développement :)

Jean-Marc
Répondre