libreconnect

Plug an arduino to connect it as a websocket

View project on GitHub

English

LibreConnect Banner
Downloads
Télécharger / Aller sur madnerd.org / Vidéos

C’est quoi libreConnect ?

LibreConnect est un logiciel qui permet de contrôler des arduinos à l’aide de websockets.
Branchez un arduino sur un ordinateur ou un Raspberry Pi et contrôlez-le à l’aide de votre navigateur web
Video Demo

Aucun installation ou configuration n’est nécessaire

Toutes les applications sont des pages web statiques, aucune donnée n’est envoyée à madnerd.org

Avec une connaissance basique de HTML et JavaScript vous pouvez créer vos propres télécommandes pour contrôler des leds, capteurs, boutons, de la radio, n’importe quoi!
Pas besoin de serveur web pour utiliser ces applications, tout fonctionne dans votre navigateur web.

How it works

Appareils

Video Demo

Voici les appareils que j’ai fabriqué pour LibreConnect, ils ne coûtent pas cher et sont faciles à fabriquer.
Ils sont aussi faciles à recycler et améliorer.

Appareils

Du moment que votre code Arduino est capable d’envoyer/recevoir des commandes à l’aide de l’USB.
Vous pouvez l’utiliser avec libreconnect.
What is Arduino

Voilà quelques projets sympas , que vous pouvez faire avec libreConnect

Paramétrer LibreConnect

Paramètres

Bien qu’il ne soit pas nécessaire de paramétrer libreConnect, vous pouvez utiliser des paramètres pour

  • Utiliser votre arduino uniquement depuis votre ordinateur
  • Chiffrer / protéger à l’aide d’un mot de passe votre websocket
  • Connectez n’importe quel arduino (ou périphériques série)
  -h, --help           show this help message and exit
  --serial SERIAL      Serial port
  --port PORT          Websocket port
  --secure             Add SSL
  --power              Add power management (@reboot/@poweroff)
  --password PASSWORD  Password for the websocket
  --local              Websocket will only be available locally
  --bantime BANTIME    Seconds before a ban user is unbanned
  --retry RETRY        Number of retry before ban
  --baudrate BAUDRATE  Baudrate for serial com
  --keys KEYS          folders where SSL certificates are
  --force              Connect any serial devices
  --settings SETTINGS  Setting file
  --debug              Debug Mode
  --password_hash      Hashed password for websocket

Fichier de configuration (v1.1)

Vous pouvez utiliser un fichier de configuration (un fichier ini) pour paramétrer usb_scanner et connector
Un exemple est disponible dans le fichier libreconnect.ini.example (par défaut libreconncet.ini est utilisé)

usb_scanner --settings settings/libreconnect.ini

Ne pas connecter au réseau

Si vous voulez utiliser libreConnect uniquement sur la machine sur laquelle il est branché, ajouter simplement –local.

Il est recommandé de faire ceci si vous n’êtes pas sur votre réseau.

usb_scanner --local

Vous pourrez toujours utiliser vos applications web

Connectez n’importe quel périphérique série.

Vous n’avez pas besoin de modifier votre code arduino pour utiliser libreConnect, utiliser connector.exe à la place de usb_scanner.exe Comme libreConnect ne peut pas deviner le port série de votre arduino, vous devrez le préciser, ainsi que le baudrate et le port websocket:

./connector --serial "COM7" --baudrate 115200 --port 43100

Vous pouvez aussi utiliser la commande

usb_scanner --force --baudrate 9600

Ceci connectera tout les périphériques série avec un baudrate de 9600 en commençant par le port 40001

Mot de passe hash (v1.2)

Générer un hash pour le mot de passe (Il est conseillé de l’utiliser dans un fichier de configuration)

generate_password --password HorseBatteryStaple
usb_scanner --password_hash $argon2i$v=19$m=512,t=2,p=2$oGywE+G38a/7zx48GgG99A$NDvr/qtQ2tH4mJvUWN6zdg

Mots de passe

