Category: InfluxDB

  • 냉장고 감시 시스템

    과에서 사용하는 냉장고 온도를 실시간으로 감시하고 싶었다. 이유는 다음과 같다.

    현장 실사에서 이런 시스템을 같추고 있는 기관들을 봤다. 상당히 멋져 보였다.

    그런데 디지털 감시 시스템 기록은 유건평에서는 인정하지 않는다. 수작업으로 확인을 해야만 인정하고 있다. 그렇다면 인정하게 하려면 어떻게 해야할까? 그래서 직접 운영해 보기로 했다.

    작업 비용을 최소화하고 싶었다. 그래서 선택한 것이 Pico 이다. 예전에는 Wi-Fi가 지원이 안되었다. 그런데 이 작업 시작하면서 다시 확인해보니 Wi-Fi가 지원되는 제품들이 있었다. 처음에는 이전에 구입한 모듈을 이용하기 위해서 ESP8266으로 데이터 통신을 했었다. 기본 코딩 방법을 익힌 다음 이 것들은 집 베란다에서 온도를 측정하는 목적으로 이용하고 있다.

    DS18B20 모듈은 측정하고자 하는 온도 범위가 지원된다. 사진에 보이는 것처럼 길다른 측정선이 있는 제품도 있고, 간단한 모듈 형태로만 있는 제품도 있다. Pico를 냉장고에 넣을 수 없을 것이라고 생각했었다. 나중에 알고 봤더니 냉장고라면 사용 가능한 온도다. 그래도 위 제품을 이용한 것은 전원 콘센트부터 측정 부위까지 거리를 늘릴 수 있기 때문이다. 그리고 글리세린에 넣어야 할 수도 있는 것을 고려했다.

    5mm 클램프를 구입하면 probe 쪽은 약하지만 고정할 수 있다. 검정 피복의 외경이 4mm 정도였다. 고무테이프를 이용해서 유격을 없앴다. 클램프가 있어야 온도 probe를 일정한 위치에 고정할 수 있다.

    간헐적으로 연결이 끊어지는 경우가 있다. 하지만 내 목적에 영향을 미치지 않는다.

    적어도 보름 정도 운영해 봤다. 안정성은 충분한 것으로 보인다. 다음 발표까지 보다 장기간 운영을 할 것이다.

  • influxdb_client

    influxDB에 파이썬의 influxdb_client를 이용해서 자료를 입력하고, 읽어 오고 있다.

    특정 값이 일정 범위를 벗어나면 알람을 보내도록 하고 싶었다. 그래서 테스트를 위해 과도한 값을 넣었다. 알람이 발송되면 이 자료를 삭제하고 싶었다.

    우선 자료를 삭제하는 방법은 다음과 같이 하면 된다. 예를 들어 3시간 이내의 자료 중에서 class=”cool”가 지정된 자료를 다음과 같이 실행하면 된다.

    import influxdb_client
    import datetime
    
    client = influxdb_client.InfluxDBClient(url=url, token=token, org=org)
    delete_api = client.delete_api()
    
    stop = datetime.datetime.utcnow()
    start = stop - datetime.timedelta(hours=3)
    
    start_iso = start.strftime("%Y-%m-%dT%H:%M:%SZ")
    stop_iso = stop.strftime("%Y-%m-%dT%H:%M:%SZ")
    
    delete_api.delete(
    start_iso,
    stop_iso,
    predicate='class = "cool"',
    bucket=bucket,
    org=org
    )

    비정상 값을 삭제하기 위하여 _value에 부등호나 등호를 사용하여 보았다. 그런데 자꾸 오류가 났다. 코파일럿과 함께 오류를 찾아 보았다. 검색을 한 결과 원래부터 안된다는 것을 알게 되었다.

    즉, _time과 _value를 기준으로 하는 값은 할 수 없다는 것이다.

    감시 프로그램의 설정을 확인하기 위해서 비정상 값을 입력할 때에 별도의 tag나 field 값을 더 입력해야, 나중에 이 값만 삭제를 할 수 있을 것이다.

    그래서 별도의 tag를 지정해서 비정상 값을 입력했다. 그런데 이번에는 Grafana에서 별도의 자료로 분리되어 보이는 것이었다.

    이럴 때는 group 를 이용해서 동일한 센서에서 입력된 값을 묶어준다.

    |> group(columns: ["_measurement", "device"], mode: "by")
  • 0~10 실수값 입력

    • DS18B20 을 이용하여 온도를 측정하고 있음.
    • 상온은 잘 측정되고 입력됨.
    • 냉장 범위에 해당하는 부분은 입력이 안되고 있었음.
    • 아이스팩을 이용해서 온도를 재현했을 때 잘 측정되는 것을 확인함.
    • 영하의 온도도 잘 측정되는 것을 확인함.
    • 0~10 사이에서 앞에 0을 붙였을 때 입력 되는 것을 확인함.
  • Telegraf on Windows