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. Darüber hinaus ist das folgende Bild eine Konfiguration, in der die Überwachungsfunktion im selben Raspberry Pi 3B koexistiert. Die verwendete Ausrüstung ist wie folgt. Die Geräte zum Anschließen an den MH-Z19B mit einem seriellen USB-Kommunikationsadapter sind wie folgt. Dieser Artikel ist fast der gleiche wie Github hier.
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.
# 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
# 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.
# 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
# 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
# openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout cert.key -out cert.pem -subj "/CN=localhost" -days 365
# mkdir /etc/rainy
# cp cert.pem cert.key /etc/rainy/
# cd /etc/rainy
# chmod 0644 cert.pem cert.key
/ 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 =
# systemctl restart grafana-server.service
/ etc / default / chronograf
.TLS_CERTIFICATE=/etc/rainy/cert.pem
TLS_PRIVATE_KEY=/etc/rainy/cert.key
# systemctl restart chronograf.service
bluetoothAdapter
hciconfig
wie folgt, um die verfügbaren Adapternamen anzuzeigen:# 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)
influxDB
mqtt
prettyPrinting
#io.github.s5uishida.level=INFO
-->
io.github.s5uishida.level=FINE
readCrontab
batteryLevel
temperature
temperatureNotify
temperatureNotificationPeriod
gyroscope
accelerometer
magnetometer
movementNotify
movementNotificationPeriod
wakeOnMotion
accelerometerRange
devices
hcitool
wie folgt aus, um die Adresse des CC2650-Geräts zu überprüfen.# 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.
**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". ** ** **
portName
influxDB
mqtt
prettyPrinting
#io.github.s5uishida.level=INFO
-->
io.github.s5uishida.level=FINE
readCrontab
gpioPin
influxDB
mqtt
prettyPrinting
#io.github.s5uishida.level=INFO
-->
io.github.s5uishida.level=FINE
readCrontab
influxDB
mqtt
prettyPrinting
#io.github.s5uishida.level=INFO
-->
io.github.s5uishida.level=FINE
keyStoreType
keyStoreAlias
keyStorePassword
certificate
use
serverName
endpointIP
endpointPort
securityPolicy
securityMode
userName
password
requestTimeout
sessionTimeout
publishingInterval
samplingInterval
queueSize
dataChangeTrigger
0
for DataChangeTrigger.Status1
for DataChangeTrigger.StatusValue2
for DataChangeTrigger.StatusValueTimestampnodeIDs
<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).
# 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)
->
-> stop 0
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 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.
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
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.
Stellen Sie über die Visualisierungstools Grafana und Chronograf eine Verbindung zu InfluxDB her, um Zeitreihensensordaten zu überwachen.
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. Die folgende Grafik ist ein Beispiel für ein magnetisches 3D-Bild (3 Achsen) mit dem Bedienfeld Plotly. 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.
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. 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
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.
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"}}
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.
Diese Reihe besteht aus folgenden Artikeln:
[2019.11.16] Die neuesten Informationen zu einfachen Tools finden Sie unter hier.
Recommended Posts