mai 23

Voyager dans les yeux de Morgan

morgan

J’avoue qu’il est assez rare que j’écrive des billets sur d’autres choses que mes passions primaires :p, mais cela arrive parfois.

J’ai connu Morgan par Twitter, au début sans trop y faire attention et puis je regarde son profil et découvre son site.

Et là, c’est un peu le choc pour moi. Morgan s’est donné un objectif, visiter 50 pays avant ses 50 ans.

En soi, c’est déjà un petit exploit et surtout un vieux rêve enfoui pour moi qui approche doucement de la cinquantaine.

Rien que ce « challenge » m’a remis en question.
J’ai bien vécu, j’ai fait des tas de boulots divers et variés, rencontré des tas de personnes formidables, fondé une famille, vécu des expériences inédites et indicibles pour certaines, visité quelques pays mais lire cet objectif m’a définitivement remis en place.
Oui, je suis passé à côté de quelque chose.
Ce constat que j’ai pris en pleine gueule m’a fait encore plus apprécier l’individu.

Et puis, j’ai lu, relu et vécu ses voyages. Car ce monsieur écrit bien, très bien même. Des récits de voyages, j’en ai dévoré pourtant plusieurs, mais Morgan à cette touche personnelle d’écriture qui fait que l’on vit avec lui son voyage, ses découvertes, ses déconvenues et ses sensations.

Alors oui il est doué, très doué même. Il s’est donné le courage et la volonté de vivre sa passion et d’atteindre son ambition mais surtout, et c’est pour moi
le plus important, il nous l’a fait vivre avec ses mots à lui, son regard et son cœur.

Je ne le connais pas encore réellement (ça devrait venir, parce que parmi toutes ses qualités, il est breton :D et donc on se retrouvera forcément autour d’un verre à Brest même !), mais vivre à travers ses écrits ses voyages me rapproche de lui, de mes vieux rêves regréttés et me fait découvrir le monde comme j’aurais aimais le découvrir moi même.

Alors ce billet n’est qu’anecdotique, n’est là que pour exprimer mes sincères remerciements à Morgan pour le temps qu’il passe à nous faire partager ses voyages, mais surtout, je vis à travers ses écrits des histoires dont j’aimerais être le héros. Et après tout, pourquoi pas 50 pays avant mes 70 ans…

Pour le découvrir, c’est ici : https://lesvoyagesdemorgan.fr/

PS: je suis les voyages d’un autre couple qui fait le tour du monde, Chloé et Romain sur http://www.playingtheworld.com/ , à lire également et avec eux trois, prenez un vrai bol d’air…

Classé dans Non classé | 2 Commentaires
sept 06

Jouons avec le WD Tv Live et UPNP

wdtvlive

Depuis des années je dispose d’un boîtier WD TV Live qui me permet de lire sur la télévision les vidéos stockées sur mon NAS Synology.
Efficace, ce petit boîtier fonctionne parfaitement bien et a trouver naturellement sa place dans le meuble TV.

J’avais un peu oublié sa présence jusqu’à me rendre compte que mon système domotique ne le connaissait pas.
Qu’a cela ne tienne, c’était le moment de jouer avec :)

Sur mon téléphone Android, je dispose d’une application, WD TV Remote, qui permet de contrôler le boitier par wifi.
Cela suffit à se dire qu’il doit être possible d’interagir avec lui par le réseau local.

Qui dit boîtier multimédia, dit forcement UPNP. Une petite découverte via l’outil gssdp-discover du projet gupnp-tools nous donne les points d’entrées du boîtier (je vous passe l’ensemble des équipements trouvés pour se concentrer sur le WD) :

gssdp-discover -i eth0.8 --timeout=5
Using network interface eth0.8
Scanning for all resources
resource available
resource available
USN:      uuid:5e881b94-0090-a9c7-b3b0-56fc82ddce77::upnp:rootdevice
Location: http://wdtvlive:10184/
resource available
USN:      uuid:5e881b94-0090-a9c7-b3b0-56fc82ddce77
Location: http://wdtvlive:10184/
resource available
USN:      uuid:5e881b94-0090-a9c7-b3b0-56fc82ddce77::urn:schemas-upnp-org:device:MediaRenderer:1
Location: http://wdtvlive:10184/
resource available
USN:      uuid:5e881b94-0090-a9c7-b3b0-56fc82ddce77::urn:schemas-upnp-org:service:AVTransport:1
Location: http://wdtvlive:10184/
resource available
USN:      uuid:5e881b94-0090-a9c7-b3b0-56fc82ddce77::urn:schemas-upnp-org:service:ConnectionManager:1
Location: http://wdtvlive:10184/
resource available
USN:      uuid:5e881b94-0090-a9c7-b3b0-56fc82ddce77::urn:schemas-upnp-org:service:RenderingControl:1
Location: http://wdtvlive:10184/

