Author: Sendai

  • Google assistant, webhook et MQTT

    ou comment faire la même chose mais autrement

    Alors depuis quelques temps j’ai un Google home chez moi et je suis donc en recherche de nouveaux moyens de faire des choses sans bouger du canap’. Récemment j’ai compris comment envoyer du mqtt a peu près a n’importe quel device (raspberry, arduino, etc.) pour faire des choses derrière.

     

    Dans cet exemple c’est l’execution d’un script python sur un raspberry pi.

    1ere étape, créer un compte ifttt

    ça c’est pas très compliqué, il faut lier son compte google pour activer assistant puis créer une applet quelconque

    ensuite, lors de la création de l’action a lier a ce déclencheur il faut choisir l’option webhook :

    dans mon cas j’ai choisi de mettre le webhook sur mon dédié : ca m’evite d’avoir un truc tout le temps allumé chez moi et de m’embeter avec un dyndns.

    2nde étape, MQTT

    sur le dédié j’ai installé un serveur MQTT (mosquitto sur ubuntu) auquel tous les devices iront s’inscrire. le broker MQTT ne sert qu’a transférer les messages recus provenant de plusieurs endroits (ici uniquement ifttt mais il pourrait y en avoir d’autres) vers tous les devices abonnés.

    sur le dédié :

    sudo apt-get install mosquitto

    puis lire le readme, faire la conf et lancer le service

    sur le raspberry, il faut installer un client MQTT, l’installer en tant que service afin qu’il se lance au démarrage et y coller des scripts ou autres a actionner lors de la réception de certains messages.

    le client

    voici un script python qui lance un client et permet de d’y coller des scripts :

    import paho.mqtt.client as mqtt
    from subprocess import call
    
    # Don't forget to change the variables for the MQTT broker!
    mqtt_topic = "lights/lum1"
    mqtt_broker_ip = "XXXXXXXX"
    
    client = mqtt.Client()
    
    # These functions handle what happens when the MQTT client connects
    # to the broker, and what happens then the topic receives a message
    def on_connect(client, userdata, rc, el):
        # rc is the error code returned when connecting to the broker
        print "Connected!", str(rc)
    
        # Once the client has connected to the broker, subscribe to the topic
        client.subscribe(mqtt_topic)
    
    def on_message(client, userdata, msg):
        # This function is called everytime the topic is published to.
        # If you want to check each message, and do something depending on
        # the content, the code to do this should be run in this function
    
        print "Topic: ", msg.topic + "\nMessage: " + str(msg.payload)
        if ( str(msg.payload) == "on" ):
            call("/home/pi/startupgpio")
        if msg.payload == 'off':
            call("/home/pi/offgpio")
        # The message itself is stored in the msg variable
        # and details about who sent it are stored in userdata
    
    # Here, we are telling the client which functions are to be run
    # on connecting, and on receiving a message
    client.on_connect = on_connect
    client.on_message = on_message
    
    # Once everything has been set up, we can (finally) connect to the broker
    # 1883 is the listener port that the MQTT broker is using
    client.connect(mqtt_broker_ip, 1883)
    
    # Once we have told the client to connect, let the client object run itself
    client.loop_forever()
    client.disconnect()
    

    on peut voir que ca utilise la lib python paho-mqtt :

    sudo pip install paho-mqtt

    il y a deux lignes de conf au début et un gros “if” qui lance des scripts shell (startupgpio et offgpio) en fonction du message reçus sur le topic “lights/lum1”.

    a partir de là on peut faire a peu près ce qu’on veut….

    en fonctionnement c’est aussi rapide que les commandes  normales de Google Home, peut etre une demi-seconde plus lent. L’intérêt de passer par un dédié est que je peux lancer les commandes depuis l’assistant de mon téléphone sur la 4G. Et je n’ai qu’a configurer le hostname de mon dédié dans tous mes devices, ce qui veut dire qu’ils pourraient fonctionner même s’ils sont sur des réseaux différents tant qu’ils sont connectés au net.

    Avec ifttt, il y a aussi possibilité de passer des valeurs numériques et j’aimerais bien actionner un petit servo par la voix (je ne sais pas encore pour quoi faire). Après, tout ça c’est un peu prendre un marteau pour écraser une mouche ; mais ça me permet de toucher un peu à MQTT et j’aime bien l’idée de pouvoir envoyer des commandes a des trucs chez moi pendant que je ne suis pas là… J’ai de l’esp2866 qui devrait arriver bientot, je trouverais des trucs a faire

  • plus de pages AMP !

    Juste pour signaler que je viens de supprimer les pages AMP de ce site ( et oui, durant quelques temps si on ajoutait “/amp” a la fin de n’importe quelle URL, on avait une version “optimisée” mobile). J’avais pourtant bien fait le forcing; pas seulement ici mais aussi sur le site (public.fr) dont je m’occupais à l’époque du lancement du projet AMP; il y avait effectivement un coup a jouer en terme d’audience alors que les 3/4 des concurrents n’étaient pas à jour. Aujourd’hui, ça donne plus l’impression de ré-inventer le WAP.

    J’aime bien quand un site charge vite, mais autant passer du temps pour optimiser le “vrai” site pour que tout le monde en profite, plutôt que juste la partie mobile, avec en plus des fonctionnalités manquantes et un analytics cassé.

  • Jardinage reloaded

    Une petite mise a jour pour signaler que le système d’arrosage automatique a l’air de fonctionner : je ne suis pas toujours derrière à surveiller les valeurs fournies par le capteur d’humidité du sol mais j’ai bien pu voir le niveau d’eau du réservoir baisser plus rapidement lors de la récente canicule.

    Quelques infos : je suis repassé sur un panneau solaire de 25w au lieu de 50w (qui lui est allé sur un autre projet). L’arduino consomme vraiment que dalle avec la lib de mise en veille que j’ai ajouté. Et le panneau sert donc principalement à recharger une batterie 12v qui est utilisée juste ponctuellement lorsque la pompe s’active.

    La plante quand à elle a l’air de bien grandir malgré le gel qu’il y a eu au mois de Mars et la grêle qui lui est tombée dessus un peu après.

    du coup, je pense que je vais faire la même chose sur mon balcon. J’ai investi dans une jardinière très cool. Je vais également y mettre un système d’arrosage auto (pas solaire cette fois car mon balcon n’est pas très bien exposé. Il sera donc sur secteur). Et couplé en plus avec des leds de croissance (toujours à cause de la mauvaise exposition du balcon). Les leds seront contrôlées par cronjob, soit à partir de mon raspberry pi central (celui qui contrôle déjà la lumière et affiche les horaires de train) qui n’est physiquement pas très loin, soit par un raspi Zero qui traine.

  • Youtube Live Stream Box avec un raspberry pi

    Youtube Live Stream Box avec un raspberry pi

    un truc que j’ai envie d’essayer depuis que j’ai mon appareil photo hybride plein format (un sony alpha7), c’est de faire du streaming live juste pour voir ce que ca donne quand je mets mon 80mm f/1.2 dessus. Le but étant d’avoir une méthode de streaming plus ou moins nomade. Je regardais de temps a autre et j’ai vu des solutions a 500€, ou bien d’autres solutions qui pouvaiten consister a voir un intel NUC dans un sac a dos, attaché à un “Live Gamer Portable” de avermedia (le wifi étant fourni par un hotspot de mon téléphone).

    OLYMPUS DIGITAL CAMERA

    Finalement, et étant donné que j’avais un raspberry pi 3 qui trainait chez moi (oui oui, ce genre de trucs traine chez moi, j’ai un raspi Zero qu’il faut que je trouve quoi en faire d’ailleurs), j’ai finalement commandé une carte HDMI-in qui s’interface avec l’entrée caméra du raspberry pi. le tout est de capturer le flux vidéo et de passer par ffmpeg pour envoyer tout ça a youtube (ou n’importe quel service). J’ai fait quelques test et le live a l’air de bien marcher… Pour l’instant je lance la commande en ssh mais a terme je passerais par un petit bouton qui lancera un script shell:

    raspivid -o -w 1280 -h 720 -n -awb off -t 0 -fps 30 -b 6000000 | ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h264 -i -vcodec copy -acodec aac -ab 128k -g 50 -b:v 6000k -strict experimental -f flv rtmp://a.rtmp.youtube.com/live2/XXXXXXXXXXX

    le raspi serait alimenté par une batterie externe pour portable (qui trainait aussi) et donc un cable hdmi entre raspi et camera.

    J’aimerais aussi mettre un potentiomètre pour régler le bitrate d’envoi (ainsi que du coup un ecran oled pour l’afficher). mais ce sera dans un second temps…

     

    avec ma nouvelle imprimante 3d, j’ai designé une jolie boite pour mettre tout ça dedans. Avec un peu de chance se sera prêt pour la maker faire de vendredi prochain, je pourrais tester en conditions réelles…

    truc sympa c’est qu’une fois que ce sera au point, ca marchera avec ma caméra, mais aussi n’importe quel truc qui a une sortie hdmi

  • Impression 3D

    J’ai réçu une imprimante 3D en kit (geetech prusa i3 mk 2). Cela faisait un moment que je voulais voir comment ça marche mais le prix me paraissait toujours un peu élevé…

    le kit se monte en 8h. On se demande à quoi ca va ressembler au départ puis après, ca se monte vite finalement. L’intéret de l’avoir en kit est qu’ensuite on est capable de voir ce qui marche, ce qui demande de l’amélioration, et au final on n’a pas peur de démonter pour réparer.

     

    forcément les premières impressions sont ratées mais la doc est finalement assez complète et la courbe d’apprentissage n’est pas trop dure, on a rapidement des résultats et des impressions de plus en plus propre. j’ai par exemple imprimé des pièces de remplacements pour l’imprimante qui gèrent mieux un probleme de vibration, ainsi qu’un support pour ventilo pour refroidir le plastique une fois qu’il est déposé sur la table d’impression (afin que le plastique soit plus rigide pour supporter la couche suivante).

    Le truc a la mode en ce moment c’est les hand spinner et j’ai forcément fait le mien. Mais j’ai déjà des demandes de quelques personnes…

    j’ai aussi fait des trucs utile, comme la monture pour utiliser la télécommande de mon drone sur mon vélo, en combinant deux modèles que j’ai trouvé sur thingiverse via un site de modelisation 3D.

    Je vais également pouvoir faire des boites aux bonnes dimension et pas collées a l’arrache pour tous mes petits projet d’électronique (j’ai déjà une liste de truc a faire).

    le plus gros probleme vient de la lenteur de l’impression (12h pour la monture de la télécommande par exemple : il a fallu imprimer des supports, ce qui ralenti considérablement l’impression).  Sur un WE, ca laisse pas beaucoup de temps…

  • Le projet de l’arroseur automatique (done !)

    Le projet de l’arroseur automatique (done !)

    terminé !

    un panneau solaire avec un controleur de charge qui recharge une batterie 12v. La batterie alimente un arduino qui mesure l’humidité du sol et déclenche (a l’aide d’un relais) une pompe immergée. La réserve d’eau se rempli soit avec l’eau de pluie, soit directement avec un tuyau d’arrosage.

    Je l’ai mis en place dimanche et je suis parti après, j’espère que je ne retrouverais pas la plante noyée ce WE (j’ai quand meme testé et réglé un peu avant).

    réflexion à part :

    cela fait deux projet que j’utilise le clone chinois arduino uno et un protoype shield, et c’est super chouette : il y a des rails 5v et masse, un accès à tous les pins d’entrée sortie, et ca évite de souder directement sur la carte. On peut donc changer la carte rapidement pour la mettre près d’un pc afin de changer le firmware par exemple.

     

  • Le projet de l’arroseur automatique

    J’ai vu que l’on pouvait cultiver de la vigne en pot. L’ancienne vigne n’ayant pas survécu au déménagement, je me suis donc décidé à en acheter une autre (et a changer de type de raisin, ce sera du rouge, je devrait pouvoir faire du rosé avec ça).
    Avec un pot la vigne aura moins de place pour grandir, mais elle aura pour avantage le fait que je pourrais parfaitement controler le sol, et changer l’orientation par rapport au soleil si besoin.

    Ils recommandent partout d’avoir une terre humide, mais qui ne baigne pas constamment dans l’eau. J’ai donc mélangé du terreau avec des copeaux de bois afin de garder l’humidité plus longtemps, fait un mix avec l’engrais qui va bien et au final ça donne ça (il faudrait d’ailleurs que je rajoute un peu plus de terreau) :

    maintenant, je me suis dit que ca serait bien si on pouvait trouver un truc automatique pour garder un peu d’humidité dans le pot durant les grosses chaleurs d’été. Je vais donc tenter un petit truc arduino et réutiliser le panneau solaire qui traine dans le garage depuis des mois.

    j’ai donc pensé à faire un récupérateur d’eau de pluie lié à une pompe et un capteur d’humidité. Le tout serait alimenté par le panneau solaire.

    j’ai déjà fait le code (et téléchargé une lib afin d’intégrer un mode “low power” entre chaque mesure). Le capteur d’humidité à une sortie numérique à sensibilité réglable. Du coup pas besoin de faire un analogRead. 

    Reste plus qu’a monter le matériel … Après ça reste surtout un moyen compliqué de faire quelque chose de simple. On verra ce que ça donne

  • Pedialier ovale

    Pedialier ovale

    Hier j’ai enfin pu tester mon nouveau pédialier

    Le principe est d’avoir une vitesse légèrement plus facile lorsque les jambes ne sont pas en position de puissance maximale.
    C’est surtout sensible durant les montées où on est moins facilement bloqué. On sent bien que la puissance est constante. Aussi ça fait moins mal aux genoux.

    Les dents en Narrow Wide (alternance dent large / dent fine ) sont censés éviter le déraillement du gros plateau. J’ai donc enlevé le guide chaine. J’ai moins de résistance au pédalage du coup.

  • ok google luminosité 50 !

    j’ai eu pour noel un kit de lampes philips hue contrôlables par tablette/smartphone et ma télécommande harmony.

    C’est marrant mais sortir le smartphone chaque fois que l’on veut allumer une lumière devient rapidement lassant. Même si j’ai fait les bons raccourcis sur ma tablette qui reste sur son bras articulé, à côté du canap’

    Du coup je me suis dit que j’allais utiliser le raspberry pi de chez moi, qui contrôle déjà la (lumière) liseuse et affiche les horaires du RER C le matin

    Le truc est d’utiliser les commandes vocales de Google et de commander la luminosité. Le dev est finalement très facile étant donné qu’une partie était déjà faite avec les précédents programmes :

    • Paramétrage d’autovoice pour un déclencheur au mot clé “luminosité” (détaillé dans mon post sur l’afficheur LCD, qui lui aussi peut être déclenché par la voix)
    • Paramétrage de Tasker pour faire un GET sur le serveur web de mon raspberry, avec en query string la liste de mots intercepté par la commande vocale
    • Le serveur web (en PHP parce-que … Je code tous les jours avec ce langage au boulot) parse la query string et récupère un valeur numérique et lance un script en python qui prend en paramètre la valeur numérique et ajuste la luminosité du groupe de lampes hue “salon” (j’en ai 3 des ampoules hue).

    Il existe une librairie python appelée pihue qui permet de gérer très très (très) facilement des ampoules hue.

    Au final ça rends ça :

    voici le schéma de fonctionnement de mon système :

    le raspberry possède une API REST qui concentre les demandes (provenant de différents devices, soit des commandes vocales, soit des widget que j’ai mis sur la tablette. Toutes font des requêtes HTTP vers le raspberry). En fonction des demandes, le raspberry va lancer le ou les scripts correspondants indépendamment de la technologie utilisée (philips hue, belkin wemo ou des trucs perso comme pour le LCD).

    J’ai pas fait exprès mais c’est un peu la même architecture que Mark Zuckerberg a utilisé pour faire son JARVIS@home . Si on veut un système un peu avancé, on est obligé d’avoir une machine qui centralise les demandes et qui concentre la partie métier. Les solutions de domotiques ont toutes des protocoles de communications différents et il faut quelque chose qui puisse centraliser tout ça.

    Moi c’est pas trop de l’IA mais plus des cronjobs et des commandes vocales. La plus utile est le script que j’ai sur mon smartphone : à chaque fois que je me connecte à mon wifi perso après 18h (c a d : quand je rentre du boulot et que mon wifi se trouve a portée), j’allume à 50% les lumières de l’entrée afin de ne pas être dans le noir.

    tout ça pour pouvoir larver tranquille sur le canap’