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

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

ただいまの
回答率

90.42%

  • Milkcocoa

    105questions

    Milkcocoaとは、バックエンド機能を提供するBaaSサービスの一つです。サーバを準備することなく、フロントエンドのコーディングだけでデータの保存・更新・取得、またPub/Sub通信行うことが可能です。

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,681

お世話になります。
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)

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

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/26 09:43

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

    キャンセル

  • 2016/01/26 15:52

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

    キャンセル

  • 2016/01/26 16:24

    すみません、おっしゃる通り、カスタマイズしたpaho-mqttが同封されてないことによる問題だったようです。修正いたしました。
    https://github.com/milk-cocoa/python_sdk

    キャンセル

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」を生成します。

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/25 21:05

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

    キャンセル

  • 2016/01/25 23:02

    下の方が運営者さんで、メール頂きました。

    blocking=Trueにすることで、私のMacでも1秒に1リクエストを達成できました。

    キャンセル

  • 2016/01/25 23:06

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

    キャンセル

  • 2016/01/26 09:48

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

    キャンセル

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

  • ただいまの回答率 90.42%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Milkcocoa

    105questions

    Milkcocoaとは、バックエンド機能を提供するBaaSサービスの一つです。サーバを準備することなく、フロントエンドのコーディングだけでデータの保存・更新・取得、またPub/Sub通信行うことが可能です。