Gateway LoraWan rpi0 - ic880a

## introduction

Dans mes activités de bricolage j'ai eu envie d'explorer la technologie Lora et la couche réseau qui lui est associé, LoraWan.

Cette technologie permets de déployer des capteurs consommant peu de ressource électrique et elle a la particularité de ne pas obligatoirement nécessiter la mise en place d'un réseau.

Il existe un réseau ouvert **The Things Network** une sorte d'internet des objets dont vous trouverez [ici](https://boizot.ch/iot/#architecture) une description.

Toutefois il faut avoir à proximité de chez soit une passerelle, n'ayant pas cette passerelle à proximité de chez moi j'ai donc dans un premier temps construit celle-ci.

Ma première passerelle ( Gateway ) fut contruite à partir d'un **Rpi3B+** et d'une carte ic880a

J'ai pour cela suivi les [instructions du wiki](https://github.com/ttn-zh/ic880a-gateway/wiki) de la communauté TTN de Zurich. J'ai mis un peu plus d'un week-end :-(

Je vais décrire ici les étapes de mise en place d'une deuxieme passerelle construite elle avec un rpi0
et intégrer ces composants dans un boitier de dérivation électrique avec un degré d'étanchéité IP65 afin de le placer en extérieur

Ensuite dans un deuxieme article je parlerais du réseau **"The Things Network"**

## Le matériel utilisé

### un raspberry pi zero WH
C'est une minuscule carte **65mm x 30mm x 5mm** intégrant un composant Wifi et une antenne originale.
Le RPI zero WH est en terme de ressource mémoire et cpu équivalent à la première version du raspberry PI avec 512 Mo de mémoire et un processeur 1 core à 1Ghz.
Mais surtout une consommation 5x plus faible.

![rpi zero w](images/Pi-Zero-W-1_400x.jpg)

Une comparaison des différents [modèles](https://socialcompare.com/fr/comparison/raspberrypi-models-comparison)

**une carte SD** de 8Go ou 16Go.

### Une carte pour la transmission radio

#### IMST IC880A - SPI

Cette carte concentrateur est très populaire et le montage est identique à celui fait avec le RPI 3B, décrit sur le [wiki](https://github.com/ttn-zh/ic880a-gateway/wiki) de la communauté Zurichoise du réseau TheThingsNetwork.

Taille de la carte : **80 x 68 x 14 mm**

![ic880a](images/iC880A_SPI.jpg)

7 câbles dupond femelle-femelle de 7.5 cm pour connecter la carte au rpi0.

**Suivant ce plan de connexion**.

iC880a pin      | Description   | RPi physical pin
----------------|---------------|-----------------
21              | Supply 5V     | 2
22              | GND           | 6
13              | Reset         | 22
14              | SPI CLK       | 23
15              | MISO          | 21
16              | MOSI          | 19
17              | NSS           | 24

### Une antenne et le connecteur
![pigtail](images/lora-zubehoer.png)
![antenne](images/antenna_lora_1.jpg)

### Un boitier

Taille du boitier étanche **105 x 105 x 46 mm**.  
![boiier 1](images/boitier-1.jpg)
![boiier 1](images/boitier-2.jpg)

## Les logiciels

+ Raspberry Pi Os
+ git
+ les sources du [projet ttn-zh](https://github.com/ttn-zh/ic880a-gateway.git)

## La mise en oeuvre.
### L'OS
La procédure d'instalation de Raspberry Pi Os ( Raspbian ) sur un RPI Zero WH est identique à une installation sans écran classique.

Il est nécessaire

+ de Télécharger une image sur le [site rapsberrypi.org](https://downloads.raspberrypi.org/raspios_lite_armhf/images/)
+ Monter cette image sur la carte SD.
+ activer
  + le ssh - en créant un fichier ssh vide dans la partitition boot
  + le wifi : en créant un fichier wpa_supplicant.conf dans la partition boot.
  + le SPI : en modifiant dans config.txt le parametre **dtparam=spi=on**

Une fois tout cela fait insérer a carte micro SD et brancher le secteur.

Puis rechercher l'IP de cette nouvelle machine sur votre réseau.
La commande nmap en tant que root devrait faire le travail:
> sudo nmap -sP -n 192.168.xxx.0/24

Et faite une connexion sur l'ip avec l'utilisateur pi.
une fois cette connexion faite.

+ Passer en root
  + pour mettre à niveau l'OS.
    + apt update
    + apt upgrade
  + mettre à jour tzdata
    + dpkg-reconfigure tzdata
  + Installer git
    + apt install git
  + créer un utilisateur *gate* pour l'application
    + adduser gate
    + adduser gate sudo ( ajout au groupe sudo)
    + donner les droits d'éxécution sans passage de mot de passe en créant un fichier dans sudoers.d à l'identique de celui pour l'utilisateur pi.

+ vérifier le bon fonctionnement de la connexion et du passage en super utilisateur.
  + supprimer l'utilisateur pi
    + sudo userdel -rf pi
 + vérifier que spi est bien actif.
  + lsmod | gre spi

### l'application

#### préparation

+ cloner l'application.

Avant de lancer l'installation préparer les éléments que vous allez configurer à savoir.

+ Nom de la gateway( descritif )
+ Nom de la machine.
+ position géographique
  + latitude
  + longitude
  + altitude

**Ne pas lancer** l'installation avant d'avoir connecter les éléments entre eux.

**rpi0 --> Ic880a**
![rpi0-iC880a](images/pizero-ic880a.jpg)

**Ic880a --> antenne**
![iC880a-antenne](images/ic880a-antenne.jpg)

**La mise en boite _provisoire_**

![en boite](images/montage-boite.jpg)

**!! Important brancher l'antenne avant de mettre sous tension**

#### installation

+ Aller dans le répertoire cloner
+ lancer l'installation et renseigner les infos.

> sudo ./install.sh  spi

Une fois l'installation finie, votre passerelle va redémmarrer.

#### Vérification

En fin d'installation vérifier par la commande
> sudo systemctl status ttn-gateway.service

Le bon fonctionnement du service.

> sudo systemctl status ttn-gateway.service
>
>● ttn-gateway.service - The Things Network Gateway  
>
> Loaded: loaded (/lib/systemd/system/ttn-    gateway.service; enabled; vendor preset: enabled)  
> Active: active (running) since Mon 2021-04-05 19:02:19 CEST; 36s ago
>
>Main PID: 3277 (start.sh)
    Tasks: 4 (limit: 2062)
   CGroup: /system.slice/ttn-gateway.service
           ├─3277 /bin/bash /opt/ttn-gateway/bin/start.sh
           └─3300 ./poly_pkt_fwd

Quand tout est OK vous pouvez passez à la configuration de la passerelle en ligne

Mais avant regardons ce qui est installé.

### Qu'est ce qui est installé?

#### Le clonage

Il installe plusieurs scripts

+ install.sh pour l'installation de l'application
+ start.sh  pour le démarrage de l'application

La description du service au format systemd : ttn-gateway.service pour une prise en charge automatique des relances en cas d'arret.

#### Le script d'installation

Le script

1. crée le répertoire /opt/ttn-gateway
3. récupère les sources à partir de github avec git
2. compile l'application.
3. modifie le nom de machine.
2. installe le service
1. redémarre la machine.