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

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

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

Q&A

解決済

2回答

5583閲覧

Milkcocoa raspberry Pi python-sdk でデータpushが1回しか成功しない

morizoKikkoro

総合スコア13

1グッド

0クリップ

投稿2016/01/21 06:28

編集2016/01/22 07:11

お世話になります。
milkcocoa, python初心者です。
raspberr Pi にmilkcocoa python sdkをインストールし、pythonプログラム
でmilkcocoaのサーバーにメッセージをpushしています。
一度、試行錯誤しながらプログラムが問題なく動作したのですが、raspberry Pi を最初から構築し直して再度プログラムを実行したところ、プログラム起動時の初回しかデータ出力できなくなってしまいました。
以下に詳細を記載いたします。アドバイスをよろしくお願いします。

■実現したいこと
laspberry Pi に接続されたセンサデータを周期的にmilkcocoaに送信したい。

■問題発生手順
・ハードウエア:raspberry Pi2
・NOOBSバージョン:1.5.0
・milkcocoaのセットアップ方法
・milkcocoa python sdkのダウンロード
・paho-mqttのインストール
・下記サンプルプログラムの実行

■現象
<IDLEコンソール表示>

(何も表示されない)

<milkcocoaメッセージ受信>
プログラム実行初回のみのメッセージ受信

(参考:正常動作時)
<IDLEコンソール表示>

Connected with result code 0
{'value': (メッセージ)}
{'value': (メッセージ)}

<milkcocoaメッセージ受信>
約10秒毎にメッセージ受信

■ソースコード(Python)
import sys, os
import time
sys.path.append('/home/pi/Desktop/mlkcca/python_sdk')
import milkcocoa.milkcocoa as milkcocoa

milkcocoaClient = milkcocoa.Milkcocoa.connect("my_app_id", useSSL=False, blocking=False);

datastore = milkcocoaClient.datastore("my_datastore")

def on_push(e):
print e

datastore.on("push", on_push)

i = 0
while True:
datastore.push({"content":"Hello world" + str(i)})
i = i+1
time.sleep(10)

以上、よろしくお願いします。

ikuwow👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

Milkcocoaをご利用ありがとうございます。

確認いたしましたところ、Python SDKをRaspberry Pi上で動かして不自然な動作になあることを確認いたしました。Macでは同じコードで動作するので、Raspberry PiのThreadの処理によるものでは無いかと推測しました。そこで以下のように、blockingモードで動作させると正常に動作しました。
*ただしこの方法では、データ受け取りを同一プログラム内でできません。

import sys, os import time sys.path.append('/home/pi/Desktop/mlkcca/python_sdk') import milkcocoa.milkcocoa as milkcocoa milkcocoaClient = milkcocoa.Milkcocoa.connect("my_app_id", useSSL=False, blocking=True); datastore = milkcocoaClient.datastore("my_datastore") def on_push(e): print e datastore.on("push", on_push) i = 0 while True: datastore.push({"content":"Hello world" + str(i)}) i = i+1 time.sleep(10) milkcocoaClient.loop_forever()

投稿2016/01/25 13:48

編集2016/01/25 13:48
ShuheiHiya

総合スコア110

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

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

morizoKikkoro

2016/01/26 00:43

ShuheiHiyaさん ご親切なサポート、とても感謝いたします。 ご提示頂いた方法を試してみて、結果を報告いたします(仕事の関係でちょっと時間がかかってしまうかも知れませんが)。 現象に書き忘れたことがありました。参考になるかわかりませんが... 正常動作したときは、paho-mqttに関するエラーは発生せず、paho-mqttのインストールは不要だったと記憶しています。 また、こちらも関係するかわかりませんが、正常動作できた方は、python-sdkインストールの前に、node.jsインストール→npmでmilkcocoaインストールをしました。(但し同様の手順を行っても今回の問題は解決しませんでしたが) あと、正常動作しているRaspberry Pi のSDカードイメージを残してあり、お役に立てるようであればお送りできますが、いかがでしょうか? いずれにしましても、ご丁寧なサポートありがとうございました。
morizoKikkoro

2016/01/26 06:52

ShuheiHiyaさん ご提示の方法で定期的にメッセージ出力できることを確認しました。 ありがとうございました。
guest

