Skip to main content
shopping_basket Warenkorb 0
Einloggen

Siemens IOT2020 – Node-Red, MQTT und SQLITE3 installieren und testen

Installieren wir nun Software, mit der wir ein echtes industrielles Open-Source-Gateway einrichten können

Damit meine ich  
Node-Red zum Entwerfen und Verwalten von Kontrollflussdiagrammen,
MQTT zum Veröffentlichen von Befehlen und Daten an vorgelagerte Systeme und zum Abonnieren und Veröffentlichen von Edge-Nodes, die Relais und Stromversorgung der Geräte steuern, Temperatur, Luftfeuchtigkeit, Luftdruck messen ... und vieles mehr.

SQLITE3 für das Speichern und Abrufen historischer Daten, damit Trends erfasst und Analysen erstellt werden können

Bevor wir mit der Installation fortfahren können, müssen Sie die ersten Videos

SD-Karte erstellen
Dateisystem erweitern, um die gesamte SD-Karte zu nutzen

WICHTIGER HINWEIS: DIESER BEITRAG HAT HOCHGRADIG TECHNISCHE INHALTE UND DER VORGANG NIMMT EINIGE ZEIT IN ANSPRUCH (mehr als eine Stunde; bei mir hat es noch länger gedauert, weil ich es gleichzeitig auf Video aufgenommen habe). Ich habe mich bemüht, alles korrekt zu dokumentieren, aber dennoch könnten sich Fehler eingeschlichen haben. Bitte lassen Sie mir Ihre Verbesserungsvorschläge und Korrekturen zukommen.

 

Anschließend konfigurieren wir Datenquellen und Architektur, und dann installieren wir Node-Red, MQTT in Form von Mosquitto und SQLITE3 für Datenbankfunktionen.
Wir fügen viele Node-Red-Module hinzu, damit Node-Red sie verwenden kann. Außerdem fügen wir Knoten für Modbus, GPIO, serielle und andere Funktionen hinzu.

  1.  Repository-Quellen und Architekturparameter konfigurieren
    Architektur aktualisieren, indem Sie die folgenden Zeilen zu /etc/opkg/arch.conf hinzufügen (die fett gedruckten Zeilen unten)

arch all 1

arch any 6

arch noarch 11

arch i586 12

arch quark 13

arch x86 14

arch i586-nlp-32 16

arch i586-nlp-32-intel-common 21

arch iot2000 26

  1. Eine Datei namens  /etc/opkg/iotdk.conf

     hinzufügen und den folgenden Inhalt in die Datei einfügen

src iotdk-all http://iotdk.intel.com/repos/2.0/iotdk/all
src iotdk-i586 
HYPERLINK "http://iotdk.intel.com/repos/2.0/iotdk/i586" http://iotdk.intel.com/repos/2.0/iotdk/i586
src iotdk-quark 
HYPERLINK "http://iotdk.intel.com/repos/2.0/iotdk/quark" http://iotdk.intel.com/repos/2.0/iotdk/quark
src iotdk-x86 
HYPERLINK "http://iotdk.intel.com/repos/2.0/iotdk/x86" http://iotdk.intel.com/repos/2.0/iotdk/x86

  1. Zum Hinzufügen eines Repositorys für MRAA den folgenden Befehl ausführen
    echo "src mraa-upm http://iotdk.intel.com/repos/3.5/intelgalactic/opkg/i586" > /etc/opkg/mraa-upm.conf
  2. Zum Aktualisieren der lokalen Listen für Repositorys opkg update ausführen
  3. Nun installieren wir nodejs, sqlite3 und eine Fehlerbehebung für sshd. (Bei der Installation von nodejs tritt ein sshd-Fehler auf.) Führen Sie die folgenden Befehle aus.

opkg install nodejs

opkg install sqlite3

opkg install sshd

  1. Zum Installieren von Node-Red und zugehörigen Modulen führen Sie die folgenden Befehle aus. (Sie können sie alle auf einmal kopieren und in die Befehlszeile einfügen. Dann werden sie der Reihe nach abgearbeitet.)

npm install -g --unsafe-perm node-red

cd

mkdir .node-red

cd .node-red

npm install node-red-dashboard

npm install node-red-contrib-modbus

npm install mraa

npm install galileo-io

npm install node-red-contrib-gpio

npm install node-red-contrib-upm

npm install node-red-contrib-modbustcp

npm install moment

npm install node-red-admin

npm install node-red-contrib-bigtimer

npm install node-red-contrib-esplogin

