{"id":1753,"date":"2014-11-13T14:58:13","date_gmt":"2014-11-13T13:58:13","guid":{"rendered":"http:\/\/blog.guiguiabloc.fr\/?p=1753"},"modified":"2014-11-13T14:58:13","modified_gmt":"2014-11-13T13:58:13","slug":"mqtt-faites-communiquer-vos-objets-simplement","status":"publish","type":"post","link":"http:\/\/blog.guiguiabloc.fr\/index.php\/2014\/11\/13\/mqtt-faites-communiquer-vos-objets-simplement\/","title":{"rendered":"MQTT, faites communiquer vos objets simplement"},"content":{"rendered":"<p><a href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/11\/mqtt.png\"><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1754\" alt=\"mqtt\" src=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/11\/mqtt.png\" width=\"290\" height=\"98\" \/><\/a>La communication entre \u00ab\u00a0objets connect\u00e9s\u00a0\u00bb ou tout simplement dans votre environnement domotique est probablement l&rsquo;une des choses essentielles.<\/p>\n<p>Dans les protocoles de communication que l&rsquo;on retrouve le plus souvent, vous avez bien s\u00fbr http (et ses fameuses <a title=\"http:\/\/fr.wikipedia.org\/wiki\/Representational_State_Transfer\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Representational_State_Transfer\" target=\"_blank\">API Rest<\/a> (ou pas)), <a title=\"http:\/\/xplproject.org.uk\/\" href=\"http:\/\/xplproject.org.uk\/\" target=\"_blank\">xPL<\/a> (dont je vous ai souvent parl\u00e9), <a title=\"http:\/\/www.xapautomation.org\/index.php?title=xAP_Home_Automation_protocol\" href=\"http:\/\/www.xapautomation.org\/index.php?title=xAP_Home_Automation_protocol\" target=\"_blank\">XAP<\/a>, <a title=\"http:\/\/fr.wikipedia.org\/wiki\/Extensible_Messaging_and_Presence_Protocol\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Extensible_Messaging_and_Presence_Protocol\" target=\"_blank\">XMPP<\/a>, <a title=\"http:\/\/fr.wikipedia.org\/wiki\/Simple_Network_Management_Protocol\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Simple_Network_Management_Protocol\" target=\"_blank\">SNMP<\/a> (si si je vous assure <a title=\"https:\/\/www.youtube.com\/watch?v=gNI9a-K1JoU\" href=\"https:\/\/www.youtube.com\/watch?v=gNI9a-K1JoU\" target=\"_blank\">qu&rsquo;il y en a qui ont essay\u00e9<\/a>&#8230;)\u00a0 et d&rsquo;autres trucs plus ou moins bien con\u00e7us.<\/p>\n<p>Un protocole devrait pourtant tenir rapidement le \u00ab\u00a0haut du pav\u00e9\u00a0\u00bb et devenir le standard de l<a title=\"http:\/\/fr.wikipedia.org\/wiki\/Internet_des_objets\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Internet_des_objets\" target=\"_blank\">&lsquo;i.o.t<\/a> (comprendre l&rsquo;internet des objets (ou \u00ab\u00a0internet of things\u00a0\u00bb pour reprendre le terme officiel) : <a title=\"http:\/\/mqtt.org\/\" href=\"http:\/\/mqtt.org\/\" target=\"_blank\">MQTT<\/a>.<\/p>\n<p>Et pour couronner le tout, <a title=\"https:\/\/www.oasis-open.org\/news\/announcements\/mqtt-version-3-1-1-becomes-an-oasis-standard\" href=\"https:\/\/www.oasis-open.org\/news\/announcements\/mqtt-version-3-1-1-becomes-an-oasis-standard\" target=\"_blank\">MQTT est devenu depuis quelque jours un standard s&rsquo;\u00e9change OASIS<\/a> (<a title=\"https:\/\/www.oasis-open.org\/\" href=\"https:\/\/www.oasis-open.org\/\" target=\"_blank\">OASIS<\/a> (Organization for the Advancement of Structured Information Standards) est un consortium charg\u00e9 d&rsquo;aider au d\u00e9veloppement, \u00e0 la convergence et l&rsquo;adoption de standards ouverts\u00a0 pour \u00ab\u00a0la soci\u00e9t\u00e9 mondiale de l&rsquo;information\u00a0\u00bb (oui je mets des guillemets&#8230;). On y trouve des r\u00e9f\u00e9rences qui ne laissent pas de marbre <a title=\"https:\/\/www.oasis-open.org\/member-sections\/\" href=\"https:\/\/www.oasis-open.org\/member-sections\/\" target=\"_blank\">https:\/\/www.oasis-open.org\/member-sections\/<\/a> )<\/p>\n<p>C&rsquo;est bien joli tout cela, mais comment \u00e7a marche ?<\/p>\n<div id=\"attachment_1758\" style=\"width: 234px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/11\/mqttconcept.jpg\"><img aria-describedby=\"caption-attachment-1758\" loading=\"lazy\" class=\"size-medium wp-image-1758\" alt=\"mqttconcept\" src=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/11\/mqttconcept-224x300.jpg\" width=\"224\" height=\"300\" srcset=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/11\/mqttconcept-224x300.jpg 224w, http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/11\/mqttconcept-766x1024.jpg 766w, http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/11\/mqttconcept-900x1201.jpg 900w, http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/11\/mqttconcept.jpg 1023w\" sizes=\"(max-width: 224px) 100vw, 224px\" \/><\/a><p id=\"caption-attachment-1758\" class=\"wp-caption-text\">(c) David Cuartielles @dcuartielles<\/p><\/div>\n<p style=\"text-align: left;\">MQTT est un service de messagerie TCP\/IP simple et extr\u00eamement l\u00e9ger dans le sens o\u00f9 des messages de toutes sortes (le contenu importe peu du moment que le message n&rsquo;exc\u00e8de pas 256Mo (oui oui, vous pouvez envoyer des photos de la cousine <a title=\"http:\/\/blog.guiguiabloc.fr\/tatiana.html\" href=\"http:\/\/blog.guiguiabloc.fr\/tatiana.html\" target=\"_blank\">Tatiana<\/a> par MQTT&#8230;)) peuvent \u00eatre transmis.<\/p>\n<p style=\"text-align: left;\">Les messages sont envoy\u00e9s par des <a title=\"http:\/\/fr.wiktionary.org\/wiki\/publieur\" href=\"http:\/\/fr.wiktionary.org\/wiki\/publieur\" target=\"_blank\">publieurs <\/a>(les publishers) sur un canal (une cha\u00eene d&rsquo;information si vous voulez) appel\u00e9 Topic. Ces messages peuvent \u00eatre lus par les abonn\u00e9s (les subscribers). Les Topics (ou les canaux d&rsquo;informations) peuvent avoir une hi\u00e9rarchie qui permet de s\u00e9lectionner finement les informations que l&rsquo;on d\u00e9sire.<\/p>\n<p style=\"text-align: left;\">Par exemple, le topic \/sensor\/temperature\/salon ne me donnera que les temp\u00e9ratures du salon si je m&rsquo;y abonne (et ma sonde de temp\u00e9rature dans le salon publiera sur le topic sa valeur r\u00e9guli\u00e8rement).<br \/>\nJe pourrais aussi m&rsquo;abonner au topic \/sensor\/temperature\/# pour avoir toutes les temp\u00e9ratures, ou au topic \/sensor\/# pour avoir toutes les remont\u00e9es des sondes (plus de de d\u00e9tails sur les \u00ab\u00a0wildcards\u00a0\u00bb sur les topics sont disponibles ici <a title=\"http:\/\/mosquitto.org\/man\/mqtt-7.html\" href=\"http:\/\/mosquitto.org\/man\/mqtt-7.html\" target=\"_blank\">http:\/\/mosquitto.org\/man\/mqtt-7.html<\/a> )<\/p>\n<p style=\"text-align: left;\">Bien sur le topic pourrait aussi \u00eatre \/nagios\/serveur\/ping \ud83d\ude09<\/p>\n<p>Afin de pr\u00e9server un peu de discr\u00e9tion, vous pouvez bien \u00e9videmment d\u00e9finir qui a le droit de publier sur tel ou tel Topic et \u00e9galement qui a le droit de s&rsquo;y abonner.<\/p>\n<p>La s\u00e9curit\u00e9 peut se faire au niveau transport en SSL\/TLS, et au niveau authentification, par certificats SSL\/TLS ou couple user\/mot de passe.<\/p>\n<p>Une autre chose importante est la notion de QoS dans les messages qui transitent via MQTT (c&rsquo;est le publieur qui d\u00e9finit la qualit\u00e9 du message).<\/p>\n<ul>\n<li>Un message de QoS niveau 0 \u00ab\u00a0At most once\u00a0\u00bb sera d\u00e9livr\u00e9 tout au plus une fois. C&rsquo;et a dire qu&rsquo;il n&rsquo;est pas stock\u00e9 et probablement envoy\u00e9 sans garantie de r\u00e9ception (un peu comme un message UDP xPL par exemple), le broker (le serveur MQTT) n&rsquo;informe pas l&rsquo;exp\u00e9diteur qu&rsquo;il l&rsquo;a re\u00e7u et le message peut \u00eatre perdu si le client se d\u00e9connecte ou si le serveur s&rsquo;arr\u00eate.<\/li>\n<li>Un message de QoS niveau 1 \u00ab\u00a0At least once\u00a0\u00bb sera livr\u00e9 au moins une fois. C&rsquo;est \u00e0 dire que le client le transmettra plusieurs fois s&rsquo;il le faut jusqu&rsquo;\u00e0 ce que le Broker lui confirme qu&rsquo;il a \u00e9tait transmis sur le r\u00e9seau (quitte a l&rsquo;envoyer en rafale plusieurs fois).<\/li>\n<li>Un message de QoS niveau 2 \u00ab\u00a0exactly once\u00a0\u00bb sera obligatoirement sauvegard\u00e9 par l&rsquo;\u00e9metteur et le transmettra toujours tant que le r\u00e9cepteur ne confirme pas son envoi sur le r\u00e9seau. La principale diff\u00e9rence \u00e9tant que l&rsquo;\u00e9metteur utilise une phase de reconnaissance plus sophistiqu\u00e9e avec le broker pour \u00e9viter une duplication des messages (plus lent mais plus s\u00fbr).<\/li>\n<\/ul>\n<p>Je ne vais pas peaufiner les d\u00e9tails du protocole, je vous invite fortement \u00e0 en lire les sp\u00e9cifications : <a title=\"http:\/\/www.ibm.com\/developerworks\/library\/ws-mqtt\/\" href=\"http:\/\/www.ibm.com\/developerworks\/library\/ws-mqtt\/\" target=\"_blank\">http:\/\/www.ibm.com\/developerworks\/library\/ws-mqtt\/<\/a> et toute la documentation qui va bien <a title=\"http:\/\/mqtt.org\/documentation\" href=\"http:\/\/mqtt.org\/documentation\" target=\"_blank\">http:\/\/mqtt.org\/documentation<\/a><\/p>\n<p>Vous trouverez des Brokers et des clients MQTT dans votre langage de pr\u00e9dilection ainsi que des projets bien avanc\u00e9s.<br \/>\nSi vous \u00eates un adepte de Node JS, je vous invite \u00e0 regarder le travail de <a title=\"http:\/\/www.matteocollina.com\/#biography\" href=\"http:\/\/www.matteocollina.com\/#biography\" target=\"_blank\">Matteo Collina<\/a> qui est un gros contributeur MQTT (pour ne citer que les plus connus : <a title=\"https:\/\/github.com\/mcollina\/mosca\" href=\"https:\/\/github.com\/mcollina\/mosca\" target=\"_blank\">MOSCA<\/a>, <a title=\"http:\/\/qest.me\/\" href=\"http:\/\/qest.me\/\" target=\"_blank\">QUEST<\/a> &#8230;)<\/p>\n<p>Maintenant un peu de pratique.<\/p>\n<p>D&rsquo;abord, installons un broker\/serveur MQTT. Celui que j&rsquo;affectionne est<a title=\"http:\/\/mosquitto.org\/\" href=\"http:\/\/mosquitto.org\/\" target=\"_blank\"> Mosquitto<\/a>.<br \/>\nVous trouverez les packages pour diff\u00e9rentes distributions GNU\/Linux ou *BSD (m\u00eame pour votre raspberry pi \ud83d\ude09 ) ou vous pouvez le compiler depuis les sources.<\/p>\n<p>La configuration se fait dans le fichier \/etc\/mosquitto\/mosquitto.conf.<br \/>\nPour nos tests, nous allons juste r\u00e9aliser une configuration basique:<\/p>\n<pre lang=\"text\">\r\nlog_type debug\r\nallow_anonymous false\r\npassword_file \/etc\/mosquitto\/accesslist.txt\r\n<\/pre>\n<p>Nous interdisons l&rsquo;acc\u00e8s en anonyme et nous allons autoriser les connexions uniquement avec un identifiant mot de passe (dont la liste se trouve dans un simple fichier de la forme user:motdepasse (PS: l&rsquo;utilitaire mosquitto_passwd vous aidera \u00e0 le cr\u00e9er)<br \/>\nUne fois lanc\u00e9, le serveur \u00e9coute sur le port 1883 par d\u00e9faut.<\/p>\n<p>Un petit script python tout b\u00eate pour nous abonner \u00e0 un topic et afficher les messages (vous trouverez plein d&rsquo;exemples et d&rsquo;articles int\u00e9ressants sur le site de Jan-Piet Mens : <a title=\"http:\/\/jpmens.net\/2013\/02\/25\/lots-of-messages-mqtt-pub-sub-and-the-mosquitto-broker\/\" href=\"http:\/\/jpmens.net\/2013\/02\/25\/lots-of-messages-mqtt-pub-sub-and-the-mosquitto-broker\/\" target=\"_blank\">http:\/\/jpmens.net\/2013\/02\/25\/lots-of-messages-mqtt-pub-sub-and-the-mosquitto-broker\/<\/a> )<\/p>\n<pre lang=\"python\">\r\n#!\/usr\/bin\/env python\r\n\r\nimport mosquitto\r\n\r\ndef on_message(mosq, obj, msg):\r\nprint \"%-20s %d %s\" % (msg.topic, msg.qos, msg.payload)\r\nmosq.publish('pong', \"Thanks\", 0)\r\n\r\ndef on_publish(mosq, obj, mid):\r\npass\r\n\r\ncli = mosquitto.Mosquitto()\r\ncli.on_message = on_message\r\ncli.on_publish = on_publish\r\ncli.username_pw_set(\"guigui\", password=\"abloc)\r\ncli.connect(\"broker.guiguiabloc.fr\", 1883, 60)\r\ncli.subscribe(\"\/test\/#\", 0)\r\n\r\nwhile cli.loop() == 0:\r\npass\r\n<\/pre>\n<p>Lancer le script et vous devriez voir dans les logs (\/var\/log\/syslog par d\u00e9faut) de votre broker, la connexion se faire :<\/p>\n<pre lang=\"text\">\r\nNov 13 10:57:17 eos mosquitto[19305]: Sending CONNACK to mosq\/69ED9C77592ADC1E7D (0)\r\nNov 13 10:57:17 eos mosquitto[19305]: Received SUBSCRIBE from mosq\/69ED9C77592ADC1E7D\r\nNov 13 10:57:17 eos mosquitto[19305]: #011\/test\/# (QoS 0)\r\nNov 13 10:57:17 eos mosquitto[19305]: Sending SUBACK to mosq\/69ED9C77592ADC1E7D\r\n<\/pre>\n<p>Maintenant, publions un message.<\/p>\n<pre lang=\"text\">\r\nmosquitto_pub -h broker.guiguiabloc.fr -u \"user\" -P \"motdepasse -t \/test -m \"Hello la foule\"\r\n<\/pre>\n<p>Le message s&rsquo;affiche dans votre client :<\/p>\n<pre lang=\"text\">\r\n\/test \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0 Hello la foule\r\n<\/pre>\n<p>et dans les logs :<\/p>\n<pre lang=\"text\">\r\nNov 13 11:00:42 eos mosquitto[19305]: Received PUBLISH from mosq_pub_21013_eos.sty (d0, q0, r0, m0, '\/test', ... (14 bytes))\r\nNov 13 11:00:42 eos mosquitto[19305]: Sending PUBLISH to mosq\/69ED9C77592ADC1E7D (d0, q0, r0, m0, '\/test', ... (14 bytes))\r\nNov 13 11:00:42 eos mosquitto[19305]: Received PUBLISH from mosq\/69ED9C77592ADC1E7D (d0, q0, r0, m0, 'pong', ... (6 bytes))\r\n<\/pre>\n<p>Plus dr\u00f4le, il existe m\u00eame une application android pour publier et s&rsquo;abonner\u00a0 \u00e0 un broker MQTT : <a title=\"https:\/\/play.google.com\/store\/apps\/details?id=at.tripwire.mqtt.client&amp;hl=fr_FR\" href=\"https:\/\/play.google.com\/store\/apps\/details?id=at.tripwire.mqtt.client&amp;hl=fr_FR\" target=\"_blank\">https:\/\/play.google.com\/store\/apps\/details?id=at.tripwire.mqtt.client&amp;hl=fr_FR<\/a><\/p>\n<p><a href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/11\/mqttandroid.png\"><img loading=\"lazy\" class=\"aligncenter size-medium wp-image-1764\" alt=\"mqttandroid\" src=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/11\/mqttandroid-300x172.png\" width=\"300\" height=\"172\" srcset=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/11\/mqttandroid-300x172.png 300w, http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/11\/mqttandroid.png 536w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Sachez aussi que vous pouvez, en websocket, pousser directement les messages dans un navigateur web <a title=\"http:\/\/jpmens.net\/2014\/07\/03\/the-mosquitto-mqtt-broker-gets-websockets-support\/\" href=\"http:\/\/jpmens.net\/2014\/07\/03\/the-mosquitto-mqtt-broker-gets-websockets-support\/\" target=\"_blank\">http:\/\/jpmens.net\/2014\/07\/03\/the-mosquitto-mqtt-broker-gets-websockets-support\/<\/a><\/p>\n<p>Alors c&rsquo;est pas g\u00e9nial ? \ud83d\ude42<\/p>\n<p>Bien \u00e9videmment vous imaginez toutes les possibilit\u00e9s offertes par ce protocole. Certains fous furieux ont d\u00e9j\u00e0 commenc\u00e9 \u00e0 coder en LUA pour la Vera, <a title=\"http:\/\/forum.micasaverde.com\/index.php\/topic,17432.msg135283.html\" href=\"http:\/\/forum.micasaverde.com\/index.php\/topic,17432.msg135283.html\" target=\"_blank\">un client MQTT <\/a>.<\/p>\n<p>Sachez \u00e9galement qu&rsquo;un projet domotique tr\u00e8s prometteur inclus d\u00e9j\u00e0 MQTT : <a title=\"http:\/\/www.openhab.org\/features-tech.html\" href=\"http:\/\/www.openhab.org\/features-tech.html\" target=\"_blank\">openHAB<br \/>\n<\/a>Je risque donc de vous en reparler \ud83d\ude09<\/p>\n<p>Autre chose \u00e0 souligner, il existe un tr\u00e8s bon projet : <a title=\"https:\/\/github.com\/jpmens\/mqttwarn\" href=\"https:\/\/github.com\/jpmens\/mqttwarn\" target=\"_blank\">mqttwarn<\/a><\/p>\n<p><a href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/11\/mqttwarn.png\"><img loading=\"lazy\" class=\"aligncenter size-medium wp-image-1767\" alt=\"mqttwarn\" src=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/11\/mqttwarn-300x172.png\" width=\"300\" height=\"172\" srcset=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/11\/mqttwarn-300x172.png 300w, http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/11\/mqttwarn.png 500w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Ce projet est une sorte de passerelle qui s&rsquo;abonne \u00e0 \u00ab\u00a0tout\u00a0\u00bb les topics et qui se charge ensuite de les transmettre \u00e0 divers clients (pushover, mysql, redis, twitter etc&#8230;)<\/p>\n<p>M\u00eame votre serveur de t\u00e9l\u00e9phonie Asterisk peut \u00ab\u00a0causer MQTT\u00a0\u00bb : <a title=\"https:\/\/github.com\/zeha\/agi-mqtt\" href=\"https:\/\/github.com\/zeha\/agi-mqtt\" target=\"_blank\">https:\/\/github.com\/zeha\/agi-mqtt<\/a><\/p>\n<p>Maintenant, peut-on consid\u00e9rer que c&rsquo;est la panac\u00e9e et que cela va supplanter tout ce qui existe.<br \/>\nOui et non (une bonne r\u00e9ponse comme je les aime).<\/p>\n<p>Oui parce que l&rsquo;on standardise un protocole de transport d&rsquo;information et que les syst\u00e8mes de messages de type MQ, sont tr\u00e8s performant. C&rsquo;est temps r\u00e9el, \u00e7a marche tr\u00e8s bien en websocket, c&rsquo;est d\u00e9j\u00e0 inclus dans plein de langage, bref, que du bonheur. De plus, l&rsquo;impl\u00e9mentation est facile.<\/p>\n<p>Non parce que l&rsquo;on standardise le transport et pas le message re\u00e7u mais cela serai toujours la b\u00eate noire (m\u00eame une API Rest vous retourne un json dans la syntaxe qu&rsquo;il veut, \u00e0 vous de vous adapter).<\/p>\n<p>Toutefois, je pense sinc\u00e8rement que MQTT est un protocole terriblement int\u00e9ressant et qui peut nous rendre grandement service, reste d\u00e9sormais \u00e0 l&rsquo;int\u00e9grer partout.<\/p>\n<p>Amusez-vous bien \ud83d\ude00<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La communication entre \u00ab\u00a0objets connect\u00e9s\u00a0\u00bb ou tout simplement dans votre environnement domotique est probablement l&rsquo;une des choses essentielles. Dans les protocoles de communication que l&rsquo;on retrouve le plus souvent, vous avez bien s\u00fbr http (et ses fameuses API Rest (ou &hellip; <a href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2014\/11\/13\/mqtt-faites-communiquer-vos-objets-simplement\/\">Read More <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[27,137,13],"tags":[224,215],"_links":{"self":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/1753"}],"collection":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/comments?post=1753"}],"version-history":[{"count":14,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/1753\/revisions"}],"predecessor-version":[{"id":1771,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/1753\/revisions\/1771"}],"wp:attachment":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/media?parent=1753"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/categories?post=1753"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/tags?post=1753"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}