IOT 스택: 모든 장치 및 컴퓨터의 하트비트 측정

이 기사에서는 랩톱, 데스크톱 컴퓨터 또는 IOT 장치에서 정기적으로 실행되어 여전히 작동 중이라는 신호를 보내는 간단한 하트비트 스크립트를 작성하는 방법을 보여줍니다. 데이터를 저장하고 처리하려면 MQTT, NodeRed 및 InfluxDB로 구성된 IOTstack이 필요합니다. 시리즈의 이전 기사를 참조하십시오. 심장 박동을 측정하는 장치는 Python 스크립트를 실행할 수 있어야 합니다.

이 문서의 기술적 컨텍스트는 Raspberry Pi OS 2021-05-07 및 Telegraf 1.18.3입니다. 모든 지침은 최신 버전에서도 작동해야 합니다.

이 기사는 원래 내 블로그admantium.com에 표시되었습니다.

설치


paho-mqtt 라이브러리를 설치합니다.

python3 -m pip install paho-mqtt


paho-documention 다음에 클라이언트를 생성하고 브로커에 연결한 다음 메시지를 보내야 합니다. 기본 코드는 다음과 같습니다.

#!/usr/bin/python3

import paho.mqtt.client as mqtt

MQTT_SERVER = "192.168.178.40"
MQTT_TOPIC = "/nodes/macbook/alive"

client = mqtt.Client()
client.connect(MQTT_SERVER)
client.publish(MQTT_TOPIC, 1)


테스트하려면 mosquitto를 실행하는 docker 컨테이너에 연결하고 mosquito_sub cli 도구를 사용하십시오.

docker exec -it mosquitto sh
mosquitto_sub -t /nodes/macbook/alive
1
1
1


값이 수신됩니다. 이제 우리는 cronjob을 통해 이 스크립트를 매분 실행합니다.

OsX에서는 터미널에서 crontab -e를 실행하고 이 행을 적절한 파일 경로와 함께 입력합니다.

* * * * * /usr/local/bin/python3 /Users/work/development/iot/scripts/heartbeat.py


우리 컴퓨터는 이제 지속적으로 데이터를 게시합니다. 이 메시지가 어떻게 변환되어 InfluxDB 내부에 저장되는지 봅시다.

데이터 변환: 간단한 워크플로우



NodeRed는 메시지 수신 및 변환을 처리하기 위해 선택한 애플리케이션입니다. 이 첫 번째 반복에서는 받은 값을 InfluxDB에 저장하는 매우 간단한 워크플로를 만들 것입니다. 흐름은 다음과 같습니다.



두 개의 노드mqtt-ininfluxdb-out 와 추가 노드debug로 구성되어 입력 데이터가 어떻게 구성되어 있는지 확인합니다. 이 워크플로가 배포되면 디버그 메시지가 도착합니다.



그러나 데이터는 InfluxDB에서 다소 단순해 보입니다.

show field keys
name: alive
fieldKey fieldType
-------- ---------
value    string


이 데이터는 너무 구체적입니다. 적어도 우리가 keep alive ping을 받는 노드는 구별해야 합니다.

데이터 변환: 고급 워크플로



고급 워크플로우의 경우 아래에서 위로 변경합니다. 주제는 /nodes 이며 메시지는 단일 값이 아니라 구조화된 JSON입니다. 이 데이터를 보내려고 합니다.

{
  "node":"macbook", 
  "alive":1
}


따라서 Python 스크립트가 그에 따라 변경됩니다.

import paho.mqtt.client as mqtt

MQTT_SERVER = "192.168.178.40"
MQTT_TOPIC = "/nodes"

client = mqtt.Client()
client.connect(MQTT_SERVER)
client.publish(MQTT_TOPIC, '{"node":"macbook", "alive":1}')


업데이트된 NodeRed 워크플로는 다음과 같습니다.



다음 노드로 구성됩니다.
  • mqtt-in : 주제 듣기/nodes , 문자열 출력
  • json : 입력msg.payload을 sting에서 JSON
  • 으로 변환합니다.
  • change : best practice advice 다음에 이 노드는 입력 데이터를 원하는 InfluxDB 출력 데이터로 변환합니다. 새 필드가 추가되거나 필드 이름이 변경되면 하나의 wokflow 노드만 수정하면 됩니다. msg.payload JSON을 다음 형식으로 설정합니다.

  • [
      {
          "node": msg.payload.node,
          "alive": msg.payload.alive
      }
    ]
    


  • influxdb-out : msg.payload를 InfluxDB 측정값에 태그로 저장node

  • 디버그 메시지를 사용하여 변환 단계를 볼 수 있습니다.



    그리고 InfluxDB에서 값은 훨씬 더 잘 구조화되어 보입니다.

    select * from alive
    name: alive
    time                alive node
    ----                ----- ----
    1629973500497658493 1     macbook
    


    Grafana를 사용한 시각화



    마지막 단계는 간단한 Grafana 패널을 추가하는 것입니다.



    이제 추가 노드에서 데이터 수집을 시작하고 추가 메트릭을 추가하면 모든 IOT 장치에 대한 개인 대시보드를 갖게 됩니다.

    결론



    MQTT, NodeRed 및 InfluxDB로 구성된 IOT 스택은 메트릭 전송, 변환, 저장 및 시각화를 시작하기 위한 강력한 조합입니다. 이 기사에서는 노드에 대한 하트비트 메시지를 기록하는 필수 단계를 보여주었습니다. Python 스크립트를 사용하면 노드와 가동 시간 상태를 포함하는 구조화된 데이터가 잘 정의된 주제 내에서 MQTT 브로커로 전송됩니다. NodeRed 워크플로는 이 주제를 수신하고 메시지를 JSON으로 변환하고 InfluxDB로 전송되는 출력 JSON을 생성합니다. 마지막으로 Grafana 대시보드는 데이터를 시각화합니다.

    좋은 웹페이지 즐겨찾기