Dans une série d'articles, j'ai brièvement présenté la bibliothèque Java créée pour obtenir des informations générales sur l'environnement et des informations sur le fonctionnement des équipements d'automatisation industrielle. C'est comme suit une fois organisé.
Un outil simple (** rainy) qui acquiert et surveille ces données et met en place un mécanisme pour utiliser les données acquises à d'autres fins. **). J'ai mis Java dans Raspberry Pi 3B et je l'ai exécuté sur Apache Felix (framework OSGi). ** rainy ** construit et assemblé dans un outil est publié sous le nom de ** rainy-felix.zip ** à ** ici ** Je suis.
L'image de contour de ** pluvieux ** est la suivante. De plus, l'image suivante est une configuration dans laquelle la fonction de surveillance coexiste dans le même Raspberry Pi 3B. L'équipement utilisé est le suivant. Les dispositifs de connexion au MH-Z19B avec un adaptateur de communication série USB sont les suivants. Cet article est presque le même que Github here.
Je pense que ** pluvieux ** n'est pas suffisant en fonction et en performances pour un fonctionnement officiel, mais je pense que c'est un outil compact et facile à essayer.
# 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
La procédure d'installation d'InfluxDB sur Rasbperry Pi 3B est la suivante.
# 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
La procédure d'installation de Mosquitto sur Rasbperry Pi 3B est la même.
# 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
La procédure d'installation de Grafana sur Rasbperry Pi 3B est la suivante.
# 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
La procédure d'installation de Chronograf sur Rasbperry Pi 3B est la suivante.
# 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
--Modifiez / 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 =
https: // hostAddress: 3000 /
dans votre navigateur.# systemctl restart grafana-server.service
--Modifier / etc / default / chronograf
.
TLS_CERTIFICATE=/etc/rainy/cert.pem
TLS_PRIVATE_KEY=/etc/rainy/cert.key
https: // hostAddress: 8888 /
dans votre navigateur.# systemctl restart chronograf.service
bluetoothAdapter
hciconfig
comme suit:# 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
conf / logging.properties
. #io.github.s5uishida.level=INFO
-->
io.github.s5uishida.level=FINE
readCrontab
batteryLevel
temperature
temperatureNotify
readCrontab
est désactivée.temperatureNotificationPeriod
gyroscope
accelerometer
magnetometer
movementNotify
readCrontab
est désactivée.movementNotificationPeriod
wakeOnMotion
accelerometerRange
devices
hcitool
comme suit.# hcitool lescan
LE Scan ...
B0:B4:48:B9:92:86 (unknown)
B0:B4:48:B9:92:86 CC2650 SensorTag
Exécutez la commande hcitool
et appuyez sur le bouton d'alimentation du CC2650 pour afficher l'adresse numérisée comme ci-dessus.
**point important. Lorsqu'il est utilisé avec le PPD42NS, connectez la broche 4 (jaune) du PPD42NS à la broche 19 (GPIO10) ou à la broche 38 (GPIO20) du Raspberry Pi 3B. Alternativement, lors de la connexion de la broche 4 (jaune) du PPD42NS à la broche 8 (GPIO14) du Raspberry Pi 3B, connectez-vous au Raspberry Pi 3B via un adaptateur de communication série USB au MH-Z19B (DSD TECH SH- Adaptateur série USB vers TTL U09C avec puce FTDI FT232RL, etc.). Si vous connectez le MH-Z19B à un adaptateur de communication série USB, le nom du port de communication série sera / dev / ttyUSB0
. ** **
portName
/ dev / ttyAMA0
.influxDB
mqtt
prettyPrinting
conf / logging.properties
. #io.github.s5uishida.level=INFO
-->
io.github.s5uishida.level=FINE
readCrontab
gpioPin
GPIO_10
, GPIO_20
ou GPIO_14
. La valeur par défaut est «GPIO_10».influxDB
mqtt
prettyPrinting
conf / logging.properties
. #io.github.s5uishida.level=INFO
-->
io.github.s5uishida.level=FINE
readCrontab
influxDB
mqtt
prettyPrinting
conf / logging.properties
. #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>
Voici un exemple. Si la profondeur est définie sur «-1», l'ID de nœud sera recherché de l'ID de nœud jusqu'à la fin.
nodeIDs=2,Dynamic/RandomInt32,0 \
2,Dynamic/RandomInt64,0 \
2,Dynamic,-1 \
0,2295,-1
Dans l'exemple ci-dessus, «2, Dynamic / RandomInt32» et «2, Dynamic / RandomInt64» sont explicitement spécifiés pour l'ID de nœud, et ensemble, sous «2, Dynamic» et «0,2295» (VendorServerInfo). Recherchez l'ID de nœud de la hiérarchie jusqu'à la fin.
Il y a aussi «milo-example.properties» dans le répertoire «conf / opcua». Ceci est un exemple de connexion des paramètres à milo-example-server qui a créé l'exemple de serveur inclus dans Eclipse Milo.
Pour référence, en tant qu'outil simple pour vérifier l'espace d'adresses du serveur OPC-UA, [toem impulse OPC / UA Extension (Eclipse pulug-in)](https://toem.de/index.php/projects/impulse- Il y a 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
Si vous changez le niveau de journalisation suivant de conf / logging.properties
en ʻINFO-> FINE et redémarrez ** rainy **, les données de capteur acquises seront le fichier journal
logs / rainy.log.0 Il est sorti vers `.
#io.github.s5uishida.level=INFO
-->
io.github.s5uishida.level=FINE
Voici un exemple de sortie de fichier journal. Le début de la ligne est omis.
[/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
Pour réduire le nombre d'écritures sur la carte SD du Raspberry Pi 3B, il est généralement recommandé de définir le niveau de journalisation sur ʻINFO`.
À partir du fichier journal logs / rainy.log.0
, vérifiez le nom de la base de données créée dans InfluxDB. Vous trouverez ci-dessous un exemple du nom de base de données créé pour chaque capteur.
RP3B_01__dev_ttyAMA0
--CC2650 ⇒ B0_B4_48_B9_92_86
et B0_B4_48_ED_B6_04
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
Ces noms de base de données sont nécessaires pour se connecter à InfluxDB lors de la création de tableaux de bord dans Grafana ou Chronograf.
Connectez-vous à InfluxDB à partir des outils de visualisation Grafana et Chronograf pour surveiller les données des capteurs de séries temporelles.
Pour savoir comment utiliser Grafana, reportez-vous à Mise en route ici. Le graphique ci-dessous est un exemple de tableau de bord créé avec Grafana. Le graphique ci-dessous est un exemple d'image 3D magnétique (3 axes) utilisant le panneau Plotly. Le graphique ci-dessous est un exemple d'image d'utilisation du panneau ImageIt (https://grafana.com/grafana/plugins/pierosavi-imageit-panel) pour mapper les données du capteur au sol. Le CC2650 est placé dans trois pièces et le MH-Z19B (concentration de CO2) et le PPD42NS (concentration de PM2,5) sont placés dans la pièce principale.
Pour savoir comment utiliser Chronograf, reportez-vous à Premiers pas sur ici. Le graphique ci-dessous est un exemple de tableau de bord créé avec Chronograf. Le graphique ci-dessous est un exemple d'image de tableau de bord pour les ID de nœud suivants du serveur de démonstration public d'Eclipse Milo.
1,VendorServerInfo/ProcessCpuLoad
1,VendorServerInfo/SystemCpuLoad
1,VendorServerInfo/UsedMemory
2,Dynamic/RandomDouble
2,Dynamic/RandomFloat
2,Dynamic/RandomInt32
2,Dynamic/RandomInt64
La ligne supérieure montre les données de chaque ID de nœud de «1, VendorServerInfo / ProcessCpuLoad», «1, VendorServerInfo / SystemCpuLoad» et «1, VendorServerInfo / UsedMemory». La ligne du milieu montre les données de chaque ID de nœud de «2, Dynamic / Random Double» et «2, Dynamic / Random Float» superposées. La ligne inférieure montre les données de chaque ID de nœud de «2, Dynamic / RandomInt32» et «2, Dynamic / RandomInt64».Les outils de visualisation Grafana et Chronograf facilitent la création d'un tableau de bord de données chronologiques pour chaque capteur envoyé à InfluxDB.
Vous pouvez vérifier les données envoyées au courtier MQTT en exécutant la commande client MQTT comme suit:
# 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"}}
La licence pour le bundle suivant que j'ai créé est une licence MIT.
Veuillez vérifier chaque licence pour les ensembles suivants du tiers que vous utilisez.
Nous remercions les développeurs de ces poignées et ceux qui ont contribué.
Cette série comprend les articles suivants:
[2019.11.16] Pour obtenir les dernières informations sur les outils simples, veuillez consulter ici.
Recommended Posts