Пост для опроса диагностической информации в среде Linux
===

## Описание

Запускает внешнюю утилиту sensors и парсит ее вывод. Результат кладет в БД АСОТТ

Используется пакет lm_sensors

> lm_sensors (Linux monitoring sensors) - свободное ПО, состоящее из драйверов и утилит,
> позволяющее отслеживать температуру, напряжение, скорости вращения вентиляторов в системе.
> Набор датчиков индивидуален для каждой системы, поэтому некоторые возможности могут быть недоступны

## Работа с пакетом lm_sensors

(Ссылка на источник)[https://wiki.archlinux.org/title/Lm_sensors_(Русский)]

### Установка утилиты

```bash
sudo apt-get install lm-sensors
```

### Настройка утилиты

Для детектирования чипа, отвечающего за вращение вентиляторов и измерение напряжений:

```bash
sudo sensors-detect
```

будет выведено следуещее (найден чип NCT6796D)

```bash
Now follows a summary of the probes I have just done.
Just press ENTER to continue:

Driver `nct6775':
  * ISA bus, address 0x2a0
    Chip `Nuvoton NCT6796D Super IO Sensors' (confidence: 9)
```

загрузить модуль ядра отвечающего за вентиляторы

```bash
modprobe nct6775
/etc/init.d/kmod start
```

проверить что модуль загрузился

```bash
lsmod | grep nct6775
```

запустить службу мониторинга

```bash
sudo systemctl enable lm-sensors
sudo systemctl start  lm-sensors
```

### Работа с утилитой

Выполнить запрос температуры и вентиляторов.
Вывод распарсить и положить в БД (интересуют Package id 0: SYSTIN: и fan*: c rpm > 0)

> В случае если параметр в таблице null, то в ответе в объекте с соответствующим 
> envcode такого поля не будет

Пример:

```bash
$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +30.0°C  (high = +80.0°C, crit = +100.0°C)
Core 0:        +30.0°C  (high = +80.0°C, crit = +100.0°C)
Core 4:        +25.0°C  (high = +80.0°C, crit = +100.0°C)
Core 8:        +25.0°C  (high = +80.0°C, crit = +100.0°C)
Core 12:       +24.0°C  (high = +80.0°C, crit = +100.0°C)
Core 16:       +25.0°C  (high = +80.0°C, crit = +100.0°C)
Core 20:       +26.0°C  (high = +80.0°C, crit = +100.0°C)
Core 24:       +27.0°C  (high = +80.0°C, crit = +100.0°C)
Core 25:       +27.0°C  (high = +80.0°C, crit = +100.0°C)
Core 26:       +27.0°C  (high = +80.0°C, crit = +100.0°C)
Core 27:       +25.0°C  (high = +80.0°C, crit = +100.0°C)
Core 28:       +26.0°C  (high = +80.0°C, crit = +100.0°C)
Core 29:       +26.0°C  (high = +80.0°C, crit = +100.0°C)
Core 30:       +26.0°C  (high = +80.0°C, crit = +100.0°C)
Core 31:       +26.0°C  (high = +80.0°C, crit = +100.0°C)

nvme-pci-0200
Adapter: PCI adapter
Composite:    +44.9°C  (low  =  -0.1°C, high = +86.8°C)
                       (crit = +88.8°C)

nct6798-isa-02a0
Adapter: ISA adapter
in0:                    +0.69 V  (min =  +0.00 V, max =  +1.74 V)
in1:                    +1.68 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in2:                    +3.44 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in3:                    +3.33 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in4:                    +1.03 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in5:                    +0.89 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in6:                    +1.13 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in7:                    +3.44 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in8:                    +3.20 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in9:                    +0.53 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in10:                   +0.53 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in11:                   +0.41 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in12:                   +1.00 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in13:                   +0.45 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in14:                   +1.52 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
fan1:                     0 RPM  (min =    0 RPM)
fan2:                   541 RPM  (min =    0 RPM)
fan3:                   800 RPM  (min =    0 RPM)
fan4:                     0 RPM  (min =    0 RPM)
fan5:                     0 RPM  (min =    0 RPM)
fan6:                     0 RPM  (min =    0 RPM)
fan7:                     0 RPM  (min =    0 RPM)
SYSTIN:                 +37.0°C    sensor = thermistor
CPUTIN:                 +25.0°C  (high = +127.0°C, hyst = +110.0°C)  sensor = thermistor
AUXTIN0:                +19.0°C    sensor = thermistor
AUXTIN1:                +22.0°C    sensor = thermistor
AUXTIN2:                +35.0°C    sensor = thermistor
AUXTIN3:                 -2.0°C    sensor = thermistor
PECI Agent 0:           +30.0°C  (high = +80.0°C, hyst = +75.0°C)
                                 (crit = +100.0°C)
PCH_CHIP_CPU_MAX_TEMP:   +0.0°C
PCH_CHIP_TEMP:           +0.0°C
PCH_CPU_TEMP:            +0.0°C
intrusion0:            ALARM
intrusion1:            ALARM
beep_enable:           disabled

nouveau-pci-0100
Adapter: PCI adapter
GPU core:     +0.91 V  (min =  +0.80 V, max =  +1.19 V)
temp1:        +53.0°C  (high = +95.0°C, hyst =  +3.0°C)
                       (crit = +105.0°C, hyst =  +5.0°C)
                       (emerg = +135.0°C, hyst =  +5.0°C)
```

## Самодиагноста подсистем

### Ответы от подсистем 

Пример JSON:

```json
{
  "A":"no_data",
  "AK":"no_data",
  "INT":{
    "data":[{"current_datetime":"2024-02-20T16:10:59.000Z","current_value":1,"datetime":"2024-02-20T16:10:59.000Z","desc":"Ввод 2 (1 - есть питание)","envcode":9,"last_value":0,"not_null_datetime":"2024-02-20T16:10:59.000Z","not_null_is_ok":1,"not_null_value":1,"val":1},{"current_datetime":"2024-01-26T16:01:44.000Z","current_value":0,"datetime":"2024-01-26T16:01:44.000Z","desc":"Открыта дверь стойки","envcode":8,"last_value":1,"not_null_datetime":"2024-01-26T16:01:44.000Z","not_null_is_ok":1,"not_null_value":0,"val":0},{"current_datetime":"2024-02-26T15:38:55.000Z","current_value":1,"datetime":"2024-02-26T15:38:55.000Z","desc":"CS_TSD","envcode":10,"last_value":0,"not_null_datetime":"2024-02-26T15:38:55.000Z","not_null_is_ok":1,"not_null_value":1,"val":1},{"current_datetime":"2024-01-26T16:01:44.000Z","current_value":0,"datetime":"2024-01-26T16:01:44.000Z","desc":"2 БП 24 V (1 - есть питание)","envcode":7,"last_value":1,"not_null_datetime":"2024-01-26T16:01:44.000Z","not_null_is_ok":1,"not_null_value":0,"val":0},{"current_datetime":"2024-02-29T13:58:23.000Z","current_value":25.1,"datetime":"2024-02-29T13:58:23.000Z","desc":"Стойка АСОТТ. Температура","envcode":1,"last_value":25.3,"not_null_datetime":"2024-02-29T13:58:23.000Z","not_null_is_ok":1,"not_null_value":25.1,"val":25.1},{"current_datetime":"2024-03-10T17:05:09.000Z","current_value":30,"datetime":"2024-03-10T17:05:09.000Z","desc":"температура ЦП","envcode":3,"last_value":28,"not_null_datetime":"2024-03-10T17:05:09.000Z","not_null_is_ok":1,"not_null_value":30,"stat":0,"val":30},{"current_datetime":"2024-02-29T13:58:23.000Z","current_value":17.7,"datetime":"2024-02-29T13:58:23.000Z","desc":"Климатика стойки: Влажность (%)","envcode":6,"last_value":17.6,"not_null_datetime":"2024-02-29T13:58:23.000Z","not_null_is_ok":1,"not_null_value":17.7,"val":17.7},{"current_datetime":"2024-02-29T13:58:23.000Z","current_value":1,"datetime":"2024-02-29T13:58:23.000Z","desc":"Климатика стойки: Состояние датчика","envcode":11,"last_value":0,"not_null_datetime":"2024-02-29T13:58:23.000Z","not_null_is_ok":1,"not_null_value":1,"val":1},{"current_datetime":"2024-02-29T13:58:23.000Z","current_value":0,"datetime":"2024-02-29T13:58:23.000Z","desc":"Климатика стойки: Состояние реле вент.","envcode":12,"not_null_datetime":"2024-02-29T13:58:23.000Z","not_null_is_ok":1,"not_null_value":0,"val":0},{"current_datetime":"2024-03-10T17:05:09.000Z","current_value":532,"datetime":"2024-03-10T17:05:09.000Z","desc":"Скорость вентилятора fan2","envcode":4,"last_value":525,"not_null_datetime":"2024-03-10T17:05:09.000Z","not_null_is_ok":1,"not_null_value":532,"stat":0,"val":532},{"current_datetime":"2024-03-10T17:05:09.000Z","current_value":792,"datetime":"2024-03-10T17:05:09.000Z","desc":"Скорость вентилятора fan3","envcode":5,"last_value":793,"not_null_datetime":"2024-03-10T17:05:09.000Z","not_null_is_ok":1,"not_null_value":792,"stat":0,"val":792}],
    "last_conn_SCALA":"2024-01-26T16:01:39.000Z","pref":"INT","system_name":"Автоматизированная система обнаружения течи теплоносителя","system_shortname":"АСОТТ"},
  "V":"no_data"
}
```

Если нет данных от подсистемы, то в поле будет лежать строка 'no_data' (вместо строки можно 
класть false так проще будет сравнивать)

В активности будет еще одно поле: "last_conn_ASRK":"2024-01-26T16:01:06.819Z" - последнее время 
получения данных от АСРК

В <подсистема>.data будут лежать все поля из таблицы CURRENT_ENVIOREMENT и поля (desc, discret_ok)
из ENVIOREMENT

> !для получения данных делай ```post.send_toPost( {type: 'getSens'}, 'i7242o')```