Daten Puffern und als Bulk an Beep/BOB schicken

Hi,

Ich hab dazu nichts im Forum gefunden und auch bei beep in der API Doku nichts.

Wenn ich es richtig verstanden habe schickt man mit dem call “POST api/sensors” das data json. Darin ist kein Timestamp.
Also ermittelt der Server den Timestamp aus dem Empfangszeitpunkt des Pakets, richtig?

Wenn ich jetzt WLAN Probleme habe oder Internet weg ist, so gibt es Lücken im Logging.

Gibt es irgendwelche calls oder andere Möglichkeiten, die noch nicht übermittelten Messdaten an Bee-Observer zu schicken?

Ich habe aktuell an einem Standort WLAN Probleme.

Also es geht mir hier wirklich nur um das REST API von Bee-Observer!

Daten speichern und auslesen und so, ist ein gelöstest Problem.

Ich hab gesehen, dass das “originale” beep den key ‘time’ akzeptiert und damit auch historische Daten eingebettet werden können.
Es gibt leider bei beep eine Restriktion von von Calls per Minute oder so.

Was haltet ihr davon, den time key auch in BOB einzubauen?
@Diren

Dann würde ich die FiPy programmierung so erweitern, dass bei WLAN Verlust daten gepuffert und bei Wiederherstellung an BOB nachgeliefert werden.

Hier müssten wir anstatt time() einen key ‘time’ auslesen, falls vorhanden.

Oder noch viel besser, einen Call hinzufügen, der eine Liste von Dictionaries schicken kann.
Dann könnten wir mit einem einzelnen Call alle nicht gesendeten Daten in die DB pumpen.

Damit wären sogar sowas wie offline Messungen möglich.

Beispiel:

  • FiPy ist darauf programmiert auf den Hotspot den Handys zu verbinden.
  • Wenn der Imker am Stand ist, macht er mal den hotspot an und der FiPy verbindet sich.
  • Zack, übermittelt die Messdaten einer Woche und der imker macht den Eintrag ins Log und fährt wieder.

Hi René,

Das hört sich für mich wie das Imker als Datenmuli Szenario an, ich glaube @clemens hat es auch bei Solarbetrieb der BOB-Platine, verschiedene Möglichkeiten - #71 by Andreas beschrieben.

Viele Grüße,
Andreas.

@Diren und auch Michael / @MKO glaube ich haben für ein Projekt in Afrika, das afaik dann durch Corona (noch) nicht umgesetzt wurde, die Bob-Software geforked und eine Version entwickelt, die Daten temporär auf SD speichert und dann im bulk verschickt wenn jemand mit mobiler Datenverbindung in der Nähe der Beute ist. Allerdings schrieb sie direkt in die Datenbank, was nicht so optimal ist.

@Andreas

Ja so vom Grundsatz her ja.
Aber selbst wenn man das alles baut und so, dann gibt es immer noch das Problem, dass wir dann die gespeicherten Daten nicht an BOB senden können, oder?

Wobei ich hier den Komfort gerne erhalten möchte.
Für das “Datenmuli Szenario” wären ein paar Dinge notwendig:

  1. WLAN immer aus, außer es wird durch Imker*in getriggert.
  2. Zum Trigger verwendet man den P16 taster nur eben nicht als Taster, sondern als Magnetkontakt:
    https://www.amazon.de/dp/B085XQGX2L/ref=cm_sw_em_r_mt_dp_ZTK53APQKE6SW4XS1HNX?_encoding=UTF8&psc=1
    Dann muss das Gehäuse nicht aufgemacht werden.
  3. P16 hat 2 Modi. kurz=Startet den AP für 5 Minuten. Lange=Startet WLAN und versucht sich mit dem konfigurierten WLAN zu verbinden und alle Daten zu verschicken. (so lange aktiv, wie der Magnet am Magnetschalter hängt ?!)
  4. einen HTTP Call wird benötigt, der eine Liste von data dictionaries akzeptiert, wobei jedes data object einen timestamp haben muss.
    Ich denke, dass der Call in Beep recht simple zu implementieren ist.
    Oder gibt es sowas schon? Ich hab nix gefunden.

Die Anpassungen an der Software könnte ich machen.
Ich kenne echt mehrere Imker, die Ihre Bienen an einem Ort ohne WLAN haben.

  • Schrebergarten
  • Gartenhaus
  • Flachdach der Firma
  • Jagdhütte
  • Hinterm Kuhstall

Und das sind nur die Imker*innen, die ich persönlich kenne und die bei den Sensorbeuten abgelehnt haben, weil kein WLAN.
Aber ein iPhone oder Android hat echt fast jeder. Und an vielen dieser Stellen gibt es selbst in DE sogar Handyempfang.
Und ich würde fast sogar sagen, dass diese Art von Daten über Edge gehen sollten.

Wie @clemens und @Andreas beschrieben haben, haben wir dieses schon bei der Kammerun Firmware umgesetzt und auch sonnst schon oft besprochen. Wie @clemens beschrieben hat, ist es derzeit leider nur direktem Zugriff auf die Datenbank möglich.
Die dazu benötigten Accounts müssen manuell erstellt werden und sie gefährden die Sicherheit und Konsistenz der Datenbank. Wenn ein direktes senden über Beep problemlos möglich wär, hätte Diren es bestimmt dort schon umgesetzt.

