LoRaWAN mit LoRa Lite Gateway, Chirpstack und IP-Symcon einrichten

LoRa Lite Gateway vorbereiten

  • Raspberry Pi 1 gegen Raspberrry Pi 3 austauschen
  • Rasbian lite herunterladen
  • Das heruntergeladene Image mit einem Imaging-Tool auf eine microSD Karte brennen
  • In der boot Partition eine Datei „ssh“ erstellen, um den initialen Zugriff per SSH zu ermöglichen
  • Mithilfe eines IP-Scanners die IP-Adresse des Raspberry Pi herausfinden
  • Mit PuTTY auf die gefundene IP verbinden

Packet Forwarder einrichten

sudo raspi-config

Unter Interfacing Options P4 SPI auswählen
Git installieren

$ sudo apt get install git
git clone https://github.com/Lora-net/lora_gateway.git
git clone https://github.com/Lora-net/packet_forwarder.git
cd ~/lora_gateway
make all
cd ~/packet_forwarder
make all

In der global_conf und local conf den Port von 1680 auf 1700 ändern

nano  ~/packet_forwarder/lora_pkt_fwd/global_conf.json
und
nano  ~/packet_forwarder/lora_pkt_fwd/local_conf.json

cd ~/packet_forwarder/lora_pkt_fwd
./lora_pkt_fwd

IP-Symcon einrichten

IP-Symcon nach Anleitung auf dem Pi installieren und eine MQTT Instanz erstellen, welche auf den standartmäßigen Port 1883 lauscht.[b]

Vorbereitung für Chirpstack[/b]

Abhängigkeiten installiern

sudo apt install redis-server redis-tools postgresql
sudo -u postgres psql
create role chirpstack_as with login password 'dbpassword';
create role chirpstack_ns with login password 'dbpassword';
create database chirpstack_as with owner chirpstack_as;
create database chirpstack_ns with owner chirpstack_ns;
\c chirpstack_as
create extension pg_trgm;
create extension hstore;
[i]# Einrichtung der Datenbank überprüfen:[/i]
psql -h localhost -U chirpstack_as -W chirpstack_as
\q

Chirpstack Repository Einrichten

sudo apt install apt-transport-https dirmngr
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1CE2AFD36DBCCA00

sudo echo "deb https://artifacts.chirpstack.io/packages/3.x/deb stable main" | sudo tee /etc/apt/sources.list.d/chirpstack.list
sudo apt update

Bridge

sudo apt install chirpstack-gateway-bridge

[i]# gateway-bridge starten[/i]
sudo systemctl start chirpstack-gateway-bridge
[i]# gateway-bridge beim booten starten[/i]
sudo systemctl enable chirpstack-gateway-bridge

Network-Server


sudo apt install chirpstack-network-server
[i]# network-server starten[/i]
sudo systemctl start chirpstack-network-server
[i]# network-server beim booten starten[/i]
sudo systemctl enable chirpstack-network-server

Die Konfigurationsdatei um die vorher festgelegten Zugangsdaten für die PostgreSQL Datenbanken erweitern

sudo nano /etc/chirpstack-network-server/chirpstack-network-server.toml
[postgresql]
dsn="postgres://chirpstack_ns:dbpassword@localhost/chirpstack_ns?sslmode=disable"

Application-Server

sudo apt install chirpstack-application-server

Die Konfigurationsdateie anpassen und um die PostgreSQL Zugangsdaten erweitern.
Das Secret sollte natürlich besser gewählt werden. Beispielsweise mit dem Befehl openssl rand -base64 32


sudo nano /etc/chirpstack-application-server/chirpstack-application-server.toml
[postgresql]
dsn="postgres://chirpstack_as:dbpassword@localhost/chirpstack_as?sslmode=disable"
[application_server.external_api]
jwt_secret="verysecret"

[i]# application-server starten[/i]
sudo systemctl start chirpstack-application-server
[i]# application-server beim booten starten[/i]
sudo systemctl enable chirpstack-application-server

Pi rebooten

sudo reboot

Mit folgendem Skript könnt ihr die empfangenen Daten in entsprechende Variablen übertragen
Um die empfangenen Werte in Variablen zu übertragen erstellt ihr ein Skript mit folgendem Inhalt

<?php

$data = json_decode($_IPS['VALUE'], true);

foreach($data["object"] as $key => $value) {
    $vid = CreateVariableByIdent(IPS_GetParent($_IPS['VARIABLE']), $key, $key, 2);
    SetValue($vid, $value);
}

function CreateVariableByIdent($id, $ident, $name, $type, $profile = "") {
    $vid = @IPS_GetObjectIDByIdent($ident, $id);
    if($vid === false) {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetIdent($vid, $ident);
        if($profile != "") {
            IPS_SetVariableCustomProfile($vid, $profile);
        }
    }
    return $vid;
}

Unter dem Skript fügt ihr ein Ereignis hinzu, welches ausgelöst wird, wenn sich die Value Variable unter dem rx Objekt des Gerätes ändert.