Vous êtes sur la page 1sur 110

Table

of Contents
Préface 1.1
L'Internet des Objets 1.2
Les Objets de l'Internet 1.2.1
Modèles et architectures 1.2.2
Protocoles IoT 1.2.3
Architectures IoT 1.2.4
Labs Infrastructure 1.3
Labs OpenWRT 1.3.1
Labs Littlebits 1.4
Labs Littlebits Logic 1.4.1
Labs Cloudbits 1.4.2
Labs Raspberry Pi 1.5
Labs Pibrella 1.5.1
Labs Z-Wave 1.5.2
Labs GrovePi 1.5.3
Labs Réseau 1.5.4
Labs Cluster 1.5.5
Labs RaspiPBX 1.5.6
Labs BLE 1.6
Labs Mini-Drone Controller 1.6.1
Labs Parrot Flower Power 1.6.2
Labs Arduino 1.7

2
Préface

Préface
Ce document est un support de formation sur le sujet de l'Internet des Objets (IoT).

Objectifs
Comprendre les technologies utilisées dans le paradigme de l'Internet des Objets en
fournissant d'une part des bases conceptuelles mais aussi et surtout en menant d'autre part
des activités pratiques de hacking sur de matériel de développement et de production
"grand public".

On pourrait résumer l'objectif de ce support en une seule phrase : Ouvrir la boîte de


l'Internet de Objets.

Il s'agirait plus précisément de sensibiliser le lecteur technique à la popularité croissante de


plateformes et systèmes autres que Intel\/Windows en entreprise ou à la maison. En effet,
on proposera de s'intéresser à des matériels embarqués et légers (ARM, MIPS),
fonctionnant sous Linux et disposant la plupart du temps d'une connectivité sans fil (Wi-Fi,
BLE, Z-Wave). Mais le propos invite aussi à aborder les problématiques de contrôle et
d'automation des objets menant vers la rédaction de code et la compréhension des
architectures.

Programme
Concepts
Activités pratiques (labs)

Pré-requis
Ce sujet requiert de bonnes connaissances à la fois dans :

1. L'administration système : La gestion des environnements Linux, côté client sur des
ordinateurs embarqués, côté serveur dans le nuage (cloud)
2. L'administration réseau : L'infrastructure du réseau local, les protocoles TCP\/IP et les
architectures de l'Internet
3. Le Développement applicatif : Selon la nature du projet en scripts sémantiques, bash,

3
Préface

python, node.js.

Illustrations
Littlebits \/ cloudbits avec les modules logiques, leur API et IFTTT
Routeurs TP-Link avec OpenWRT
Raspbery pi avec Pibrella, PiGrove, Z-Wave, Hypriot, Wi-Fi et BLE
Power Plant et Minidrones Rolling Spider de Parrot (BLE)
Arduino avec Grove et Robot M-Block

Droits
CC-BY-SA
Image de couverture :
https:\/\/pixabay.com\/static\/uploads\/photo\/2014\/04\/17\/09\/40\/honey-bees-
326336_960_720.jpg

4
L'Internet des Objets

L'Internet des Objets


1. Définition
2. Marché et applications

1. Définition
Source : https://fr.wikipedia.org/wiki/Internet_des_objets#D.C3.A9finition

L'Internet des objets (IdO ou IoT pour Internet of Things en anglais) représente l'extension
d'Internet à des choses et à des lieux du monde physique.

Alors qu'Internet ne se prolonge habituellement pas au-delà du monde électronique,


l'internet des objets connectés représente les échanges d'informations et de données
provenant de dispositifs présents dans le monde réel vers le réseau Internet.

L'internet des objets est considéré comme la troisième évolution de l'Internet, baptisée Web
3.0 qui fait suite à l'ère du Web social.

L'internet des objets revêt un caractère universel pour désigner des objets connectés aux
usages variés, dans le domaine de la e-santé, de la domotique ou du Quantified Self.

L'internet des objets est en partie responsable d'un accroissement exponentiel du volume de
données générées sur le réseau, à l'origine du Big Data.

5
L'Internet des Objets

Selon une équipe de l'ETH de Zurich avec les smartphones puis un nombre croissant
d'objets connectés, en dix ans (2015-2025) 150 milliards d'objets devraient se connecter
entre eux, avec l'internet et avec plusieurs milliards de personnes.

Source : http://www.i-scoop.eu/internet-of-things/

2. Marché et applications

6
L'Internet des Objets

Le nombre de connexions entre des personnes et de choses et la quantité de données


générées étaient précédemment inimaginable. Une explosion du nombre de périphériques
avec un accès à la puissance de l'Internet permet de nouvelles interactions intelligentes
entre ces choses. On considère que l'ère de l'IOT a commencé à partir du moment où le
nombre d'objets connectés a dépassé le nombre d'êtres humains sur le globe.

L'impact de l'IoT sur l'économie couvre aussi bien les industries que les marchés verticaux.
Il s'agit d'économiser des coûts d'exploitation grâce aux avantages de l'IoT comme par
exemple dans l'industrie des énergies fossiles.

Pour les fournisseurs d'équipement réseau et d'applications, l'IoT représente potentiellement


une énorme opportunité de marché. Différentes tendances sont apparues ces dernières
années et annoncent ensembles l'émergence du marché IoT :

Croissance rapide des données et de leurs analyses disponibles grâce à l'informatique


en nuage Cloud Computing
Croissance rapide des prériphériques mobiles intelligents
Augmentation de l'interconnectivité entre des périphériques industriels, opérationnels et
mobiles
Convergence des réseaux industriels et d'entreprise pour rendre disponible des
applications comme la vidéosurveillance, la prise de mesure intelligente, le suivi d'actifs,
la gestion de véhicules, la surveillance de la santé, etc.

Source : Cisco Systems,


http://cdn.iotwf.com/resources/71/IoT_Reference_Model_White_Paper_June_4_2014.pdf

Les applications IoT les plus populaires sont :

1. La maison intelligente : thermostats, ampoules, frigo, fermtures de portes intelligents


2. Les vêtements connectés : montres, bracelets et lunettes intelligentes
3. Les villes intelligentes : parking et gestion des déchets intelligents

7
L'Internet des Objets

Source : https://iot-analytics.com/10-internet-of-things-applications/

On pourrait segmenter le marché IoT à la manière de iot-analytics.com :

Le marché est ici divisé selon le type de clientèle "grand public" et "Entreprise".

Le marché entreprise peut se diviser en huit catégories verticales :

1. Retail
i. Stores
ii. Shop
iii. Convenience
2. Health
i. Monitoring

8
L'Internet des Objets

ii. Mesasurement
iii. Diagnosis
iv. Surgey
v. Patient care
3. Energy
i. Transmission & Disribution
ii. Fossil
iii. Nuclear
iv. Alternative
4. Mobility
i. Aerospace & Airports
ii. Marine
iii. Rail & Stations
iv. Automotive
v. Alternative
5. Cities
i. Infrastructure
ii. Water /Wasterwater
iii. HVAC
iv. Lighting
v. Security
vi. Life safety
6. Manufactures
i. Mining
ii. Oil & Gas
iii. Discrete production
iv. Continuous production
v. Supply chain
7. Public & Services
i. Schools
ii. Universities
iii. Banking
iv. Insurance
v. Administration
vi. Commercial services
8. Others
Environment
Military
Agriculture
Hospitality

9
L'Internet des Objets

Le marché "Grand public" peut se diviser en quatre catégories :

1. Maison (Home)
i. Home automation
ii. Home Improvment
iii. Energy Efficiency
2. Syle de vie (Lifestyle)
i. Wearable Comuting
ii. Entertainment & Music
iii. Family
iv. Leisure
v. Pets
vi. Toys
vii. Drones
3. Santé (Health)
i. Fitness
ii. Monitoring
iii. Measurment
iv. Diagnosis
4. Mobilité
i. Connnected cars
ii. eBikes

Selon https://iot-analytics.com/iot-market-segments-analysis/, le marché "entreprise" prend


autant de parts que le marché "grand public". Le segment "Manufacturing et "Healthcare"
sont certainement les plus prometteurs dans le marché "entreprise". Les voitures
connectées, le secteur de l'énergie et du "Manufactoring" seront les plus actifs.

Toujours selon la même étude, ce sont les catégories "Home" et "Lifestyle" qui seront les
plus remarquables dans le marché "Grand public".

Le nombre d'objets connectés qui sont mis sur le marché augmentant de jour en jour, il
serait vain de les énoncer ici. Il suffit de trouver un rayon domotique, drones ou wearables
ou solutions multimédia pour trouver son bonheur.

On citera ici du matériel de lab de classe de formation en vue de comprendre le


fonctionnement du paradigme IoT. La plupart des plate-formes proposées ici si elles ne sont
pas entièrement open source du matériel au logiciel, sont suffisamment ouvertes et
intéressantes à titre de prototype et pour du développement.

10
Les Objets de l'Internet

Les Objets de l'Internet


1. Les objets de l'Internet, les SoC
2. Plateformes IoT
Processeurs
Architectures ARM
SoC ARM
Architecture ARM
Architecture MIPS
3. Matériel industriel
4. Matériel en production grand public
5. Matériel de développement

1. Les objets de l'Internet, les SoC


Définition Wikipedia : Un système sur une puce, également souvent désigné dans la
littérature scientifique par le terme anglais system on a chip (d'où son abréviation SoC), est
un système complet embarqué sur une seule puce, pouvant comprendre de la mémoire, un
ou plusieurs microprocesseurs, des périphériques d'interface, ou tout autre composant
nécessaire à la réalisation de la fonction attendue. On peut intégrer de la logique, de la
mémoire (statique, dynamique, flash, ROM, PROM, EPROM, EEPROM), des dispositifs
(capteurs) mécaniques, opto-électroniques, chimiques ou biologiques ou des circuits radio.

2. Plateformes IoT
MIPS
ARM
X86
PowerPC

Processeurs

11
Les Objets de l'Internet

ARM Intel/AMD

Architecture RISC Architecture CISC


A performance égale, réduction des coûts de Complexité matérielle plus coûteuse
production et meilleure efficacité thermique (AMD Jaguar 28nm 3.1mm²) en
(ARM Cortex-A15 28nm 1.62mm²) conception et en énergie
Stratégie commerciale : licence Intel/AMD

Unix Unix / Windows


Bootloader Bios

Architectures ARM
Les architectures ARM sont des architectures matérielles RISC 32 bits (ARMv1 à ARMv7) et
64 bits (ARMv8)1 développées par ARM Ltd depuis 1990 et introduites à partir de 1983 par
Acorn Computers.

Dotés d'une architecture relativement plus simple que d'autres familles de processeurs, et
bénéficiant d'une faible consommation, les processeurs ARM sont devenus dominants dans
le domaine de l'informatique embarquée, en particulier la téléphonie mobile et les tablettes.

Ces processeurs sont fabriqués sous licence par un grand nombre de constructeurs.

SoC ARM
Aujourd'hui, ARM est surtout connu pour ses SoC, intégrant sur une seule puce,
microprocesseur, processeur graphique (GPU), DSP, FPU, SIMD, et contrôleur de
périphériques. Ceux-ci sont présents dans la majorité des smartphones et tablettes. ARM
propose des architectures, qui sont vendues sous licence de propriété intellectuelle aux
concepteurs. Ils proposent différentes options dans lesquelles les constructeurs peuvent
prendre ce qui les intéresse pour compléter avec leurs options propres ou de concepteurs
tiers. ARM propose ainsi pour les SoC les plus récents, les microprocesseurs Cortex
(Cortex-A pour l'appliance, Cortex-M pour le couplage à un microcontrôleur, Cortex-R pour
les microprocesseurs temps réel), des processeurs graphiques (Mali), des bus AMBA sous
licence libre, ainsi que les divers autres composants nécessaires à la composition du SoC
complet. Certains constructeurs, comme Nvidia préfèrent produire leur propre processeur
graphique, d'autres, comme Samsung, préfèrent prendre dans certains cas un processeur
graphique de prestataire tiers ou d'ARM selon les modèles, et d'autres, comme Apple,
modifient certains composants du microprocesseur en mélangeant plusieurs architectures
processeur ARM (l'Apple A6 par exemple, mixe les technologies de microprocesseur
Cortex-A9 et Cortex-A15).

12
Les Objets de l'Internet

Architecture ARM
L'architecture ARM a initialement été développée en interne par la société britannique Acorn
Computers, qui l'utilisa à partir de 1987 dans sa gamme d'ordinateurs 32 bits Archimedes.
ARM signifiait alors 'Acorn Risc Machine'. Ultérieurement la division « création de
microprocesseurs » d'Acorn fut détachée de la société mère et devint la société « Advanced
Risc Machine limited », se positionnant avec une offre indépendante pour le marché de
l'électronique embarquée.

Une particularité des processeurs ARM est leur mode de vente. En effet, ARM Ltd. ne
fabrique ni ne vend ses processeurs sous forme de circuits intégrés. La société vend les
licences de ses processeurs de manière à ce qu'ils soient gravés dans le silicium par
d'autres fabricants. Aujourd'hui, la plupart des grands fondeurs de puces proposent de
l'architecture ARM.

Le coeur le plus célèbre est l’ARM7TDMI[réf. souhaitée] qui comporte trois niveaux de
pipeline. De plus, le ARM7TDMI dispose d'un second jeu d'instructions appelé THUMB
permettant le codage d'instructions sur 16 bits et, ainsi, de réaliser un gain de mémoire
important, notamment pour les applications embarquées.

ARM Ltd. a ensuite développé le coeur ARM9 qui comporte 5 niveaux de pipeline. Cela
permet ainsi l'augmentation du nombre d'opérations logiques sur chaque cycle d'horloge et
donc une amélioration des performances en vitesse.

L'architecture ARM est utilisée dans de très nombreux domaines et équipe par exemple les
calculatrices TI-Nspire. Cette architecture est notamment très répandue dans la téléphonie
mobile.

De nombreux systèmes d'exploitation sont compatibles avec cette architecture :

Symbian S60 avec les Nokia N97 ou Samsung Player HD ;


iOS avec l'iPhone et l'iPad ;
Linux, avec la plupart des distributions ou avec Android ;
BlackBerry OS avec les BlackBerry
Windows CE, Windows Phone 7 et Windows RT2, une version de Windows 8.
le système PlayStation Vita
Risc OS
etc.

Le monde des ordinateurs portables pourrait connaître prochainement une évolution avec le
remplacement progressif des processeurs x86 par l'architecture ARM. Windows 8 est
compatible avec cette architecture (avec certaines limitations), tout comme Google Chrome
OS. L'utilisation de l'architecture ARM devrait permettre la réduction de la consommation
électrique.

13
Les Objets de l'Internet

En revanche, les fondeurs des processeurs x86 (Intel et AMD) se préparent à cette
concurrence en réduisant la consommation électrique de leurs solutions et en simplifiant
leurs architectures, comme avec les Atom et Bobcat, par exemple en intégrant les capacités
graphiques avec le processeur. De l'autre côté, les fondeurs des SoC à base d'architecture
ARM, comme NVidia et Qualcomm, continuent d'augmenter les performances de leurs
puces, par exemple en augmentant le nombre de coeurs ou en ajoutant de nouvelles
instructions.

Il est également possible d’agglomérer différents coeurs de différentes puissances, les plus
faibles en consommation et puissance travaillant la majorité du temps, afin de minimiser la
consommation électrique et des coeurs plus puissants activés uniquement en cas de forte
demande de calcul afin d'en accélérer le traitement. Cette technologie est appelée
big.LITTLE, elle est utilisée par Samsung, avec ses Exynos 5 octo (4 cortex-A7 faible
consommation et 4 cortex-A15 de forte puissance), MediaTek et d'autres. Le Tegra 3 de
NVidia, utilise une technique similaire avec un seul coeur de faible consommation et
plusieurs de forte puissance.

Source : https://fr.wikipedia.org/wiki/Architecture_ARM

Architecture MIPS
L'architecture MIPS (de l'anglais : microprocessor without interlocked pipeline stages) est
une architecture de processeur de type Reduced instruction set computer (RISC)
développée par la société MIPS Technologies (alors appelée MIPS Computer Systems),
basée à Mountain View en Californie.

