[JAVA] Einfache Überwachung des Raumklimas - ⑦ Mit einem einfachen Tool zusammenfassen -

Einführung

In einer Reihe von Artikeln habe ich kurz die Java-Bibliothek vorgestellt, die erstellt wurde, um allgemeine Umgebungsinformationen und Betriebsinformationen von industriellen Automatisierungsgeräten zu erhalten. Es ist wie folgt, wenn es organisiert ist.

Ein einfaches Tool (** rainy), das diese Daten erfasst und überwacht und einen Mechanismus zur Verwendung der erfassten Daten für andere Zwecke einrichtet. **). Ich habe Java in Raspberry Pi 3B eingefügt und es auf Apache Felix (OSGi-Framework) ausgeführt. ** rainy ** erstellt und in einem Tool zusammengestellt wird als ** rainy-felix.zip ** auf ** [hier] veröffentlicht (https://github.com/s5uishida/rainy/releases) ** Ich bin.

Das Umrissbild von ** regnerisch ** ist wie folgt. rainy_overview_0_jp.png Darüber hinaus ist das folgende Bild eine Konfiguration, in der die Überwachungsfunktion im selben Raspberry Pi 3B koexistiert. rainy_overview_2_jp.png Die verwendete Ausrüstung ist wie folgt. rainy_hardware_1.png Die Geräte zum Anschließen an den MH-Z19B mit einem seriellen USB-Kommunikationsadapter sind wie folgt. rainy_hardware_0.png Dieser Artikel ist fast der gleiche wie Github hier.

Inhaltsverzeichnis

Zweck Der Zweck dieses Werkzeugs ** regnerisch ** ist wie folgt.
  • Erhalten Sie allgemeine Umwelt- und Betriebsinformationen von industriellen Automatisierungsgeräten in Innenräumen (privat / Büro / Fabrik). --Überwachen Sie diese Daten nahezu in Echtzeit und stellen Sie sie für andere Zwecke zur Verfügung.
  • Als Java / OSGi-Anwendung auf einem Raspberry Pi 3B (Arm) und einem Ubuntu-Computer (amd64) ausführen.

Ich denke, dass ** regnerisch ** in Funktion und Leistung für den offiziellen Betrieb nicht ausreicht, aber ich denke, dass es ein kompaktes und einfach zu testendes Werkzeug ist.

Betriebssystem-Setup Damit das Setup auf Raspberry Pi 3B ** regnerisch ** ausgeführt werden kann, [hier](https://qiita.com/s5uishida/items/1759498f8f706c4c3314) und [hier](https://qiita.com/) Bitte beziehen Sie sich auf s5uishida / items / 4ae7784aeaf50df1e3d3). Raspberry Pi 3B Integriertes Bluetooth und serielle Kommunikation (UART) können gleichzeitig verwendet werden.

Datenübertragungssetup ** rainy ** unterstützt InfluxDB- und MQTT-Broker für Datenziele.

Installieren und starten Sie InfluxDB Ich verwende [InfluxDB](https://www.influxdata.com/) auf einer virtuellen Ubuntu 18.04-Maschine. Informationen zum Installationsverfahren finden Sie unter [hier](https://portal.influxdata.com/downloads/).
# wget https://dl.influxdata.com/influxdb/releases/influxdb_1.7.8_amd64.deb
# dpkg -i influxdb_1.7.8_amd64.deb
# systemctl enable influxdb.service
# systemctl start influxdb.service

Das Verfahren zum Installieren von InfluxDB auf Rasbperry Pi 3B ist wie folgt.

# wget https://dl.influxdata.com/influxdb/releases/influxdb_1.7.8_armhf.deb
# dpkg -i influxdb_1.7.8_armhf.deb
# systemctl enable influxdb.service
# systemctl start influxdb.service

Installieren und starten Sie Mosquitto (MQTT-Broker) Ich verwende [Mosquitto](https://mosquitto.org/) (MQTT-Broker) auf einer virtuellen Ubuntu 18.04-Maschine. Das Installationsverfahren ist wie folgt.
# apt-get update
# apt-get install mosquitto
# apt-get install mosquitto-clients
# systemctl enable mosquitto.service
# systemctl start mosquitto.service

Das Verfahren zum Installieren von Mosquitto auf Rasbperry Pi 3B ist dasselbe.

Einrichtung des Visualisierungstools

Installieren und starten Sie Grafana Ich verwende [Grafana](https://grafana.com/) auf einer virtuellen Ubuntu 18.04-Maschine. Informationen zum Installationsverfahren finden Sie unter [hier](https://grafana.com/grafana/download?platform=linux).
# wget https://dl.grafana.com/oss/release/grafana_6.3.4_amd64.deb
# dpkg -i grafana_6.3.4_amd64.deb
# systemctl enable grafana-server.service
# systemctl start grafana-server.service

Das Verfahren zum Installieren von Grafana auf Rasbperry Pi 3B ist wie folgt.

# wget https://dl.grafana.com/oss/release/grafana_6.3.4_armhf.deb
# dpkg -i grafana_6.3.4_armhf.deb
# systemctl enable grafana-server.service
# systemctl start grafana-server.service

Chronograf installieren und starten Ich verwende [Chronograf](https://www.influxdata.com/time-series-platform/chronograf/) auf einer virtuellen Ubuntu 18.04-Maschine. Informationen zum Installationsverfahren finden Sie unter [hier](https://portal.influxdata.com/downloads/).
# wget https://dl.influxdata.com/chronograf/releases/chronograf_1.7.14_amd64.deb
# dpkg -i chronograf_1.7.14_amd64.deb
# systemctl enable chronograf.service
# systemctl start chronograf.service

Das Verfahren zum Installieren von Chronograf auf Rasbperry Pi 3B ist wie folgt.

# wget https://dl.influxdata.com/chronograf/releases/chronograf_1.7.14_armhf.deb
# dpkg -i chronograf_1.7.14_armhf.deb
# systemctl enable chronograf.service
# systemctl start chronograf.service

Bestätigung der HTTPS-Verbindung mit selbstsigniertem Zertifikat Im Allgemeinen wird nicht empfohlen, ein selbstsigniertes Zertifikat für den Produktionsbetrieb zu verwenden, aber ich denke, es ist zu Testzwecken in Ordnung.

Erstellen Sie einen selbstsignierten öffentlichen Schlüssel (cert.pem) und einen privaten Schlüssel (cert.key)
# openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout cert.key -out cert.pem -subj "/CN=localhost" -days 365

Erstellen Sie das Verzeichnis / etc / rainy und platzieren Sie den öffentlichen und den privaten Schlüssel
# mkdir /etc/rainy
# cp cert.pem cert.key /etc/rainy/
# cd /etc/rainy
# chmod 0644 cert.pem cert.key

Grafana HTTPS-Einstellungen Weitere Informationen finden Sie unter [hier](https://grafana.com/docs/installation/configuration/).
  • Bearbeiten Sie / etc / grafana / grafana.ini.
@@ -29,7 +29,7 @@
 #################################### Server ####################################
 [server]
 # Protocol (http, https, socket)
-;protocol = http
+protocol = https
 
 # The ip address to bind to, empty will bind to all interfaces
 ;http_addr =
@@ -58,8 +58,8 @@
 ;enable_gzip = false
 
 # https certs & key file
-;cert_file =
-;cert_key =
+cert_file = /etc/rainy/cert.pem
+cert_key = /etc/rainy/cert.key
 
 # Unix socket path
 ;socket =
  • Starten Sie Grafana neu und stellen Sie in Ihrem Browser eine Verbindung zu "https: // hostAddress: 3000 /" her.
# systemctl restart grafana-server.service

Chronograf HTTPS-Einstellungen Weitere Informationen finden Sie unter [hier](https://docs.influxdata.com/chronograf/v1.7/administration/managing-security/).
  • Bearbeiten Sie / etc / default / chronograf.
TLS_CERTIFICATE=/etc/rainy/cert.pem
TLS_PRIVATE_KEY=/etc/rainy/cert.key
  • Starten Sie Chronograf neu und stellen Sie in Ihrem Browser eine Verbindung zu "https: // hostAddress: 8888 /" her.
# systemctl restart chronograf.service

regnerische Konfiguration --rainy / conf

rainy.properties

- **`clientID`** ** regnerisch ** Legen Sie beim Ausführen eine eindeutige ID als Werkzeug fest. - **`cc2650`** Bei Verwendung von CC2650 auf "true" setzen. Der Standardwert ist "false". - **`mhz19b`** Bei Verwendung von MH-Z19B auf "true" setzen. Der Standardwert ist "false". - **`ppd42ns`** Bei Verwendung von PPD42NS auf "true" setzen. Der Standardwert ist "false". **wichtiger Punkt. Da PPD42NS von Pi4J verwendet wird, kann Rainy PPD42NS nur mit Raspberry Pi (Arm) -Serien verwenden. Pi4J kann nicht auf amd64-Linux-Computern verwendet werden. Setzen Sie es in diesem Fall auf "false". ** ** ** - **`opcua`** Bei Verwendung von OPC-UA auf "true" setzen. Der Standardwert ist "false".

Einstellungen für die Datenübertragungsverbindung

InfluxDB - influxdb.properties

- **`influxDBUrl`** - **`userName`** - **`password`** - `actions` Stellen Sie die Einheit für die Anzahl der Stapelprozesse ein. Der Standardwert ist "1000". - `flushDuration` Stellen Sie das Spülzeitintervall (ms) ein. Der Standardwert ist "1000". - `dataOnly` Auf "true" setzen, um nur die Daten abzurufen. Der Standardwert ist "true".

MQTT - mqtt.properties

- **`brokerUri`** - `userName` - `password` - **`clientID`** Legt die erste Hälfte der Client-ID fest, wenn eine Verbindung zum MQTT-Broker hergestellt wird. Die zweite Hälfte der Zeichenfolge wird vom System zugewiesen, um die Client-ID zu vervollständigen. - `qos` Der Standardwert ist "0". - `topic` Legt die Themenzeichenfolge beim Veröffentlichen auf dem MQTT-Broker fest. Die Standardeinstellung ist "regnerisch".

Sensor- und Protokolleinstellungen

CC2650 - cc2650.properties

[Hier](https://qiita.com/s5uishida/items/79a2de6a7026ef230e9b) ist ebenfalls hilfreich.
# hciconfig -a
hci0:   Type: Primary  Bus: UART
        BD Address: B8:27:EB:7D:0F:7D  ACL MTU: 1021:8  SCO MTU: 64:1
        UP RUNNING 
        RX bytes:28342 acl:441 sco:0 events:2265 errors:0
        TX bytes:34605 acl:441 sco:0 commands:1955 errors:0
        Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
        Link policy: RSWITCH SNIFF 
        Link mode: SLAVE ACCEPT 
        Name: 'raspberrypi'
        Class: 0x000000
        Service Classes: Unspecified
        Device Class: Miscellaneous, 
        HCI Version: 4.1 (0x7)  Revision: 0x168
        LMP Version: 4.1 (0x7)  Subversion: 0x2209
        Manufacturer: Broadcom Corporation (15)
  #io.github.s5uishida.level=INFO
  -->
  io.github.s5uishida.level=FINE
# hcitool lescan
LE Scan ...
B0:B4:48:B9:92:86 (unknown)
B0:B4:48:B9:92:86 CC2650 SensorTag

Führen Sie den Befehl hcitool aus und drücken Sie den Netzschalter am CC2650, um die gescannte Adresse wie oben gezeigt anzuzeigen.

MH-Z19B - mhz19b.properties

[Hier](https://github.com/s5uishida/mh-z19b-driver) ist ebenfalls hilfreich.

**wichtiger Punkt. Bei Verwendung mit dem PPD42NS Pin 4 (gelb) des PPD42NS mit Pin 19 (GPIO10) oder Pin 38 (GPIO20) des Raspberry Pi 3B verbinden. Wenn Sie alternativ Pin 4 (gelb) von PPD42NS mit Pin 8 (GPIO14) von Raspberry Pi 3B verbinden, verbinden Sie Raspberry Pi 3B über einen seriellen USB-Kommunikationsadapter mit MH-Z19B (DSD TECH SH-). U09C USB zu TTL Serial Adapter mit FTDI FT232RL Chip etc.). Wenn Sie den MH-Z19B an einen seriellen USB-Kommunikationsadapter anschließen, lautet der Name des seriellen Kommunikationsanschlusses "/ dev / ttyUSB0". ** ** **

  #io.github.s5uishida.level=INFO
  -->
  io.github.s5uishida.level=FINE

PPD42NS - ppd42ns.properties

[Hier](https://github.com/s5uishida/ppd42ns-driver) ist ebenfalls hilfreich.
  #io.github.s5uishida.level=INFO
  -->
  io.github.s5uishida.level=FINE

OPC-UA - opcua.properties

  #io.github.s5uishida.level=INFO
  -->
  io.github.s5uishida.level=FINE
OPC-UA-Server --conf / opcua / milo-public-demo.properties Im Folgenden finden Sie ein Einstellungsbeispiel für [Eclipse Milo Public Demo Server](https://github.com/eclipse/milo).
  • use
    Bei Verbindung mit diesem OPC-UA-Server auf "true" setzen. Der Standardwert ist "false".
  • serverName
    Legen Sie den OPC-UA-Servernamen fest.
  • endpointIP
    Stellen Sie die Adresse des OPC-UA-Servers ein.
  • endpointPort
    Stellen Sie die Portnummer des OPC-UA-Servers ein.
  • securityPolicy
    Stellen Sie für securityPolicy eine der Optionen "Basic128Rsa15", "Basic256", "Basic256Sha256" und "Keine" ein. Der Standardwert ist "Keine".
  • securityMode
    Legen Sie für securityMode die Optionen "Sign", "SignAndEncrypt" oder "None" fest. Der Standardwert ist "Keine".
  • userName
  • password
  • requestTimeout
    Der Standardwert ist "10000" (ms).
  • sessionTimeout
    Der Standardwert ist "10000" (ms).
  • publishingInterval
    Legt das Veröffentlichungsintervall für das überwachte Element (ms) fest. Der Standardwert ist "1000".
  • samplingInterval
    Legt das Stichprobenintervall für MonitoredItem (ms) fest. Der Standardwert ist "500".
  • queueSize
    Legt die Warteschlangengröße im MonitoredItem fest. Der Standardwert ist "10".
  • dataChangeTrigger
    Legen Sie im MonitoredItem eine der folgenden Optionen für den DataChangeTrigger fest.
    • 0 for DataChangeTrigger.Status
    • 1 for DataChangeTrigger.StatusValue
    • 2 for DataChangeTrigger.StatusValueTimestamp
      Der Standardwert ist "1".
  • nodeIDs
    Schreiben Sie die zu beobachtende Knoten-ID mit einem Leerzeichen. Das Format ist wie folgt.
  <namespaceIndex>,<identifier>,<depth>

Unten ist ein Beispiel. Wenn die Tiefe auf "-1" eingestellt ist, wird die Knoten-ID von der Knoten-ID bis zum Ende durchsucht.

  nodeIDs=2,Dynamic/RandomInt32,0 \
	  2,Dynamic/RandomInt64,0 \
	  2,Dynamic,-1 \
	  0,2295,-1

Im obigen Beispiel werden die Knoten-IDs explizit als "2, Dynamic / RandomInt32" und "2, Dynamic / RandomInt64" und zusammen mit "2, Dynamic" und "0,2295" (VendorServerInfo) angegeben. Suchen Sie bis zum Ende nach der Knoten-ID der Hierarchie.

Es gibt auch "milo-example.properties" im Verzeichnis "conf / opcua". Dies ist ein Beispiel für das Verbinden von Einstellungen mit milo-example-server, mit dem der in Eclipse Milo enthaltene Beispielserver erstellt wurde.

Als Referenz zur einfachen Überprüfung des Adressraums des OPC-UA-Servers [toem impulse OPC / UA-Erweiterung (Eclipse pulug-in)](https://toem.de/index.php/projects/impulse- Es gibt opcua).

regnerischer Start
  • Anlaufen Beginnen Sie wie folgt.
# cd /path/to/rainy-felix/bin
# sh rainy-start.sh
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.felix.framework.ext.ClassPathExtenderFactory$DefaultClassLoaderExtender (file:/path/to/rainy-felix/bin/felix.jar) to method java.net.URLClassLoader.addURL(java.net.URL)
WARNING: Please consider reporting this to the maintainers of org.apache.felix.framework.ext.ClassPathExtenderFactory$DefaultClassLoaderExtender
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
-> ps
START LEVEL 1
   ID   State         Level  Name
[   0] [Active     ] [    0] System Bundle (6.0.3)
[   1] [Active     ] [    1] bcpkix (1.62)
[   2] [Active     ] [    1] bcprov (1.62)
[   3] [Active     ] [    1] bluetooth scanner (0.1.1)
[   4] [Active     ] [    1] bluez-dbus-osgi (0.1.2.201908052042)
[   5] [Active     ] [    1] bsd-parser-core (0.3.3)
[   6] [Active     ] [    1] bsd-parser-gson (0.3.3)
[   7] [Active     ] [    1] java driver for ti sensortag cc2650 (0.1.0)
[   8] [Active     ] [    1] Apache Commons Lang (3.9.0)
[   9] [Active     ] [    1] cron4j-osgi (2.2.5)
[  10] [Active     ] [    1] dbus-java-with-java-utils-osgi (3.0.2)
[  11] [Active     ] [    1] Gson (2.8.5)
[  12] [Active     ] [    1] Guava: Google Core Libraries for Java (26.0.0.jre)
[  13] [Active     ] [    1] Java client for InfluxDB (2.15)
[  14] [Active     ] [    1] jSerialComm (2.5.1)
[  15] [Active     ] [    1] Jackson-annotations (2.9.9)
[  16] [Active     ] [    1] Jackson-core (2.9.9)
[  17] [Active     ] [    1] jackson-databind (2.9.9.1)
[  18] [Active     ] [    1] JavaBeans Activation Framework (1.2.0)
[  19] [Active     ] [    1] jaxb-api (2.4.0.b1808300359)
[  20] [Active     ] [    1] file:/home/pi/rainy-felix/bundle/jaxb-runtime-2.4.0-b180830.0438.jar
[  21] [Active     ] [    1] java driver for mh-z19b - intelligent infrared co2 module (0.1.2)
[  22] [Active     ] [    1] A modern JSON library for Kotlin and Java (1.7.0)
[  23] [Active     ] [    1] MessagePack serializer implementation for Java (0.8.17)
[  24] [Active     ] [    1] Netty/Buffer (4.1.38.Final)
[  25] [Active     ] [    1] netty-channel-fsm-osgi (0.3.0)
[  26] [Active     ] [    1] Netty/Codec (4.1.38.Final)
[  27] [Active     ] [    1] Netty/Codec/HTTP (4.1.38.Final)
[  28] [Active     ] [    1] Netty/Common (4.1.38.Final)
[  29] [Active     ] [    1] Netty/Handler (4.1.38.Final)
[  30] [Active     ] [    1] Netty/Resolver (4.1.38.Final)
[  31] [Active     ] [    1] Netty/Transport (4.1.38.Final)
[  32] [Active     ] [    1] Apache Felix Shell Service (1.4.3)
[  33] [Active     ] [    1] Apache Felix Shell TUI (1.4.1)
[  34] [Active     ] [    1] Apache ServiceMix :: Bundles :: jsr305 (3.0.2.1)
[  35] [Active     ] [    1] Apache ServiceMix :: Bundles :: okhttp (3.14.1.1)
[  36] [Active     ] [    1] Apache ServiceMix :: Bundles :: okio (1.15.0.1)
[  37] [Active     ] [    1] Apache ServiceMix :: Bundles :: retrofit (2.5.0.2)
[  38] [Active     ] [    1] Paho MQTT Client (1.2.1)
[  39] [Active     ] [    1] OSGi LogService implemented over SLF4J (1.7.26)
[  40] [Active     ] [    1] Pi4J :: Java Library (Core) (1.2)
[  41] [Active     ] [    1] java driver for ppd42ns - dust sensor module (0.1.6)
[  42] [Active     ] [    1] osgi activator of rainy - a tiny tool for iot data collection and monitoring (0.1.6)
[  43] [Active     ] [    1] OPC-UA bundle of rainy - a tiny tool for iot data collection and monitoring (0.1.4)
[  44] [Active     ] [    1] rainy - a tiny tool for iot data collection and monitoring (0.1.14)
[  45] [Active     ] [    1] sdk-client (0.3.3)
[  46] [Active     ] [    1] sdk-core (0.3.3)
[  47] [Active     ] [    1] slf4j-api (1.7.26)
[  48] [Resolved   ] [    1] slf4j-jdk14 (1.7.26)
[  49] [Active     ] [    1] stack-client (0.3.3)
[  50] [Active     ] [    1] stack-core (0.3.3)
[  51] [Active     ] [    1] strict-machine-osgi (0.1.0)
-> 
  • Halt Stoppen Sie wie folgt.
-> stop 0

Sensordaten in Protokolldatei ausgeben

Wenn Sie die folgende Protokollstufe von "conf / logging.properties" in "INFO-> FINE" ändern und ** rainy ** neu starten, sind die erfassten Sensordaten die Protokolldatei "logs / rainy.log.0" Es wird an `ausgegeben.

#io.github.s5uishida.level=INFO
-->
io.github.s5uishida.level=FINE

Ein Beispiel für die Ausgabe von Protokolldateien lautet wie folgt. Der Zeilenanfang wird weggelassen.

[/dev/ttyAMA0] co2:850 
[hci0] B0:B4:48:B9:92:86 obj:28.28125 amb:32.28125 
[hci0] B0:B4:48:B9:92:86 humidity:59.362793 
[hci0] B0:B4:48:B9:92:86 pressure:1012.27 
[hci0] B0:B4:48:B9:92:86 optical:227.28 
[hci0] B0:B4:48:B9:92:86 gyr[x]:-1.3198851 
[hci0] B0:B4:48:B9:92:86 gyr[y]:-0.2593994 
[hci0] B0:B4:48:B9:92:86 gyr[z]:0.7476806 
[hci0] B0:B4:48:B9:92:86 acc[x]:0.0056152344 
[hci0] B0:B4:48:B9:92:86 acc[y]:-0.007080078 
[hci0] B0:B4:48:B9:92:86 acc[z]:0.9707031 
[hci0] B0:B4:48:B9:92:86 mag[x]:127.0 
[hci0] B0:B4:48:B9:92:86 mag[y]:420.0 
[hci0] B0:B4:48:B9:92:86 mag[z]:302.0
[GPIO_10] pcs:1373.6702 ugm3:2.1420693

Um die Anzahl der Schreibvorgänge auf die SD-Karte des Raspberry Pi 3B zu verringern, wird normalerweise empfohlen, die Protokollstufe auf "INFO" zu setzen.

Überprüfen Sie den in InfluxDB erstellten Datenbanknamen

Überprüfen Sie in der Protokolldatei "logs / rainy.log.0" den in InfluxDB erstellten Datenbanknamen. Unten finden Sie ein Beispiel für den Datenbanknamen, der für jeden Sensor erstellt wurde.

  • MH-Z19B ⇒ RP3B_01__dev_ttyAMA0 --CC2650 ⇒ B0_B4_48_B9_92_86 und B0_B4_48_ED_B6_04 --Eclipse Milo öffentlicher Demo-Server ⇒ milo_digitalpetri_com_62541_milo
  • PPD42NS ⇒ RP3B_01_GPIO_10
execute - CREATE DATABASE RP3B_01__dev_ttyAMA0
...
execute - CREATE DATABASE B0_B4_48_B9_92_86
...
execute - CREATE DATABASE B0_B4_48_ED_B6_04
...
execute - CREATE DATABASE milo_digitalpetri_com_62541_milo
...
execute - CREATE DATABASE RP3B_01_GPIO_10

Diese Datenbanknamen werden als Informationen für die Verbindung mit InfluxDB benötigt, wenn Dashboards in Grafana oder Chronograf erstellt werden.

Erstellen Sie Dashboards mit Visualisierungstools

Stellen Sie über die Visualisierungstools Grafana und Chronograf eine Verbindung zu InfluxDB her, um Zeitreihensensordaten zu überwachen.

Für Grafana

Informationen zur Verwendung von Grafana finden Sie unter Erste Schritte unter hier. Die folgende Grafik ist ein Beispiel für ein mit Grafana erstelltes Dashboard. rainy_grafana_1.png Die folgende Grafik ist ein Beispiel für ein magnetisches 3D-Bild (3 Achsen) mit dem Bedienfeld Plotly. rainy_grafana_1_1.png Die folgende Grafik ist ein Beispiel für die Verwendung des ImageIt-Bedienfelds (https://grafana.com/grafana/plugins/pierosavi-imageit-panel) zum Zuordnen von Sensordaten zum Boden. CC2650 wird in drei Räumen platziert, und MH-Z19B (CO2-Konzentration) und PPD42NS (PM2,5-Konzentration) werden im Hauptraum platziert. rainy_floor_env_1.png

Für Chronograf

Informationen zur Verwendung von Chronograf finden Sie unter Erste Schritte unter hier. Die folgende Grafik ist ein Beispiel für ein mit Chronograf erstelltes Dashboard. rainy_chronograf_1.png Die folgende Grafik ist ein Beispiel für ein Dashboard-Bild für die folgenden Knoten-IDs des öffentlichen Demoservers von Eclipse Milo.

  • 1,VendorServerInfo/ProcessCpuLoad
  • 1,VendorServerInfo/SystemCpuLoad
  • 1,VendorServerInfo/UsedMemory
  • 2,Dynamic/RandomDouble
  • 2,Dynamic/RandomFloat
  • 2,Dynamic/RandomInt32
  • 2,Dynamic/RandomInt64 rainy_opcua_1.png Die obere Zeile zeigt die Daten jeder Knoten-ID von "1, VendorServerInfo / ProcessCpuLoad", "1, VendorServerInfo / SystemCpuLoad" und "1, VendorServerInfo / UsedMemory". Die mittlere Zeile zeigt die Daten jeder Knoten-ID von "2, Dynamic / Random Double" und "2, Dynamic / Random Float" überlagert. Die untere Zeile zeigt die Daten jeder Knoten-ID von "2, Dynamic / RandomInt32" und "2, Dynamic / RandomInt64".

Mit den Visualisierungstools Grafana und Chronograf können Sie auf einfache Weise ein Dashboard mit Zeitreihendaten für jeden an InfluxDB gesendeten Sensor erstellen.

Überprüfen Sie die an den MQTT-Broker gesendeten Daten

Sie können die an den MQTT-Broker gesendeten Daten überprüfen, indem Sie den Befehl MQTT-Client wie folgt ausführen:

# mosquitto_sub -d -t rainy/B0_B4_48_ED_B6_04
Client mosqsub|2095-u1804 sending CONNECT
Client mosqsub|2095-u1804 received CONNACK
Client mosqsub|2095-u1804 sending SUBSCRIBE (Mid: 1, Topic: rainy/B0_B4_48_ED_B6_04, QoS: 0)
Client mosqsub|2095-u1804 received SUBACK
Subscribed (mid: 1): 0
Client mosqsub|2095-u1804 received PUBLISH (d0, q0, r0, m0, 'rainy/B0_B4_48_ED_B6_04', ... (670 bytes))
{"deviceID":"B0:B4:48:ED:B6:04","clientID":"RP3B-01","samplingDate":"2019-08-09 12:56:00.009","samplingTimeMillis":1565351760009,"samplingTimeNanos":0,"firmwareVersion":"1.30 (May 23 2016)","batteryLevel":{"value":72,"unit":"%"},"objectTemperature":{"value":27.46875,"unit":"deg C"},"ambientTemperature":{"value":32.03125,"unit":"deg C"},"humidity":{"value":34.61914,"unit":"%"},"pressure":{"value":1009.16,"unit":"hPa"},"optical":{"value":203.84,"unit":"lux"},"gyroscope":{"x":-10.589599,"y":-7.8887935,"z":-2.281189,"unit":"deg/s"},"accelerometer":{"x":-0.029785156,"y":-0.06347656,"z":1.1887207,"unit":"G"},"magnetometer":{"x":138.0,"y":125.0,"z":-199.0,"unit":"uT"}}

Einschränkungen - Es kann jeweils nur ein Bluetooth-Adapter verwendet werden. ――Ich denke, dass die Anzahl der CC2650, die gleichzeitig verwendet werden können, aufgrund der Einschränkung des Bluetooth-Chips ungefähr mehrere beträgt. - Wenn die Verbindung zum CC2650 unterbrochen wird, kann die automatische Wiederverbindung fehlschlagen. --PPD42NS wird von Pi4J verwendet, daher kann ** rainy ** PPD42NS nur mit Raspberry Pi (arm) -Serien verwenden. Sie können PPD42NS nicht verwenden, da Sie Pi4J nicht auf amd64-Linux-Computern verwenden können. - Für den OPC-UA-Server kann sich die Belastung von InfluxDB aufgrund des Gleichgewichts zwischen der Anzahl der zu beobachtenden Knoten-IDs und dem Veröffentlichungsintervall extrem erhöhen.

Bundle-Liste

Die Lizenz für das folgende von mir erstellte Bundle ist eine MIT-Lizenz.

Bitte überprüfen Sie jede Lizenz auf die folgenden Bundles des von Ihnen verwendeten Drittanbieters.

Wir möchten den Entwicklern dieser Handles und denen, die dazu beigetragen haben, danken.

Eine Reihe von Artikeln

Diese Reihe besteht aus folgenden Artikeln:

  1. Motivation und Konzept
  2. Bluetooth LE-Werbesignal mit Java abfangen (Bluetooth LE / bluez-dbus) Der zugehörige Github ist hier.
  3. Temperatur / Luftfeuchtigkeit / Beleuchtungsstärke usw. vom TI SensorTag CC2650 mit Java (Bluetooth LE / bluez-dbus) abrufen Der zugehörige Github ist hier.
  4. CO2-Konzentration von MH-Z19B mit Java abrufen (serielle Kommunikation / jSerialComm) Der zugehörige Github ist hier.
  5. PM2.5-Konzentration von PPD42NS in Java (GPIO / Pi4J) abrufen Der zugehörige Github ist hier.
  6. Abrufen von Betriebsinformationen zu industriellen Automatisierungsgeräten in Java (OPC-UA / Eclipse Milo) Der verwandte Github ist hier.
  7. ** In einem einfachen Tool zusammenfassen (diesmal) ** Der verwandte Github ist hier.
  8. Postscript

Nachtrag

[2019.11.16] Die neuesten Informationen zu einfachen Tools finden Sie unter hier.

Recommended Posts

Einfache Überwachung des Raumklimas - ⑦ Mit einem einfachen Tool zusammenfassen -
Überwachen Sie einfach das Raumklima ~ ⑧ Postscript ~
Überwachen Sie einfach das Raumklima. (1) Motivation und Konzept.
Einfache Überwachung der Innenumgebung - ⑨ Erfassen Sie die Bewegungserkennung (HC-SR501 / RCWL-0516) mit Java (GPIO / Pi4J) -
Erstellen eines Servlets in der Liberty-Umgebung
Einfache Überwachung des Innenraumklimas - ⑥ Erfassen von Betriebsinformationen für industrielle Automatisierungsgeräte in Java (OPC-UA / Eclipse Milo) -
Überwachen Sie einfach das Raumklima. ⑪ Erhalten Sie die Beleuchtungsstärke mit Java von BH1750FVI (Ersatz) - (I2C / Pi4J) -
Einfache Überwachung der Innenumgebung - ② Erfassen Sie das Bluetooth LE-Werbesignal mit Java (Bluetooth LE / bluez-dbus) -
Einfache Überwachung des Innenraumklimas - ⑤ Erhalten Sie die PM2.5-Konzentration von PPD42NS mit Java (GPIO / Pi4J) -
Einfache Überwachung des Innenraumklimas ~ ④ Erhalten Sie die CO2-Konzentration von MH-Z19B mit Java (serielle Kommunikation / jSerialComm) ~
Erstellen Sie eine Browsertestumgebung mit Capybara in der Docker-Entwicklungsumgebung
Wir werden eine Spring Framework-Entwicklungsumgebung in der lokalen Umgebung erstellen.
3 Implementieren Sie einen einfachen Interpreter in Java
Ein einfaches Beispiel für Rückrufe in Java
Einfache Überwachung des Innenraumklimas - ⑩ Beziehen Sie Temperatur / Luftfeuchtigkeit / Druck von BME280 (Ersatz) mit Java (I2C / Pi4J) -
Erstellen einer Lambda-Entwicklungsumgebung mit Eclipse
Erstellen Sie einen Thread-Dump in einer JRE-Umgebung
[Rails] Setzen Sie die Datenbank in der Produktionsumgebung zurück
Einfache Konstruktion der Docker + Django-Entwicklungsumgebung
(Capistrano) Nach der Bereitstellung wird ein Fehler in der Produktionsumgebung angezeigt.
Einfache Überwachung des Innenraumklimas ~ ③ Beziehen Sie Temperatur / Luftfeuchtigkeit / Beleuchtungsstärke usw. vom TI SensorTag CC2650 mit Java (Bluetooth LE / bluez-dbus) ~