Une visite sur l’url http://wdtvlive:10184/ nous donne un joli arbre xml

...
<serviceList><service><serviceType>urn:schemas-upnp-org:service:AVTransport:1</serviceType><serviceId>urn:upnp-org:serviceId:AVTransport</serviceId><SCPDURL>MediaRenderer_AVTransport/scpd.xml</SCPDURL><controlURL>MediaRenderer_AVTransport/control</controlURL><eventSubURL>MediaRenderer_AVTransport/event</eventSubURL></service>
...

Déformation professionnelle oblige, je lance un tcpdump sur mon téléphone et j’agis sur la télécommande WD TV Remote.

On retrouve bien le POST http sur le point d’entrée du boîtier et la réponse de se dernier.

POST /MediaRenderer_AVTransport/control HTTP/1.1
Accept: */*
User-Agent: Twonky-NMC/7.3-Android (Android/4.4.2 (Build KOT49H); samsung/GT-I9505) DLNADOC/1.50
Host: wdtvlive:10184
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#GetTransportInfo"
Content-Type: text/xml; charset="utf-8"
Content-Length: 312
 
<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:GetTransportInfo xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID></u:GetTransportInfo></s:Body></s:Envelope>HTTP/1.1 200 OK
 
Transfer-Encoding: chunked
EXT:
CONTENT-TYPE: text/xml; charset="utf-8"
SERVER: POSIX, UPnP/1.0, Intel MicroStack/1.0.1497
1BF
 
<?xml version="1.0" encoding="utf-8"?>
 
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:GetTransportInfoResponse xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><CurrentTransportState>PAUSED_PLAYBACK</CurrentTransportState><CurrentTransportStatus>OK</CurrentTransportStatus><CurrentSpeed>1</CurrentSpeed></u:GetTransportInfoResponse></s:Body></s:Envelope>

Génial :)

Ne reste plus qu’a tester tout cela avec une belle requête curl (accrochez-vous à votre clavier..) :

curl -H "Content-Type: text/xml" -H 'SOAPACTION: urn:schemas-upnp-org:service:AVTransport:1#GetTransportInfo"' -XPOST -d '<s:Envelope xmlns: s="http://schemas.xmlsoap.org/soap/envelope" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding"><s:Body><u:GetTransportInfo xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID></u:GetTransportInfo></s:Body></s:Envelope>' http://wdtvlive:10184/MediaRenderer_AVTransport/control
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:GetTransportInfoResponse xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><CurrentTransportState>PAUSED_PLAYBACK</CurrentTransportState><CurrentTransportStatus>OK</CurrentTransportStatus><CurrentSpeed>1</CurrentSpeed></u:GetTransportInfoResponse></s:Body></s:Envelope>

Elle est pas belle la vie ? :p

On voit dans la réponse le mode actuel du boîtier :
PAUSED_PLAYBACK

En remplacant la méthode « GetTransportInfo » par « GetPositionInfo », le WD Tv nous donne tout un tas d’information dont le film actuellement joué :

curl -H "Content-Type: text/xml" -H 'SOAPACTION: urn:schemas-upnp-org:service:AVTransport:1#GetPositionInfo"' -XPOST -d '<s:Envelope xmlns: s="http://schemas.xmlsoap.org/soap/envelope" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding"><s:Body><u:GetPositionInfo xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID></u:GetPositionInfo></s:Body></s:Envelope>' http://wdtvlive:10184/MediaRenderer_AVTransport/control
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:GetPositionInfoResponse xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><Track>1</Track><TrackDuration>00:22:46</TrackDuration><TrackMetaData>&lt;DIDL-Lite xmlns=&quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:upnp=&quot;urn:schemas-upnp-org:metadata-1-0/upnp/&quot;&gt;&lt;item id=&quot;BROWSE_TYPE_KEYvideo*~&gt;_&lt;~*BROWSE_SORT_KEY8*~&gt;_&lt;~*BROWSE_GROUP_KEY0*~&gt;_&lt;~*BROWSE_FILTER_KEYBROWSE_FILTER_TERM_STARTfilepath:&lt;_EQUALS_&gt;:/tmp/media/nfs/NAS/FILMS/Naruto/Naruto.Shippuden.Saison.7BROWSE_FILTER_TERM_END*~&gt;_&lt;~*Naruto Shippuden 170.mkv&quot; parentID=&quot;BROWSE_TYPE_KEYvideo*~&gt;_&lt;~*BROWSE_SORT_KEY8*~&gt;_&lt;~*BROWSE_GROUP_KEY0*~&gt;_&lt;~*BROWSE_FILTER_KEYBROWSE_FILTER_TERM_STARTfilepath:&lt;_EQUALS_&gt;:/tmp/media/nfs/NAS/FILMS/Naruto/Naruto.Shippuden.Saison.7BROWSE_FILTER_TERM_ENDBROWSE_FILTER_TERM_STARTname:&lt;_EQUALS_&gt;:Naruto Shippuden 170.mkvBROWSE_FILTER_TERM_END*~&gt;_&lt;~*&quot; restricted=&quot;0&quot;&gt;&lt;dc:title&gt;Naruto Shippuden 170.mkv&lt;/dc:title&gt;&lt;upnp:class&gt;object.item.videoItem&lt;/upnp:class&gt;&lt;dc:creator&gt;&lt;/dc:creator&gt;&lt;upnp:genre&gt;Unknown&lt;/upnp:genre&gt;&lt;upnp:album&gt;&lt;/upnp:album&gt;&lt;res bitrate=&quot;1230&quot;  protocolInfo=&quot;file-get:*:video/x-matroska::DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00000000001000000000000000000000&quot; protection=&quot;&quot; tokenType=&quot;0&quot; duration=&quot;&quot; size=&quot;210161304&quot; colorDepth=&quot;0&quot; ifoFileURI=&quot;&quot; resolution=&quot;--&quot;&gt;file:///tmp/media/nfs/NAS/FILMS/Naruto/Naruto.Shippuden.Saison.7/Naruto%20Shippuden%20170.mkv&lt;/res&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;</TrackMetaData><TrackURI>file:///tmp/media/nfs/NAS/FILMS/Naruto/Naruto.Shippuden.Saison.7/Naruto%20Shippuden%20170.mkv</TrackURI><RelTime>00:08:00</RelTime><AbsTime>NOT_IMPLEMENTED</AbsTime><RelCount>2147483647</RelCount><AbsCount>2147483647</AbsCount></u:GetPositionInfoResponse></s:Body></s:Envelope>

Ici je vois que Junior regarde le fichier « Naruto Shippuden 20170.mkv » (ok pas très instructif comme film…) et ce depuis 8 minutes.

Python disposant de l’excellent module lxml pour parser les fichiers XML, un coup de scripting tout simple permet d’isoler les informations importantes :

from lxml import etree
 
tree = etree.parse('le fichier xml')
for element in tree.iter('CurrentTransportState'):
result = element.text
print "WD TV Live status: "+result
 
tree = etree.parse('le fichier xml')
for element in tree.iter('TrackURI'):
film = element.text
print "WD TV Live joue : "+film
 
WD TV Live status: PLAYING
WD TV joue: file:///tmp/media/nfs/NAS/FILMS/Naruto/Naruto.Shippuden.Saison.7/Naruto%20Shippuden%20170.mkv

Toutes les commandes disponibles sont référencées sur l’upnp database.

Maintenant le serveur domotique connait l’état du boitier WD TV Live ainsi que le fichier joué sur le téléviseur.
Ce qui nous permet par exemple de programmer une surveillance de ce que Junior regarde…

tree = etree.parse('le fichier xml')
for element in tree.iter('TrackURI'):
film = element.text
if "Pr0n_A_Papa" in film:
# power off immédiat de la télévision

J’espère que ce petit billet vous donnera envie d’aller explorer un peu les points d’entrée UPNP des différents équipements de votre domicile ;)

EDIT : Pour éteindre et allumer votre WD TV Live par une simpe requête http, il suffit d’envoyer le POST suivant :
curl -XPOST -d ‘{« remote »: »w »}’ http://wdtvlive/cgi-bin/toServerValue.cgi

Amusez-vous bien :)

Classé dans domotique | Taggé , | 1 Comment
août 01

l’API Domogeek, clap de fin

closedapi

EDIT DU 06/08/2015 : Bonne nouvelle ! Le groupe Entropia SA basé au Luxembourg m’a offert gracieusement l’hébergement de l’API. Domogeek renait donc de ses cendres :D
Temporairement, l’url de l’API est http://domogeek.entropialux.com

 

C’est avec un grand regret que je vais cesser d’offrir publiquement l’accès à l’API Domogeek, après 1 an d’existence.

Le succès a était au rendez vous puisque ses dernière semaines, le nombre d’appels à l’API dépassait largement les 500 000 par jour.
J’ai tout fait pour supporter la charge (le taux de disponibilité (affiché publiquement par les sondes PingDom) a toujours était supérieur à 99,5%)a et pour cela j’ai du investir du temps mais surtout de l’argent pour payer la location des serveurs chez OVH.

D’une mentalité d’entraide et de partage innée chez moi, j’ai donc sollicité les utilisateurs pour faire un modeste don afin de m’aider à régler ses frais.
En deux appels, j’ai récolté la somme faramineuse de… 50 euros, avec en prime une suppression de mon post sur le forum Jeedom pour la raison que les appels aux dons sur le forum d’un produit à vocation commerciale n’avait pas lieu d’être. Soit. Je me suis longuement expliqué avec l’équipe et je concois que cela entrave le fonctionnement de leur businness-plan, mais bon, les plugins open, c’est un peu la force de Jeedom aussi…
Après, j’avais une position difficile, je ne suis pas l’auteur du plugin (c’est tmartinez, qui d’ailleurs a était parmi les premiers a faire un don pour l’api), et donc je ne suis qu’un fournisseur de service sans lien avec Jeedom mais j’ai eu un peu de mal à avaler la pastille, moi qui le premier revendique le partage, l’entraide et la transparence.

Je ne peux que remercier chaleureusement les  7 (:p) utilisateurs qui ont voulu m’aider : tmartinez, Kheops37, Stéphane (lademan ?), Mickael (Mika ?), edreams, mamatdv, lionel

Le code source est toujours disponible sur GitHub et vous pouvez donc l’héberger localement pour continuer à utiliser le plugin de tmartinez (pour les utilisateurs de Jeedom) ou en direct pour les autres.

Je suis de cette génération de barbu qui a toujours offert de l’entraide, qui a toujours partagé ses découvertes, ses modestes développements et je suis aujourd’hui déçu que cette mentalité tend a disparaître de plus en plus.
Sur IRC, sur les forums, je voyais déjà cette aide bénévole se transformait en assistanat (les gens ne cherche plus et attende la réponse tout de suite avec un merci donné du bout des doigts, quand il existe) et cette aventure m’a malheureusement démontré qu’on ne peut plus solliciter financièrement un coup de main, il faut obligatoirement faire payer le service.

Je salue les quelques irréductibles qui continue à offrir des services à la communauté en payant de leur personne et de leur porte-monnaie les infrastructures nécessaire (j’en oublierais sûrement donc spécial coup de chapeau à domotics du forum toute la domotique, à Jean-Philippe Encausse pour son projet SARAH, à l’équipe Domogik, à l’équipe Imperihome etc… J’en oublie plein mais ils se reconnaîtrons forcément :D )

A vous tous les utilisateurs de tout ses programmes, ses services, ses aides gratuites, n’oubliez jamais que derrière il y a souvent 1 ou quelques personnes qui vous offrent bénévolement de leur temps et souvent de leur argent pour vous rendre la vie agréable, alors un coup de main, même minime, cela donne toujours beaucoup de chaleur et de reconnaissance…

« La valeur d’un homme tient dans sa capacité à donner et non dans sa capacité à recevoir. »  Albert Einstein

Classé dans domotique | 22 Commentaires
nov 13

MQTT, faites communiquer vos objets simplement

mqttLa communication entre « objets connectés » ou tout simplement dans votre environnement domotique est probablement l’une des choses essentielles.

Dans les protocoles de communication que l’on retrouve le plus souvent, vous avez bien sûr http (et ses fameuses API Rest (ou pas)), xPL (dont je vous ai souvent parlé), XAP, XMPP, SNMP (si si je vous assure qu’il y en a qui ont essayé…)  et d’autres trucs plus ou moins bien conçus.

Un protocole devrait pourtant tenir rapidement le « haut du pavé » et devenir le standard de l‘i.o.t (comprendre l’internet des objets (ou « internet of things » pour reprendre le terme officiel) : MQTT.

Et pour couronner le tout, MQTT est devenu depuis quelque jours un standard s’échange OASIS (OASIS (Organization for the Advancement of Structured Information Standards) est un consortium chargé d’aider au développement, à la convergence et l’adoption de standards ouverts  pour « la société mondiale de l’information » (oui je mets des guillemets…). On y trouve des références qui ne laissent pas de marbre https://www.oasis-open.org/member-sections/ )

C’est bien joli tout cela, mais comment ça marche ?

mqttconcept

(c) David Cuartielles @dcuartielles

MQTT est un service de messagerie TCP/IP simple et extrêmement léger dans le sens où des messages de toutes sortes (le contenu importe peu du moment que le message n’excède pas 256Mo (oui oui, vous pouvez envoyer des photos de la cousine Tatiana par MQTT…)) peuvent être transmis.

Les messages sont envoyés par des publieurs (les publishers) sur un canal (une chaîne d’information si vous voulez) appelé Topic. Ces messages peuvent être lus par les abonnés (les subscribers). Les Topics (ou les canaux d’informations) peuvent avoir une hiérarchie qui permet de sélectionner finement les informations que l’on désire.

Par exemple, le topic /sensor/temperature/salon ne me donnera que les températures du salon si je m’y abonne (et ma sonde de température dans le salon publiera sur le topic sa valeur régulièrement).
Je pourrais aussi m’abonner au topic /sensor/temperature/# pour avoir toutes les températures, ou au topic /sensor/# pour avoir toutes les remontées des sondes (plus de de détails sur les « wildcards » sur les topics sont disponibles ici http://mosquitto.org/man/mqtt-7.html )

Bien sur le topic pourrait aussi être /nagios/serveur/ping ;)

Afin de préserver un peu de discrétion, vous pouvez bien évidemment définir qui a le droit de publier sur tel ou tel Topic et également qui a le droit de s’y abonner.

La sécurité peut se faire au niveau transport en SSL/TLS, et au niveau authentification, par certificats SSL/TLS ou couple user/mot de passe.

Une autre chose importante est la notion de QoS dans les messages qui transitent via MQTT (c’est le publieur qui définit la qualité du message).

  • Un message de QoS niveau 0 « At most once » sera délivré tout au plus une fois. C’et a dire qu’il n’est pas stocké et probablement envoyé sans garantie de réception (un peu comme un message UDP xPL par exemple), le broker (le serveur MQTT) n’informe pas l’expéditeur qu’il l’a reçu et le message peut être perdu si le client se déconnecte ou si le serveur s’arrête.
  • Un message de QoS niveau 1 « At least once » sera livré au moins une fois. C’est à dire que le client le transmettra plusieurs fois s’il le faut jusqu’à ce que le Broker lui confirme qu’il a était transmis sur le réseau (quitte a l’envoyer en rafale plusieurs fois).
  • Un message de QoS niveau 2 « exactly once » sera obligatoirement sauvegardé par l’émetteur et le transmettra toujours tant que le récepteur ne confirme pas son envoi sur le réseau. La principale différence étant que l’émetteur utilise une phase de reconnaissance plus sophistiquée avec le broker pour éviter une duplication des messages (plus lent mais plus sûr).

Je ne vais pas peaufiner les détails du protocole, je vous invite fortement à en lire les spécifications : http://www.ibm.com/developerworks/library/ws-mqtt/ et toute la documentation qui va bien http://mqtt.org/documentation

Vous trouverez des Brokers et des clients MQTT dans votre langage de prédilection ainsi que des projets bien avancés.
Si vous êtes un adepte de Node JS, je vous invite à regarder le travail de Matteo Collina qui est un gros contributeur MQTT (pour ne citer que les plus connus : MOSCA, QUEST …)

Maintenant un peu de pratique.

D’abord, installons un broker/serveur MQTT. Celui que j’affectionne est Mosquitto.
Vous trouverez les packages pour différentes distributions GNU/Linux ou *BSD (même pour votre raspberry pi ;) ) ou vous pouvez le compiler depuis les sources.

La configuration se fait dans le fichier /etc/mosquitto/mosquitto.conf.
Pour nos tests, nous allons juste réaliser une configuration basique:

log_type debug
allow_anonymous false
password_file /etc/mosquitto/accesslist.txt

Nous interdisons l’accès 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’utilitaire mosquitto_passwd vous aidera à le créer)
Une fois lancé, le serveur écoute sur le port 1883 par défaut.

Un petit script python tout bête pour nous abonner à un topic et afficher les messages (vous trouverez plein d’exemples et d’articles intéressants sur le site de Jan-Piet Mens : http://jpmens.net/2013/02/25/lots-of-messages-mqtt-pub-sub-and-the-mosquitto-broker/ )

#!/usr/bin/env python
 
import mosquitto
 
def on_message(mosq, obj, msg):
print "%-20s %d %s" % (msg.topic, msg.qos, msg.payload)
mosq.publish('pong', "Thanks", 0)
 
def on_publish(mosq, obj, mid):
pass
 
cli = mosquitto.Mosquitto()
cli.on_message = on_message
cli.on_publish = on_publish
cli.username_pw_set("guigui", password="abloc)
cli.connect("broker.guiguiabloc.fr", 1883, 60)
cli.subscribe("/test/#", 0)
 
while cli.loop() == 0:
pass

Lancer le script et vous devriez voir dans les logs (/var/log/syslog par défaut) de votre broker, la connexion se faire :

Nov 13 10:57:17 eos mosquitto[19305]: Sending CONNACK to mosq/69ED9C77592ADC1E7D (0)
Nov 13 10:57:17 eos mosquitto[19305]: Received SUBSCRIBE from mosq/69ED9C77592ADC1E7D
Nov 13 10:57:17 eos mosquitto[19305]: #011/test/# (QoS 0)
Nov 13 10:57:17 eos mosquitto[19305]: Sending SUBACK to mosq/69ED9C77592ADC1E7D

Maintenant, publions un message.

mosquitto_pub -h broker.guiguiabloc.fr -u "user" -P "motdepasse -t /test -m "Hello la foule"

Le message s’affiche dans votre client :

/test                0 Hello la foule

et dans les logs :

Nov 13 11:00:42 eos mosquitto[19305]: Received PUBLISH from mosq_pub_21013_eos.sty (d0, q0, r0, m0, '/test', ... (14 bytes))
Nov 13 11:00:42 eos mosquitto[19305]: Sending PUBLISH to mosq/69ED9C77592ADC1E7D (d0, q0, r0, m0, '/test', ... (14 bytes))
Nov 13 11:00:42 eos mosquitto[19305]: Received PUBLISH from mosq/69ED9C77592ADC1E7D (d0, q0, r0, m0, 'pong', ... (6 bytes))

Plus drôle, il existe même une application android pour publier et s’abonner  à un broker MQTT : https://play.google.com/store/apps/details?id=at.tripwire.mqtt.client&hl=fr_FR

mqttandroid

Sachez aussi que vous pouvez, en websocket, pousser directement les messages dans un navigateur web http://jpmens.net/2014/07/03/the-mosquitto-mqtt-broker-gets-websockets-support/

Alors c’est pas génial ? :)

Bien évidemment vous imaginez toutes les possibilités offertes par ce protocole. Certains fous furieux ont déjà commencé à coder en LUA pour la Vera, un client MQTT .

Sachez également qu’un projet domotique très prometteur inclus déjà MQTT : openHAB
Je risque donc de vous en reparler ;)

Autre chose à souligner, il existe un très bon projet : mqttwarn

mqttwarn

Ce projet est une sorte de passerelle qui s’abonne à « tout » les topics et qui se charge ensuite de les transmettre à divers clients (pushover, mysql, redis, twitter etc…)

Même votre serveur de téléphonie Asterisk peut « causer MQTT » : https://github.com/zeha/agi-mqtt

Maintenant, peut-on considérer que c’est la panacée et que cela va supplanter tout ce qui existe.
Oui et non (une bonne réponse comme je les aime).

Oui parce que l’on standardise un protocole de transport d’information et que les systèmes de messages de type MQ, sont très performant. C’est temps réel, ça marche très bien en websocket, c’est déjà inclus dans plein de langage, bref, que du bonheur. De plus, l’implémentation est facile.

Non parce que l’on standardise le transport et pas le message reçu mais cela serai toujours la bête noire (même une API Rest vous retourne un json dans la syntaxe qu’il veut, à vous de vous adapter).

Toutefois, je pense sincèrement que MQTT est un protocole terriblement intéressant et qui peut nous rendre grandement service, reste désormais à l’intégrer partout.

Amusez-vous bien :D

Classé dans architecture, domotique, geekerie | Taggé , | 6 Commentaires