Viewing 3 reply threads
  • Author
    Posts
    • #10656
      lecagnois
      Participant

      Le printemps arrive .
      Il est temps de ce mettre au sport .
      Avant de faire des efforts dehors InMoov nous informes de la qualité de l’air de notre ville.

      Ce tuto va nous permettre de voir comment utiliser une API sur le WEB.

      J’ai trouvé plusieurs API gratuite sur Internet , certaines utilises le coordonnées GPS ,d’autre l’adresse IP pour localiser votre ville , j’ai choisi une API mondiale par ville .

      Je me suis restreint sur les villes françaises , mais vous pouvez modifier le programme python pour le reste du monde.

      Pour commencer demander uné clés API a cette page :
      https://www.airvisual.com/api
      vous avez droit à 10000 requêtes gratuite par mois.
      Noter votre clés , il faudra la saisir dans le programme python.

      Comme à chaque fois nous aurons un programme AIML pour les commandes vocales
      et un programme PYTHON pour exécuter la fonction.

      Pour connaître la qualité de l’air il suffit de dire pollution à paris (par exemple)
      en prime l’API vous donne la vitesse du vent , la température,la pression et le taux humidité.

      ci joint le programme python :
      A mettre dans le répertoire …/inMoov/custom

      def airqualite(ville,region):
      	try:
      		#lecture du flux de API en parametres ville et region
      		url = urllib2.urlopen("http://api.airvisual.com/v2/city?city="+ville+"&state="+region+"&country=France&key=VOTRE CLES AIRVISUAL ICI")
      		f = url.read()
      
      		# creation tableau a partir de API airvisual et suppresion des virgules
      		tableau = f.replace(","," ")[1:1000].decode('utf-8')
      		#print(tableau)
      
      		# extration des données dans des variables avec modification du type en entier
      		Mqualite = int(tableau[(tableau.find('aqius'))+7:(tableau.find('aqius'))+10])
      		Mhumide =  int(tableau[(tableau.find('hu'))+4:(tableau.find('hu'))+6])
      		Mpression = int(tableau[(tableau.find('pr'))+4:(tableau.find('pr'))+8])
      		Mtemperature = int(tableau[(tableau.find('tp'))+4:(tableau.find('tp'))+6])
      		Mvitessevent =  int(tableau[(tableau.find('ws'))+4:(tableau.find('ws'))+5])
      		
      		# test niveau de pollution
      		if Mqualite < 50 :
      			talkBlocking("Le Niveau de pollution est de  " + str(Mqualite) + " . La qualité de l'air est jugée satifaisante, et la pollution de l'air pose peu ou pas de risque")
      		if Mqualite > 50 and Mqualite <= 100 :
      			talkBlocking("Niveau de pollution est de : " + str(Mqualite) + " La qualité de l'air est acceptable. Cependant, pour certains polluants, un très petit nombre de personnes qui sont particulièrement sensibles à la pollution de l'air peuvent avoir des problèmes de santé modérés. Les enfants et les adultes actifs, ainsi que les personnes souffrant de maladies respiratoires, comme l'asthme, devraient limiter leur effort prolongé en plein air")
      		if Mqualite > 100 and Mqualite <= 150 :
      			talkBlocking("Niveau de pollution est de : " + str(Mqualite) + " La qualité de l'air est mauvaise . les personnes sensibles peuvent avoir des effets sur leur santé. Le grand public n'est pas susceptible d'être affecté. Les enfants et les adultes actifs, ainsi que les personnes souffrant de maladies respiratoires, comme l'asthme, devraient limiter leur effort prolongé en plein air")
      		if Mqualite > 150 and Mqualite <= 200 :
      			talkBlocking("Niveau de pollution est de : " + str(Mqualite) + " La qualité de l'air est mauvaise . Tout le monde peut commencer à éprouver des effets sur la santé; les membres des groupes sensibles peuvent éprouver des effets plus graves sur la santé Les enfants et les adultes actifs, ainsi que les personnes souffrant de maladies respiratoires, comme l'asthme, devraient éviter les efforts prolongés à l'extérieur; tout le monde, en particulier les enfants, devrait limiter l'effort prolongé en plein air")
      		if Mqualite > 200 and Mqualite <= 300 :
      			talkBlocking("Niveau de pollution est de : " + str(Mqualite) + " La qualité de l'air est trés mauvaise . Avertissements de santé de conditions d'urgence . Toute la population est plus suceptible d'être affecté")
      		if Mqualite > 300 :
      			talkBlocking("Niveau de pollution est de : " + str(Mqualite) + " La qualité de l'air est trés dangereuse . Alerte de santé, tout le monde peut ressentir des effets de santé plus graves . éviter de sortir .")
                    
      		talkBlocking("humidité de l'air est de " + str(Mhumide) +" pourcent")
      		sleep(1)
      		talkBlocking("la préssion est de  " + str(Mpression) + " bar")
      		sleep(1)
      		talkBlocking("la température est de " + str(Mtemperature) +" degré")
      		sleep(1)
      		talkBlocking("la vitesse du vent est de  " + str(Mvitessevent) +" KM/H")
      				
      
      	except IOError:
      		talk("je n'ai pas de capteur pour cette ville")
      	except OSError:
      		talkBlocking("oups il y a une erreur OS")
      	except ValueError:
      		talkBlocking("oups il y a une erreur de valeur ")
      	except:
      		print(sys.exc_info()[0])
      		raise
      		
      

      et le fichier AIML à mettre dans le répertoire
      …./inMoov/chatbot/bots/fr/aiml :

      
      <?xml version="1.0" encoding="UTF-8"?>
      <aiml>
      <!--  -->
      <!--  -->
      <category><pattern>POLLUTION À *</pattern>
      <template><think>
              <set name="ville"><star index="1"/></set>
            </think>
            <condition>
              <li name="ville" value="nice"><think><set name="region">PACA</set></think>
      		<li name="ville" value="aix-en-provence"><think><set name="region">PACA</set></think>
      		<li name="ville" value="arles"><think><set name="region">PACA</set></think>
      		<li name="ville" value="fos sur mer"><think><set name="ville">fos-sur-mer</set><set name="region">PACA</set></think>
      		<li name="ville" value="gardanne"><think><set name="region">PACA</set></think>
      		<li name="ville" value="martigues"><think><set name="region">PACA</set></think>
      		<li name="ville" value="peillon"><think><set name="region">PACA</set></think>
      		<li name="ville" value="saintes marie de la mer"><think><set name="ville">saintes-marie-de-la-mer</set><set name="region">PACA</set></think>
      		<li name="ville" value="toulon"><think><set name="region">PACA</set></think>
      		<li name="ville" value="antibes"><think><set name="region">PACA</set></think>
      		<li name="ville" value="aubagne"><think><set name="region">PACA</set></think>
      		<li name="ville" value="brignoles"><think><set name="region">PACA</set></think>
      		<li name="ville" value="fréjus"><think><set name="ville">frejus</set><set name="region">PACA</set></think>
      		<li name="ville" value="grasse"><think><set name="region">PACA</set></think>
      		<li name="ville" value="manosque"><think><set name="region">PACA</set></think>
      		<li name="ville" value="miramas"><think><set name="region">PACA</set></think>
      		<li name="ville" value="port-de-bouc"><think><set name="region">PACA</set></think>
      		<li name="ville" value="salon de provence"><think><set name="ville">salon-de-provence</set><set name="region">PACA</set></think>
      		<li name="ville" value="vitrolles"><think><set name="region">PACA</set></think>
      		<li name="ville" value="apt"><think><set name="region">PACA</set></think>
      		<li name="ville" value="avignon"><think><set name="region">PACA</set></think>
      		<li name="ville" value="carpentras"><think><set name="region">PACA</set></think>
      		<li name="ville" value="gap"><think><set name="region">PACA</set></think>	
      		<li name="ville" value="hyères"><think><set name="ville">hyeres</set><set name="region">PACA</set></think>
      		<li name="ville" value="marseille"><think><set name="region">PACA</set></think>
      		<li name="ville" value="arcachon"><think><set name="region">GIRONDE</set></think>
      		<li name="ville" value="paris"><think><set name="region">Ile-de-France</set></think>
      		<li name="ville" value="melun"><think><set name="region">Ile-de-France</set></think>
      		<li name="ville" value="nogent sur marne"><think><set name="ville">nogent-sur-marne</set><set name="region">Ile-de-France</set></think>
      		<li name="ville" value="puteaux"><think><set name="region">Ile-de-France</set></think>
      		<li name="ville" value="bobigny"><think><set name="region">Ile-de-France</set></think>
      		<li name="ville" value="gennevilliers"><think><set name="region">Ile-de-France</set></think>
      		<li name="ville" value="pantin"><think><set name="region">Ile-de-France</set></think>
      		<li name="ville" value="fontainebleau"><think><set name="region">Ile-de-France</set></think>		
      		<li name="ville" value="neuilly sur seine"><think><set name="ville">neuilly-sur-seine</set><set name="region">Ile-de-France</set></think>
      		<li name="ville" value="saint denis"><think><set name="ville">saint-denis</set><set name="region">Ile-de-France</set></think>
      		<li name="ville" value="rambouillet"><think><set name="region">Ile-de-France</set></think>
      		<li name="ville" value="alberville"><think><set name="region">auvergne-rhone-alpes</set></think>
      		<li name="ville" value="chambery"><think><set name="region">auvergne-rhone-alpes</set></think>
      		<li name="ville" value="lyon"><think><set name="region">auvergne-rhone-alpes</set></think>
      		<li name="ville" value="annecy"><think><set name="region">auvergne-rhone-alpes</set></think>
      		<li name="ville" value="grenoble"><think><set name="region">auvergne-rhone-alpes</set></think>
      		<li name="ville" value="valence"><think><set name="region">auvergne-rhone-alpes</set></think>
      		<li name="ville" value="villeurbanne"><think><set name="region">auvergne-rhone-alpes</set></think>
      		<li name="ville" value="roanne"><think><set name="region">auvergne-rhone-alpes</set></think>
      		<li name="ville" value="annemasse"><think><set name="region">auvergne-rhone-alpes</set></think>
      		<li name="ville" value="auxerre"><think><set name="region">bourgogne-franche-comte</set></think>
      		<li name="ville" value="besancon"><think><set name="region">bourgogne-franche-comte</set></think>
      		<li name="ville" value="daix"><think><set name="region">bourgogne-franche-comte</set></think>
      		<li name="ville" value="dole"><think><set name="region">bourgogne-franche-comte</set></think>
      		<li name="ville" value="macon"><think><set name="region">bourgogne-franche-comte</set></think>
      		<li name="ville" value="monbelliard"><think><set name="region">bourgogne-franche-comte</set></think>
      		<li name="ville" value="chalons sur saone"><think><set name="ville">chalons-sur-saone</set><set name="region">bourgogne-franche-comte</set></think>
      		<li name="ville" value="sens"><think><set name="region">bourgogne-franche-comte</set></think>
      		<li name="ville" value="belfort"><think><set name="region">bourgogne-franche-comte</set></think>
      		<li name="ville" value="dijon"><think><set name="region">bourgogne-franche-comte</set></think>
      		<li name="ville" value="nevers"><think><set name="region">bourgogne-franche-comte</set></think>
      		<li name="ville" value="vesoul"><think><set name="region">bourgogne-franche-comte</set></think>
      		<li name="ville" value="lons le saunier"><think><set name="ville">lons-le-saunier</set><set name="region">bourgogne-franche-comte</set></think>
      		<li name="ville" value="brest"><think><set name="region">brittany</set></think>
      		<li name="ville" value="quimper"><think><set name="region">brittany</set></think>
      		<li name="ville" value="saint malo"><think><set name="ville">saint-malo</set><set name="region">brittany</set></think>
      		<li name="ville" value="rennes"><think><set name="region">brittany</set></think>
      		<li name="ville" value="vannes"><think><set name="region">brittany</set></think>
      		<li name="ville" value="lorient"><think><set name="region">brittany</set></think>
      		<li name="ville" value="saint brieuc"><think><set name="ville">saint-brieuc</set><set name="region">brittany</set></think>
      		<li name="ville" value="blois"><think><set name="region">centre</set></think>
      		<li name="ville" value="chartres"><think><set name="region">centre</set></think>
      		<li name="ville" value="chateauroux"><think><set name="region">centre</set></think>
      		<li name="ville" value="bourges"><think><set name="region">centre</set></think>
      		<li name="ville" value="issoudun"><think><set name="region">centre</set></think>
      		<li name="ville" value="orléans"><think><set name="ville">orleans</set><set name="region">centre</set></think>
      		<li name="ville" value="dreux"><think><set name="region">centre</set></think>
      		<li name="ville" value="montargis"><think><set name="region">centre</set></think>
      		<li name="ville" value="tours"><think><set name="region">centre</set></think>
      		<li name="ville" value="la rochelle"><think><set name="region">charente-maritime</set></think>
      		<li name="ville" value="ajaccio"><think><set name="region">corsica</set></think>
      		<li name="ville" value="bastia"><think><set name="region">corsica</set></think>
      		<li name="ville" value="lucciana"><think><set name="region">corsica</set></think>
      		<li name="ville" value="colmar"><think><set name="region">grand-est</set></think>
      		<li name="ville" value="mulhouse"><think><set name="region">grand-est</set></think>
      		<li name="ville" value="strasbourg"><think><set name="region">grand-est</set></think>
      		<li name="ville" value="hagueneau"><think><set name="region">grand-est</set></think>
      		<li name="ville" value="amiens"><think><set name="region">haut-de-france</set></think>
      		<li name="ville" value="bethune"><think><set name="region">haut-de-france</set></think>
      		<li name="ville" value="lille"><think><set name="region">haut-de-france</set></think>
      		<li name="ville" value="maubeuge"><think><set name="region">haut-de-france</set></think>
      		<li name="ville" value="outreau"><think><set name="region">haut-de-france</set></think>
      		<li name="ville" value="saint omer"><think><set name="ville">saint-omer</set><set name="region">haut-de-france</set></think>
      		<li name="ville" value="tourcoing"><think><set name="region">haut-de-france</set></think>
      		<li name="ville" value="calais"><think><set name="region">haut-de-france</set></think>
      		<li name="ville" value="saint quentin"><think><set name="ville">saint-quentin</set><set name="region">haut-de-france</set></think>
      		<li name="ville" value="valenciennes"><think><set name="region">haut-de-france</set></think>
      		<li name="ville" value="beauvais"><think><set name="region">haut-de-france</set></think>
      		<li name="ville" value="cambrai"><think><set name="region">haut-de-france</set></think>
      		<li name="ville" value="douai"><think><set name="region">haut-de-france</set></think>
      		<li name="ville" value="roubaix"><think><set name="region">haut-de-france</set></think>
      		<li name="ville" value="nogent sur oise"><think><set name="ville">nogent-sur-oise</set><set name="region">haut-de-france</set></think>
      		<li name="ville" value="calvados"><think><set name="region">normandy</set></think>
      		<li name="ville" value="dieppe"><think><set name="region">normandy</set></think>
      		<li name="ville" value="le havre"><think><set name="region">normandy</set></think>
      		<li name="ville" value="rouen"><think><set name="region">normandy</set></think>
      		<li name="ville" value="évreux"><think><set name="ville">evreux</set><set name="region">normandy</set></think>
      		<li name="ville" value="orne"><think><set name="region">normandy</set></think>
      		<li name="ville" value="manche"><think><set name="region">normandy</set></think>
      		<li name="ville" value="agen"><think><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="angouleme"><think><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="bayonne"><think><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="bordeaux"><think><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="dax"><think><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="limoges"><think><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="mont de marsan"><think><set name="ville">mont-de-marsan</set><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="talence"><think><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="biarritz"><think><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="brive la gaillarde"><think><set name="ville">brive-la-gaillarde</set><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="la rochelle"><think><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="marmande"><think><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="pau"><think><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="tartas"><think><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="anglet"><think><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="cognac"><think><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="mérignac"><think><set name="ville">merignac</set><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="périgueux"><think><set name="ville">perigueux</set><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="tulle"><think><set name="region">nouvelle-aquitaine</set></think>
      		<li name="ville" value="albi"><think><set name="region">occitanie</set></think>
      		<li name="ville" value="montpellier"><think><set name="region">occitanie</set></think>
      		<li name="ville" value="pamiers"><think><set name="region">occitanie</set></think>
      		<li name="ville" value="poitiers"><think><set name="region">occitanie</set></think>
      		<li name="ville" value="perpignan"><think><set name="region">occitanie</set></think>
      		<li name="ville" value="nimes"><think><set name="region">occitanie</set></think>
      		<li name="ville" value="millau"><think><set name="region">occitanie</set></think>
      		<li name="ville" value="cap d'agde"><think><set name="region">occitanie</set></think>
      		<li name="ville" value="lunel"><think><set name="ville">lunel-viel</set><set name="region">occitanie</set></think>
      		<li name="ville" value="lourdes"><think><set name="region">occitanie</set></think>
      		<li name="ville" value="niort"><think><set name="region">occitanie</set></think>
      		<li name="ville" value="toulouse"><think><set name="region">occitanie</set></think>
      		<li name="ville" value="angers"><think><set name="region">pays-de-la-loire</set></think>
      		<li name="ville" value="nantes"><think><set name="region">pays-de-la-loire</set></think>
      		<li name="ville" value="laval"><think><set name="region">pays-de-la-loire</set></think>
      		<li name="ville" value="cholet"><think><set name="region">pays-de-la-loire</set></think>
      		<li name="ville" value="la roche-sur-yon"><think><set name="region">pays-de-la-loire</set></think>
      		<li name="ville" value="le mans"><think><set name="region">pays-de-la-loire</set></think>
      		<li name="ville" value="saint nazaire"><think><set name="ville">saint-nazaire</set><set name="region">pays-de-la-loire</set></think>
      		<li name="ville" value="poitiers"><think><set name="region">vienne</set></think>
      		</condition>
            <oob>
              <mrl>
                <service>python</service>
                <method>exec</method>
                <param>airqualite('<get name="ville"/>','<get name="region"/>')</param>
              </mrl>
            </oob></template>
      </category>
      </aiml>
      

      Le code Python est commenté pour comprendre le fonctionnement qui reste assez simple.
      Ci joint un fichier zip qui contient les sources
      Amusez vous bien…..

      • This topic was modified 6 years, 9 months ago by lecagnois.
      Attachments:
      You must be logged in to view attached files.
    • #10662
      Dominique
      Participant

      Bravo !

    • #10665
      lecagnois
      Participant

      Merci Dominique

      Je m’amuse bien avec python , le but de ses add-on est que notre Inmoov devienne un robot de compagnie.
      et qu il devienne de plus en plus intelligent …… lol

    • #12346
      Fabrice
      Participant

      salut,

      J’ai testé et ça ne fonctionne pas chez moi. peut etre ais je oublié quelque chose ?

      08:37:59.672 [python.interpreter.39] ERROR class org.myrobotlab.logging.Logging – ——
      Traceback (most recent call last):
      File “<string>”, line 1, in <module>
      NameError: name ‘info’ is not defined

      at org.python.core.Py.NameError(Py.java:284)
      at org.python.core.PyFrame.getname(PyFrame.java:257)
      at org.python.pycode._pyx282.f$0(<string>:1)
      at org.python.pycode._pyx282.call_function(<string>)
      at org.python.core.PyTableCode.call(PyTableCode.java:167)
      at org.python.core.PyCode.call(PyCode.java:18)
      at org.python.core.Py.runCode(Py.java:1386)
      at org.python.core.Py.exec(Py.java:1430)
      at org.python.util.PythonInterpreter.exec(PythonInterpreter.java:267)
      at org.myrobotlab.service.Python$PIThread.run(Python.java:160)

Viewing 3 reply threads
  • You must be logged in to reply to this topic.