Guardamos estados del SAI/UPS a InfluxDB v1 y lo mostramos en dashboard Grafana

Fecha publicación
#
29
Dificultad
Intermedio
3 more properties
Publicado
tags
i40sys, industry 4.0, industry40.systems, industrial, plc, siemens, omron, ubuntu, linux, iot gateway, gateway, iot, internet of things, docker, container, ubuntu, grafana, influxdb, influx, sai, ups, nut, uninterruptible power supply, sistema de alimentación ininterrumpida

Introducción



Crear nuestra imagen para Docker desde zero

  1. Clonar pryecto: https://github.com/lf-/influx_nut
    Bash
    mkdir /var/tmp/influx-nut
    cd /var/tmp/influx-nut
    git clone https://github.com/lf-/influx_nut.git 
    otra opción es descargar el contenido en formato GIT des de la página del proyecto en github y descomprimir el contenido en el directorio indicado /var/tmp/influx-nut
    En caso de que el proyecto ya no exista, podemos descarrar el código fuente desde este paquete:
    y luego lo descromprimimos en: /var/tmp/influx-nut
    Em este punto deberíamos tener un directorio llamado influx_nut dentro de /var/tmp/influx-nut
  2. Creamos fichero /var/tmp/influx-nut/Dockerfile
    Bash
    FROM python:3.7
    
    ADD influx_nut.json /etc/influx_nut.json
    ADD influx_nut /influx_nut
    WORKDIR /influx_nut
    RUN python setup.py install
    
    CMD influx_nut --config /etc/influx_nut.json
  3. Creamos el fichero /var/tmp/influx-nut/influx_nut.json
    JSON
    {
      "nut_host": "localhost",
      "nut_ups": "salicru",
      "nut_vars": {
        "ups.load": {"type": "int", "measurement_name": "ups_load"},
        "input.voltage": {"type": "float", "measurement_name": "ups_voltage"},
        "battery.charge": {"type": "int", "measurement_name": "ups_charge"}
      },
      "influx_host": "http://localhost:8086",
      "influx_creds": ["THE_INFLUXDB_USER", "THE_INFLUXDB_PASSWORD"],
      "influx_db": "telegraf",
      "influx_tags": {
        "ups": "NAME_OF_YOUR_UPS"
      }
    }
  4. Creamos la imagen para docker con:
    Bash
    cd /var/tmp/influx-nut
    docker build . -t influxdb/nut

Directorios

Shell
mkdir -p /docker-data/influx-nut/

/docker-data/influx-nut/influx_nut.json

JSON
{
  "nut_host": "localhost",
  "nut_ups": "salicru",
  "nut_vars": {
    "ups.load": {"type": "int", "measurement_name": "ups_load"},
    "input.voltage": {"type": "float", "measurement_name": "ups_voltage"},
    "battery.charge": {"type": "int", "measurement_name": "ups_charge"}
  },
  "influx_host": "http://localhost:8086",
  "influx_creds": ["THE_INFLUXDB_USER", "THE_INFLUXDB_PASSWORD"],
  "influx_db": "telegraf",
  "influx_tags": {
    "ups": "NAME_OF_YOUR_UPS"
  }
}

/docker-data/influx-nut/docker-compose.yml

YAML
version: '3.3'
services:
  nut:
    container_name: influx-nut
    restart: unless-stopped
    image: influxdb/nut
    environment:
      - TZ=Europe/Madrid
    volumes:
      - './influx_nut.json:/etc/influx_nut.json:ro'
      - '/etc/localtime:/etc/localtime:ro'
    networks:
      - i40sys
    extra_hosts:
      host: 172.19.221.221
networks:
  i40sys:
    external:
      name: i40sys

/etc/netplan/50-cloud-init.yaml

YAML
network:
  version: 2
  ethernets:
    lo:
      dhcp4: false
      optional: false
      addresses: 
        - 127.0.0.1/8
        - 172.19.221.221/24
...

/etc/nut/upsd.conf

YAML
/etc/netplan# cat /etc/nut/upsd.conf
MAXAGE 15
STATEPATH /var/run/nut
LISTEN 127.0.0.1 3493
LISTEN 172.19.221.221 3493
MAXCONN 1024