Les hash de mot de passe sont disponible maintenant, il n’est pas conseillé d’utiliser ce paramètre.
Je vous recommande fortement d’utiliser une connexion chiffrée où votre mot de passe sera envoyé en clair sur votre réseau. Si vous ne pouvez pas utiliser des certificats SSL, utiliser un mot de passe temporaire

usb_scanner --password HorseBatteryStaple

Voici un code pour connecter un websocket avec un mot de passe.

password = HorseBatteryStaple
ws = new WebSocket("ws://localhost:42000");
ws.onmessage = ws_onmessage;

function ws_onmessage(event){
  if(event.data == "@password"){
    ws.send(password);
  }
}

Bannisement / Essai

Vous pouvez bannir une IP qui a entré trop de fois un mauvais mot de passe. Par exemples ici, tout IP qui aura échoué de rentrer un mot de passe 5 fois, ne pourra plus se connecter pendant 60 secondes.

usb_scanner --password HorseBatteryStaple --bantime 60 --retry 5

Chiffrement

Par défaut, les websockets ne sont pas chiffrés. Pour utiliser une connexion chiffrée, il nous faut un certificat SSL

Certificat autosigné (self-signed)

Créer un certificat autosigné est relativement facile, toutefois, votre navigateur ne se connectera pas à un websocket chiffré avec un certificat autosigné.

Il vous faut valider le certificat, en allant sur l’IP et le port de votre websocket : https://ip:port.
Par example, https://localhost:42001

Un certificat SSL est disponible dans keys/ pour tester, attention, il vous faut recréer ce certificat pour vraiment avoir une communication protégé (car la clé privée est accessible publiquement)

Pour connecter vos websocket en SSL tapez:

usb_scanner --secure

Si vous voulez mettre les certificats dans un autre dossier que keys/, vous pouvez le changer comme ceci:

./usb_scanner --secure --keys "/etc/libreconnect/keys"

Dans scripts/ il y a un script (openssl.bat) pour générer un nouveau certificat

Certificat Let’s Encrypt

Vous pouvez aussi générer un certificat valide grâce à let’s encrypt.
Mais ceci est loin d’être simple et n’est utile que si vous accédez à votre websocket depuis internet.

Source: https://certbot.eff.org/#pip-other

  • Il nous faut un domaine DNS (par example devices.example.org) qui redirige vers votre adresse IP
  • Il nous faut aussi ouvrir un port 80, depuis notre router
  • Sur un terminal Raspberry Pi / Linux, tapez:
    wget https://dl.eff.org/certbot-auto
    chmod a+x certbot-auto
    

    Ceci va récupérer le programme pour générer un certificat.
    Après il nous faut générer le certificat manuellement

    ./certbot-auto certonly --manual -d devices.example.org
    
  • Suivez les instructions, et lancez un serveur web temporaire sur un autre terminal
  • Récupérer les certificats crées, et copiez les dans keys/

Allumer / Eteindre à distance

Si vous voulez pouvoir allumer/éteindre une machine à distance, vous pouvez utiliser –power

./usb_scanner --power

Puis envoyer sur le websocket:

Turn off server: @poweroff
Reboot server: @reboot

Comment libreConnect fonctionne

LibreConnect , c’est deux scripts python compilé:

  • usb_scanner cherche des périphériques USB série qui viennent d’être branchée.
  • Puis leur envoi /info
  • Si le périphérique répond device:port,
  • Alors une instance de connector.exe est crée et connecte le port série à un websocket grâce à autobahn

New device schematics

Créer ses propres applications

Compiler LibreConnect

Utiliser libreConnect sur un Raspberry Pi

Liens utiles / source

Crossbar.io - Echo_tls Autobahn example
https://github.com/crossbario/autobahn-python/tree/master/examples/twisted/websocket/echo_tls

Simplyautomationized.blogspot.fr
5 ways to secure your raspberry pi’s websocket server
http://simplyautomationized.blogspot.fr/2015/09/5-ways-to-secure-websocket-rpi.html

madnerd.org - Control Arduino with a portable app
http://www.instructables.com/id/UTest-Make-USB-Devices-With-Arduino/

License