Les processeurs fabriqués selon cette architecture ont surtout été utilisés dans les systèmes
SGI. On les retrouve aussi dans plusieurs systèmes embarqués, comme les ordinateurs de
poche, les routeurs Cisco et les consoles de jeux vidéo (Nintendo 64 et Sony PlayStation,
PlayStation 2 et PSP).

Vers la fin des années 1990, on estimait que les processeurs dérivés de l'architecture MIPS
occupaient le tiers des processeurs RISC produits.

De nos jours cette architecture reste populaire dans le marché de l'informatique embarquée
où elle subit une intense concurrence de la part de l'architecture ARM.

Les MIPS sont aussi présents dans des routeurs ou des NAS, mais ils deviennent aussi de
plus en plus rares dans ce domaine face à la concurrence des ARM, PowerPC et x86 basse
consommation.

Malgré tout, les MIPS reviennent peu à peu dans le marché de l'informatique à haute
performance grâce aux recherches menées par la Chine avec les processeurs Loongson qui
ont été utilisés pour la création du supercalculateur Dawning 5000L et 6000.

14
Les Objets de l'Internet

En 2015, la Russie annonce vouloir remplacer les processeurs conçus par des sociétés des
États-Unis par des processeurs locaux dans les systèmes informatique nationaux. Les
processeurs d'architecture MIPS, Baikal T1 de la société russe spécialisée dans les
supercalculateurs T-Platforms sont alors choisis. il est soutenu pour sa conception par le
conglomérat de la défense Rostec et co-financé par l'entreprise publique russe Rosnano
(Роснано).

Source : https://fr.wikipedia.org/wiki/Architecture_MIPS

3. Matériel industriel
...

4. Matériel en production grand public


1. Game Nest
2. Game Fibaro
3. Chromecats
4. Apple Watch
5. Philips Hue
6. TV box
7. Parrot
8. et beaucoup d'autres

5. Matériel de développement
1. Embarqué MIPS / Intel avec OpenWRT, Arch Linux ou Debian/Ubuntu
2. Littlebits : moudule Cloudbit, modules logiques et module arduino
3. Raspberry pi : Pibrella, Z-Wave, Grove, Réseau infra, Cluster
4. Parrot Power Flower et Minidrone Rolling Spider en BLE (Linux, Mac et RPi)
5. Arduino en Wi-Fi/BLE

Voir aussi http://postscapes.com/internet-of-things-hardware

15
Modèles et architectures

Modèles de référence
L'Internet de Objets demande un modèle de référence qui permettrait de décrire la manière
avec laquelle ces systèmes, ces réseaux et ces applications interagissent entre eux. En
effet, un tel modèle aurait les avantages de

Simplifier la compréhension de systèmes complexes découpés en parties plus


compréhensibles
Clarifier en fournissant des informations supplémentaires identifiant les niveaux de l'IoT
et fournissant une terminoologie commune
identifier où des types spécifiques de traitement sont optimisés dans les différentes
parties du système
Standardiser pour créer les conditions d'une inter-opérabilité entre des produits IoT de
différents fabriquants
Organiser rend l'IoT plus accessible et moins conceptuel

Cisco Systems propose un modèle en sept couches qui découpe les opérations IoT en sept
niveaux distincts chacun correspond à une fonction dans le processus de traitement. Il ne
faut pas voir ce modèle comme étant strictement défini quant aux composants ou aux
endroits. Par exemple chaque fonction peut être combinée dans une seule armoire dans un
centre de données ou être distribuée sur différents périphériques répartis dans le monde. Le
modèle explique comment les tâches exécutés au niveau de chaque couche peut être
maintenue de manière simple, avec haute disponibilité et support. Enfin, le modèle définit
les conditions pour disposer d'un système IoT complet.

16
Modèles et architectures

Le modèle de référence IoT en sept couches décrit deux flux :

dans un modèle de contrôle, un flux descendant, de la couche 7 à la couche 1


dans un modèle de surveillance, un flux montant, de la couche 1 à la couche 7

Sources :
http://cdn.iotwf.com/resources/71/IoT_Reference_Model_White_Paper_June_4_2014.pdf,
https://www.cisco.com/web/PH/ciscoconnect/pdf/bigdata/jim_green_cisco_connect.pdf

17
Protocoles IoT

Protocoles IoT
1. Protocoles d'accès
Protocoles M2M / WPAN / WBAN
Protocoles LAN
Protocoles WAN
2. Protocoles Applicatifs

1. Protocoles d'accès
Protocoles M2M / WPAN / WBAN
BLE
ZigBee
Z-Wave
Autres RF voir grove et Littlebits

Protocoles LAN
Ethernet
Wi-Fi

Protocoles WAN
Ethernet
xDSL / DOCSIS
GSM

2. Protocoles Applicatifs
IPv4 / IPv6 / 6LoWPAN
TCP/UDP
HTTP
UPnP
CoAP
MQTT
XMPP

18
Protocoles IoT

Services IoT
Protocole de passerelle
Sécurité et interopérabilté

19
Architectures IoT

Architectures IoT
Architectures
Rôle de l'infonuagique (cloud)
1. Graphes
2. Services MQTT Broker gratuits
3. Service IFTTT
4. Node-Red
5. Plateformes de développement IoT

Source : https://www.linkedin.com/pulse/simple-steps-learn-iot-architecture-brucelin-kithion

Architectures
http://postscapes.com/internet-of-things-protocols
http://iot.eclipse.org/standards
https://eclipse.org/community/eclipse_newsletter/2014/february/article2.php
http://electronicdesign.com/iot/mqtt-and-coap-underlying-protocols-iot
http://www.openiot.eu/
http://www.iot-a.eu/public/public-documents/d1.5/view

Rôle de l'infonuagique (cloud)


...

1. Graphes
https://emoncms.org/
Xively
Google charts

2. Services MQTT Broker gratuits


This page is an effort to list the publically-accessible MQTT brokers, often useful for testing
and prototyping.

Note: none of these test brokers carry any guarantee of service. Be sensible when using
them and don't break things for others! :-)

20
Architectures IoT

field value

address iot.eclipse.org

port 1883 , 80 (WebSockets)

type mosquitto

info web page, Xively statistics, topics and HTTP bridge

field value
address test.mosquitto.org

port 1883 , 8883 (SSL), 8884 (SSL), 80 (WebSockets)

type mosquitto

info web page, Xively statistics, topics and HTTP bridge

field value
address dev.rabbitmq.com

port 1883

type rabbitmq
info admin dashboard

field value
address broker.mqttdashboard.com

port 1883 , 8000 (WebSockets)

type HiveMQ

info information page, stastistics and dashboard

field value
address q.m2m.io

port 1883

type m2m.io

info requires signup/username and password, connecting to m2m.io

21
Architectures IoT

field value

address www.cloudmqtt.com (Note: actual host varies, see dashboard)

port 18443 , 28443 (SSL)

type mosquitto

requires signup/username and password, pricing (free plan available),


info
documentation

field value
address mqtt.simpleml.com

1883 (MQTT), 8883 (MQTT+SSL), 80 (REST), 80 (WebSockets),


port
5683 (CoAP)

type SimpleML
info Free MQTT service to evaluate Machine Learning models, documentation

field value
address mqtt.kgbvax.net

port 1883 (MQTT)

type mosquitto
info Free shared instance, currently supports persistence

3. Service IFTTT
IFTTT : "If This Then That" service gratuit qui fournit des constructions conditionnelles,
appelées des recettes (recipes). Ces recettes font entrer en jeu des déclenchements et des
actions par des services Web ou des objets connectés.

Par exemple, un courrier électronique reçu sur un compte Gmail déclenche un message
Twitter, change la couleur d'une ampoule Hue ou enregistre la pièce attachée sur un compte
Dropbox.

Le fournisseur connecte un nombre impressionnant de contrustructeur et de prestataires


SaaS.

4. Node-Red
Logiciels :
Node-RED : https://en.wikipedia.org/wiki/Node-RED, http://nodered.org/docs/

22
Architectures IoT

...

5. Plateformes de développement IoT


IBM Watson Bluemix http://www.ibm.com/Search/?
q=IoT+Raspberry+Pi&v=18&en=utf&lang=en&cc=us&sn=dw&dws=dw&hpp=20,
https://www.iot-academy.info/
Google https://cloud.google.com/solutions/iot-overview
https://www.carriots.com/
https://exosite.com/
https://tinamous.com/
https://thingspeak.com/
http://ubidots.com/
https://evrythng.com/

23
Labs Infrastructure

Labs Infrastructure
Routeurs OpenWRT
Mirabox
APU1D4
Mikrotik (RouterOS)

Routeurs OpenWRT
16 X v8.2 et v9

inventaire

https://fr.wikipedia.org/wiki/Architecture_MIPS
https://wiki.openwrt.org/toh/tp-link/tl-wr841nd

Mirabox

24
Labs Infrastructure

1 X -

https://archlinuxarm.org/platforms/armv7/marvell/mirabox

1.2Ghz Marvell Armada 370


802.11b/g/n wireless with Marvell 88W8787 and Bluetooth 3.0
1GB NAND Flash / 1GB DDR3 RAM
2x Gigabit Ethernet
2x USB 3.0
1 external and 1 internal micro SD slots (USB-connected)
Internal Mini PCIe slot for expansion

APU1D4
1 X -

http://pcengines.ch/apu1d4.htm

Mikrotik (RouterOS)

25
Labs Infrastructure

Mikrotik CRS125-24G-1S-2HnD-IN
Mikrotik RB

26
Labs OpenWRT

Labs OpenWRT
1. Matériel nécessaire
1.1. TL-WR841ND
TL-WR810N
1.2. Logiciels Console/Telnet/SSH
1.3. Images OpenWrt pour TL-WR841ND
TL-WR841N(D) v8
TL-WR841N(D) v9
TL-WR841N(D) v10
TL-WR841N(D) v11
1.4. Mise-à-jour vers OpenWRT
Objectif
Matériel nécessaire
Procédure
2. Remise à zéro
2.1. Démarrage en mode sans échec
2.2. Remise à zéro de la configuration
3. Mise-à-jour du système en version stable
3.1. Placer le dernier firmware sur le routeur
Première Option
Seconde Option
3.2. Mise à jour du firmware OpenWRT
4. Vérification du réseau
4.1. Vérification des interfaces
4.2. Analyse de la table de routage IPv4
4.3. Analyse de la table de routage IPv6
4.4. Vérification du trajet à travers l'Internet
4.5. On peut aussi procéder à un ping stratégique
4.6. Vérification DNS
4.7. Redémarrage du réseau
4.8. Configuration TCP/IP du noyau
5. Fichiers de configuration
5.1. Services
5.2. Liste des fichiers
5.3. Lire le contenu d’un fichier avec le programme cat
5.4. Lire le contenu d’un fichier avec le programme less
5.5. Faire une copie d’un fichier

27
Labs OpenWRT

6. Configuration de la passerelle
6.1. Activation de SSH
6.2. Configuration de l’interface br-lan en bash
6.3. Configuration des paramètres système
6.4. Modification du port HTTP d’administration (commandes UCI)
7. Examen de l’interface graphique
7.1. Redémarrage
7.2. Accès Web
7.3. Menu Status
7.4. Menu System
7.5. Menu Network
Interfaces
Wifi
Switch
DHCP et DNS
Hostnames
Static routes
Firewall
Diagnostics
8. Activités étendues

1. Matériel nécessaire
1.1. TL-WR841ND

28
Labs OpenWRT

Pages officielles

http://www.tp-link.com/lk/products/details/?model=TL-WR841ND#spec
http://wiki.openwrt.org/toh/tp-link/tl-wr841nd
http://www.amazon.fr/dp/B0019EQ1RW/ref=wl_it_dp_o_pC_S_ttl?
_encoding=UTF8&colid=3U2BD7X6Y9Y31&coliid=I2SCI8P495BZJX

Il existe plusieurs versions du matériel, ce qui implique plusieurs versions du firmware pour
un même modèle. On peut encore trouver aujourd'hui des versions 8, 9, 10 et 11. Voici les
caractéristiques de ce matériel :

Processeur : AR9341 (v8), QCA9533-AL3A (v9, v10 et v11) cadencés entre 535 et 560
MHz
Flash : 4 Mo
RAM : 32 Mo
Wireless 802.11bgn
Switch Ethernet (différent v8/v9) avec 5 ports 100 Mbps

Autant de services supportés sur un système de fichiers de 4 Mo est remarquable !

On observe sur ce matériel :

5 ports Ethernet 10/100 Mbps


deux antennes Wi-Fi qui étendent une interface de réseau sans fil
un bouton On/Off
un bouton reset

29
Labs OpenWRT

Aussi d'un point de vue logique, voici l'agencement des interfaces :

4 ports LAN : Switch0 eth0


1 port WAN eth1
Interface Wi-Fi wlan0
LAN : Pont (bridge) VLAN x + Wi-Fi br-lan

TL-WR810N
En 2016, on proposera le TL-WR810N, un modèle d'expérimentation plus compact, plus
performant et bon marché.

