質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

2496閲覧

複数のセンサの値をリアルタイムに処理したい

kcgi

総合スコア0

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/05/19 11:35

編集2021/05/19 15:37

前提

・「角度」の数値をリアルタイムに送ってくるセンサがあります(2Hz程度の頻度)。
・このセンサが10台あり、それぞれ異なる場所を計測しています。
・リアルタイムに変化率を計算して、大きい変化があったセンサを特定できるようにしたいです。

データの内容

各センサからのデータは、websocketで送られてきます。

Python

1data = json.loads(raw) 2print(data["DEV"], data["DEGREE"])

とすると、デバイスNo.、角度の順番に、

134234,12.22 344223,22.34 243332,23.43 524564,28.23 675534,35.36 243332,24.45 265432,24.43

のようにデータが送られてきている様子を表示できます。
(デバイスNo.は重複しない6桁の数字が振られています。)

実現したいこと

1. デバイスごとに10区間平均値を計算し、現在値がそれより上回ればそのデバイスナンバーを表示させる。
2. 測定値はデバイスごとに分けて、すべてログを記録したい。

自分なりの考え方

・まずはデバイスごとに配列を作って、websocketからの混ざったデータをデバイス別に振り分ける。
・それぞれの配列内で、10区間の平均値を計算する。
・それぞれの配列内で、平均値と現在値を比較する。
(現在値をn番目とすると、(n-1)~(n-10)の平均値を逐次計算して比較する。)
・最後に各配列をcsvに書き込む。

プログラミングは全くの初心者ですので、そもそもこんな考え方でよいのか分かりません。
考え方は問いませんので、実際のコードをご教授賜りますと大変助かります。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

データは以下のようにdeltasへ貯めていけば良いと思います。

python

1from collections import defaultdict 2from collections import deque 3deltas = defaultdict(lambda: deque(maxlen=2)) 4 5... 6 7deltas[data["DEV"]].append(data["DEGREE"])

変化量の大きいデバイスは以下のようにdeltasを走査すれば見つけられます。

python

1for dev in deltas: 2 try: 3 prev, curr = deltas[dev] 4 except: 5 print('まだデータが2つない!', dev) 6 else: 7 if abs(curr - prev) >= 10.0: 8 print('10度以上も変化!', dev)

投稿2021/05/19 12:11

YouheiSakurai

総合スコア6142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kcgi

2021/05/19 15:43

ご回答いただき大変ありがとうございます。 恐縮ですが、質問内容を更新させていただきました。 実現したいこととして、さらに具体的に 1. デバイスごとに10区間平均値を計算し、現在値がそれより上回ればそのデバイスナンバーを表示させる。 2. 測定値はデバイスごとに分けて、すべてログを記録したい。 ということです。 また、自分なりの考え方も追記させていただきましたが、 如何せん素人なものですからこれが適切な方針であるかどうかもわかりません。 考え方はもちろん問いませんので、お答えいただいたところ大変申し訳ございませんが、 改めてコメントを頂けますと幸甚でございます。 何卒よろしくお願い申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問