dlpMSR / cotwo

SCD41&Raspberry piでオフィスの空気を監視
0 stars 0 forks source link

8 improve daemon cache correction values #16

Closed dlpMSR closed 5 months ago

dlpMSR commented 6 months ago

これ何やろうとしてたか調べてmergeしないとダメっぽい おそらく基本的には #14 の修正、 #8 の修正も含まれている模様。

主な変更点

frontend

CO2、温度・湿度の値が常に少数第一位まで表示されるようにした。

backend

environment/views.py

class EnvValueList

最新の各計測値を返すAPI。
Redisにキャッシュされた計測値を返すようにした。これまではMariaDBに記録された最新の計測値を返していた。この変更によりAPIが叩かれた時に一々MariaDBにクエリを投げなくなった。メモリ内で処理が完結するのでレスポンスが少し高速になる。(未検証)
また、環境データの計測が停止している時はエラーを返すようにした。これまでは計測が停止しているときもMariaDBに保存された最新の値を返していた。この仕様で返される値は正常に計測されたものと、そうでないものとの区別がつかない問題があった。そのため、エラーを返して計測の不備を早期発見できるようにした。

environment/models.py

EnvValueモデルのマネージャクラスとして EnvValueManager を追加した。 独自のマネージャクラスには、よく使う絞り込みクエリなどをメソッドとしてまとめられる。メソッドにすると再利用が簡単になる。EnvValueManager にはメソッド get_last_12_hours_values() を用意した。具体に的には、これまでは views.py で次のロジックを3回書いていた。

now_utc = datetime.datetime.now(datetime.timezone.utc)
six_hours_ago = now_utc - datetime.timedelta(hours=12)
values = EnvValue.objects.order_by('-created_at') \
    .filter(created_at__range=[six_hours_ago, now_utc])

これを EnvValueManager の get_last_12_hours_values() にまとめて、次の1行を3回書けば済むようにした。

values = EnvValue.objects.get_last_12_hours_values()

参考: https://selfs-ryo.com/detail/model_methods

daemon

daemon/office_environment_logger.py 及び、daemon/dummy.py

計測デーモンに機能を追加した(#8 の内容)。毎回のループの中で行う処理を2つ追加した。