https://wiki.openwrt.org/toh/tp-link/tl-wr810n
Processeur : Qualcomm Atheros QCA9531-BL3A cadencé à 650 MHz
Flash : 8 Mo
RAM : 364 Mo
Wireless 802.11bgn
Switch Ethernet avec 2 ports 100 Mbps

1.2. Logiciels Console/Telnet/SSH


putty.exe
pscp.exe
plink.exe
WinSCP

1.3. Images OpenWrt pour TL-WR841ND


Versions Trunk ou Stable
Images Factory ou Sysupgrade

30
Labs OpenWRT

TL-WR841N(D) v8
version 15.05
image factory :
https://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/openwrt-
15.05.1-ar71xx-generic-tl-wr841n-v8-squashfs-factory.bin
image sysupgrade :
https://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/openwrt-
15.05.1-ar71xx-generic-tl-wr841n-v8-squashfs-sysupgrade.bin

TL-WR841N(D) v9
Version 15.05 :
image factory :
https://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/openwrt-
15.05.1-ar71xx-generic-tl-wr841n-v9-squashfs-factory.bin
image sysupgrade :
https://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/openwrt-
15.05.1-ar71xx-generic-tl-wr841n-v9-squashfs-sysupgrade.bin
Version Trunk :
https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/openwrt-ar71xx-generic-
tl-wr841-v9-squashfs-sysupgrade.bin

TL-WR841N(D) v10
Version 15.05.1 :
image factory :
https://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/openwrt-
15.05.1-ar71xx-generic-tl-wr841n-v10-squashfs-factory.bin
image sysupgrade :
https://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/openwrt-
15.05.1-ar71xx-generic-tl-wr841n-v10-squashfs-sysupgrade.bin

TL-WR841N(D) v11
Version DD trunk :
image factory :
https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/openwrt-ar71xx-
generic-tl-wr841-v11-squashfs-factory.bin
image sysupgrade :
https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/openwrt-ar71xx-

31
Labs OpenWRT

generic-tl-wr841-v11-squashfs-sysupgrade.bin

1.4. Mise-à-jour vers OpenWRT


Cette étape est nécessaire uniquement pour passer du système TP-LINK vers un système
OpenWRT. L'image utilisée est l'image factory qui est une image compilée pour le flasheur
de bootloader ou le logiciel de flash d'origine.

Soit le matériel est neuf, soit on a procédé à la restauration du logiciel original