Im Git gibt es für die BOB Software auch schon einen entsprechenden Branch.
Eine Diskussion dazu hier unten, wichtig ist vor allem das der Node die Zeit jederzeit relativ genau weiß. Was eine zusätzliche RTC nötig macht.

Ja, da gibt es schon was, zumindest in der API-Dokumentation v0.4, @marten.schoonman hatte die mal über den Slack-Kanal von Beep geteilt: [disclaimer] Ich weiß nicht, welche API-Version BOB gerade unterstützt, also ob das schon drin ist.

Beep-Sensor-data-API-v0.4.pdf (52.7 KB)

D.h. pro Datensatz einen call, keinen multiple ingest mit einem HTTP-Aufruf.

Du meintest oben aber, dass der Server bei einem Massen-ingest irgendwann die Annahme verweigert?

Hast du in der Beep-Server-Software was dazu gefunden oder ist das eine limitation, die vom Server (so was wie ein “DOS-Schutz”) kommt? Das sollten wir theoretisch aber beides ändern können, da wir vollen Zugriff auf die Beep-Software und auch den bee-observer.org-Server haben. Daran sollte es nicht scheitern!

Ja im aktuellen Source code gibt es “throttle” parameter. Ich vermute, dass das Calls pro minute sind. Andere Calls haven andere als 10,1 parameter.

Beepnl

Hiverize

In unserer Version von Beep gibt es den timestamp auch nicht als Parameter. Da wird immer time() verwendet.

Fraglich ob sich ein Update lohnt. In einem Fork wäre zwar die Implementierung easy, aber wir würden uns fixes aus dem upstream project (beepnl) verbauen.

Ja ein RTC wäre notwendig, wenn wir mit Stromausfall rechnen müssten.
Ansonsten könnten wir auch die Startzeit auf die letzte geschriebene Zeit plus PowerCycleDuration setzen. Und beim Auslesen, wird neu synchronisiert.

Dennoch. Für den Fall von unstabilem WLAN würde vermutlich auch der Betrieb ohne RTC reichen.

1 Like

Ich hätte jetzt auch anstelle einer RTC einen GPS Empfänger für die Zeit genommen.

GY-GPS6Mv2
So was in der Richtung.

Hier mal was infos dazu.

Den Standort bekommt man kostenfrei dabei :wink:

Wobei eine RTC auch krass billig ist

Aber all diese RTC und Firmware Fragen sind ja was, was auf der Nutzerseite gelöst werden kann.

Der fehlende Call im BOB ist der “Blocker” würde ich sagen.
Ein POST kann gut und gerne ja mal mehr als eine Sekunde dauern.
Wenn wir jetzt eine halbe Stunde kein WLAN haben, müssten wir 30*12 =360 Calls basetzen. Das dauert echt lange. Und ist krass ineffizient.

Bei beepnl hat ein Entwickler mein Issue sofort geschlossen, ohne mal ins Gespräch zu gehen oder die Anfrage überhaupt verstanden zu haben. :face_with_raised_eyebrow:
Ich schau jetzt mal , ob die im Slack gesprächsbereiter sind.

1 Like

Gibt es Erkenntnisse darüber. Woran die “Lücken” in den Sensordaten liegen?

Bei letzten Datentreffen von BOB wurde über fehlende Sensordaten gesprochen.

Die Zeit von einem GPS Empfänger zu bekommen klingt äußerst interessant.
Gerade beim Wanderimkern oder bei Diebstahl könnte das hilfreich sein.
Hast Du schon etwas Erfahrung damit?
Soweit ich weiß kann es mehrere Minuten dauern, bis die Position bestimmt Die Uhrzeit ist hoffe ich etwas schneller verfügbar.
Bei Batterie oder Solarbetrieb müsste man dann sicher Ereignisse festlegen, wann er Uhr und GPS abfragt und überträgt.
Wenn GPS Daten zu swarm.Hiveeyes.org gesendet werden müssen auch zumindest die letzten stellen der Koordinaten verschlüsselt werden.

Hi, hab gerade nicht so viel Zeit alles ganz genau zu lesen und zu antworten, aber ich finde das natürlich immer noch eine sinnvolle sache. Bei der Implementierung für Kamerun mit dem Versenden direkt an die DB war der letzte Stand, dass es an sich funktioniert hat, aber weil alles noch als json oder so versendet wurde, hat das sehr lange gedauert (~15 Minuten für ein Tag Daten). Eine Anpassung der Beep App wäre generell möglich. Viele Grüße, Diren

1 Like

Rene / @snooz habe bei deinem GitHub issue bei beep.auch kommentiert.

Was mir gerade dabei noch aufgefallen ist: Den throttle-Parameter gibt es nur oben, unten bei unsecure nicht, könnte es damit schneller gehen?

:rofl: das wäre der Hammer…
ich check das mal