Einer mehr aus Berlin

Guten Tag allesamt!
Herzlichen Dank für die Aufnahme.
Ich heiße Clemens (das wird hoffentlich keine Verwirrung geben :-D), Hobbyimker mit aktuell sieben Völkern auf Dadant im schönen Moabit. Jobtechnisch bin ich Umweltingenieur und an der Uni als WiMi unterwegs. Messtechnik und Datenauswertung sind also nicht gänzlich unbekannt für mich ;-) Gedanklich schleiche ich schon einige Zeit um eure schönen Projekte herum. Sowohl Waage als auch die akustische Vermessung der Völker möchte ich gerne realisieren und natürlich auch gerne meine Erfahrungen und Ideen zur Verfügung stellen.
Um vom Gedankenspiel in die Praxis zu kommen habe ich auf meinem Server erstmal damit gefochten mir Influx und Grafana zu installieren und damit ein wenig herumzuspielen - ich will also gern selbst hosten und die Eigenständigkeit genießen.
Hardwaretechnisch bin ich in den letzten Wochen schon etwas vorangeschritten, ein solar-beelogger und zwei Bosche H30A sollen zum Start genutzt werden, der Logger ist in der Bauphase und die Wägezellen liegen schon eine Zeit rum.
Eine gute Wägeplattform habe ich noch nicht, die wird sich aber auch finden. Bei mir ist erfahrungsgemäß das Luxusproblem der Auswahl einer aus zu vielen
Möglichkeiten der zeitfressende Schritt.
Ich wünsch euch erstmal eine gutes Bienenjahr 2019!

4 Likes

Hallo @Cle21, schön weitere Mitstreiter – auch in Berlin! – zu haben. Selbst hosten ist klasse, das wollen wir auch auf jeden Fall ermöglichen. Manchmal und für den Anfang kann es aber auch hilfreich sein an ein bestehendes System von dem man weiß, dass es funktioniert Daten zu schicken, das kannst du gerne vorab oder parallel tun, Wir haben an Grafana einiges herumgeschraubt und @wtf hat tolle Visualisierungen gebaut. Lass dich da gerne inspirieren. Weiter haben wir mit BOB ein Projekt am Laufen, das Leuten möglichst einfach Zugang und eine einfache Bauanleitung für den Hardware-Teil erlauben soll. Vielleicht ist das ein Punkt, um zu starten. Viele Grüße Clemens (G. ;-)

Definieren wir eigentlich mal nen Stammtisch? Noch so nen Berliner! (:

4 Likes

Ich bin dafür.

So, mittlerweile wurde gesägt, geschweißt, getippt, gelötet.
Der erste Chip ist erstmal ein Esp32 geworden - ich hab die 8266er MQTT Firmware aus dem Git Rep dafür und für Json6 umgebaut. Scheint zu tun was es soll.
Der Debugger war zu hoch für mich, der ist rausgeflogen.
Mosquitto, nodered, influxdb und Grafana zucken auch bereits.
Jetzt müssen noch Sensorkabel und Kalibierungen erledigt werden, vielleicht gehts morgen ja schon los mit dem wiegen.

3 Likes

Was mich ja spontan begeistert hat ist die Telegram Einbindung in nodered - lässt sich da schon jemand von euch was aus der Datenbank getriggertes aufs Handy zurück schicken?

1 Like

Hi Clemens,

schön dass Du weiterkommst! Ein paar neugierige Rückfragen haben wir da natürlich gleich ;].

Firmware

Exzellent! Du meinst die node-wifi-mqtt, ja? Schön zu hören, dass die auch gut auf dem ESP32 tut!

Danke, @clemens hatte das neulich auch angemerkt, dass es für die ArduinoJson Bibliothek Version 6.x ein paar Anpassungen braucht. Wenn Du Deinen Code mit uns teilen willst und bestätigen kannst, dass damit alles gut klappt, stelle ihn doch gerne zur Verfügung, dann können wir das entsprechende Upgrade auch Upstream durchziehen – pull requests welcome ;].

Was genau, wie genau? Wenn da irgendwas drin ist, was die schnelle Inbetriebnahme erschwert, berücksichtigen wir das natürlich gerne.

HX711

Und noch eine Frage meinerseits: Welche Version der HX711 Bibliothek hast Du denn verwendet bzw. wie genau hast Du sie installiert? Die unter arduino/libraries at 0.16.0 · hiveeyes/arduino · GitHub referenzierte ist mittlerweile nämlich ordentlich veraltet, dank Improving the canonical Arduino HX711 library for ESP8266, ESP32 and beyond gibts die aktuelle mittlerweile jedoch auch direkt bei HX711 Arduino Library - Arduino Libraries und installierbar über den Arduino Library Manager – ich vermute Du hast direkt jene (Version 0.7.2) installiert?