npm install node-red-node-sqlite

npm install node-red-contrib-timeout

npm install node-red-node-openweathermap

Wenn Sie nicht alle diese Module brauchen, entfernen Sie diese Zeile einfach. Der Vorgang dauert eine Weile (rund eine halbe Stunde). Wahrscheinlich werden auch Warnmeldungen angezeigt. Das ist bei der derzeitigen Version des Betriebssystems und diesen Modulen ganz normal und beeinträchtigt die Funktionsfähigkeit der Module nicht.

 

  1. Anschließend können wir Mosquitto installieren. Verwenden Sie dazu die folgenden Befehle. Falls „wget“ die Datei nicht findet, gibt es wahrscheinlich eine neuere Version. Überprüfen Sie das Repository und aktualisieren Sie Ihr Skript. Auch dieser Vorgang kann einige Zeit dauern.

cd

wget http://mosquitto.org/files/source/mosquitto-1.4.10.tar.gz

tar xzf mosquitto-1.4.10.tar.gz

cd mosquitto-1.4.10

# dieser nächste Schritt dauert eine Weile

adduser mosquitto

make WITH_SRV=no

cd test/broker

make test

cd ../../

cp client/mosquitto_pub /usr/bin

cp client/mosquitto_sub /usr/bin

cp lib/libmosquitto.so.1 /usr/lib

cp src/mosquitto /usr/bin

  1. Node-Red und Mosquitto für den automatischen Start beim Hochfahren oder Neustart einrichten.
  • Legen Sie für Node-Red eine Datei an, in die Sie den folgenden Text einfügen. Dateipfad: etc/init.d/autostart_node_red.sh

#! /bin/sh

# Beispiel:

/usr/bin/node-red -u /home/root/.node-red -v &

exit 0

  • Legen Sie für Mosquitto eine Datei an, in die Sie den folgenden Text einfügen. Dateipfad: /etc/init.d/autostart_mosquitto.sh 

#! /bin/sh

# Beispiel:

/usr/bin/mosquitto &

exit 0

 

  • Nun können Sie Berechtigungen hinzufügen und das automatische Starten aktivieren

chmod +x /etc/init.d/autostart_node_red.sh

update-rc.d autostart_node_red.sh defaults

chmod +x /etc/init.d//autostart_mosquitto.sh

update-rc.d autostart_mosquitto.sh defaults

Wenn nun alles installiert ist, können wir neu starten und sehen, ob es funktioniert

 

HINWEIS: Zum Testen von SQLITE3 können Sie das folgende Skript ausführen, um eine Datenbank mit Tabellen anzulegen und die Berechtigungen festzulegen. Das Skript fügt auch ein paar Zeilen in einige Tabellen ein. Wenn Sie das nicht möchten, können Sie einfach auf die Verwendung verzichten oder diese Zeilen nach dem Test wieder löschen.

