• 概要
  • 会社でGrafanaという視覚化のWebアプリを紹介されたので体験してみました。
    残念ながら、時刻表記の変更が必要なため過去データとの互換性が無くなりました。

    C言語:センサ読み取り
    sh:データ移動、CSV生成

  • グラフ
  • 1日の気温変化

  • RaspberryPiZeroW
  • 変更ありません。
  • RockPi4
  • 1分おきにデータを取得してHTMLファイルを生成します。
    SSDの書込み回数を抑えるためにRAMディスクを使っています。
    あらかじめ sshpass をインストールしておいてください。
    gettemp4.sh からの変更点は
    Time,Living,Bed,PC
    00:00:00,30.04,28.45,27.81
    00:01:00,30.05,28.35,27.84
    
    ローカル時刻のみの表記から、
    Time,Living,Bed,PC,Wa
    2024-04-05T00:00:00+09:00,22.70,20.85,20.13,20.82
    2024-04-05T00:01:00+09:00,22.72,20.89,20.14,20.85
    
    ISO 8601表記に変更しました。理由はGrafanaにあります。
    gettemp7.sh
    #!/bin/bash
    #clear
    PastDay=`date +%Y%m%d --date '1 day ago'`
    PastDay2=`date +%Y%m%d --date '2 day ago'`
    PastTime="11:59:59"
    while true
    do
      PresentTime=`date +%H:%M:%S`
      if [ $PastTime != $PresentTime ]; then
        if expr "$PresentTime" : '..:..:00' > /dev/null; then
          PresentDay=`date +%Y%m%d`
          PresentDay2=`date +%Y-%m-%d `
          if [ $PastDay != $PresentDay ]; then
            if [ ! -e temp/temp$PresentDay.csv ]; then
              if [ ! -e temp$PresentDay.csv ]; then
                echo "Time,Living,Bed,PC,Wa" > 'temp/temp'$PresentDay'.csv'
                cp temp/temp$PastDay.csv .
    #            ./csv2chart.pl . 'temp'$PastDay > $PastDay'.html'
    #            ./csv2chart.pl . 'temp'$PastDay2 > $PastDay2'.html'
    #            ./csv2chart_w.pl . 'temp'$PastDay > $PastDay'.w.html'
              else
                cp temp$PresentDay.csv temp
              fi
            fi
            PastDay2=$PastDay
            PastDay=$PresentDay
            cp *.html /var/www/html/temp
          fi
    
          echo ${PresentDay2}"T"${PresentTime}"+09:00" > temp/temp.csv
          echo "," >> temp/temp.csv
          sshpass -p raspberry ssh pi@192.168.1.201 'RaspberryPi/I2C/mpu_6050_3' >> temp/temp.csv
          echo "," >> temp/temp.csv
          sshpass -p raspberry ssh pi@192.168.1.202 'RaspberryPi/I2C/mpu_6050_3' >> temp/temp.csv
          echo "," >> temp/temp.csv
          sshpass -p raspberry ssh pi@192.168.1.203 'RaspberryPi/I2C/mpu_6050_3' >> temp/temp.csv
          echo "," >> temp/temp.csv
          sshpass -p raspberry ssh pi@192.168.1.204 'RaspberryPi/I2C/mpu_6050_3' >> temp/temp.csv
          ./gettemp.pl temp/temp.csv >> 'temp/temp'$PresentDay'.csv'
          cp 'temp/temp'$PresentDay'.csv' /var/www/html/temp/data.csv
    
          PastTime=$PresentTime
    
    #      ./csv2chart.pl ./temp > /var/www/html/temp/Cur.html
    #      ./csv2chart_w.pl ./temp  > /var/www/html/temp/Cur.w.html
    #      ./csv2chart_w.pl ./temp 'temp'$PresentDay > '/var/www/html/temp/'$PresentDay'.w.html'
        fi
      fi
      sleep 1s
    done
    
    インストール
    $ sudo apt install curl
    [sudo] password for rock:
    $ curl -fsSL https://get.docker.com -o get-docker.sh
    $ sudo usermod -aG docker rock
    $ logout
    
    再接続
    $ sudo apt install -y libffi-dev libssl-dev python3 python3-dev python3-pip
    $ docker -v
    Docker version 24.0.2, build cb74dfc
    
    確認
    $ docker run -d -p 3000:3000 grafana/grafana
    
    Rockpi4 http://192.168.1.34:3000/login にアクセスします。
    ログイン画面が出れば成功です。

    パスワードは再設定させられます。
    $ docker ps -a
    CONTAINER ID   IMAGE             COMMAND     CREATED              STATUS              PORTS                                       NAMES
    ab1202ccba38   grafana/grafana   "/run.sh"   About a minute ago   Up About a minute   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   elated_jackson
    
    $ docker stop ab1202ccba38
    ab1202ccba38
    
    稼働
    $ docker run -d  -p 3000:3000 --name=grafana  -e "GF_INSTALL_PLUGINS=marcusolsson-csv-datasource" -v /home/rock:/home  grafana/grafana
    cdd064874b3226f7830f9310b89149adad60a7bb71702f409fb14b4d31d184ca
    
    $ docker ps -a
    CONTAINER ID   IMAGE             COMMAND     CREATED         STATUS                      PORTS                                       NAMES
    cdd064874b32   grafana/grafana   "/run.sh"   6 seconds ago   Up 5 seconds                0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   grafana
    ab1202ccba38   grafana/grafana   "/run.sh"   3 minutes ago   Exited (0) 47 seconds ago                                               elated_jackson
    
    RoCkPi4Aを再起動時
    $ docker ps -a
    CONTAINER ID   IMAGE             COMMAND     CREATED        STATUS                     PORTS     NAMES
    2c008dee1cf7   grafana/grafana   "/run.sh"   16 hours ago   Exited (0) 3 minutes ago             grafana
    
    $ docker start 2c008dee1cf7
    2c008dee1cf7
    
    $ docker ps -a
    CONTAINER ID   IMAGE             COMMAND     CREATED        STATUS         PORTS                                       NAMES
    2c008dee1cf7   grafana/grafana   "/run.sh"   16 hours ago   Up 2 seconds   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   grafana
    
    データソース
    ローカルファイルではうまく設定できませんでした。
    元々ウェブサーバが動いてましたので、URLに
    http://192.168.1.34/temp/data.csv
    を設定しました。
    CSV Add data source
    日付は yyyy-mm-dd HH:MM:SS だと線グラフが出ました。
    yyyy-mm-ddTHH:MM:SS+09:00 だとタイムゾーンに対応します。
    yyyy-mm-dd HH:MM:SS だとUTCと認識します。

    日付が無いと Time series が表示できません。

  • 振り返り
  • 過去データをWebで参照することができなくなってしまいました。
    データは残っているので、Python pandas+matplotlibを勉強してグラフ化し用と思います。