(https://wiki.openwrt.org/toh/tp-link/tl-wr841nd#go_back_to_original_firmware).

Objectif
Remplacer le firmware TP-Link original par celui d’OpenWRT (version Trunk ou Stable) et
réaliser une configuration minimale. L’activité peut prendre 30 minutes. L’intérêt est de
manipuler le matériel réseau avec un OS ouvert, évolutif, stable et facile à prendre en main.

Matériel nécessaire
une station de travail
une connexion Internet
un routeur TL-841ND v9.0
le firmware correpsondant (image Factory)

Procédure
Etape 1 : Identification de la version du matériel

Vérifier la version Hardware au verso du matériel.

Se procurer le Firmware (Version Trunk pour TL-841ND v9.0) à l’adresse suivante :


http://downloads.openwrt.org/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-tl-
wr841n-v9-squashfs-factory.bin
Se procurer le Firmware (Version Trunk pour TL-841ND v8.2) :
http://downloads.openwrt.org/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-tl-
wr841n-v8-squashfs-factory.bin

Etape 2 : Connectique et démarrage

Connectique : connexion de la station de travail à un port LAN (jaune) et l’Internet sur le


port WAN (bleu).
Allumer le routeur.
Le routeur offrira par défaut des adresses IP dans la plage 192.168.0.0/24 sur son

32
Labs OpenWRT

interface LAN.

Etape 3 : Mise à jour

Mise à jour du firmware. Le routeur est accessible par défaut en HTTP sur l’adresse
192.168.0.1.

Ouvrir un navigateur Web et se rendre à l’adresse http://192.168.0.1/ (admin:admin)


Aller dans le menu System Tools/Firmware Upgrade, choisir le fichier du firmware et
appuyer sur le bouton “Upgrade”.
Patienter plusieurs minutes le temps du redémarrage.

Etape 4 : Installation de l'interface graphique

Après la mise à jour, le routeur dispose d’une nouvelle adresse IPv4 en 192.168.1.1.
L’adresse de la station de travail a changé également de manière dynamique.

Pour installer l’interface graphique.

A partir de la station de travail, se connecter avec le logiciel putty en Telnet sur l’adresse
du routeur 192.168.1.1
Mettre à jour la liste des paquetages : opkg update
Installer l’interface Web graphique : opkg install luci
Lancer le serveur Web à chaque redémarrage : /etc/init.d/uhttpd enable
Démarrer le serveur Web : /etc/init.d/uhttpd start

Etape 5 : Interface Web

Accéder au routeur via l'interface désormais à l'écoute sur la nouvelle adresse


http://192.168.1.1/

2. Remise à zéro
2.1. Démarrage en mode sans échec
Cette opération permet de reprendre la main sur le routeur en le démarrant en mode sans
échec (Failsafe boot).

OpenWrt possède un mode de démarrage sans échec interne qui essaye de contourner
tous les paramètres de configuration en faveur de quelques paramètres inscrits en dur dans
le code. Une fois entré dans ce mode, le routeur devient accessible à l'adresse
192.168.1.1/24 (même si la configuration est fixée à une autre valeur) avec seulement les
services essentiels qui fonctionnent. Depuis cet état (démarrage sans échec), vous pouvez
vous reconnecter via telnet (à l'adresse 192.168.1.1) et régler certains problèmes.

33
Labs OpenWRT

Sources et compléments : http://wiki.openwrt.org/fr/doc/howto/generic.failsafe

1. Eteindre le routeur
2. Déconnecter la connexion “Wan” du routeur
3. Connecter le PC à un port “Lan” du routeur
4. Maintenir sont doigt sur le bouton reset pendant plus de 30 secondes en rebranchant
l’alimentation, la dernière diode clignote rapidement

2.2. Remise à zéro de la configuration


En réalité, le système lui-même est présent sur une partition en lecture seule. Toute
modification ou ajout au firmware original est enregistré dans une partition “rootfs_data”.
“mtd” est le logiciel qui permet d’agir sur des disques Flash.

Sources et compléments : http://wiki.openwrt.org/fr/doc/techref/flash.layout

1. (Fixer l’adresse IP de l’interface du PC à 192.168.1.2/24)


2. Lancer un telnet 192.168.1.1 et lire le message d’accueil ? Quelle est l’information
importante à retenir ?
3. Effacer la configuration : mtd -r erase rootfs_data

3. Mise-à-jour du système en version stable


La dernière version stable est déjà compilée avec l’interface graphique. On devra se passer
d’une interface graphique avec la version Trunk téléchargée.

Sources et compléments :

http://wiki.openwrt.org/fr/about/latest,
http://wiki.openwrt.org/doc/howto/generic.sysupgrade,
http://wiki.openwrt.org/doc/techref/sysupgrade

3.1. Placer le dernier firmware sur le routeur


Deux options sont disponibles :

Avec une connexion Internet, à partir du routeur


En transférant le fichier du firmware par SSH

Première Option
Directement à partir du routeur avec vérification d’intégrité (connexion WAN nécessaire),
veuillez adapter les URLs :

34
Labs OpenWRT

1. Lancer un telnet 192.168.1.1


2. se rendre dans le dossier /tmp : cd /tmp
3. Télécharger le dernier firmware : par exemple, wget
http://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/openwrt-ar71xx-

generic-tl-wr841n-v9-squashfs-sysupgrade.bin

4. Télécharger la somme de contrôle MD5 : wget


http://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/md5sums

5. Lancer la vérification : md5sum -c md5sums 2> /dev/null | grep OK

Seconde Option
En SSH/SCP à partir d’une station de travail Windows.

Sur le routeur, activer SSH en changeant le mot de passe (de de l’utilisateur root) :
passwd

Sortie de la session telnet : exit


Installer pscp.exe sur son pc (Equivalent Linux scp ) ou via WinSCP (client graphique)
placer le firmware sur le routeur en une seule ligne : pscp -scp openwrt-*-
sysupgrade.bin root@192.168.1.1:/tmp/

3.2. Mise à jour du firmware OpenWRT


Exécution de la commande : sysupgrade -v /tmp/openwrt-*-sysupgrade.bin

4. Vérification du réseau
Sources et compléments : http://wiki.openwrt.org/doc/uci/network

4.1. Vérification des interfaces

ifconfig -a

Quelles sont les interfaces ?


Leur état
Leur adresse IPv4
Leurs adresses IPv6
Leur usage/type

4.2. Analyse de la table de routage IPv4

35
Labs OpenWRT

route

4.3. Analyse de la table de routage IPv6

route -A inet6

4.4. Vérification du trajet à travers l'Internet

traceroute www.google.com

4.5. On peut aussi procéder à un ping stratégique

ping www.google.com

ping 8.8.8.8

ping 192.168.1.1

4.6. Vérification DNS


Résolveur de nom :

cat /etc/resolv.conf

cat /tmp/resolv.conf.auto

Résolution de nom :

nslookup www.google.com

4.7. Redémarrage du réseau

/etc/init.d/network restart

4.8. Configuration TCP/IP du noyau

cat /etc/sysctl.conf

36
Labs OpenWRT

5. Fichiers de configuration
5.1. Services

ps

top

ps | grep uhttpd

ps | grep dropbear

5.2. Liste des fichiers

ls -l /etc/config/

dhcp : service DHCP/DHCPv6

dropbear : service SSH

firewall : service firewall Netfilter

luci : application graphique

network : interfaces TCP/IP

system : système ()

ubootenv : démarrage

ucitrack : correspondance entre UCI et les services

uhttpd : service WEB

wireless : interfaces wi-fi

5.3. Lire le contenu d’un fichier avec le programme cat

cat /etc/config/wireless

5.4. Lire le contenu d’un fichier avec le programme less

less /etc/config/network

5.5. Faire une copie d’un fichier


Copie d'un fichier texte avec cat :

37
Labs OpenWRT

cat /etc/config/network > /etc/config/network.old


ls -l /etc/config/net*

Plus simplement copier avec la commande cp :

cp /etc/config/wireless /etc/config/wireless.old
ls -l /etc/config/wi*

6. Configuration de la passerelle
Le but de l'exercice est de monter une passerelle OpenWRT selon le modèle présenté ci-
dessus.

Les tâches consistent à configurer et activer différents services :

Activer un service sécurisé d'accès distant


Activer l'adressage IP côté LAN et côté WAN
Vérifier le routage
Vérifier les services IP
DHCP

38
Labs OpenWRT

Neighbor Discovery IPv6


DHCPv6
DNS
Firewall

6.1. Activation de SSH

passwd

6.2. Configuration de l’interface br-lan en bash

cat /etc/config/network | grep '192.168.1.1'

Changement de l’adresse de 192.168.1.1 en 192.168.8.1 :

sed -i "s/1\.1/8\.1/g" /etc/config/network

Vérification

cat /etc/config/network | grep '192.168.8.1'

Prendre en compte les changements d’interface

reboot

6.3. Configuration des paramètres système


Hostname : LAB-XXXXXX
Timezone : Europe/Brussels
NTP list server : 0.be.pool.ntp.org

Écrire dans un fichier avec vi

vi /etc/config/system

Installation et usage de nano

39
Labs OpenWRT

date; df -h | head -n 2
opkg update
date; df -h | head -n 2
opkg install nano
date; df -h | head -n 2
nano /etc/config/system

6.4. Modification du port HTTP d’administration


(commandes UCI)
On peut aussi configurer tout le système via des commandes uci (voir
https://wiki.openwrt.org/doc/uci#command_line_utility)

uci set uhttpd.main.listen_http=8080


uci commit uhttpd
/etc/init.d/uhttpd restart
netstat -antp | grep 8080
grep 8080 /etc/config/uhttpd

7. Examen de l’interface graphique


7.1. Redémarrage
Pour que tous ces paramètres soient pris en compte, il est certainement nécessaire de
redémarrer le périphérique.

7.2. Accès Web


L’interface graphique est désormais accessible via un navigateur Web sur l’URL http://LAB-
XXXXXX:8080/

7.3. Menu Status


Aperçu général : Overview
Routes
Table ARP
Routes IPv4
Routes IPv6
System logs
Kernel logs
Real Times Graphs

40
Labs OpenWRT

Charge
Trafic
Sans-fil
Connexions

7.4. Menu System


System Properties
Hostname : RXXX
Timezone : Europe/Brussels
NTP client
NTP server
0.be.pool.ntp.org
Logging Syslog
Administration : régler SSH
Password (désactiver Telnet/activer SSH)
Software : installation de logiciels supplémentaires
Startup : vérifier les services au démarrage
Scheduled Tasks
LED Configuration
Flash operations
Backup / Restore configuration
Flash new firmware image en gardant ou non la configuration
reboot

7.5. Menu Network

Interfaces
Statut, démarrage, édition
Intégrer une nouvelle interface
Préfixe IPv6 ULA

Wifi

Switch

DHCP et DNS

41
Labs OpenWRT

Hostnames

Static routes

Firewall
Vérification des paramètres de zone

Diagnostics

8. Activités étendues
Transfert de ports TCP/UDP IPv4
Routeur Wi-fi WAN
Authentification 802.1X avec serveur radius + VLAN + zone VPN :
https://wiki.openwrt.org/doc/howto/wireless.security.8021x,
https://wiki.openwrt.org/oldwiki/wpa2enterprise,
https://wiki.openwrt.org/doc/uci/wireless#wpaenterpriseaccesspoint
Client DDNS
Client ovpn
Création d'un DMZ
Routeur RIP/OSPF
Compilation d'une image
http://blog.flozz.fr/2013-07-14/debriquer-routeur-tp-link-tl-wr841nd/

42
Labs Littlebits

Littlebits
1. Des objets littlebits
2. Circuits simples
Guides d'activités par kit
3. Circuits logiques
4. Cloudbits

1. Des objets littlebits


Les littlebits sont des composants électroniques à emboiter qui permettent de construire
facilement des circuits. L'idée qui préside à ce projet est de faciliter la créativité en
dépassant la barrière de la fabrication (soudures, plaque) de circuits électroniques.

La présentation au TED par sa créatrice est bien plus éloquente :


https://www.ted.com/talks/ayah_bdeir_building_blocks_that_blink_beep_and_teach?
language=fr

43
Labs Littlebits

Les littlebits sont représentés dans un catalogue de plusieurs dizaines/centaines de


composants permettant la création de circuits à l'infini. Le catalogue est divisé en plusieurs
catégories :

Power en bleu : en pile de 9V ou en secteur 5V (USB).


Input en rose : différent commutateurs de circuits (bouton, interrupteur, digital, ...) et
capteurs (température, luminosité, mouvement, bruit, ...) et de traitement du signal
(dimmer, slider) notamment en vue de traiter du son (composants de synthé, lecteur
MP3).
Output : de la lumière (IR, UV, LEDs, barre, display), du son, du mouvement (moteurs,
bras, ...)
Wire : ce qui transmet et traite du signal allant des simples fils, à la répartition du signal,
des fonctions logiques, la transmission sans fil, le stockage USB, la mise en place du
contrôleur Arduino ou d'un ordinateur tel que le Cloudbit.

On trouvera le catalogue à cette page : http://littlebits.cc/shop/bits

44
Labs Littlebits

2. Circuits simples

45
Labs Littlebits

Guides d'activités par kit


Les modules sont aussi vendu en kit, voici la liste des booklets :

Base Kit : https://s3.amazonaws.com/littleBits_pdfs/BASE-booklet.pdf


Premium Kit : https://s3.amazonaws.com/littleBits_pdfs/PREMIUM-booklet.pdf
Synth Kit : http://s3.amazonaws.com/littleBits_pdfs/SYNTH-booklet.pdf
Smart Home Kit : https://s3.amazonaws.com/lB_images/Smart+Home+Kit/700-0070-
SmartHomeKit-Poster-V1-6+(2).pdf
STEAM Student kit :
https://d3ii2lldyojfer.cloudfront.net/pdf/STEAM+Student+Set/STEAM-Student-Set-
Invention-Guide.pdf

46
Labs Littlebits

3. Circuits logiques
Les Littlebits permettent de mettre en place facilement et rapidement des activités et des
prototypes utilisant les fonctions logiques OR, AND, NOR, NAND, XOR, Latch.

De plus le contrôleur open source bien connu Arduino a été porté sur Littlebits !

4. Cloudbits
Un Cloudbit est un module qui propose un ordinateur connecté au cloud Littlebits. On peut le
commander via un API HTTP ou une interface/app Web. Il s'agit d'interconnecter n'importe
qu'il objet à l'Internet via le Cloudbit. Il fournit à l'objet intelligence et connectivité. Il peut
aussi un devenir un sujet d'étude en terme de conception, de sécurité, de modèle de
fonctionnement IoT, etc.

47
Labs Littlebits

48
Labs Littlebits

49
Labs Littlebits

50
Labs Littlebits Logic

Labs Littlebits Logic


1. Sujets
2. Méthode
3. Sources
4. Arduino Littlebits
5. Bitcraft

A cet instant de la rédaction du support, l'auteur propose de se référer à la documentation


originale.

1. Sujets
États
Circuits séries
Circuits parallèles
Fonction AND
Fonction OR
Fonction XOR
Fonction NOT
Fonction NAND
Fonction NOR

2. Méthode
Pour chaque sujet :

Explication
Prototype
Exemple réel
Activité

3. Sources
http://littlebits.cc/expansion-packs/logic
http://littlebits.cc/tips-tricks/education-lessons-in-logic
https://s3.amazonaws.com/littleBits_pdfs/LOGIC+LESSONS_littleBits_big.pdf

51
Labs Littlebits Logic

More Control Networks


http://littlebits.cc/lessons/multiplexers-sharing-a-communication-channel
Multiplexer
http://littlebits.cc/lessons/half-adder-a-littlebit-of-arithmetic
http://littlebits.cc/lessons/full-adder-a-littlebit-more-arithmetic
http://littlebits.cc/tips-tricks/fridays-tips-tricks-the-logic-bits
http://littlebits.cc/lets-get-logical
http://littlebits.cc/projects/double-and
http://littlebits.cc/projects/double-or
http://littlebits.cc/projects/nand
http://littlebits.cc/projects/nor
http://littlebits.cc/projects/xor
http://s3.amazonaws.com/littleBits_pdfs/SPACE-booklet.pdf
https://s3.amazonaws.com/lB_images/Smart+Home+Kit/700-0070-SmartHomeKit-
Poster-V1-6+(2).pdf

4. Arduino Littlebits
http://discuss.littlebits.cc/t/getting-started-with-arduino/109
http://littlebits.cc/arduino-sketches
http://discuss.littlebits.cc/t/introduction-to-arduino-programming-2-push-my-
button/22238
http://discuss.littlebits.cc/t/introduction-to-arduino-programming-3-you-light-up-my-
life/22239
http://discuss.littlebits.cc/t/introduction-to-arduino-programming-4-blinkys-
revenge/22240
http://discuss.littlebits.cc/t/introduction-to-arduino-programming-5-troubleshooting-your-
code/22284
http://littlebits.cc/projects/8-bit-8-track-jukebox

52
Labs Littlebits Logic

5. Bitcraft
http://littlebits.cc/bitcraft

53
Labs Cloudbits

Labs Cloudbit
1. Matériel nécessaire
2. Prise de mesure et alerte
3. Contrôle à partir de litllebitscloud
4. Contrôle via API HTTP
5. Automation IFTT
6. Cloudbits hacking
Système de fichier du cloudbit
Prerequisites
Backup SD Card (just incase)
Mount FileSystem
Enable sshd on CloudBit
Linux Access
Other Info
Set output level
Query ADC
Other commands
Cloud Client Conf
Scripts Conf
References

1. Matériel nécessaire
1 x PC
1 x connexion au WLAN (un client et un point d'accès connecté à l'Internet)
1 x module cloudbit
1 x module bouton
1 x module d'entrée (température, mouvement, son, curseur, ...)
1 x module de sortie (buzzer, led, bargraph)
1 x compte gmail.com

54
Labs Cloudbits

2. Prise de mesure et alerte


Un premier montage : prise de température et alerte

3. Contrôle à partir de litllebitscloud


A partir de l'interface http://control.littlebitscloud.cc/

55
Labs Cloudbits

1. Brancher le cloudbit.
2. Attendre que la diode devienne verte ou blanche .
3. A partir de http://control.littlebitscloud.cc/ lancer la procédure d'installation via "+ New
CloudBit"
4. Maintenir son doigt sur le bouton jusqu'à ce que la diode devienne bleue clignotante. Le
cloudbit passe en mode de configuration et devient point d'accès local quand la diode
bleue est fixée.
5. Connecter son PC au SSID Wi-Fi " littleBits_Cloud_... " que le cloudbit propose.
6. Encoder le mot de passe du réseau Wi-Fi local.

4. Contrôle via API HTTP

56
Labs Cloudbits

Source : http://hackerboards.com/tiny-linux-sbc-taps-plug-and-play-iot-modules/

La documentation de l'API des cloudbits se trouve sur http://developer.littlebitscloud.cc/.

Concepts :
REST : https://en.wikipedia.org/wiki/Representational_state_transfer avec des
exemples http://blog.nicolashachet.com/niveaux/confirme/larchitecture-rest-
expliquee-en-5-regles/
JSON : https://fr.wikipedia.org/wiki/JavaScript_Object_Notation
HTTP : http://linux.goffinet.org/a2_http11.html
Outils :
curl pour lancer des requêtes HTTP (https://curl.haxx.se/download.html)

python ou bash pour automatiser les tâches

(https://www.python.org/downloads/windows/)
jq pour traiter les sorties json (bash)(https://stedolan.github.io/jq/download/)

Usage : insérer ces requêtes dans des applications


Formattage : | python -mjson.tool
Modèle publisher/subscriber : https://fr.wikipedia.org/wiki/Publish-subscribe

L'API est interrogée via des méthodes HTTP GET ou POST sur des URIs précis.

Pour manipuler l'API cloudbit, il est nécessaire de connaître son "token", sorte de jeton
d'authentification. On le trouvera dans l'onglet "Settings" de l'interface
http://control.littlebitscloud.cc/.

57
Labs Cloudbits

Les requêtes HTTP doivent contenir des Headers HTTP avec ces valeurs :

Authorization: Bearer $TOKEN


Accept: application/vnd.littlebits.v2+json

La méthode GET permet d'obtenir des données et la commande PUT permet de placer des
données. L'API est basée sur le modèle REST et propose un service pub/sub.

On trouvera plus bas 6 exemples de fonctions curl


(https://gist.github.com/goffinet/85f6869aaf06a8e541b04b35f7caf8eb) :

#!/bin/bash

# dependencies : curl, python, jq

DEVICE_ID=put_your_device_id
TOKEN=put_your_device_token

# ! mettre les headers HTTP en variable

# Fonctions all,id,signal,value,pub,sub
# curl -i : pour voir les entêtes des sorties
# pour formater les sorties json "`| python -mjson.tool`" ou "`| jq`"
# par exemple ./cb.sh all | jq

all() {
#echo "Liste les cloudbits"
curl -XGET -H "Authorization: Bearer $TOKEN" -H "Accept: application/vnd.littlebits.v2
+json" \
https://api-http.littlebitscloud.cc/devices
}

id() {
#echo "Donne des infos sur l'ID"
curl -XGET -H "Authorization: Bearer $TOKEN" -H "Accept: application/vnd.littlebits.v2
+json" \
https://api-http.littlebitscloud.cc/devices/$DEVICE_ID
}

signal() {
#echo "Envoit un signal à 100/100 pendant 1s"
curl -XPOST -H "Authorization: Bearer $TOKEN" -H "Accept: application/vnd.littlebits.v
2+json" \
https://api-http.littlebitscloud.cc/devices/$DEVICE_ID/output -d percent=100 -d durati
on_ms=1000
}

value() {
#echo "Demande la valeur d'entrée du cloudbit"
curl -XGET -H "Authorization: Bearer $TOKEN" -H "Accept: application/vnd.littlebits.v2

58
Labs Cloudbits

+json" \
https://api-http.littlebitscloud.cc/devices/$DEVICE_ID/input
}

pub() {
#echo "Souscriptions en tant que publisher"
curl -XGET -H "Authorization: Bearer $TOKEN" -H "Accept: application/vnd.littlebits.v2
+json" \
https://api-http.littlebitscloud.cc/subscriptions?publisher_id=$DEVICE_ID
}

sub() {
#echo "Souscriptions en tant que subscriber"
curl -XGET -H "Authorization: Bearer $TOKEN" -H "Accept: application/vnd.littlebits.v2
+json" \
https://api-http.littlebitscloud.cc/subscriptions?subscriber_id=$DEVICE_ID
}

$1

Par exemple, pour lire les données du premier objet :

curl -XGET -H 'Authorization: Bearer $TOKEN' -H 'Accept: application/vnd.littlebits.v2


+json' \
https://api-http.littlebitscloud.cc/devices \
| jq '.[0]'

Résultat formaté :

{
"label": "cb01",
"id": "243c200bfb48",
"subscriptions": [],
"subscribers": [
{
"publisher_id": "243c200bfb48",
"subscriber_id": "https://api-ifttt.littlebitscloud.cc/receive_cloudbit_event/ig
nite/e2397f",
"publisher_events": [
"amplitude:delta:ignite"
]
}
],
"user_id": 98950,
"is_connected": false,
"input_interval_ms": 200
}

Par exemple pour obtenir le nom du premier objet :

59
Labs Cloudbits

curl -XGET -H 'Authorization: Bearer $TOKEN' -H 'Accept: application/vnd.littlebits.v2


+json' \
https://api-http.littlebitscloud.cc/devices \
| jq '.[] .label'

Par exemple, pour tous les id et leur label :

curl -XGET -H 'Authorization: Bearer $TOKEN' -H 'Accept: application/vnd.littlebits.v2


+json' \
https://api-http.littlebitscloud.cc/devices \
| jq '[] .label, .[] .id'

Voir le projet en Node-RED sur https://github.com/eciggaar/littlebits-to-bluemix

5. Automation IFTT

https://ifttt.com/

60
Labs Cloudbits

6. Cloudbits hacking

61
Labs Cloudbits

Système de fichier du cloudbit


Source : Read CloubBit FileSystem
https://github.com/yepher/littlebits/edit/master/CloubitFileSystem.md

This webpage from LittleBits meant to post a link to the open parts of CloubBits source code.
Looks like they put a wrong link there.

Based on the componenetly used by the device it seems easy enough to just mount
CloudBits filesystem on Mac and try and find the web interfaces manually.

Prerequisites
The CloudBits filesystem is ext4 which in not natvily supported by OSX. You will need to
install some tools to enable support for ext4.

OSXFuse Note you need the MacFuse compat layer


fuse-ext2

NOTO: If I can get permission from LittleBits I will provide access to a CloudBit image that
already has SSHD running and ready..

Backup SD Card (just incase)


Warning dd can be a very dagerous command that can wipe your SDCard or worse you
Mac harddrive. You should study up on this command before you use it.

Open terminal
connect sdcard to Mac
type sudo dd if=/dev/disk1s3 of=/tmp/backupfile.img
type open /tmp
put the file somewhere safe
Create a duplicate of the card to keep the original safe
TODO: descibe how to do this....

Mount FileSystem
Remove SD card from the CloudBit
Use Spotlight to open Disk Utility
Connct SD card to your Mac and Note the new names
Open Terminal
mkdir /Volumes/little

sudo fuse-ext2 -o force /dev/disk1s3 /Volumes/little

62
Labs Cloudbits

cd /Volumes/little (or view in finder with: open /Volume/little )

One line form: mkdir /Volumes/little && sudo fuse-ext2 -o force /dev/disk1s3
/Volumes/little && cd /Volumes/little

Enable sshd on CloudBit


This part assume you already mounted the SD card from the CloudBit.

edit /Volumes/little/etc/ssh/sshd_config
change UsePAM yes to UsePAM no
uncommnet #PermitRootLogin yes to PermitRootLogin yes
save and close file
edit /Volumes/little/usr/lib/sysctl.d/50-default.conf
Add line net.ipv4.conf.default.rp_filter = 0
Disable iptables
mv /Volumes/little/etc/systemd/system/multi-user.target.wants/iptables.service

/Volumes/little/etc/systemd/

cd /Volumes/little/etc/systemd/system

cp /Volumes/little/usr/lib/systemd/system/sshdgenkeys.service .

cp /Volumes/little/usr/lib/systemd/system/sshd.service .

TODO: decribe howto setup password


Unmount SDCARD
Put back into CloudBit and ssh to device

Linux Access
Shadow file
Generate password: openssl passwd -1 -salt bit cloud
Original root shadow password
$6$p9leKwKF$MkCEuyjkObA0/Yl7GD93WaqHHEA/yFY4sWpUqN5vB2YVIdBOf/UoQfMUgB0uh1enC7q2B

rEaCRJfcD0tkheXZ/

Other Info
netstat -an

tcp 0 0 10.0.6.181:56173 54.235.112.129:9480 ESTABLISHED

ps -efxw
PID TTY STAT TIME COMMAND
2 ? S 0:00 [kthreadd]
3 ? S 0:06 \_ [ksoftirqd/0]
4 ? S 0:03 \_ [kworker/0:0]

63
Labs Cloudbits

5 ? S< 0:00 \_ [kworker/0:0H]


7 ? S< 0:00 \_ [kworker/u:0H]
8 ? S 0:01 \_ [watchdog/0]
9 ? S< 0:00 \_ [cpuset]
10 ? S< 0:00 \_ [khelper]
11 ? S 0:00 \_ [kdevtmpfs]
12 ? S< 0:00 \_ [netns]
13 ? S 0:00 \_ [kworker/u:1]
159 ? S 0:00 \_ [bdi-default]
160 ? S< 0:00 \_ [kintegrityd]
162 ? S< 0:00 \_ [kblockd]
205 ? S 0:00 \_ [khubd]
305 ? S 0:00 \_ [khungtaskd]
308 ? S 0:00 \_ [kswapd0]
309 ? S 0:00 \_ [fsnotify_mark]
310 ? S< 0:00 \_ [cifsiod]
311 ? S< 0:00 \_ [crypto]
368 ? S< 0:00 \_ [ci_otg]
380 ? S 0:00 \_ [kworker/u:2]
391 ? S< 0:00 \_ [deferwq]
394 ? S 0:14 \_ [mmcqd/0]
400 ? S 0:00 \_ [jbd2/mmcblk0p3-]
401 ? S< 0:00 \_ [ext4-dio-unwrit]
419 ? S 0:00 \_ [kworker/0:2]
806 ? S 0:14 \_ [RTW_CMD_THREAD]
1 ? Ss 0:56 /sbin/init HOME=/ TERM=linux
425 ? Ss 0:01 /usr/lib/systemd/systemd-journald LANG=en_US.UTF-8 PATH=/usr
/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin NOTIFY_SOCKET=@/org/freedesktop/systemd1
/notify LISTEN_PID=425 LISTEN_FDS
528 ? Ss 0:00 /usr/lib/systemd/systemd-udevd LANG=en_US.UTF-8 PATH=/usr/lo
cal/sbin:/usr/local/bin:/usr/sbin:/usr/bin NOTIFY_SOCKET=@/org/freedesktop/systemd1/no
tify LISTEN_PID=528 LISTEN_FDS=2
717 ? Ss 0:00 /usr/bin/sshd -D LANG=en_US.UTF-8 PATH=/usr/local/sbin:/usr/
local/bin:/usr/sbin:/usr/bin
1018 ? Ss 0:16 \_ sshd: root@pts/0
n
1020 pts/0 Ss 0:07 \_ -bash USER=root LOGNAME=root HOME=/root PATH=/usr/bi
n:/bin:/usr/sbin:/sbin MAIL=/var/mail/root SHELL=/bin/bash SSH_CLIENT=10.0.6.169 58324
22 SSH_CONNECTION=10.0.6.169 583
3226 pts/0 R+ 0:00 \_ ps -efxw TERM=xterm-256color SHELL=/bin/bash SSH
_CLIENT=10.0.6.169 58324 22 SSH_TTY=/dev/pts/0 USER=root MAIL=/var/mail/root PATH=/usr
/local/sbin:/usr/local/bin:/usr/b
720 ? Ss 0:00 /usr/local/lb/ADC/bin/ADC.d LANG=en_US.UTF-8 PATH=/usr/local
/sbin:/usr/local/bin:/usr/sbin:/usr/bin
723 ? Ss 0:00 login -- root

786 ttyAMA0 Ss+ 0:00 \_ -bash HOME=/root USER=root SHELL=/bin/bash TERM=vt102 PA
TH=/usr/local/lb/ADC/bin:/usr/local/lb/Button/bin:/usr/local/lb/DAC/bin:/usr/local/lb/
LEDcolor/bin:/usr/local/lb/cloud_
725 ? Ss 0:00 /usr/local/lb/DAC/bin/DAC.d LANG=en_US.UTF-8 PATH=/usr/local
/sbin:/usr/local/bin:/usr/sbin:/usr/bin
731 ? Ss 0:26 /usr/local/lb/Button/bin/button.d LANG=en_US.UTF-8 PATH=/usr
/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

64
Labs Cloudbits

781 ? Ss 0:00 /usr/lib/systemd/systemd-logind LANG=en_US.UTF-8 PATH=/usr/l


ocal/sbin:/usr/local/bin:/usr/sbin:/usr/bin NOTIFY_SOCKET=@/org/freedesktop/systemd1/n
otify WATCHDOG_PID=781 WATCHDOG_U
782 ? Ss 0:00 /usr/lib/systemd/systemd --user LANG=en_US.UTF-8 PATH=/usr/l
ocal/lb/ADC/bin:/usr/local/lb/Button/bin:/usr/local/lb/DAC/bin:/usr/local/lb/LEDcolor/
bin:/usr/local/lb/cloud_client/bi
784 ? S 0:00 \_ (sd-pam) HOME=/ TERM=linux
811 ? Ss 0:01 wpa_supplicant -B -P /run/wpa_supplicant_wlan0.pid -i wlan0
-D nl80211,wext -c/etc/wpa_supplicant/cloudbit.conf OLDPWD=/ PATH=/usr/local/sbin:/usr
/local/bin:/usr/sbin:/usr/bin PWD
947 ? Ss 0:00 dhcpcd -4qL -t 30 wlan0 OLDPWD=/ PATH=/usr/local/sbin:/usr/l
ocal/bin:/usr/sbin:/usr/bin PWD=/ LANG=en_US.UTF-8 SHLVL=1 _=/usr/sbin/dhcpcd
977 ? Ss 0:04 /usr/local/lb/cloud_client/bin/cloud_client LANG=en_US.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
980 ? Ss 0:00 /usr/local/lb/LEDcolor/bin/LEDcolor.d LANG=en_US.UTF-8 PATH=
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
981 ? Ss 0:27 /bin/bash /usr/local/lb/bit-util/monitorNetctl.sh &> /dev/nu
ll & LANG=en_US.UTF-8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
3225 ? S 0:00 \_ sleep 5 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/u
sr/bin PWD=/ LANG=en_US.UTF-8 SHLVL=1 _=/usr/sbin/sleep
[root@alarm etc]#

Set output level


Set output to max /usr/local/lb/DAC/bin/setDAC ffff
Set output to min /usr/local/lb/DAC/bin/setDAC 0

Query ADC

[root@alarm /]# /usr/local/lb/ADC/bin/getADC -1


126
15
[root@alarm /]# /usr/local/lb/ADC/bin/getADC -1
0
0

Other commands

65
Labs Cloudbits

[root@alarm /]# tree /usr/local/lb


+---lb
| +---ADC
| | +---bin
| +---Button
| | +---bin
| +---DAC
| | +---bin
| +---LEDcolor
| | +---bin
| +---bit-util
| +---cloud_client
| | +---bin
| +---comm-util
| +---etc
| | +---hostapd
| | +---iptables
| | +---lighttpd
| | +---systemd
| +---hw_util
| | +---bin
| +---mfg_test
| | +---ADCtoDAC
| | | +---bin
| | +---RGBcycle
| | | +---bin
Total directories = 25

Cloud Client Conf

66
Labs Cloudbits

#Cloud Client Conf


[cloud_parameters]
cloud_host = cloud.littlebits.cc
cloud_port = 9480
setup_version = 1.0.0
protocol_version = 1.1.0
use_ssl = 1
dont_ignore_pings = 1 #switch to 1 if you want to connect to staging, this switches pi
ng styles

[daemon_parameters]
adc_host = /var/lb/ADC_socket
dac_host = /var/lb/DAC_socket
led_host = /var/lb/SET_COLOR_socket

[client_parameters]
mac_file = /var/lb/mac
hash_id_file = /var/lb/id
ssid_file = /var/lb/current_ssid
device = littlebits-module-cloud
current_ssid = /var/lb/current_ssid
#this (and other parameters) should be pulled from the same place as the scripts do
firmware_version=1.0.140611a
ping_timeout = 2400
ping_maxmiss = 3
rx_buff_len = 100
tx_buff_len = 1000
token_len = 11

Scripts Conf

67
Labs Cloudbits

#!/usr/bin/env

# GENERAL
WADAP=wlan0
LB_WWW="www.littlebits.cc"
LB_DOM="littlebits.cc"
NTP_SERVER="pool.ntp.org"
TMP_DIR="/var/lb"
PM_MODE="/var/lb/power_mode"
CLOUDID="/var/lb/id"
MACADDR="/var/lb/mac"
SALT="/var/salt"

# LED COLORS
DEFAULT_COLOR="violet"
COMMISSION_COLOR="blue"
CONNECTING_COLOR="yellow"
CONNECTED_COLOR="green"
NOT_CONNECTED_COLOR="red"

# COMMISSIONING
GATEWAYIP=10.0.0.1
NETMASK=255.255.255.0
DOMAIN="cloudsetup.cc"
NETCTL_CONFIG="/etc/netctl/cloudbit"
WPA_CONFIG="/etc/wpa_supplicant/cloudbit.conf"
HOSTAPD_CONFIG="/etc/hostapd/hostapd.conf"
DNS_CONFIG="/etc/dnsmasq.conf"
COMM_LOG="/var/log/commissioning"

# DAEMON PATHS
CCPATH=/usr/local/lb/cloud_client/bin
BUTTONPATH=/usr/local/lb/Button/bin
ADCPATH=/usr/local/lb/ADC/bin
DACPATH=/usr/local/lb/DAC/bin
LEDPATH=/usr/local/lb/LEDcolor/bin

# SCRIPT PATHS
TESTPATH=/usr/local/lb/mfg_test
CUTILPATH=/usr/local/lb/comm-util

References
systemd
Japanese chobie@github

68
Labs Raspberry Pi

Labs Raspberry Pi
1. Labs
Autres Labs
Mise en place
Configuration Wi-Fi WPA
Paramètres de base
Mise à jour du firmware
Installation de Node-Red
Après-projet : Renforcement Raspbian Jessie
Ressources

Objectifs
Modèles et formats
Administration Linux
Distribution dédiées

1. Labs
1. Labs Pibrella
2. Labs Z-Wave
3. Labs Grove
4. Labs Réseau
5. Labs Cluster
6. Labs RaspiPBX

Autres Labs
http://www.pi-in-the-sky.com/
http://www.jeffgeerling.com/blogs/jeff-geerling/introducing-dramble-raspberry
http://www.scottmadethis.net/interactive/beetbox/
http://lifehacker.com/5900626/create-a-kickass-seamless-play-everything-media-center-
the-complete-guide
http://diyhacking.com/raspberry-pi-home-automation-ibm-bluemix/
https://github.com/IBM-Bluemix/python-iot-raspberry-pi
https://www.sitepoint.com/connecting-a-raspberry-pi-to-ibm-watson-and-bluemix/

69
Labs Raspberry Pi

Mise en place
Choix de la distribtion
Gravure de la carte SD
hostname, interfaces, update, upgrade, reboot

Configuration Wi-Fi WPA


Adaptation du fichier /etc/wpa_supplicant/wpa_supplicant.conf :

country=BE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="PUT_YOUR_SSID"
psk="PUT_YOUR_PSK"
key_mgmt=WPA-PSK
}

Paramètres de base
Nom
Zone horaire

$ sudo raspi-config

Mise à jour du firmware

$ sudo rpi-update

Installation de Node-Red

$ sudo apt-get update && \


$ sudo apt-get -y upgrade && \
$ sudo apt-get install npm && \
$ sudo npm install -g npm@2.x && \
$ hash -r
$ sudo systemctl enable nodered.service
$ sudo reboot

70
Labs Raspberry Pi

Après-projet : Renforcement Raspbian Jessie


http://www.blaess.fr/christophe/2015/10/19/renforcer-une-distribution-raspbian-jessie/

Désactivation de la SWAP

Ressources
Node-Red
Bluemix
http://www.cayenne-mydevices.com/
http://ubidots.com/
https://freeboard.io/

71
Labs Pibrella

Labs Pibrella
1. Plateforme et installation
2. Demo Node-Red

1. Plateforme et installation

sudo apt-get install python-pip && sudo pip install pibrella


cd ~/.node-red && npm install node-red-node-pibrella

2. Demo Node-Red
Input and Output controls for Pibrella on Raspberry Pi

[{"id":"81c3898d.c0faa","type":"inject","name":"","topic":"","payload":"0","repeat":""
,"crontab":"","once":false,"x":365.6825180053711,"y":216.92065048217773,"z":"cc001791.
3a6ca","wires":[["221ed5a4.1d9c8a"]]},{"id":"996178aa.66d6","type":"inject","name":"",
"topic":"","payload":"1","repeat":"","crontab":"","once":false,"x":363.6825180053711,"
y":256.92065048217773,"z":"cc001791.3a6ca","wires":[["221ed5a4.1d9c8a"]]},{"id":"221ed

72
Labs Pibrella

5a4.1d9c8a","type":"rpi-gpio out","name":"green","pin":"7","x":500.6825180053711,"y":2
36.92065048217773,"z":"cc001791.3a6ca","wires":[]},{"id":"ccb6231b.1f219","type":"inje
ct","name":"","topic":"","payload":"0","repeat":"","crontab":"","once":false,"x":366.6
825180053711,"y":129.92065048217773,"z":"cc001791.3a6ca","wires":[["59cc9836.48fee"]]}
,{"id":"59cc9836.48fee","type":"rpi-gpio out","name":"amber","pin":"11","x":502.682518
0053711,"y":149.92065048217773,"z":"cc001791.3a6ca","wires":[]},{"id":"e8600d51.54b29"
,"type":"inject","name":"","topic":"","payload":"1","repeat":"","crontab":"","once":fa
lse,"x":364.6825180053711,"y":169.92065048217773,"z":"cc001791.3a6ca","wires":[["59cc9
836.48fee"]]},{"id":"ec19b0ba.ad88a8","type":"inject","name":"","topic":"","payload":"
0","repeat":"","crontab":"","once":false,"x":739.5833206176758,"y":244.38094902038574,
"z":"cc001791.3a6ca","wires":[["8a9e4414.0fc4b"]]},{"id":"8a9e4414.0fc4b","type":"rpi-
gpio out","name":"OUT E","pin":"15","x":913.6944351196289,"y":257.4920892715454,"z":"c
c001791.3a6ca","wires":[]},{"id":"fc550dc4.8f438","type":"inject","name":"","topic":""
,"payload":"1","repeat":"","crontab":"","once":false,"x":737.5833206176758,"y":284.380
94902038574,"z":"cc001791.3a6ca","wires":[["8a9e4414.0fc4b"]]},{"id":"d271e379.408778"
,"type":"inject","name":"","topic":"","payload":"0","repeat":"","crontab":"","once":fa
lse,"x":367.6825180053711,"y":42.920650482177734,"z":"cc001791.3a6ca","wires":[["c6a3a
3ff.e08d8"]]},{"id":"c6a3a3ff.e08d8","type":"rpi-gpio out","name":"red","pin":"13","x"
:505.6825180053711,"y":64.92065048217773,"z":"cc001791.3a6ca","wires":[]},{"id":"d0520
7f4.44e508","type":"inject","name":"","topic":"","payload":"1","repeat":"","crontab":"
","once":false,"x":365.6825180053711,"y":82.92065048217773,"z":"cc001791.3a6ca","wires
":[["c6a3a3ff.e08d8"]]},{"id":"7ad6d8f2.07f64","type":"inject","name":"","topic":"","p
ayload":"0","repeat":"","crontab":"","once":false,"x":737.5833206176758,"y":329.380949
02038574,"z":"cc001791.3a6ca","wires":[["87debb3d.341fe"]]},{"id":"87debb3d.341fe","ty
pe":"rpi-gpio out","name":"OUT F","pin":"16","x":911.6944351196289,"y":342.49208927154
54,"z":"cc001791.3a6ca","wires":[]},{"id":"977c6ad9.bfead8","type":"inject","name":"",
"topic":"","payload":"1","repeat":"","crontab":"","once":false,"x":735.5833206176758,"
y":369.38094902038574,"z":"cc001791.3a6ca","wires":[["87debb3d.341fe"]]},{"id":"3fe319
25.5a0f86","type":"inject","name":"","topic":"","payload":"0","repeat":"","crontab":""
,"once":false,"x":736.5833206176758,"y":416.38094902038574,"z":"cc001791.3a6ca","wires
":[["b3be2476.800a8"]]},{"id":"b3be2476.800a8","type":"rpi-gpio out","name":"OUT G","p
in":"18","x":912.6944351196289,"y":431.4920892715454,"z":"cc001791.3a6ca","wires":[]},
{"id":"5b9725d8.cd656c","type":"inject","name":"","topic":"","payload":"1","repeat":""
,"crontab":"","once":false,"x":736.5833206176758,"y":458.38094902038574,"z":"cc001791.
3a6ca","wires":[["b3be2476.800a8"]]},{"id":"c938ef46.937ea","type":"inject","name":"",
"topic":"","payload":"0","repeat":"","crontab":"","once":false,"x":734.5833206176758,"
y":504.38094902038574,"z":"cc001791.3a6ca","wires":[["d225061b.9edee"]]},{"id":"d22506
1b.9edee","type":"rpi-gpio out","name":"OUT H","pin":"22","x":909.6944351196289,"y":51
5.4920892715454,"z":"cc001791.3a6ca","wires":[]},{"id":"4158206e.f459","type":"inject"
,"name":"","topic":"","payload":"1","repeat":"","crontab":"","once":false,"x":733.5833
206176758,"y":542.3809490203857,"z":"cc001791.3a6ca","wires":[["d225061b.9edee"]]},{"i
d":"8c19de6.a3f2ea","type":"rpi-gpio in","name":"red button","intype":"tri","pin":"23"
,"x":391.23812103271484,"y":567.6508026123047,"z":"cc001791.3a6ca","wires":[["2a1f4d0b
.922f5a"]]},{"id":"2a1f4d0b.922f5a","type":"debug","name":"red button","active":true,"
complete":"false","x":520.2380752563477,"y":567.7619142532349,"z":"cc001791.3a6ca","wi
res":[]},{"id":"c21a5d4e.881bb","type":"rpi-gpio in","name":"red button","intype":"tri
","pin":"23","x":174.99998474121094,"y":930.6667013168335,"z":"cc001791.3a6ca","wires"
:[["8e841011.730c28"]]},{"id":"58018674.6491c","type":"rpi-gpio out","name":"red","pin
":"13","x":695.9999847412109,"y":1044.6667013168335,"z":"cc001791.3a6ca","wires":[]},{
"id":"d0015e8a.b27fd","type":"rpi-gpio out","name":"green","pin":"7","x":1030.99998474
1211,"y":1154.6667013168335,"z":"cc001791.3a6ca","wires":[]},{"id":"d0a4cf73.a8488","t
ype":"rpi-gpio out","name":"amber","pin":"11","x":519.9999847412109,"y":995.6667013168
335,"z":"cc001791.3a6ca","wires":[]},{"id":"670b47e2.99725","type":"delay","name":"","

73
Labs Pibrella

pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","rateUnits":"seco
nd","randomFirst":"1","randomLast":"5","randomUnits":"seconds","x":516.9999847412109,"
y":1043.6667013168335,"z":"cc001791.3a6ca","wires":[["58018674.6491c","39dc1201.3cd046
","91343e25.b6fda"]]},{"id":"39dc1201.3cd046","type":"delay","name":"","pauseType":"de
lay","timeout":"10","timeoutUnits":"seconds","rate":"1","rateUnits":"second","randomFi
rst":"1","randomLast":"5","randomUnits":"seconds","x":697.9999847412109,"y":1090.66670
13168335,"z":"cc001791.3a6ca","wires":[["8491f027.37a2e8","50fbbde3.dbd4bc"]]},{"id":"
8491f027.37a2e8","type":"rpi-gpio out","name":"amber","pin":"11","x":871.9999847412109
,"y":1090.6667013168335,"z":"cc001791.3a6ca","wires":[]},{"id":"50fbbde3.dbd4bc","type
":"delay","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":
"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","x
":886.9999847412109,"y":1153.6667013168335,"z":"cc001791.3a6ca","wires":[["d0015e8a.b2
7fd","5140217b.a0f5f"]]},{"id":"91343e25.b6fda","type":"function","name":"0","func":"m
sg.payload = 0;\n\n\nreturn msg;","outputs":1,"x":699.9999847412109,"y":1001.666701316
8335,"z":"cc001791.3a6ca","wires":[["ab7b3db2.4a8e38"]]},{"id":"ab7b3db2.4a8e38","type
":"rpi-gpio out","name":"amber","pin":"11","x":846.9999847412109,"y":1001.666701316833
5,"z":"cc001791.3a6ca","wires":[]},{"id":"5140217b.a0f5f","type":"function","name":"0"
,"func":"msg.payload = 0;\n\n\nreturn msg;","outputs":1,"x":1028.999984741211,"y":1113
.6667013168335,"z":"cc001791.3a6ca","wires":[["a57366b1.9a71e","b0cbbff.5ac57c"]]},{"i
d":"b0cbbff.5ac57c","type":"rpi-gpio out","name":"red","pin":"13","x":1184.99998474121
1,"y":1125.6667013168335,"z":"cc001791.3a6ca","wires":[]},{"id":"a57366b1.9a71e","type
":"rpi-gpio out","name":"amber","pin":"11","x":1182.999984741211,"y":1081.666701316833
5,"z":"cc001791.3a6ca","wires":[]},{"id":"8e841011.730c28","type":"function","name":"r
ising edge","func":"if (msg.payload == 1)\n{\n return msg;\n}\nelse\n{\n return null
;\n}\n","outputs":1,"x":309.99998474121094,"y":931.6667013168335,"z":"cc001791.3a6ca",
"wires":[["d0a4cf73.a8488","670b47e2.99725","946e951a.64c3d"]]},{"id":"946e951a.64c3d"
,"type":"function","name":"0","func":"msg.payload = 0;\n\n\nreturn msg;","outputs":1,"
x":520.9999847412109,"y":946.6667013168335,"z":"cc001791.3a6ca","wires":[["c0158c36.e5
d32"]]},{"id":"c0158c36.e5d32","type":"rpi-gpio out","name":"green","pin":"7","x":677.
9999847412109,"y":945.6667013168335,"z":"cc001791.3a6ca","wires":[]},{"id":"640a18e3.8
5bfe","type":"inject","name":"initialise to green","topic":"","payload":"1","repeat":"
","crontab":"","once":false,"x":183.99998474121094,"y":847.6666870117188,"z":"cc001791
.3a6ca","wires":[["7c56374b.33a618"]]},{"id":"9660927c.4def38","type":"rpi-gpio out","
name":"green","pin":"7","x":508.99998474121094,"y":861.6667013168335,"z":"cc001791.3a6
ca","wires":[]},{"id":"95fe3a15.23891","type":"function","name":"0","func":"msg.payloa
d = 0;\n\n\nreturn msg;","outputs":1,"x":514.9999847412109,"y":808.6667013168335,"z":"
cc001791.3a6ca","wires":[["694134a.39930cc","4352acc7.cc7f04"]]},{"id":"694134a.39930c
c","type":"rpi-gpio out","name":"amber","pin":"11","x":652.9999847412109,"y":785.66670
13168335,"z":"cc001791.3a6ca","wires":[]},{"id":"4352acc7.cc7f04","type":"rpi-gpio out
","name":"red","pin":"13","x":650.9999847412109,"y":830.6667013168335,"z":"cc001791.3a
6ca","wires":[]},{"id":"7c56374b.33a618","type":"delay","name":"","pauseType":"delay",
"timeout":"1","timeoutUnits":"seconds","rate":"1","rateUnits":"second","randomFirst":"
1","randomLast":"5","randomUnits":"seconds","x":342.99998474121094,"y":848.66670131683
35,"z":"cc001791.3a6ca","wires":[["95fe3a15.23891","9660927c.4def38"]]},{"id":"856a0be
c.a54248","type":"rpi-gpio in","name":"IN A","intype":"tri","pin":"21","x":110.6428642
2729492,"y":357.8928699493408,"z":"cc001791.3a6ca","wires":[["96997748.6205c8"]]},{"id
":"96997748.6205c8","type":"debug","name":"IN A","active":true,"complete":"false","x":
260.6428680419922,"y":356.8928680419922,"z":"cc001791.3a6ca","wires":[]},{"id":"7c7621
5a.1014a","type":"rpi-gpio in","name":"IN B","intype":"tri","pin":"26","x":104.6428680
4199219,"y":409.8928680419922,"z":"cc001791.3a6ca","wires":[["f44648db.159108"]]},{"id
":"f44648db.159108","type":"debug","name":"IN B","active":true,"complete":"false","x":
254.6428680419922,"y":408.8928680419922,"z":"cc001791.3a6ca","wires":[]},{"id":"ac8388
0c.cb66c8","type":"rpi-gpio in","name":"IN C","intype":"tri","pin":"24","x":106.642868

74
Labs Pibrella

04199219,"y":455.8928680419922,"z":"cc001791.3a6ca","wires":[["2bd03b9.f89f8c4"]]},{"i
d":"2bd03b9.f89f8c4","type":"debug","name":"IN C","active":true,"complete":"false","x"
:256.6428680419922,"y":454.8928680419922,"z":"cc001791.3a6ca","wires":[]},{"id":"2ec8c
a16.e4fa26","type":"rpi-gpio in","name":"IN D","intype":"tri","pin":"19","x":108.64286
804199219,"y":500.8928680419922,"z":"cc001791.3a6ca","wires":[["c41b9536.853c6"]]},{"i
d":"c41b9536.853c6","type":"debug","name":"IN D","active":true,"complete":"false","x":
258.6428680419922,"y":499.8928680419922,"z":"cc001791.3a6ca","wires":[]},{"id":"ccb571
3d.511e2","type":"rpi-gpio in","name":"IN A","intype":"tri","pin":"21","x":257.8888854
980469,"y":1324.222412109375,"z":"cc001791.3a6ca","wires":[["61718507.4e96bc"]]},{"id"
:"b446a5cf.2c15a8","type":"rpi-gpio in","name":"IN B","intype":"tri","pin":"26","x":25
7.6667022705078,"y":1367.0001220703125,"z":"cc001791.3a6ca","wires":[["82ab5e9c.cc2608
"]]},{"id":"124db4b5.d312ab","type":"rpi-gpio in","name":"IN C","intype":"tri","pin":"
24","x":257.7778015136719,"y":1411,"z":"cc001791.3a6ca","wires":[["86e116da.b454d"]]},
{"id":"dcd98b57.41f5d8","type":"rpi-gpio in","name":"IN D","intype":"tri","pin":"19","
x":254.44447326660156,"y":1458.2222900390625,"z":"cc001791.3a6ca","wires":[["7b79fcf0.
c3b3bc"]]},{"id":"61718507.4e96bc","type":"rpi-gpio out","name":"OUT E","pin":"15","x"
:396.4444580078125,"y":1325.2225341796875,"z":"cc001791.3a6ca","wires":[]},{"id":"82ab
5e9c.cc2608","type":"rpi-gpio out","name":"OUT F","pin":"16","x":394.55560302734375,"y
":1366.7779541015625,"z":"cc001791.3a6ca","wires":[]},{"id":"86e116da.b454d","type":"r
pi-gpio out","name":"OUT G","pin":"18","x":391.2222595214844,"y":1411.444580078125,"z"
:"cc001791.3a6ca","wires":[]},{"id":"7b79fcf0.c3b3bc","type":"rpi-gpio out","name":"OU
T H","pin":"22","x":393.7778015136719,"y":1458.666748046875,"z":"cc001791.3a6ca","wire
s":[]},{"id":"363930ed.65ddd8","type":"comment","name":"mirror input pin to output pin
","info":"","x":239.7777557373047,"y":1248.5556640625,"z":"cc001791.3a6ca","wires":[]}
,{"id":"33a56a17.2e2c9e","type":"comment","name":"traffic light simulator - push the r
ed button!","info":"","x":260,"y":753.3334197998047,"z":"cc001791.3a6ca","wires":[]}]

https://github.com/johnblackmore/pibrella-adventures
https://github.com/raspberrypilearning/pibrella-intro/blob/master/worksheet.md *

75
Labs Z-Wave

Labs Z-Wave
1. Technologie Z-Wave
2. Protocole Z-Wave
3. Matériels fabriquants Z-Wave testés
Logiciels

1. Technologie Z-Wave

2. Protocole Z-Wave

3. Matériels fabriquants Z-Wave testés


Razberry
Aeotec Z-Wave USB Adapter
Capteurs et switches Fibaro et Aetec :
1 X Aeonlab MultiSensor 6
1 X Fibaro Systems Motion Sensor
1 X Aeonlab Smart Switch 6
1 X Fibaro Systems Wall Plug
1 X Aeonlab Door/Window Sensor

Logiciels
Node, red-node, librairie, logiciel contrôleur : OpenHAB, Z-way

http://thethingbox.io/docs/ZwaveUI.html

76
Labs GrovePi

Labs GrovePi
1. Description
2. Super capteur
Mise en place
Node Red
Scripts Python
Report et graphes sur Initialstate
3. Bluemix
4. Emoncms
5. Plateformes IoT
6. ibeacons

1. Description

Sources :

http://www.dexterindustries.com/grovepi-tutorials-documentation/

77
Labs GrovePi

http://www.seeedstudio.com/wiki/GrovePi%2B

Descriptif :

7 Ports digitaux 3 Ports analogiques 3 Ports I2C 1 Port Serial port connect to GrovePi 1
Serial port connect to Raspberry Pi Grove header Vcc output Voltage: 5Vdc

2. Super capteur
Source

Ports Capteurs Image

A0 Sound Sensor

A1 Light Sensor

78
Labs GrovePi

A2 Air Quality Sensor

D4 Green LED

79
Labs GrovePi

D8 Buzzer

Temperature &
D7
Humidity Sensor

Barometer (High
I2C-1
Accuracy))

80
Labs GrovePi

I2C-2 LCD RGB

Mise en place
Commencer Labs Raspberry Pi : Mise en place

http://www.dexterindustries.com/GrovePi/get-started-with-the-grovepi/setting-software/

$ sudo apt-get update && apt-get -y upgrade


$ sudo raspi-config
$ cd /home/pi/Desktop
$ sudo git clone https://github.com/DexterInd/GrovePi
$ cd /home/pi/Desktop/GrovePi/Script
$ sudo chmod +x install.sh
$ sudo ./install.sh
$ sudo pip install grovepi

Le script install.sh offre le message suivant :

81
Labs GrovePi

_____ _
| __ \ | |
| | | | _____ _| |_ ___ _ __
| | | |/ _ \ \/ / __/ _ \ '__|
| |__| | __/> <| || __/ |
|_____/ \___/_/\_\__\___|_| _ _
|_ _| | | | | (_)
| | _ __ __| |_ _ ___| |_ _ __ _ ___ ___
| | | '_ \ / _` | | | / __| __| '__| |/ _ \/ __|
_| |_| | | | (_| | |_| \__ \ |_| | | | __/\__ \
|_____|_| |_|\__,_|\__,_|___/\__|_| |_|\___||___/

Welcome to GrovePi Installer.

Requirements:
1) Must be connected to the internet
2) This script must be run as root user

Steps:
1) Installs package dependencies:
- python-pip alternative Python package installer
- git fast, scalable, distributed revision control system
- libi2c-dev userspace I2C programming library development files
- python-serial pyserial - module encapsulating access for the serial port
- python-rpi.gpio Python GPIO module for Raspberry Pi
- i2c-tools This Python module allows SMBus access through the I2C /dev
- python-smbus Python bindings for Linux SMBus access through i2c-dev
- python3-smbus Python3 bindings for Linux SMBus access through i2c-dev
- arduino AVR development board IDE and built-in libraries
- minicom friendly menu driven serial communication program
2) Clone, build wiringPi in GrovePi/Script and install it
3) Removes I2C and SPI from modprobe blacklist /etc/modprobe.d/raspi-blacklist.conf
4) Adds I2C-dev, i2c-bcm2708 and spi-dev to /etc/modules
5) Installs gertboard avrdude_5.10-4_armhf.deb package
6) Runs gertboard setup
- configures avrdude
- downloads gertboard known boards and programmers
- replaces avrsetup with gertboards version
- in /etc/inittab comments out lines containing AMA0
- in /boot/cmdline.txt removes: console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 consol
e=tty1
- in /usr/share/arduino/hardware/arduino creates backup of boards.txt
- in /usr/share/arduino/hardware/arduino creates backup of programmers.txt

Special thanks to Joe Sanford at Tufts University. This script was derived from his wo
rk. Thank you Joe!

Raspberry Pi wil reboot after completion.

La commande sudo pip install grovepi permet d'utiliser les scripts sur tout le système.

82
Labs GrovePi

Node Red

$ sudo npm -g install node-red-contrib-grovepi


$ sudo systemctl restart nodered.service

Scripts Python

Report et graphes sur Initialstate


A lire : http://www.networkworld.com/article/3093434/internet-of-things/data-driven-farming-
how-iot-delivers-hyperlocal-weather-information-affordably.html

https://initialstate.com/
https://github.com/InitialState/pi-health-dashboard
https://github.com/InitialState/grovepi

3. Bluemix
http://thethingbox.io/docs/Bluemix.html
https://github.com/TheThingBox/iot-nodered
https://www.ibm.com/blogs/research/2016/05/building-weather-app-watson-bluemix/

83
Labs GrovePi

4. Emoncms
https://blog.openenergymonitor.org/2015/10/emonpi-nodered-and-mqtt/
https://blog.openenergymonitor.org/2016/02/outdoor-temperature-data-from-weather/
https://github.com/emoncms/emoncms/blob/master/docs/RaspberryPi/readme.md
http://thethingbox.io/docs/BtcEmonCms.html
http://thethingbox.io/docs/BtcXively.html

5. Plateformes IoT
Voir Ressources.

6. ibeacons
http://thethingbox.io/docs/iBeacon-tsa.html

84
Labs Réseau

Labs Réseau
1. Passerelle Internet
2. Controlleur Wi-Fi

1. Passerelle Internet
Choix d'une distribution
Routeur IPv4/IPv6
Passerelle Ovpn
Services DHCP, DHCPv6, RA, DNS
Pare-feu IPv4/IPv6
Client DDNS
Routeur dynamique RIP/OSPF
Routeur inter-VLAN
Client 802.1x/EAP/Radius
Serveur Radius
Serveur de partage Windows
Serveur torrent

2. Controlleur Wi-Fi
http://openwisp.org/whatis.html
https://packetfence.org/
https://wiki.openwrt.org/doc/recipes/dumbap

85
Labs Cluster

Labs Cluster
Kit Cluster :

Sources :

http://blog.hypriot.com/post/let-docker-swarm-all-over-your-raspberry-pi-cluster/
https://github.com/hypriot/flash

Kit Cluster :
10 X Rpi B+
Mikrotik CRS125-24G-1S-2HnD-IN

86
Labs RaspiPBX

Labs RaspiPBX

1. Raspbx
http://www.raspberry-asterisk.org/documentation/
http://www.raspberry-asterisk.org/faq/#asteriskonly

Télécharger l'image à partir de http://www.raspberry-asterisk.org/downloads et la graver sur


la carte SD.

https://www.raspberrypi.org/documentation/installation/installing-images/linux.md
https://www.raspberrypi.org/documentation/installation/installing-images/mac.md
https://www.raspberrypi.org/documentation/installation/installing-images/windows.md

2. Préparation du serveur
2.1. SSH
Télécharger le logiciel Putty
Installer un serveur X afin de lancer wireshark sur le PBX à partir de Windows.
Documentation : https://www.google.fr/#q=xming+avec+putty+x+forwarding
Lancer une session SSH

2.2. Mise à jour du système


En console lancer la commande :

raspi-config

Choisir :

1 Expand Filesystem

4 Internationalisation Options/I2. Change Timezone : Europe/Brussels

9.A2 Advanced Options/Hostname

reboot

87
Labs RaspiPBX

Après redémarrage, exécuter en console :

raspbx-upgrade
apt-get install tcpdump tshark wireshark ntpdate

2.3. Installation des sons locaux français


Cette étape devient accessoire si l'on passe par FreePBX (Admin/Sound Languages)

Créer un script astpbx_fr.sh:

Accorder des droits d’exécution

chmod u+x astpbx_fr.sh

Exécution du script

./astpbx_fr.sh

2.4. Configuration du PBX


http://wiki.freepbx.org/display/PPS/FreePBX+Distro+First+Steps+After+Installation

3. Configuration des modules


http://wiki.freepbx.org/display/FPG/Standard+Modules

1. Mise à jour des modules

2. Installation de nouveaux modules :

3. Languages (voir plus haut)

4. Endpoint Manager
5. Time Conditions
6. Ring Groups

Paramètres avancés et paramètres SIP

http://wiki.freepbx.org/display/FPG/Advanced+Settings

Adresse : Static
Adresse IP publique

88
Labs RaspiPBX

Réseau local

http://wiki.freepbx.org/display/FPG/Asterisk+SIP+Settings

Changer éventuellement "Strong Passwords"

4. Connectivité
4.1. Ajout des extensions
Softphones SIP/IAX

Zoiper
Linphone
Ekiga
Jitsi
Yate
3CX Phone
SJPhone
Voir https://fr.wikipedia.org/wiki/Liste_des_logiciels_SIP#Clients_SIP

Matériel VoIP

Polycom SoundPoint IP 321 (3)


Cisco SPA508G (3)
Cisco SPA504G (2)
Cisco SPA922 (6)
ATA Cisco PAP2T (2)
Power and Network Devices
PoE FS108P (4)
Cisco PoE SF300-24P (1)

Nomenclature des numéros internes

89
Labs RaspiPBX

Nom de serveur Extensions

raspbx01 1101, 1102, 1103, 1104


raspbx02 1201, 1202, 1203, 1204
raspbx03 1301, 1302, 1303, 1304

raspbx04 1401, 1402, 1403, 1404


raspbx05 1501, 1502, 1503, 1504
raspbx06 1601, 1602, 1603, 1604
raspbx07 1701, 1702, 1703, 1704

raspbx08 1801, 1802, 1803, 1804


raspbx09 1901, 1902, 1903, 1904
raspbx0a 2001, 2002, 2003, 2004
raspbx0b 2101, 2102, 2103, 2104
raspbx0c 2201, 2202, 2203, 2204
2301, 2302

http://wiki.freepbx.org/display/F2/Extensions+Module+-+SIP+Extension

Application / Extension / Add a SIP Extension


User Extension
Display Name
Devices Options / Secret
Voicemail : Enabled ...

4.2. Configuration du compte Anveo


Numéros de téléphone en format 322XXXXXXX

https://www.anveo.com/faq.asp?code=sip_freepbx

Localized
32 Belgium
00

4.3. Configuration du Trunk SIP


1. Menu Connectivity / Trunks / Add A SIP Trunk
2. Trunk name : Anveo
3. Outbound CallerID : 32XXXXXXXX

90
Labs RaspiPBX

4. Trunk name : Anveo


5. Outgoing Settings -> PEER Details, remplacer par le numéro de compte et le mot de
passe :

type=friend
host=sip.de.anveo.com
port=5010
username=ACCOUNT_NUMBER
secret=SIP_PASSWORD
insecure=port,invite
disallow=all
allow=ulaw
context=from-trunk

6. Register String : ACCOUNT_NUMBER:SIP_PASSWORD@sip.de.anveo.com:5010


7. Submit

4.4. Route sortante


Pour les numéros fixes et cellulaires :

1. Connectivity / Outbound Routes


2. Route Name : Anveo
3. Dial patterns :

0XXXXXXXX

0XXXXXXXXX

Submit

4.5. Route entrante


Par numéro de téléphone routé sur le PBX :

1. Connectivity / Inbound Routes


2. DID Number : 32XXXXXXXX
3. Set Destinations
4. Submit

5. Francisation
Voir téléchargement des scripts français

91
Labs RaspiPBX

Modules Administration/Download and install Languages/Apply Config

Asterisk SIP Settings/Advanced General Settings/Language = fr/Apply

6. Boîtes vocales
apt-get remove exim4
apt-get install postfix

installation satellite ou Internet smarhost : serveur SMTP par exemple, smtp.colt.net,


relay.skynet.be

http://wiki.freepbx.org/display/F2/Voicemail

7. IVR
Admin / Feature Codes

http://wiki.freepbx.org/display/F2/System+Recordings+Module

http://wiki.freepbx.org/display/F2/IVR+Module

8. Trunk IAX2 intersites


Solution fonctionnelle à travers les pare-feux. Les adresses IP publiques des systèmes
téléphoniques doivent être connus.

http://wiki.freepbx.org/pages/viewpage.action?pageId=4161588

9. Sécurité
Activité sous Windows

http://www.oxid.it/cain.html

1. Mise en place d’une Attaque MitM ARP Poison Routing entre un PBX et deux
téléphones.

2. Capture et reconstitution d’un appel

3. Capture et crack de mot de passe SIP

92
Labs RaspiPBX

Activité sous Linux

http://www.backtrack-linux.org/wiki/index.php/Pentesting_VOIP

10. Fail2ban

11. Support du Fax

93
Labs BLE

Labs BLE ZigBee RFID


1. Protocole Bluetooth Low Energy

1. Protocole Bluetooth Low Energy


..

94
Labs Mini-Drone Controller

Labs Mini-Drone Controller


Matériel
Connectivité
Capteurs
Batterie
Poids/dimension
Autres
Présentation
Hacking
Connexion HTTP
Connexion Telnet
Shell
CPU
RAM
Points de montage
Noyau Linux
Modules du noyau
Scripts
Script de démarrage
Transférer le système de fichiers localement
Découverte et connexion en BLE
Contrôle en node.js
Capture de trafic BLE
Contrôle de plusieurs minidrones
Contrôle via cylon
Autopilotage
Interface web de contrôle

95
Labs Mini-Drone Controller

Matériel

Source : https://www.youtube.com/watch?v=74ssfS2vyyE

96
Labs Mini-Drone Controller

CPU : http://elinux.org/ARM926EJ-S
RAM : 32 Mo
Flash : 4 Mo

Connectivité
Bluetooth Smart technology, Bluetooth V4.0 BLE (Bluetooth Low Energy).

Capteurs
capteur ultrasons
un gyroscope 3 axes et un accéléromètre 3 axes
une caméra verticale
un capteur de pression

Batterie
Lithium-Polymer et amovible avec une autonomie de 8 minutes (6 minutes avec les
roues) et recharge complète en 90 minutes.

Poids/dimension
Poids : 55g (65g avec les roues)
Diamètre du Rolling Spider : 140 mm
Diamètre des hélices : 55mm
Espacement moteur : 85 mm

97
Labs Mini-Drone Controller

Autres
Deux LEDs bi-couleurs
4 moteurs

Présentation
Présentation générale, application IOS/Android, BLE
Hacking Hardware
Hacking Software

Hacking
Inspiré de https://lawlorcode.wordpress.com/2015/08/12/parrot-rolling-spider-uav-hacking-
dumping-the-filesystem/

En connectant directant le rolling spider en USB à une station Linux, on constate le montage
d'un nouveau disque et la création d'une interface réseau USB avec une adresse
192.168.2.2/24 :

# df -h | grep media
/dev/sdb1 33M 3,6M 29M 11% /run/media/root/Parrot_RS

# ip add show ens35u2


8: ens35u2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN
qlen 1000
link/ether 2e:87:eb:ab:c8:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.2.2/24 brd 192.168.2.255 scope global dynamic ens35u2
valid_lft 863557sec preferred_lft 863557sec
inet6 fe80::2c87:ebff:feab:c83c/64 scope link
valid_lft forever preferred_lft forever

Quelle est l'adresse joignable sur cette nouvelle interface ?

# arp-scan -I ens35u2 192.168.2.0/24


Interface: ens35u2, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.8.4 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
192.168.2.1 12:ca:c7:0e:87:b3 (Unknown)

1 packets received by filter, 0 packets dropped by kernel


Ending arp-scan 1.8.4: 256 hosts scanned in 2.021 seconds (126.67 hosts/sec). 1 respon
ded

98
Labs Mini-Drone Controller

Un scan ARP découvre l'adresse 192.168.2.1 . Quels sont les services à l'écoute sur cette
adresse ?

# nmap 192.168.2.1

Starting Nmap 6.40 ( http://nmap.org ) at 2016-06-08 22:00 CEST


Nmap scan report for 192.168.2.1
Host is up (0.0032s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
21/tcp open ftp
23/tcp open telnet
80/tcp open http
MAC Address: 12:CA:C7:0E:87:B3 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 5.77 seconds

Les ports TCP 21 (FTP), 23 (Telnet) et 80 (HTTP) répondent.

Connexion HTTP
On vérifie le port TCP 80 :

# curl http://192.168.2.1
<!DOCTYPE html>
<html>
<body>
<h1>### Parrot Dragon Firmware ###</h1>
<p>TARGET_PRODUCT = delos </p>
<p>BUILD_DATE = 2015-03-06 </p>
<p>BUILD_TIME = 17h51m20s </p>
<p>BUILD_COMPILER = alexandregondeu </p>
<p>BUILD_COMPUTER = ERIC_THE_T-REX </p>
<p>BUILD_MYKONOS3_MAIN_SHA1 = eddcb97ce362380ccdc86c9592c9dad271e44505 </p>
<p>BUILD_DRAGON_VERSION = 1.99.2</p>
</body>
</html>

Connexion Telnet
Que donne une tentative de connexion Telnet ?

99
Labs Mini-Drone Controller

# telnet 192.168.2.1
Trying 192.168.2.1...
Connected to 192.168.2.1.
Escape character is '^]'.

BusyBox v1.20.2 (2015-03-06 17:53:39 CET) built-in shell (ash)


Enter 'help' for a list of built-in commands.

------------------------------------
HW Status :
------------------------------------
> Acc/Gyros MPU6050 :OK
> Temp/Press MS5607 :OK

[Delos] $

Shell
On obtient un shell ! On constate l'usage de ces ports TCP via le fichier /etc/inetd.conf .

[Delos] $ cat /etc/inetd.conf


21 stream tcp nowait root ftpd ftpd -w /data/video
5551 stream tcp nowait root ftpd ftpd -w /update
80 stream tcp nowait root busybox httpd -h /www -i

CPU

$ cat /proc/cpuinfo
Processor : ARM926EJ-S rev 5 (v5l)
BogoMIPS : 207.66
Features : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant : 0x0
CPU part : 0x926
CPU revision : 5

Hardware : Delos sip6 board


Revision : 2105
Serial : 0000000000000000

RAM

100
Labs Mini-Drone Controller

[Delos] $ free -hm


total used free shared buffers
Mem: 28736 17764 10972 0 0
-/+ buffers: 17764 10972
Swap: 0 0 0

Points de montage

[Delos] $ df -h
Filesystem Size Used Available Use% Mounted on
ubi1:system 26.3M 13.0M 11.9M 52% /
tmp 14.0M 64.0K 14.0M 0% /tmp
dev 14.0M 0 14.0M 0% /dev
ubi0:factory 4.8M 116.0K 4.4M 3% /factory
ubi2:update 13.2M 28.0K 12.5M 0% /update
ubi2:data 46.6M 32.9M 11.3M 74% /data

[Delos] $ cat /proc/mounts


rootfs / rootfs rw 0 0
ubi1:system / ubifs rw,relatime 0 0
tmp /tmp tmpfs rw,relatime 0 0
proc /proc proc rw,relatime 0 0
dev /dev tmpfs rw,relatime 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
sys /sys sysfs rw,relatime 0 0
ubi0:factory /factory ubifs ro,relatime 0 0
ubi2:update /update ubifs rw,sync,relatime 0 0
ubi2:data /data ubifs rw,relatime 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0

Noyau Linux

[Delos] $ uname -a
Linux (none) 2.6.36 #1 PREEMPT Fri Mar 6 17:53:21 CET 2015 armv5tejl GNU/Linux

Modules du noyau

101
Labs Mini-Drone Controller

[Delos] $ lsmod
Module Size Used by Tainted: G
g_multi 64811 2
fsl_usb2_udc 12792 1 g_multi
usb_storage 37531 0
uvcvideo 62896 0
usbcore 120019 2 usb_storage,uvcvideo
ultra_snd 9017 0

Scripts

[Delos] $ ls /bin/*.sh
/bin/DragonDebug.sh /bin/create_btconfig.sh /bin/delos_shell
.sh /bin/init_motors.sh /bin/reboot.sh
/bin/DragonStarter.sh /bin/create_imgdisk.sh /bin/delos_shutd
own.sh /bin/initsalsa.sh /bin/reset_config.sh
/bin/activate_coredump.sh /bin/debug_lib.sh /bin/delos_slip.
sh /bin/kmemleak.sh /bin/reset_settings.sh
/bin/blink_led_greenleft.sh /bin/delos_camera.sh /bin/demo_global
.sh /bin/login.sh /bin/set_led_greenleft.sh
/bin/blink_led_orangeleft.sh /bin/delos_devmem_2.sh /bin/detect_data
.sh /bin/meminfo.sh /bin/set_led_orange_both.sh
/bin/bnep_setup.sh /bin/delos_flightmode_start.sh /bin/device_moni
toring.sh /bin/memory_check.sh /bin/set_led_orangeleft.sh
/bin/cgroup.sh /bin/delos_flightmode_stop.sh /bin/dragon_shel
l.sh /bin/mount_imgdisk.sh /bin/switch_usb_mode.sh
/bin/check_and_reset_etron.sh /bin/delos_fvt6.sh /bin/etron_check
er.sh /bin/mount_usb.sh /bin/umount_imgdisk.sh
/bin/check_update_demos.sh /bin/delos_gadgetmode_start.sh /bin/etron_setup
.sh /bin/nfs.sh /bin/wifi_setup.sh
/bin/ckcmd_file.sh /bin/delos_gadgetmode_stop.sh /bin/factory_che
ck.sh /bin/nfs_usb.sh
/bin/ckcmd_redirect.sh /bin/delos_lsusb.sh /bin/freeflight_
monitoring.sh /bin/pairing_setup.sh
/bin/ckcmd_tcp.sh /bin/delos_monitor_vbus_script.sh /bin/gdbsalsa.sh
/bin/parallel-stream.sh
/bin/common_check_update.sh /bin/delos_reset_factory.sh /bin/init_gpios.
sh /bin/post.sh

Par exemple :

102
Labs Mini-Drone Controller

[Delos] $ cat /bin/blink_led_greenleft.sh


#!/bin/sh

# temp behaviour : red light right on


gpio 33 -d ho 1
# temp behaviour : red light left off
gpio 30 -d ho 0

#green light off


gpio 31 -d ho 0
gpio 32 -d ho 0

while [ 1 ];
do
gpio 32 -d ho 0
usleep 100
gpio 32 -d ho 1
usleep 100
done
[Delos] $ /bin/blink_led_greenleft.sh

^C
[Delos] $

Script de démarrage

[Delos] $ cat /etc/init.d/rcS


#!/bin/sh

# IP_ADDR - this target IP address using CIDR notation:


# <target-ip>/<target-bitmask>
#
# For example:

echo init started...

source /bin/delos_shell.sh

/bin/mount -t tmpfs tmp /tmp


/bin/mount -t proc proc /proc
/bin/mount -o remount,rw /
/bin/mount -t tmpfs dev /dev
/bin/mkdir -p /dev/shm /dev/pts
/bin/mount -t devpts devpts /dev/pts
/bin/mount -t sysfs sys /sys

# Add a symbolic link for each I2C sensor

103
Labs Mini-Drone Controller

ln -s /dev/i2c-0 /dev/i2c-akm8963
ln -s /dev/i2c-0 /dev/i2c-mpu6050
ln -s /dev/i2c-0 /dev/i2c-ms5607

#don't allow overcommit (allocate more memory that the physical one)
echo 2 > /proc/sys/vm/overcommit_memory
echo 90 > /proc/sys/vm/overcommit_ratio

#in case of unaligned access print a message and send a SIGBUS


echo 5 > /proc/cpu/alignment

#reboot after 1s after a panic


echo 1 > /proc/sys/kernel/panic

#panic when an oops or BUG is encountered


#disable this for developer
echo 1 > /proc/sys/kernel/panic_on_oops

echo -1 > /proc/sys/kernel/sched_rt_runtime_us

echo "/sbin/mdev" > /proc/sys/kernel/hotplug


/sbin/mdev -s

mount -t usbfs none /proc/bus/usb

/bin/mkdir -p /update
/bin/mkdir -p /factory
/bin/mount -a

#create groups of priorities


mkdir /dev/cpuctl
mount -t cgroup -ocpu none /dev/cpuctl
#mkdir /dev/cpuctl/video
# reserve most cpu for video tasks
#touch /dev/cpuctl/video/cpu.shares
#echo "2048" > /dev/cpuctl/video/cpu.shares
# group others
mkdir /dev/cpuctl/others
touch /dev/cpuctl/others/cpu.shares
echo "10000" >/dev/cpuctl/others/cpu.shares
touch /dev/cpuctl/others/tasks
for task in $(cat /dev/cpuctl/tasks)
do
echo $task > /dev/cpuctl/others/tasks
done

# Init all LEDs GPIOS


/usr/bin/gpio 30 -d ho 1
/usr/bin/gpio 31 -d ho 0
/usr/bin/gpio 32 -d ho 0
/usr/bin/gpio 33 -d ho 1

# Create mount point for the virtual USB key

104
Labs Mini-Drone Controller

mkdir -p ${DELOS_MOUNT_PATH}
# Make it read-only by default
chmod 400 ${DELOS_MOUNT_PATH}

# Load the Ultrasound driver early, it fails otherwise


modprobe ultra_snd

# Be sure we have a config file


if [ ! -s /data/dragon.conf ]
then
cp /etc/default-dragon.conf /data/dragon.conf
fi

if [ ! -s /data/system.conf ]
then
cp /etc/default-system.conf /data/system.conf
fi

# Check the data in /factory, create default values if necessary


# BT config requires dragon.conf to exist
/bin/factory_check.sh
/bin/create_btconfig.sh

/usr/bin/gpio 53 -d i
# Init the EtronTech USB<->Camera chip
/usr/bin/gpio 58 -d ho 1

# Create the FVT6 flash report at first boot


/bin/create_imgdisk.sh ${DELOS_USBDISKIMG_PATH} ${DELOS_MOUNT_PATH} 33 "Parrot_RS"
/bin/delos_fvt6.sh

# Check if an update is available


echo "Check if update is necessary ..."
if [ -e ${DELOS_MOUNT_PATH} ]; then
# if usb image disk contains a PLF file, move it to the update partition
mount_imgdisk.sh ${DELOS_USBDISKIMG_PATH} ${DELOS_MOUNT_PATH} ${DELOS_PRODUCT_
MEDIA_PATH}
/bin/updater/updater_scan.sh ${DELOS_MOUNT_PATH}
/bin/check_update_demos.sh
# unmount_imgdisk.sh ${DELOS_MOUNT_PATH}
fi
/bin/updater/updater_process.sh

# enabling 5V power supply


#/usr/sbin/gpio 89 -d ho 0

if [ -e /etc/hostname ]; then
/bin/hostname -F /etc/hostname
fi
/sbin/ifconfig lo 127.0.0.1 up

105
Labs Mini-Drone Controller

/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo

#
# Start permanent TCP/IP services
# Available during flight via BT or via USB
#
inetd

#
# Start telnet deamon
#
telnetd -l /bin/login.sh

init_motors.sh &

modprobe uvcvideo

# Start the ON/OFF button daemon


(/usr/bin/delos_button_onoff)&

# Make a backup of old navdata files


if [ -f /data/navdata_blackbox.bin ]; then mv /data/navdata_blackbox.bin /data/navdata
_blackbox_old.bin; fi

# Start UDev
udevd.sh

# Debug management
DragonDebug.sh

#
# Start Bluetooth
#
(BLEproxy $(cat /etc/BLEproxy.args 2>/dev/null) >/dev/null 2>/dev/null) &

#
# Start the main soft
#
echo "Launching Dragon" | logger -s -t "rcS" -p user.info
DragonStarter.sh -out2null &

# Start the FSM managing USB Modes


(delos_monitor_vbus_script.sh)&

echo end init...

Transférer le système de fichiers localement


Sur le rolling spider, [^p][^y] évitant /proc et /sys :

106
Labs Mini-Drone Controller

tar cpf - [^p][^y]* | nc -l -p 1234

Sur la station connectée :

nc 192.168.2.1 1234 > rootfs.tar

Découverte et connexion en BLE


http://wiki.paparazziuav.org/wiki/Rolling_Spider#Connect_with_Bluetooth

Contrôle en node.js
https://github.com/voodootikigod/node-rolling-spider

Capture de trafic BLE

Contrôle de plusieurs minidrones


https://github.com/voodootikigod/node-rolling-spider/blob/master/eg/swarm.js
https://github.com/search?
p=2&q=rolling+spider&type=Repositories&utf8=%E2%9C%93

Contrôle via cylon


https://cylonjs.com/
https://github.com/ChrisTheBaron/cylon-rolling-spider

Autopilotage
https://wiki.paparazziuav.org/wiki/Main_Page
http://wiki.paparazziuav.org/wiki/Rolling_Spider

Interface web de contrôle

107
Labs Mini-Drone Controller

https://github.com/goffinet/spider-web

108
Labs Parrot Flower Power

Labs Parrot Flower Power


http://www.parrot.com/fr/produits/flower-power/
http://www.parrot.com/fr/support/parrot-flower-power/
https://myflowerpower.parrot.com/
http://developer.parrot.com/products.html
http://developer.parrot.com/docs/FlowerPower/
https://github.com/parrot-flower-power/parrot-flower-power-api-example
https://github.com/parrot-flower-power/node-flower-power-cloud
https://github.com/search?
p=2&q=parrot+power+flower&ref=searchresults&type=Repositories&utf8=%E2%9C%93

109
Labs Arduino

Labs Arduino

110