Aneb „Jak jít s kanónem na vrabce“
- Měříme a získáváme měřené údaje
- Odesíláme údaje a sbíráme v cloudu
- Sebraná data ukládáme do databáze
- Data z databáze zpracujeme, zobrazíme a analyzujeme
1. Měření a získání naměřených dat počítačem
V našem okolí se dají pomocí speciálních čidel měřit rozmanité údaje. Od teploty, vlhkosti a tlaku vzduchu, přes měření teploty vody v zahradním jezírku nebo v kotli či bojleru, spotřebu elektřiny a vody, až po cokoliv nás napadne.
Pro začátek se můžeme spokojit s údaji, které jdou měřit v počítači nebo v jednodeskovém počítači typu Raspberry Pi s operačním systémem Linux. Osobně nejvíc používám Debian GNU/Linux, Ubuntu, Linux Mint, Armbian a CoreELEC, ale to záleží na osobním vkusu každého soudruha.
Účelem tohoto článku je v podstatě zdokumentovat základy realizovaného řešení a měřením v jiných operačních systémech se proto nezabývá.
Teplota procesoru a vzduchu ve skříni, počet otáček ventilátoru a hodnoty napětí programem
sensors
z balíkulm-sensors
.Pro automatizované zpracování dat jsou užitečné přepínače
-u
pro vypsání v jednoduchém formátu či-j
pro vypsání ve formátu json.$ sensors -u
it8728-isa-0a30 Adapter: ISA adapter in0: in0_input: 1.068 in0_min: 0.000 in0_max: 3.060 in0_alarm: 0.000 in0_beep: 0.000 in1: in1_input: 2.232 in1_min: 0.000 in1_max: 3.060 in1_alarm: 0.000 in1_beep: 0.000 in2: in2_input: 2.976 in2_min: 0.000 in2_max: 3.060 in2_alarm: 0.000 in2_beep: 0.000 in3: in3_input: 2.916 in3_min: 0.000 in3_max: 3.060 in3_alarm: 0.000 in3_beep: 0.000 in4: in4_input: 2.232 in4_min: 0.000 in4_max: 3.060 in4_alarm: 0.000 in4_beep: 0.000 in5: in5_input: 0.708 in5_min: 0.000 in5_max: 3.060 in5_alarm: 0.000 in5_beep: 0.000 in6: in6_input: 1.524 in6_min: 0.000 in6_max: 3.060 in6_alarm: 0.000 in6_beep: 0.000 3VSB: in7_input: 3.384 in7_min: 0.000 in7_max: 6.120 in7_alarm: 0.000 in7_beep: 0.000 Vbat: in8_input: 3.120 fan1: fan1_input: 1146.000 fan1_min: 0.000 fan1_alarm: 0.000 fan1_beep: 1.000 fan2: fan2_input: 0.000 fan2_min: 0.000 fan2_alarm: 0.000 fan2_beep: 1.000 fan3: fan3_input: 0.000 fan3_min: 0.000 fan3_alarm: 0.000 fan3_beep: 1.000 fan4: fan4_input: 0.000 fan4_min: 0.000 fan4_alarm: 0.000 fan4_beep: 1.000 fan5: fan5_input: 0.000 fan5_min: 0.000 fan5_alarm: 0.000 fan5_beep: 1.000 temp1: temp1_input: 31.000 temp1_max: 127.000 temp1_min: 127.000 temp1_alarm: 0.000 temp1_type: 4.000 temp1_offset: 0.000 temp1_beep: 1.000 temp2: temp2_input: -55.000 temp2_max: 127.000 temp2_min: 127.000 temp2_alarm: 0.000 temp2_type: 4.000 temp2_offset: 0.000 temp2_beep: 1.000 temp3: temp3_input: 18.000 temp3_max: 127.000 temp3_min: 127.000 temp3_alarm: 0.000 temp3_type: 6.000 temp3_offset: 94.000 temp3_beep: 1.000 intrusion0: intrusion0_alarm: 0.000
Z výpisu můžeme jednoduchým awk skriptem vyfiltrovat a přeformátovat hodnoty, které nás zajímají.
$ sensors -u | awk '/_input:/ { gsub("_input:", ""); print $1 "=" $2 }'
in0=1.068 in1=2.232 in2=2.976 in3=2.916 in4=2.232 in5=0.708 in6=1.524 in7=3.384 in8=3.120 fan1=1146.000 fan2=0.000 fan3=0.000 fan4=0.000 fan5=0.000 temp1=31.000 temp2=-55.000 temp3=18.000
Teplota pevného disku nebo SSD programem
smartctl
z balíkusmartmontools
.Přepínač
-n sleep
zabrání probuzení uspaného disku a přepínačem-l scttempsts
se získá teplota i uspaného disku (před uspáním).
Při použití přepínače-A
, který zobrazí S.M.A.R.T. data včetně teploty, se uspané disky probouzí. Pravidelné čtení těchto dat zabraňuje uspávání disků po nastavené době nečinnosti (programemhdparm -S<timeout>
), takže používat až po jejich přechodu do úsporného režimu (zjištění programemhdparm -C
).$ smartctl -n sleep -l scttempsts /dev/sda
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-77-generic] (local build) Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org === START OF READ SMART DATA SECTION === SCT Status Version: 3 SCT Version (vendor specific): 1 (0x0001) Device State: Active (0) Current Temperature: 21 Celsius Power Cycle Min/Max Temperature: 18/21 Celsius Lifetime Min/Max Temperature: -2/63 Celsius Specified Max Operating Temperature: 55 Celsius Under/Over Temperature Limit Count: 0/0
Vypsání pouze aktuální teploty disku pomocí awk skriptu:
$ smartctl -n sleep -l scttempsts /dev/sda | awk '/Current.*Celsius/ { gsub(/([^0-9 ]+)/, ""); print "temp_sda=" $1 }'
temp_sda=21
Měření teploty externím teplotním čidlem Dallas DS18B20 připojeným na 1-Wire sběrnici a k počítači přes seriový port RS-232 nebo přes USB TTL UART převodník.
Načtení hodnot programem
digitemp
:$ digitemp_DS9097 -i -s /dev/ttyS0 # uložení konfigurace do .digitemprc
DigiTemp v3.7.2 Copyright 1996-2018 by Brian C. Lane GNU General Public License v2.0 - http://www.digitemp.com Turning off all DS2409 Couplers .. Searching the 1-Wire LAN 281234E000000001 : DS18B20 Temperature Sensor 286789E000000099 : DS18B20 Temperature Sensor ROM #0 : 281234E000000001 ROM #1 : 286789E000000099 Wrote .digitemprc
$ digitemp_DS9097 -a # načtení hodnot všech čidel
DigiTemp v3.7.2 Copyright 1996-2018 by Brian C. Lane GNU General Public License v2.0 - http://www.digitemp.com Jul 20 17:35:10 Sensor 0 C: 23.25 F: 73.85 Jul 20 17:35:11 Sensor 1 C: 22.44 F: 72.39
Vypsání pouze naměřené teploty ve °C jednotlivých teploměrů:
$ digitemp_DS9097 -a -q | awk '/Sensor/ { print "temp_sensor" $5 "=" $7 }'
temp_sensor0=23.25 temp_sensor1=22.44
Příště si naměřené údaje zpracujeme a pošleme do cloudu.