0

こんばんは、milkcocoaというサービスを初めて知ったので、自分も環境を構築してみました。

morizoKikkoroさんが仰る通り、私もそのバグに直面しました(笑)そして、いろいろ試行錯誤した上で至った結論は「milkcocoa」の仕様又はバグでしょう。

1秒ごとに通信するスクリプトに書き換えて実行してみたところ

ijtx1skuv5OKIFM 2016-01-25 20:54:08 {"content":"Hello world520"}
ijtx06jdUv5OKIF 2016-01-25 20:52:53 {"content":"Hello world445"}
ijtwzmffMkvTQ15 2016-01-25 20:52:26 {"content":"Hello world419"}
ijtwx33jy6AlQEn 2016-01-25 20:50:28 {"content":"Hello world301"}
ijtwwhf1nplYExY 2016-01-25 20:50:00 {"content":"Hello world273"}
ijtwvce7Yli9DCB 2016-01-25 20:49:07 {"content":"Hello world220"}
ijtwv1kaByPUzz3 2016-01-25 20:48:53 {"content":"Hello world206"}
ijtwtotuSkx32pY 2016-01-25 20:47:50 {"content":"Hello world143"}
ijtwqm6ayPUzz3C 2016-01-25 20:45:26 {"content":"Hello world0"}

という結果になりました。最初こんなに飛び飛びに送信されると思っていなくて10秒待ったらスクリプトを止めていたので中々気づきませんでした。

また、connect関数ではなくconnectWithApiKeyを使用すると心なしか速くなる気がしました。以下結果です。

ijtx6qtt4M2RfUI 2016-01-25 20:57:59 {"content":"Hello"}

ijtx6kmusmok1BU 2016-01-25 20:57:51 {"content":"Hello"} ijtx6ib9x4vNjU2 2016-01-25 20:57:48 {"content":"Hello"} ijtx5wndT1VXDix 2016-01-25 20:57:20 {"content":"Hello"} ijtx5hxymmYhThx 2016-01-25 20:57:01 {"content":"Hello"} ijtx1fnckvTQ157 2016-01-25 20:53:51 {"content":"Hello"} ijtx0bdyT57kBcQ 2016-01-25 20:52:59 {"content":"Hello"} ijtwza8eP5lBcZn 2016-01-25 20:52:11 {"content":"Hello"} ijtwyt7c7P5lBcZ 2016-01-25 20:51:49 {"content":"Hello"} ijtwy9ucny6AlQE 2016-01-25 20:51:23 {"content":"Hello"} ijtwwm8rplYExYs 2016-01-25 20:50:06 {"content":"Hello"} ijtww1c3sSkx32p 2016-01-25 20:49:39 {"content":"Hello"} ijtwtsuiCMLU9jD 2016-01-25 20:47:55 {"content":"Hello"} ijtwsynzli9DCBB 2016-01-25 20:47:16 {"content":"Hello"}

ダッシュボードの認証から、新しいAPI KeyとAPI Secretのペアを生成するをクリックして
「API Key」と「API Secret」を生成します。

そして、ソースコードを書き換えます。

python

1#milkcocoaClient = milkcocoa.Milkcocoa.connect("my_app_id", useSSL=False, blocking=False); 2milkcocoaClient = milkcocoa.Milkcocoa.connectWithApiKey("my_app_id", "API KEY", "API Secret",useSSL=False) 3

これで、少しは速くなる気がします。中途半端な検証ですいません。

投稿2016/01/25 12:04

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2016/01/25 12:05

一応サポートにメールしてみたので、返信があれば追記してみたいと思います。
退会済みユーザー

退会済みユーザー

2016/01/25 14:02

下の方が運営者さんで、メール頂きました。 blocking=Trueにすることで、私のMacでも1秒に1リクエストを達成できました。
ShuheiHiya

2016/01/25 14:06

serinuntiusさんの環境はMacだったんですね。 そうするとRaspberry Piが悪いわけじゃなさそうですね。 Pythonのバージョンの影響の可能性もあるので、また時間のあるときに調査してみます。
morizoKikkoro

2016/01/26 00:48

serinuntiusさん ご丁寧に検証していただき、ありがとうございます。 このサイト、皆さん親切ですね。ちょっと感激です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問