{"id":965,"date":"2020-02-02T13:13:00","date_gmt":"2020-02-02T12:13:00","guid":{"rendered":"http:\/\/wollef.org\/?p=965"},"modified":"2020-02-02T13:13:00","modified_gmt":"2020-02-02T12:13:00","slug":"tache-de-surveillance-obd","status":"publish","type":"post","link":"https:\/\/wollef.org\/blog\/tache-de-surveillance-obd\/","title":{"rendered":"Le Logiciel Raspberry Car \u2013 T\u00e2che de surveillance OBD (2\/5)"},"content":{"rendered":"\n<p>En utilisant les\ntechniques de la partie pr\u00e9c\u00e9dente, le code de la tache de r\u00e9cup\u00e9ration des\ninfos OBD effectuant le travail suivant&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Initialiser la connexion<\/li><li>En boucle&nbsp;:<ul><li>Demander \u00e0 la carte les informations de la\nvoiture<\/li><\/ul><ul><li>Poser le verrou OBD&nbsp;: je bloque la m\u00e9moire pour la\nderni\u00e8re info OBD<ul><li>Action s\u00e9curis\u00e9e&nbsp;: Il met de c\u00f4t\u00e9 la r\u00e9ponse\navec l\u2019heure<\/li><\/ul><\/li><\/ul><ul><li>D\u00e9bloquer le verrou OBD (cela a dur\u00e9 quelque millisecondes)<\/li><\/ul><ul><li>Attendre<\/li><\/ul><\/li><\/ul>\n\n\n\n<p>ressemble \u00e0&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def watch_odb(obdPort, delay):\n    # la demande d'utilisation des variables dans lesquelles la thread gps stoque ce qu'elle qa trouv\u00e9\n    global lastObdMeasured;\n    global lastObdMeasureTime;\n    global lastObdSpeed\n    global lastObdFuelLevel\n    global lastObdRpm\n\n    # l'ouvertur de la connection obd sur le port\n    connection = obd.OBD(obdPort)\n\n    # tant que l'on n'est pas interrompu\n    while True:\n        try:\n            # on lit les trois valeurs qui nous interesse (vitesse, les tours par minute, le niveau de carburant\n            response_speed = connection.query(obd.commands.SPEED)\n            response_rpm = connection.query(obd.commands.RPM )\n            response_fuellevel = connection.query(obd.commands.FUEL_LEVEL )\n\n            # si on est en mode debug, on affiche le detail\n            if DEBUG_OBD == True:\n                print(C_OBD+ \"--------------------------------------------\", ENDC)\n                print(C_OBD+ \"ODB : SPEED :\", response_speed.value, ENDC)\n                print(C_OBD+ \"ODB : RPM   :\", response_rpm.value, ENDC)\n                print(C_OBD+ \"ODB : FUEL  :\", response_fuellevel.value, ENDC)\n                print(C_OBD+ \"--------------------------------------------\", ENDC)\n\n            # on essaye de decoder les trois reponses\n            try :\n                speedValue = response_speed.value.magnitude;\n            except:\n                speedValue = -1\n\n            try :\n                rpmValue = response_rpm.value.magnitude;\n            except:\n                rpmValue = -1\n\n            try :\n                fuelLevelValue = response_fuellevel.value.magnitude;\n            except:\n                fuelLevelValue = -1\n\n            # on va placer les valeurs lues dans les variables globales\n            # mais pour eviter qu'une autre thread les lise pendant qu'on les modifie on demande le verrou\n            threadObdLock.acquire()\n            # on indique qu'on a eu une nouvelle mesure reussie\n            lastObdMeasured = True\n            # on memorise l'heure\n            lastObdMeasureTime = int(datetime.timestamp(datetime.now()))\n            # on memorise le resultta du OBD\n            lastObdSpeed = speedValue;\n            lastObdRpm = rpmValue;\n            lastObdFuelLevel = fuelLevelValue;\n            # et on  lib\u00e8re le verrou une fois les valeurs stoqu\u00e9es\n            threadObdLock.release()\n        except Exception as e:\n            print(C_ERROR+\"OBD : Error: unable to getOBD Data\", ENDC)\n            print(C_ERROR+str(e), ENDC)\n\n        time.sleep(delay)\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En utilisant les techniques de la partie pr\u00e9c\u00e9dente, le code de la tache de r\u00e9cup\u00e9ration des infos OBD effectuant le travail suivant&nbsp;: Initialiser la connexion En boucle&nbsp;: Demander \u00e0 la carte les informations de la voiture Poser le verrou OBD&nbsp;: je bloque la m\u00e9moire pour la derni\u00e8re info OBD Action s\u00e9curis\u00e9e&nbsp;: Il met de c\u00f4t\u00e9 <a class=\"read-more\" href=\"https:\/\/wollef.org\/blog\/tache-de-surveillance-obd\/\">Continue Reading<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[31,1],"tags":[53],"class_list":["post-965","post","type-post","status-publish","format-standard","hentry","category-raspberry-cars","category-non-classe","tag-2020-raspberry-cars"],"_links":{"self":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/posts\/965","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/comments?post=965"}],"version-history":[{"count":0,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/posts\/965\/revisions"}],"wp:attachment":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/media?parent=965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/categories?post=965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/tags?post=965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}