Node-RED

Node-RED wollten wir uns schon immer mal ansehen, sind da aber bisher nicht dazu gekommen. Was uns hier aus Plattformsicht konkret interessieren würde, wäre, wie gut man das Teil mandantenfähig betreiben könnte, siehe Design: multiuser · node-red/node-red Wiki · GitHub.

Aus Communitysicht freuen wir uns aber definitiv darüber, wenn Du entsprechende Flows zur Verfügung stellst, dazu haben wir grade die Erweiterung .json für den Upload von Dateien freigegeben. So kann jede Teilnehmerin mit einer eigenen Node-RED Instanz beliebige Dinge realisieren und hätte durch passende Flow-Schnipsel einen guten Startpunkt.

Fazit

Wir freuen uns sehr, dass Du in unserem Universum ein paar sinnvolle Dinge entdecken konntest, die Dir die Inbetriebnahme Deines Systems erleichtert haben. Weitere Ideen, Vorschläge und Hinweise auf verbesserungswürdige Teilbereiche sind jederzeit gerne gesehen, hier hilft es uns sehr, wenn Leute mit einem frischen Blick drauf schauen und uns auf entsprechende Aspekte hinweisen oder selbst mit anpacken, sie zu verbessern.

Merci schon im Voraus und viel Erfolg weiterhin!

Herzliche Grüße,
Andreas.

Debugging the SerialDebugger

Ah, i see. Du meinst jenen hier?

https://github.com/hiveeyes/arduino/blob/master/node-wifi-mqtt/node-wifi-mqtt.ino#L300-L302

Ja, der ist eigentlich durchaus nett. Schade, dass Dir das Schmerzen bereitet hatte. Kannst Du ungefähr sagen, was das Problem dabei war?

Hallo,
ja ich hab von der node-wifi-mqtt aus begonnen.

Ich nutze das HX711er Board von Sparkfun und als Library die aktuelle aus der Arduino IDE

Node-RED scheint eher was für einen einzelnen Administrator zu sein, wie ich das grad überblicke, was hoffentlich da drin auch geht, ist die Übergabe an den MQTT vom Hiveeye-Schwarm (btw… schaltet Ihr mir einen Zugang dafür?)

Ich setz einfach mal den JSON6 Teil hier ein, so wie er bei mir funktioniert:

