재배자의 토양 온도를 Ambient+ 쉘 스크립트로 시각화해 보았다.

4352 단어 ShellScriptAmbient

개요



데이터를 쉽게 시각화할 수 있는 서비스 「Ambient」에 쉘 스크립트로부터 데이터를 송신하는 방법을 나타냅니다. (별로 수요는 없을 것 같습니다만)

배경



베란다의 플랜터에서 오크라와 바질을 키우기 시작했기 때문에, 자동으로 물을 주는 시스템을 Raspberry Pi Zero W(이하 RPi)와 펌프를 사용해 만들었습니다.


그런데 "낮에 물을 주면 흙 속의 온도가 올라 식물에 좋지 않다"고 자주 말하지만 "물을 뿌리면 물 자체의 온도와 기화열로 오히려 온도는 내리는 것은 ?」라고 의문을 가지고 있었으므로, 실제로 측정해 보기로 했습니다.

그런 다음 RPi의 CPU 코어 온도를 모니터링하고 RPi 자체의 상태를 참조합니다.

사용한 장비


  • Raspberry Pi Zero W
  • DS18B20 온도계
    htps //w w. 오, xp rs. m / m / 32676135779. HTML

  • 방법



    다음은 쉘 스크립트입니다.
    #!/bin/bash
    
    # チャネルID
    channelId="*****"
    #ライトキー
    writeKey="*****"
    
    url="http://ambidata.io/api/v2/channels/${channelId}/dataarray"
    
    # 1-Wire温度センサから温度を取得
    soil_temp="$(grep -m1 "t=" /sys/bus/w1/devices/28*/w1_slave | sed -r 's/.*t=([0-9]{2})([0-9]+)$/\1\.\2/')"
    # CPUコア温度を取得
    cpu_temp="$(awk '{print $1 / 1000.0}' /sys/class/thermal/thermal_zone0/temp)"
    
    data_text='[{"d1":"'${soil_temp}'","d2":"'${cpu_temp}'"}]'
    
    curl -H 'Content-Type:application/json' \
    -d '{"writeKey":"'${writeKey}'", "data":'${data_text}'}' \
    ${url}
    
    

    처리 흐름:
    1. channelId , writeKey , url 를 설정합니다.
    2. 1-Wire 연결 온도 센서 DS18B20에서 온도를 얻고 soil_temp에 저장합니다. 1-Wire의 디바이스는 /sys/bus/w1/devices 이하에 디바이스 마다의 디렉토리로서 인식됩니다만, 온도 센서이면 디렉토리명은 28부터 시작됩니다. grep 로 28로 시작하는 디렉토리에 있는 w1_slavet= 행을 추출합니다. -m1 는, 복수의 결과가 있어도 1 행만 결과를 돌려주는 옵션입니다. sed 에서는 t= 이후의 온도 부분을 꺼내고 있습니다. 온도는 5자리의 정수로 건네지므로, 선두 2자리와 그 이후로 나누어, 사이에 . 를 붙이는 것으로 의사적으로 소수로 변환하고 있습니다.
    3. CPU 온도를 얻고 cpu_temp에 저장합니다. awk 명령으로 /sys/class/thermal/thermal_zone0/temp 로부터 취득한 CPU 온도를 1000으로 나누어 소수로 하고 있습니다.
    4. 얻은 soil_tempcpu_temp 를 json 형식으로 성형하고 data_text 에 저장합니다.
    5. curl 명령을 사용하여 ambient로 데이터를 POST합니다. writeKey 에서 라이트 키를 전달합니다.

    수행한 결과



    아래에서 확인할 수 있습니다.
    htps : // 아메다였다. 이오/bd/보어 rd. HTML? 예d=15241

    위의 스크립트를 cron으로 정기적으로 실행하고 있습니다.

    좋은 웹페이지 즐겨찾기