{"id":3001,"date":"2014-04-20T15:45:12","date_gmt":"2014-04-20T14:45:12","guid":{"rendered":"http:\/\/play.with.free.fr\/?p=3001"},"modified":"2016-10-26T20:17:20","modified_gmt":"2016-10-26T19:17:20","slug":"fhem-et-openkarotz-part-1","status":"publish","type":"post","link":"http:\/\/play.with.free.fr\/index.php\/fhem-et-openkarotz-part-1\/","title":{"rendered":"FHEM et OpenKarotz &#8211; part 1"},"content":{"rendered":"<p>En attendant l&rsquo;\u00e9criture d&rsquo;un module FHEM un peu plus propre pour <a title=\"OpenKarotz - lib\u00e9rez votre lapin\" href=\"http:\/\/openkarotz.filippi.org\/\" target=\"_blank\">OpenKarotz<\/a>, voici comment j&rsquo;ai int\u00e9gr\u00e9 celui-ci dans ma domotique.<\/p>\n<h2>OpenKarotz<\/h2>\n<p><a href=\"http:\/\/play.with.free.fr\/wp-content\/uploads\/OpenKarotz.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft wp-image-3002\" style=\"margin-left: 10px; margin-right: 10px;\" src=\"http:\/\/play.with.free.fr\/wp-content\/uploads\/OpenKarotz-300x296.png\" alt=\"OpenKarotz\" width=\"210\" height=\"207\" srcset=\"http:\/\/play.with.free.fr\/wp-content\/uploads\/OpenKarotz-300x296.png 300w, http:\/\/play.with.free.fr\/wp-content\/uploads\/OpenKarotz-304x300.png 304w, http:\/\/play.with.free.fr\/wp-content\/uploads\/OpenKarotz-50x50.png 50w, http:\/\/play.with.free.fr\/wp-content\/uploads\/OpenKarotz-177x175.png 177w, http:\/\/play.with.free.fr\/wp-content\/uploads\/OpenKarotz.png 405w\" sizes=\"(max-width: 210px) 100vw, 210px\" \/><\/a>OpenKarotz est un ensemble de scripts CGI \u00e9crits en shell script (sous <a title=\"Do What The Fuck you want to Public License\" href=\"http:\/\/fr.wikipedia.org\/wiki\/WTFPL\" target=\"_blank\">licence WTFTL<\/a>) par massalia. Ils permettent de piloter un <a title=\"Karotz - wikipedia\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Karotz\" target=\"_blank\">Karotz<\/a> ind\u00e9pendamment des serveurs du constructeur, au travers d&rsquo;une <a title=\"API d'OpenKarotz\" href=\"http:\/\/www.openkarotz.org\/api\/\" target=\"_blank\">API REST<\/a><\/p>\n<p>L&rsquo;int\u00e9r\u00eat est triple :<\/p>\n<ul>\n<li>d&rsquo;une part ce qui se passe entre le lapin et vous ne transite pas par un serveur externe, ce qui du point de vue de la s\u00e9curit\u00e9 d&rsquo;une installation domotique me semble assez sain<\/li>\n<li>d&rsquo;autre part il n&rsquo;y a pas de d\u00e9pendance vis \u00e0 vis de services qui peuvent \u00eatre arr\u00eat\u00e9s \u00e0 tout moment. L&rsquo;exp\u00e9rience nabatztag (pr\u00e9d\u00e9cesseur du karotz) a montr\u00e9 que le risque est bien r\u00e9el. Vive le logiciel libre!<\/li>\n<li>enfin le temps de r\u00e9ponse est meilleur et il n&rsquo;y a pas de d\u00e9pendance vis \u00e0 vis de l&rsquo;\u00e9tat de la connexion internet hormis pour la synth\u00e8se vocale (Text To Speech &#8211; TTS)<\/li>\n<\/ul>\n<h3>Fonctionnalit\u00e9s<\/h3>\n<p>on peut \u00e0 l&rsquo;heure actuelle :<\/p>\n<ul>\n<li>faire bouger ses oreilles<\/li>\n<li>le faire parler (TTS)<\/li>\n<li>le faire fonctionner comme une squeezebox (int\u00e9gration de squeezeslave <a title=\" [linux] transformer un karotz en squeezebox\" href=\"http:\/\/nabaztag.forumactif.fr\/t14580-linux-transformer-un-karotz-en-squeezebox\" target=\"_blank\">comme pr\u00e9c\u00e9demment exp\u00e9riment\u00e9 par SiegfriedWtg <\/a>)<\/li>\n<li>lui faire jouer des flux MP3 en streaming (webradio)<\/li>\n<li>contr\u00f4ler sa led ventrale<\/li>\n<li>le faire photographier voire filmer avec son capteur VGA<\/li>\n<li>g\u00e9rer les tag RFID compatibles. En particulier, associer \u00e0 un tag une action locale (oreilles, led &#8230;) ou un appel d&rsquo;URL (ce qui permet de lancer une action sur un contr\u00f4leur domotique).<\/li>\n<\/ul>\n<h3>Utilisation en domotique<\/h3>\n<p>OpenKarotz peut \u00eatre utilis\u00e9 comme le karotz de base comme :<\/p>\n<ul>\n<li>syst\u00e8me de notification local :\n<ul>\n<li>par la voix en TTS ou avec les \u00ab\u00a0humeurs\u00a0\u00bb (ex : <a href=\"http:\/\/blog.hotfirenet.com\/sarah\/plugin-openkarotz-pour-sarah\/\">Plugin OpenKarotz <\/a>pour <a href=\"http:\/\/encausse.wordpress.com\/category\/domotique\/sarah\/\">SARAH)<\/a><\/li>\n<li>ou par l&rsquo;\u00e9tat de la led ou des oreilles, en d\u00e9finissant des conventions (ex: alarme activ\u00e9e si le lapin clignote en rouge)<\/li>\n<\/ul>\n<\/li>\n<li>actionneur :\n<ul>\n<li>en utilisant les tags RFID, on peut d\u00e9clencher des actions. Cette fonction est actuellement limit\u00e9e par le fait qu&rsquo;il faut\u00a0 un tag par action. Une fonction int\u00e9ressante serait de pouvoir en lancer des diff\u00e9rentes en fonction de la position des oreilles, par exemple.<\/li>\n<li>reconnaissance vocale. La fonction devrait \u00eatre bient\u00f4t impl\u00e9ment\u00e9e sur OpenKarotz (existe sur le lapin de base connect\u00e9 aux serveurs karotz)<\/li>\n<\/ul>\n<\/li>\n<li>cam\u00e9ra de surveillance : prendre une photo sur \u00e9v\u00e9nement<\/li>\n<\/ul>\n<p>Yapluka<\/p>\n<h2>Int\u00e9gration basique dans FHEM<\/h2>\n<h3><a href=\"http:\/\/play.with.free.fr\/wp-content\/uploads\/karotz-orange-mon-syst\u00e8me-sinstalle.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-3016\" src=\"http:\/\/play.with.free.fr\/wp-content\/uploads\/karotz-orange-mon-syst\u00e8me-sinstalle.png\" alt=\"karotz - musique\" width=\"142\" height=\"202\" srcset=\"http:\/\/play.with.free.fr\/wp-content\/uploads\/karotz-orange-mon-syst\u00e8me-sinstalle.png 142w, http:\/\/play.with.free.fr\/wp-content\/uploads\/karotz-orange-mon-syst\u00e8me-sinstalle-123x175.png 123w\" sizes=\"(max-width: 142px) 100vw, 142px\" \/><\/a>Squeezeslave<\/h3>\n<p>La fonction squeezeslave est d\u00e9couverte automatiquement par le <a title=\"Squeezebox Modul - erste Version\" href=\"http:\/\/forum.fhem.de\/index.php\/topic,17667.0.html\" target=\"_blank\">module FHEM Squeezebox<\/a> , si vous avez activ\u00e9 ce dernier. Pour ce faire ([update 26\/10\/2016]), il faut<\/p>\n<p>r\u00e9cup\u00e9rer le module dans github en passant la ligne de commande suivante dans la console FHEM :<\/p>\n<pre>update force https:\/\/raw.githubusercontent.com\/ChrisD70\/FHEM-Modules\/master\/autoupdate\/sb\/controls_squeezebox.txt<\/pre>\n<p>et d\u00e9finir votre serveur LMS (serveur squeezebox) avec<br \/>\n<code>define <em>monLMS<\/em> SB_SERVER <em>adresseIPduLMS<\/em><\/code><br \/>\nLa fonction talk (TTS google) ne fonctionne pas correctement (g\u00e9n\u00e8re un gargouilli incompr\u00e9hensible), mais ce n&rsquo;est pas grave car on peut utiliser celle d&rsquo;OpenKarotz .<\/p>\n<h3>API OpenKarotz<\/h3>\n<p>Editer \/opt\/fhem\/FHEM\/99_myUtils.pm et y int\u00e9grer la fonction suivante (ou <a href=\"#API_non_bloquante\">celle-ci <\/a>, d\u00e9crite plus bas, qui est la m\u00eame en plus efficace) :<br \/>\n<code>sub karotz(@) {<br \/>\nmy ($ip,$cmd) = @_;<br \/>\nmy $url = \"http:\/\/\".\"$ip\".\"\/cgi-bin\/\".$cmd;<br \/>\nmy $ret = GetFileFromURL($url,3,undef,1,1);<br \/>\nreturn $ret;<br \/>\n}<\/code><br \/>\nIl est maintenant possible d&rsquo;appeler l&rsquo;API de la mani\u00e8re suivante dans fhem :<\/p>\n<p>{ karotz( <em>adresseIPduKarotz<\/em>, api );; }<\/p>\n<p>o\u00f9 <em>adresseIPduKarotz<\/em> est l&rsquo;adresse IP du karotz ou son nom DNS.<\/p>\n<p>Par exemple (faire <code>telnet monFHEM 7072<\/code> pour passer les commandes \u00e0 la main de mani\u00e8re \u00e0 tester les commandes) :<br \/>\n<code>fhem&gt; { karotz(\"192.168.0.20\",\"ears_random\");;}<br \/>\nfhem&gt; { karotz(\"192.168.0.20\",\"ears?left=1&amp;right=9\");;}<br \/>\nfhem&gt; { karotz(\"192.168.0.20\",\"tts?voice=alice&amp;text=salu%20les%20copin&amp;nocache=0\");;}<br \/>\nfhem&gt; { karotz(\"192.168.0.20\",\"sound?url=http:\/\/broadcast.infomaniak.net:80\/tsfjazz-high.mp3\");;}<br \/>\nfhem&gt; { karotz(\"192.168.0.20\",\"apps\/moods?id=2\");;}<\/code><\/p>\n<p>C&rsquo;est rustique mais \u00e7a marche.<\/p>\n<h3>Tags RFID<\/h3>\n<p>On va d\u00e9finir dans FHEM un device de type \u00ab\u00a0dummy\u00a0\u00bb\u00a0 repr\u00e9sentant le lecteur de tags RFID du Karotz, dont l&rsquo;\u00e9tat sera l&rsquo;identifiant du dernier tag RFID reconnu par le lapin<\/p>\n<p><code># lecteur de tags du lapin<br \/>\ndefine roger_rabbit_rfid dummy<br \/>\nattr roger_rabbit_rfid alias lecteur RFID karotz<br \/>\nattr roger_rabbit_rfid group Roger Rabbit<\/code><\/p>\n<p>Puis on d\u00e9finit les tags RFID :<br \/>\n<code><a href=\"http:\/\/play.with.free.fr\/wp-content\/uploads\/nanoztag-vert2.png\"><img decoding=\"async\" loading=\"lazy\" class=\"size-thumbnail wp-image-3019 alignright\" src=\"http:\/\/play.with.free.fr\/wp-content\/uploads\/nanoztag-vert2-150x150.png\" alt=\"nanoztag-vert\" width=\"150\" height=\"150\" srcset=\"http:\/\/play.with.free.fr\/wp-content\/uploads\/nanoztag-vert2-150x150.png 150w, http:\/\/play.with.free.fr\/wp-content\/uploads\/nanoztag-vert2-50x50.png 50w, http:\/\/play.with.free.fr\/wp-content\/uploads\/nanoztag-vert2-175x175.png 175w, http:\/\/play.with.free.fr\/wp-content\/uploads\/nanoztag-vert2.png 224w\" sizes=\"(max-width: 150px) 100vw, 150px\" \/><\/a># tags rfid<br \/>\ndefine tag_vert dummy<br \/>\nattr tag_vert group RFID<\/code><\/p>\n<p>Enfin on associe \u00e0 chaque changement d&rsquo;\u00e9tat du lecteur de tags une notification qui lancera une s\u00e9rie d&rsquo;actions<\/p>\n<p><code>define roger_rabbit_tag_vert_n notify roger_rabbit_rfid:tag_vert { karotz(\"192.168.0.20\",\"ears_random\");; fhem(\"set lumiere on\");; }<\/code><\/p>\n<p>Il reste \u00e0 configurer OpenKarotz pour envoyer la notification :<\/p>\n<ol>\n<li>Faire reconna\u00eetre le tag par OpenKarotz : appui long sur le bouton puis passer le tag devant son nez<\/li>\n<li>configurer l&rsquo;URL de callback vers FHEM : choisir \u00ab\u00a0External Action\u00a0\u00bb pour le tag concern\u00e9 dans l&rsquo;interface web d&rsquo;OpenKarotz puis compl\u00e9ter le formulaire :<\/li>\n<\/ol>\n<p><strong>Name<\/strong> : ce que vous voulez (mn\u00e9motechnique pour reconna\u00eetre le tag dans la liste des tags)<br \/>\n<strong>URL<\/strong> : http:\/\/myFHEM:8083\/fhem (o\u00f9 myFHEM est l&rsquo;adresse IP ou le nom du serveur FHEM)<br \/>\n<strong>Parameters<\/strong> : cmd=set+roger_rabbit_rfid+tag_vert (o\u00f9<em> roger_rabbit_rfid<\/em> est le nom du lecteur RFID et<em> tag_vert<\/em> le nom du tag dans FHEM)<\/p>\n<p style=\"text-align: left;\"><a href=\"http:\/\/play.with.free.fr\/wp-content\/uploads\/openkarotz-config-rfid.png\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-3027 aligncenter\" src=\"http:\/\/play.with.free.fr\/wp-content\/uploads\/openkarotz-config-rfid-300x271.png\" alt=\"openkarotz-config-rfid\" width=\"300\" height=\"271\" srcset=\"http:\/\/play.with.free.fr\/wp-content\/uploads\/openkarotz-config-rfid-300x271.png 300w, http:\/\/play.with.free.fr\/wp-content\/uploads\/openkarotz-config-rfid-332x300.png 332w, http:\/\/play.with.free.fr\/wp-content\/uploads\/openkarotz-config-rfid-500x452.png 500w, http:\/\/play.with.free.fr\/wp-content\/uploads\/openkarotz-config-rfid-194x175.png 194w, http:\/\/play.with.free.fr\/wp-content\/uploads\/openkarotz-config-rfid.png 522w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p style=\"text-align: left;\"><strong>Remarque<\/strong> : on aurait pu lancer directement une action FHEM dans l&rsquo;URL de callback mais cette indirection permet de tracer les actions au niveau du device \u00ab\u00a0lecteur de tags\u00a0\u00bb.<\/p>\n<h2>Exemple d&rsquo;utilisation<\/h2>\n<p>On va recr\u00e9er l&rsquo;application \u00ab\u00a0Humeurs\u00a0\u00bb permettant au lapin de causer de mani\u00e8re al\u00e9atoire. Le pr\u00e9requis est de charger l&rsquo;app \u00ab\u00a0moods\u00a0\u00bb OpenKarotz sur le lapin (onglet \u00ab\u00a0moods\u00a0\u00bb).<\/p>\n<p>On utilise la fonction FHEM <a title=\"RandomTimer\" href=\"http:\/\/arrierboutix:8083\/fhem\/docs\/commandref.html#RandomTimer\" target=\"_blank\">RandomTimer<\/a><\/p>\n<p><code>define roger_rabbit_moods RandomTimer 9:00:00 roger_rabbit 21:00:00 900<br \/>\nattr roger_rabbit_moods comment cause (ou pas) toutes les 15mn entre 9h et 21h<br \/>\nattr roger_rabbit_moods onCmd { karotz(\"192.168.0.20\",\"apps\/moods\");; }<br \/>\nattr roger_rabbit_moods offCmd { <code>karotz(\"192.168.0.20\",\"ears_random\");; <\/code>}<\/code><\/p>\n<p>On peut sophistiquer si n\u00e9cessaire (ex: heures de pr\u00e9sence seulement et quand personne ne dort)<\/p>\n<h2>Ic\u00f4ne OpenKarotz pour FHEM<\/h2>\n<div id=\"attachment_3092\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/play.with.free.fr\/wp-content\/uploads\/karotz-animation1.gif\"><img aria-describedby=\"caption-attachment-3092\" decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-3092\" src=\"http:\/\/play.with.free.fr\/wp-content\/uploads\/karotz-animation1.gif\" alt=\"Visualisation icone karotz avvec les styles &quot;default&quot;, &quot;black&quot;, IOS7\" width=\"300\" height=\"105\" \/><\/a><p id=\"caption-attachment-3092\" class=\"wp-caption-text\">Visualisation icone karotz avvec les styles \u00ab\u00a0default\u00a0\u00bb, \u00ab\u00a0black\u00a0\u00bb, IOS7<\/p><\/div>\n<p>Voir <a title=\"Permanent Link to FHEM et les fichiers SVG\" href=\"http:\/\/play.with.free.fr\/index.php\/fhem-et-les-fichiers-svg\/\" rel=\"bookmark\">FHEM et les fichiers SVG<\/a> pour l&rsquo;icone SVG OpenKarotz<\/p>\n<h2>En savoir plus : les appels HTTP dans FHEM<\/h2>\n<h3>API bloquante<\/h3>\n<p>On a vu <a href=\"#API_OpenKarotz\">ci-dessus<\/a> comment utiliser l&rsquo;API HTTP de FHEM en mode bloquant, avec la fonction\u00a0<code>GetFileFromURL<\/code> :<\/p>\n<pre># Parameter: $url, $timeout, $data, $noshutdown, $loglevel\r\n# - if data (which is urlEncoded) is set, then a POST is performed, else a GET.\r\n# - noshutdown must be set e.g. if calling the Fritz!Box Webserver<\/pre>\n<p>L&rsquo;API est bloquante, c&rsquo;est \u00e0 dire que l&rsquo;appel de la fonction se met en attente d&rsquo;une r\u00e9ponse ou d&rsquo;un timeout). Remarque : cette fonction existe toujours mais est maintenant d\u00e9pr\u00e9ci\u00e9e et remplac\u00e9e par la fonction <code>HttpUtils_BlockingGet<\/code> qui a les m\u00eame param\u00e8tres que son \u00e9quivalente non bloquante d\u00e9crite plus loin.<\/p>\n<p>Certains utilisent la fonction shell <code>system<\/code> (sous Linux) pour appeler la commande curl. C&rsquo;est un peu moins efficace car on lance un process externe. Si on est juste en m\u00e9moire comme dans mon cas (plate-forme Dockstar), ce n&rsquo;est pas l&rsquo;id\u00e9al.<\/p>\n<h3>API non bloquante<\/h3>\n<p>Une solution plus efficace est d&rsquo;utiliser l&rsquo;API FHEM en mode non bloquant, avec la fonction <code>HttpUtils_NonblockingGet<\/code>. Elle permet de rendre la main sans d\u00e9lai \u00e0 FHEM, et de d\u00e9finir un call-back qui s&rsquo;ex\u00e9cute en cas d&rsquo;erreur. Cela permet d&rsquo;\u00e9viter de bloquer les traitements de mani\u00e8re \u00e0 ne pas allonger les temps de r\u00e9ponse de FHEM. Il est assez irritant d&rsquo;attendre des plombes que la lumi\u00e8re s&rsquo;allume quand on appuie sur un bouton &#8230; <a title=\"Wife acceptance factor\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Wife_acceptance_factor\" target=\"_blank\">surtout quand on n&rsquo;est pas le bidouilleur qui a mis en place la solution<\/a> \ud83d\ude09<\/p>\n<pre># Parameters :\r\n#\u00a0 mandatory:\r\n#\u00a0\u00a0\u00a0 url, callback\r\n#\u00a0 optional(default):\r\n#\u00a0\u00a0\u00a0 hideurl(0),timeout(4),data(\"\"),loglevel(4),header(\"\"),\r\n#\u00a0\u00a0\u00a0 noshutdown(1),shutdown(0),httpversion(\"1.0\")\r\n#\u00a0\u00a0\u00a0 method($data ? \"POST\" : \"GET\")\r\n# Example:\r\n#\u00a0\u00a0 HttpUtils_NonblockingGet({\r\n#\u00a0\u00a0\u00a0\u00a0 url=&gt;\"http:\/\/192.168.178.112:8888\/fhem\",\r\n#\u00a0\u00a0\u00a0\u00a0 myParam=&gt;7,\r\n#\u00a0\u00a0\u00a0\u00a0 callback=&gt;sub($$$){ Log 1,\"$_[0]-&gt;{myParam} ERR:$_[1] DATA:$_[2]\" }\r\n#\u00a0\u00a0 })<\/pre>\n<p>Voici ce que \u00e7a donne dans notre exemple :<\/p>\n<pre>sub karotz(@) {\r\n\u00a0 my ($ip,$cmd) = @_;\r\n\r\n\u00a0 my $url = \"http:\/\/\".\"$ip\".\"\/cgi-bin\/\".$cmd;\r\n\r\n\u00a0 my $hash = { url =&gt; $url,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 callback=&gt;sub($$$){ Log 1,\"karotz: $url\\nERR:$_[1] DATA:$_[2]\" },\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 };\r\n\r\n\u00a0 my ($err, $ret) = HttpUtils_NonblockingGet($hash);\r\n\u00a0 if($err) {\r\n\u00a0\u00a0\u00a0 Log3 undef, $hash-&gt;{loglevel}, \"karotz: $err\";\r\n\u00a0\u00a0\u00a0 return undef;\r\n\u00a0 }\r\n\u00a0 return $ret;\r\n}\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<ul>\n<li><a href=\"http:\/\/openkarotz.filippi.org\/\" target=\"_blank\">OpenKarotz<\/a><\/li>\n<li>Forum Toute la Domotique : <a href=\"http:\/\/www.touteladomotique.com\/forum\/viewtopic.php?f=48&amp;t=11661\">[***] OpenKarotz &#8211; Liberez votre Lapin<\/a><\/li>\n<li>Pour ceux qui ne veulent pas utiliser OpenKarotz, il y a moyen de faire <a href=\"http:\/\/fredclo.free.fr\/index.php?option=com_content&amp;view=article&amp;id=26&amp;Itemid=55\" target=\"_blank\">comme Fredclo<\/a> pour piloter le Karotz depuis FHEM.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/play.with.free.fr\/wp-content\/uploads\/nabaztag.gif\" class=\"attachment-80x60\" alt=\"nabaztag:tag\" title=\"nabaztag\" width=\"55\" height=\"60\" align=left>Comment piloter OpenKarotz \u00e0 partir de FHEM<br \/>\nBonus :  les appels HTTP dans FHEM<\/p>\n","protected":false},"author":2,"featured_media":3002,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","_vp_format_video_url":"","_vp_image_focal_point":[]},"categories":[110,38],"tags":[121,139,138,143,65,142],"_links":{"self":[{"href":"http:\/\/play.with.free.fr\/index.php\/wp-json\/wp\/v2\/posts\/3001"}],"collection":[{"href":"http:\/\/play.with.free.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/play.with.free.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/play.with.free.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/play.with.free.fr\/index.php\/wp-json\/wp\/v2\/comments?post=3001"}],"version-history":[{"count":0,"href":"http:\/\/play.with.free.fr\/index.php\/wp-json\/wp\/v2\/posts\/3001\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/play.with.free.fr\/index.php\/wp-json\/wp\/v2\/media\/3002"}],"wp:attachment":[{"href":"http:\/\/play.with.free.fr\/index.php\/wp-json\/wp\/v2\/media?parent=3001"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/play.with.free.fr\/index.php\/wp-json\/wp\/v2\/categories?post=3001"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/play.with.free.fr\/index.php\/wp-json\/wp\/v2\/tags?post=3001"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}