Einer mehr aus Berlin

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.

sieh Dir mal die Übertragungen der Anderen an, da sieht man, wie das sein muß

mosquitto_sub -h swarm.hiveeyes.org -p 1883 -t 'hiveeyes/#' -v

1 Like

Hi Clemens,

der volle Topic müsste bei Dir z.B. folgendermaßen lauten:

hiveeyes/01D9FFYJP98SG4ADB7.../dominik.../volk-01/data.json

Viele Grüße,
Andreas.

1 Like

Jackpot! Ich mach nachher n kleines Wiki, wie das im Node-Red dann aussieht.

Muss das hinten dran?


da stimmt was nicht im Befehl…

Hi Clemens,

so wie Andreas geschrieben hat! Schau’ Dir bitte mal das MQTT-Beispiel an bei

Und ja: Wenn du JSON verschickst, sollte /data.json ans Ende.

ähem… da stimmt alles an dem Befehl :) - ich kann aber nicht wissen, daß Du Windows verwendest, in diesem Fall mußt Du die ticks durch echte “Gänsefüßchen” ersetzen.

Falls es Win10 ist, da kann man super ein Linux-Subsystem installieren

Alternativ geht aber auch:

So viel bringt es auch nicht, nur die topic-Struktur wird vielleicht etwas klarer!

Hi Clemens,

Exzellent!

Sehr gern! Danke.

Jawoll. MQTT3 hat leider noch keinerlei Content-Type Signalisierung, daher haben wir uns diese Konvention ausgedacht. MQTT5 wird Content-Type Signalisierung bekommen, falls ich das richtig aufgeschnappt habe.

Viel Erfolg bei der weiteren Inbetriebnahme! Sag gern Bescheid, sollte noch irgendetwas klemmen oder unklar sein. Disclaimer: Da gibts bestimmt viel, was noch unzureichend dokumentiert und zu wenig rundgeschliffen ist - wir freuen uns dass Du dabei bist und danken für Deine Geduld.

Viele Grüße,
Andreas.

Scheint funktioniert zu haben, jedenfalls gibt es nun folgende Dashboards:

1 Like

das wollte ich mit Jackpot zum Ausdruck bringen ;-)

1 Like