void transmit_readings() {

    // Build JSON object containing sensor readings
    // TODO: How many data points actually fit into this?
    DynamicJsonDocument doc(512);
    JsonObject obj = doc.as<JsonObject>();

    #if SENSOR_DUMMY
    doc["dummy"]                      = true;
    doc["weight"]                     = 42.42;
    doc["airtemperature"]             = 42;
    #endif

    doc["device"]                     = devicename;
    doc["network"]                    = 
    #if SENSOR_HX711
    doc["weight"]                      = weight;
    #endif

    #if SENSOR_DHTxx
    doc["airtemperature"]              = dht_temperature[0];
    doc["airhumidity"]                 = dht_humidity[0];
    
      if (dht_device_count >= 2) {
        doc["airtemperature_outside"]  = dht_temperature[1];
        doc["airhumidity_outside"]     = dht_humidity[1];
        }
      #endif

    #if SENSOR_DS18B20
    doc["broodtemperature"]            = ds18b20_temperature[0];
      if (ds18b20_device_count >= 2) {
        doc["entrytemperature"]        = ds18b20_temperature[1];
        }
      #endif

    #if SENSOR_BATTERY_LEVEL
    doc["battery_raw"]                 = adc_level;
    doc["battery_level"]               = battery_level,2;
    #endif

    #if SENSOR_MEMORY_FREE
    doc["memory_free"]                 = memory_free,0;
    #endif


    // Debugging
    if(DEBUG){
    serializeJsonPretty(doc, Serial);
    Serial.println();
    }

    // Serialize data
    
    int json_length = measureJson(doc);
    char payload[json_length+1];
    String payloadstring;  
    serializeJson(doc, payloadstring);
    payloadstring.toCharArray(payload, sizeof(payload));
 


    // Publish data
    // TODO: Refactor to TerkinTelemetry
    if (mqtt_publisher.publish(payload)) {
      if(DEBUG){
        Serial.println( "transmit_readings  -  MQTT publish succeeded");
      }
    } else {
      if(DEBUG){
        Serial.println( "transmit_readings  -  MQTT publish failed");
      }
    }

}`
1 Like

Hi Clemens,

Erledigt, Du hast Post. Wir hoffen es klappt alles damit, melde Dich ansonsten gerne, falls es Probleme gibt. Wir wünschen Dir viel Freude beim Datensammeln.

Herzliche Grüße und bis bald,
Andreas.

Fein, vielen Dank fürs Teilen!

Soweit ich das überblicken kann, hat sich vor allem die Initialisierung der Bibliothek und die Serialisierungsmethode geändert?

Aus

void transmit_readings() {

    // Create JSON object for collecting sensor readings.
    StaticJsonBuffer<512> jsonBuffer;
    JsonObject& json_data = jsonBuffer.createObject();

    // Fill in some data.
    json_data["memory_free"] = memory_free;

    // Serialize data.
    int json_length = json_data.measureLength();
    char payload[json_length+1];
    json_data.printTo(payload, sizeof(payload));

    // Publish data.
    mqtt_publisher.publish(payload);
}

wird demnach folgender Code, der für die neuere ArduinoJson6 Bibliothek funktioniert?

void transmit_readings() {

    // Create JSON object for collecting sensor readings.
    DynamicJsonDocument doc(512);
    JsonObject obj = doc.as<JsonObject>();

    // Fill in some data
    json_data["memory_free"] = memory_free;

    // Serialize data
    int json_length = measureJson(doc);
    char payload[json_length+1];
    String payloadstring;  
    serializeJson(doc, payloadstring);
    payloadstring.toCharArray(payload, sizeof(payload));

    // Publish data.
    mqtt_publisher.publish(payload);
}

Zum Verfahren bei der Serialisierung habe ich noch etwas.

Ich vermute, dass die kompaktere und effizientere zero-copy¹ Variante

    // Serialize data
    String payload;  
    serializeJson(doc, payload);

    // Publish data
    mqtt_publisher.publish(payload.c_str());

ebenfalls funktionieren könnte. Vielleicht findest Du die Gelegenheit, das bei Dir mal so auszuprobieren.

¹ c_str() is a zero-copy operation, and zero-copy is a good thing on memory-constrained devices.

Converting an int or String to a char array on Arduino - Stack Overflow

Du vermutest richtig, geht beides! Danke für den Tipp :)

1 Like

Einen Hinweis noch den ich selbst gerade lernen musste: Das Programm stürzt nachhaltig ab, wenn man ein größeres Dokument initialisiert

UND füllt, als man in der MAXBUFFERSIZE in Adafruit_MQTT.h einstellt.

Hallo Andreas,
ich find kein Instant Dashboard im Grafana, das mit 01D9… anfängt :-/
Ich schick die Daten die ich in mein Influx sende ausm Node-Red parallel an swarm.hiveeyes.org:1883 mit meinem Nutzernamen und PW, thema hiveeyes.
Soweit sollte das doch alles stimmen?
gruß aus Moabit (wo es eeendlich regnet)

Konntest du an testdrive etwas schicken? Wie schickst du genau? Welches Adressierungsschema verwendest du ganz konkret? Siehe Meßdaten an die Hiveeyes Plattform übermitteln


so ist der Flow im Node-Red :-)

Der 127…:8086 ist meine lokale Influx Datenbank

Der Hiveeyes MQTT-Knoten loggt sich bei eurem Mqtt mit den Zugangsdaten von hier weiter oben ein - das Mqtt Thema ist hiveeyes.

Dann sollte da schonmal der JSON String einfach weitergeschoben werden.

Sicherlich muss ich da an der Variablebenennung noch was ändern.

Sollte mein Instant Dashboard nicht auch ohne Daten vorhanden sein? oder entsteht das erst bei erfolgreicher Übertragung?

Erst bei erfolgreicher Übertragung!

Die Adressierung muss so ähnlich aussehen:

export CHANNEL=hiveeyes/01D9FFYJP98SG4.../dominik.../volk-01
  • hiveeyes ist fest
  • deine ID auch
  • dann so was wie ein Standname, “am-haus” oder “garten”
  • dann das Volk “1” oder “volk-01” oder “elfriede”

aha, erst nach Dateneingang!

Dit is klar, nur wo kommt das hin… alles als ein string nacheinander als mqtt topic?
Oder als extra payload Objekte?

Die ID kommt also auch nicht (wie ich gedacht hab) aus dem Login für den MQTT.