1

저는 Arduino-firebase 홈 오토메이션 프로젝트를 진행하고 있습니다. 이제 Firebase 데이터가 모바일 응용 프로그램을 통해 변경되었으며 Arduino Esp8266 모델이 firebase에서 데이터를 읽습니다. 따라서 매번 루프를 호출 할 때마다Arduino는 파이어베이스에서 많은 양의 데이터를 소모합니다.

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 객체 만 가져와야합니다.그 전에 한 시간 만에 Arduino는 시간당 약 3 ~ 5 MB를 소비했으며 시간당 700 ~ 800 KB를 소비합니다. 여전히 최적의 최적화를 찾습니다. 덕분에 .

0

부울 값 (true 또는 false)을 반환하는이 함수 Firebase.available()을 사용합니다.
true를 반환하면 데이터베이스에서 일종의 데이터 변경이 발생 했으므로이를 검색 할 수 있습니다.

그러나이 기능 후 위의 함수를 호출하는 경우에만이 기능을 유효하게 : 자세한 내용은

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

Firebase.available()

설명서를 읽어