cd
mkdir dbs
sqlite3 ~/dbs/iot.db << EOF
CREATE TABLE IF NOT EXISTS \`pinDescription\` (
\`pinID\` INTEGER PRIMARY KEY NOT NULL,
\`pinNumber\` varchar(2) NOT NULL,
\`pinDescription\` varchar(255) NOT NULL
);
CREATE TABLE IF NOT EXISTS \`pinDirection\` (
\`pinID\` INTEGER PRIMARY KEY NOT NULL,
\`pinNumber\` varchar(2) NOT NULL,
\`pinDirection\` varchar(3) NOT NULL
);
CREATE TABLE IF NOT EXISTS \`pinStatus\` (
\`pinID\` INTEGER PRIMARY KEY NOT NULL,
\`pinNumber\` varchar(2) NOT NULL,
\`pinStatus\` varchar(1) NOT NULL
);
CREATE TABLE IF NOT EXISTS \`users\` (
\`userID\` INTEGER PRIMARY KEY NOT NULL,
\`username\` varchar(28) NOT NULL,
\`password\` varchar(64) NOT NULL,
\`salt\` varchar(8) NOT NULL
);
CREATE TABLE IF NOT EXISTS \`device_list\` (
\`device_name\` varchar(80) NOT NULL DEFAULT '',
\`device_description\` varchar(80) DEFAULT NULL,
\`device_attribute\` varchar(80) DEFAULT NULL,
\`logins\` int(11) DEFAULT NULL,
\`creation_date\` datetime DEFAULT NULL,
\`last_update\` datetime DEFAULT NULL,
PRIMARY KEY (\`device_name\`)
);
CREATE TABLE IF NOT EXISTS \`readings\` (
\`location\` varchar(20) NOT NULL,
\`value\` int(11) NOT NULL,
\`logged\` timestamp NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS \`pins\` (
\`gpio0\` int(11) NOT NULL DEFAULT '0',
\`gpio1\` int(11) NOT NULL DEFAULT '0',
\`gpio2\` int(11) NOT NULL DEFAULT '0',
\`gpio3\` int(11) NOT NULL DEFAULT '0'
);
INSERT INTO PINS VALUES(0,0,0,0);
CREATE TABLE IF NOT EXISTS \`temperature_record\` (
\`device_name\` varchar(64) NOT NULL,
\`rec_num\` INTEGER PRIMARY KEY,
\`temperature\` float NOT NULL,
\`date_time\` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS \`Device\` (
\`DeviceID\` INTEGER PRIMARY KEY,
\`DeviceName\` TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS \`DeviceData\` ( 
\`DataID\` INTEGER PRIMARY KEY, 
DeviceID INTEGER,
\`DataName\` TEXT, FOREIGN KEY(DeviceID ) REFERENCES Device(DeviceID) 
);
CREATE TABLE IF NOT EXISTS \`Data\` ( 
SequenceID INTEGER PRIMARY KEY,
\`DeviceID\` INTEGER NOT NULL,
\`DataID\` INTEGER NOT NULL,
\`DataValue\` NUMERIC NOT NULL, 
\`epoch\` NUMERIC NOT NULL, 
\`timestamp\` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP , FOREIGN KEY(DataID, DeviceID ) REFERENCES DeviceData(DAtaID, DeviceID ) 
);
.exit
EOF

cd
chmod 777 ~/dbs
chmod 666 ~/dbs/iot.db
cd

Nun konfigurieren wir Node-Red für ein paar Tests.

Die MQTT-Konfiguration lautet wie folgt, wobei Sie natürlich Ihre IP-Adresse verwenden müssen. Sie ermitteln Ihre IP-Adresse, indem Sie in der Linux ssh-Befehlszeile „ifconfig“ verwenden.

Den ModBus-Knoten können Sie nur mit einem TCP-Modbus-Gerät testen, und auch dann klappt es nicht mit allen Geräten. Ich habe Daten von einer industriellen Wärmebildkamera (FLIR AX8) abgerufen.

Der Befehl für die sqlite3-Auswahl in Node-Red lautet „select * from pins;“, der Datenbankpfad ist „/home/root/dbs/iot.db“.

Wenn Sie auf die Schaltfläche  klicken, sollten Sie die folgende debug-Ausgabe erhalten.

Die Dashboard-Elemente werden einfach geöffnet und dann mit der Schaltfläche „Fertig“ wieder geschlossen, um die Standardeinstellungen zu übernehmen. Das ermöglicht ihre Anzeige im Webbrowser. Wir gehen in einem späteren Video näher auf diesen Aspekt ein.

Gehen Sie zu der Adresse, die Sie bereits verwenden, und fügen Sie am Ende „/ui“ ein. Das Format sieht dann so aus: http://192.168.1.178:1880/ui/#/0  – aber natürlich mit Ihrer IP-Adresse.

Das sollte mit jedem beliebigen Browser vom Smartphone bis zum Desktop-PC funktionieren. Ich bevorzuge Chrome, aber auch bei den anderen Browsern, mit denen ich das ausprobiert habe, gab es keine Probleme.

Zum Abschluss testen wir MQTT. Konfigurieren Sie MQTT Lense (ein Chrome-Add-on) wie abgebildet, wobei Sie die IP-Adresse durch Ihre eigene ersetzen.

Das ist alles recht langwierig, aber leider unumgänglich. Ich hoffe, dass Siemens einige dieser Anwendungen zum Basiscode hinzufügen wird, aber solange das nicht der Fall ist, gelangen Sie nur mit diesen Schritten zu diesem Punkt.

Falls Sie dabei auf Probleme stoßen sollten, posten Sie einfach den betreffenden Befehl und Ihre Frage, damit wir Ihnen helfen können.

With a background in Industrial Electronics, Solutions Architecture and programming, I now spend my time working on my YouTube channel ( https://www.youtube.com/thebreadboardca ) where I create educational videos showing how to use various devices including Test and measurement, Home and industrial Automation, Components and other fun things I am sent to review or include in projects. I will also create many projects to showcase the use of these items
DesignSpark Electrical Logolinkedin