1

私はArduino-firebaseホームオートメーションプロジェクトに取り組んでいます。 Firebaseのデータはモバイルアプリケーションで変更され、Arduino Esp8266モデルはfirebaseからデータを読み取ります。だから毎回ループでそれを呼び出しますArduinoはFirebaseから多くのデータを消費しています

FirebaseObject firebaseObject=Firebase.get(path_command); 

そしてそれは連続的にデータを消費します。 これは私の質問ですfirebaseサーバで変更された場合にのみデータを取得する方法はありますか?

、よりよい解決策可能な場合

Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); 
    Firebase.stream("/devices/_18_fe_34_d6_9_4f_/command"); 
if (Firebase.failed()) { 
    Serial.println("streaming error"); 
    Serial.println(Firebase.error()); 
    } 

    if (Firebase.available()) { 
     FirebaseObject firebaseObject = Firebase.readEvent();  
     String deviceToken=firebaseObject.getString("device_token"); 
     Serial.println(deviceToken);  
    } 

が私を導いてくださいおかげで、あなたを私はコードの下にしようとしているが、それは

場合(Firebase.available())でデバイスをクラッシュします。

答えて

1

私たちは、データ使用量が多いために解決策を見つけました。 以前は以下のコードを使ってすべてのjson配列を取得していました。

FirebaseObject firebaseObject=Firebase.get(path_command); 

いくつかのバイトまたはKbデータを消費します。 今、私たちは最初にそれが余分なフラグ バージョンによってデータに行われた変更をチェックしています。増分です。 ノードレベルごとにデータベースに格納しておき、データを更新するたびに増分して変更する必要があります。 は、今、私たちは道

int version =Firebase.getInt(version_path); 
     if(version!=previosVersion) 
       FirebaseObject firebaseObject=Firebase.get(path_command); 

以下のように、すべてのJSON配列を取得する前にバージョンを確認する必要があります。バージョンの違いがある場合は、jsonオブジェクトを取得する必要があります。これまで1時間でArduinoは1時間あたり約3〜5 MBを消費していましたが、現在は1時間あたり700〜800 KBを消費しています。それでも最適な最適化を探しています。ありがとう。

0

ブール値(真または偽)を返すこの関数Firebase.available()を使用します。
trueを返すと、データベースで何らかの種類のデータ変更が発生したため、取得できます。

しかし、あなたは、この関数の後に上記の関数を呼び出す場合にのみ、この機能が有効になる:詳細については、

Firebase.stream("path u wish to monitor changes"); 

Firebase.available()

のドキュメントを読んで
関連する問題