Pool Zeit....

Alles was speziell mit der Anbindung der HomeMatic Zentrale und anderen Smart Home Zentralen zu tun hat. (FHEM, ioBroker usw.) Fragen Ideen und Erfolgsmeldungen.

Moderator: Ulrich

ToTo_OB
Beiträge: 53
Registriert: Sa 19. Jun 2021, 11:16
Hat sich bedankt: 3 Mal

Pool Zeit....

Beitrag von ToTo_OB »

Hallo zusammen,

ich muss ein klein wenig ausholen. Ggf. wird es auch etwas off Topic, ich kann mir aber gut vorstellen, das der ein oder andere gleiche Interessen haben könnte.
Aktuell baue ich mir eine Anzeige der Pool Daten, Temperatur, TDS, PH und Level. Das funktioniert mit dem Arduino schon alles super und hat auch eine lokale LCD Anzeige.
Jetzt kommt natürlich das "mehr wollen" :-)

Kann mir jemand erklären, wie ich diese Werte jetzt am einfachsten und effektivsten am besten in die Influx Datenbank der Solaranzeige geschrieben bekomme, damit ich diese dann am Dashboard darstellen kann und später dann die Pool Heizung, Pumpe und Chemiedosierung steuern kann?

In meiner Vorstellung, sendet der Arduino die Daten mittels mqtt direkt an den Raspberry der Solaranzeige in dessen vorhandene Datenbank bzw. einer neuen DB auf dem Pi der Solaranzeige. ( Da ist eine 500gb ssd dran)

Benutzeravatar
Ulrich
Administrator
Beiträge: 6393
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Hat sich bedankt: 159 Mal
Danksagung erhalten: 938 Mal

Re: Pool Zeit....

Beitrag von Ulrich »

Die Solaranzeige ist nicht dafür vorgesehen, MQTT Daten zu empfangen und sie in die Datenbank zu stellen. Dafür ist die API gedacht, so wie es hier steht: download/API.pdf
Damit kann der Arduino ganz einfach die Daten übertragen.
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]

ToTo_OB
Beiträge: 53
Registriert: Sa 19. Jun 2021, 11:16
Hat sich bedankt: 3 Mal

Re: Pool Zeit....

Beitrag von ToTo_OB »

Mega Ulrich!!!

Ich muss mich da nur noch in die genaue Syntax reinfuchsen... bin ja sozusagen Dummy.

Aber zunächst brauche ich erstmal ein Netzwerkadapter für den Arduino ;)

Sonnige Grüße und ich werde berichten......

ToTo_OB
Beiträge: 53
Registriert: Sa 19. Jun 2021, 11:16
Hat sich bedankt: 3 Mal

Re: Pool Zeit....

Beitrag von ToTo_OB »

Okay, .......

bevor ich jetzt wieder eine schlaflose Nacht habe, weil es mich einfach wurmt, dass ich den Fehler nicht finde.....

WER kann mir helfen?

Ich habe eine Datenbank in Influx angelegt "Pool" und das halbe chatGPT Universum befragt..... es soll zunächst testweise die Temperatur eines BME280 Sensors in die Datenbank geschrieben werden. Heraus gekommen ist bisher dieser code, welcher aber immer noch compilierunsfehler hat :

#include <WiFi.h>
#include <BME280I2C.h>
#include <Wire.h>
#include <HTTPClient.h>
#include <XMLWriter.h>
#define SERIAL_BAUD 9600

const char* ssid = "xxxxxxxxxx";
const char* password = "xxxxxxxxxxxx";
const char* serverName = "http://192.168.2.190"; // IP von der Solaranzeige

BME280I2C bme; // Default : forced mode, standby time = 1000 ms
// Oversampling = pressure ×1, temperature ×1, humidity ×1, filter off,

//////////////////////////////////////////////////////////////////
void setup()
{
Serial.begin(SERIAL_BAUD);

while(!Serial) {} // Wait

Wire.begin();

while(!bme.begin())
{
Serial.println("Could not find BME280 sensor!");
delay(1000);
}
{
Serial.println("verbinde mit WLAN");
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}

Serial.println("");
Serial.println("WLAN verbunden");
Serial.print("IP-Adresse:");
Serial.println(WiFi.localIP());
}

switch(bme.chipModel())
{
case BME280::ChipModel_BME280:
Serial.println("Found BME280 sensor! Success.");
break;
case BME280::ChipModel_BMP280:
Serial.println("Found BMP280 sensor! No Humidity available.");
break;
default:
Serial.println("Found UNKNOWN sensor! Error!");
}
}

//////////////////////////////////////////////////////////////////
void loop()
{
printBME280Data(&Serial);
delay(5000);
}

//////////////////////////////////////////////////////////////////
void printBME280Data
(
Stream* client
)
{
float temp(NAN), hum(NAN), pres(NAN);

BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
BME280::PresUnit presUnit(BME280::PresUnit_hPa);

bme.read(pres, temp, hum, tempUnit, presUnit);

client->print("Temp: ");
client->print(temp);
client->print("°"+ String(tempUnit == BME280::TempUnit_Celsius ? 'C' :'F'));
client->print("\t\tHumidity: ");
client->print(hum);
client->print("% RH");
client->print("\t\tPressure: ");
client->print(pres);
client->println("hPa");

delay(1000);
//}

String xmlData = <?xml version="1.0" encoding="UTF-8" ?>
<solaranzeige>
<version>1.0</version>
<in_out>in</in_out>
<database name="pool">
<measurement name="temp">
<fieldname name="Pool_Temperatur"><value type="num">temp</value></fieldname>
</measurement>
</database>
<database name="pool">
<measurement name="Temperatur">
<fieldname name="Temperatur"><value type="num">temp</value></fieldname>
</measurement>
</database>
</solaranzeige>;

if (WiFi.status() == WL_CONNECTED)
{
HTTPClient http;
http.begin(serverName);
http.addHeader("Content-Type", "application/xml");

int httpResonseCode = http.POST(xmlData);

Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);

http.end();
}
}

Benutzeravatar
Ulrich
Administrator
Beiträge: 6393
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Hat sich bedankt: 159 Mal
Danksagung erhalten: 938 Mal

Re: Pool Zeit....

Beitrag von Ulrich »

Was sagt mir das jetzt?

Das chatGPT doch nicht mein Projekt so einfach weiterführen kann? :D :lol:

Für welche Datenbankversion hat denn chatGPT den Script geschrieben. Für Influx 1.x Influx 2.x oder Influx 3.x?

Die Solaranzeige arbeitet mit Influx 1.x ohne UserID und Kennwort.
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]

ToTo_OB
Beiträge: 53
Registriert: Sa 19. Jun 2021, 11:16
Hat sich bedankt: 3 Mal

Re: Pool Zeit....

Beitrag von ToTo_OB »

Hallo Ulrich,
mir sagt das, dass ich wirklich noch ganz am Anfang stehe. Ich bekomme die Sensoren über die Beispiele ans laufen und schaffe es dann die Programme so zusammen zu führen, dass da was lauffähiges draus wird, was dann auch auf einem 4-zeiligen LCD Display was anzeigt, aber wenn es dann daran geht, einen Syntax wirklich zu verstehen und dann umzuschreiben, da bin ich am Ende mit meinem Latein :-( ... Will sagen, wenn ich ein Beispiel mit einem Wert habe, kann ich den Rest mittels Copy&Paste irgendwie da rein zaubern, aber der Anfang, funktioniert irgendwie nicht wirklich :oops: Dümmster Anzunehmender User halt :beer:

Benutzeravatar
Ulrich
Administrator
Beiträge: 6393
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Hat sich bedankt: 159 Mal
Danksagung erhalten: 938 Mal

Re: Pool Zeit....

Beitrag von Ulrich »

Hilft dir das eventuell weiter:

https://fullstackenergy.com/mqtt-into-influx/
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]

ToTo_OB
Beiträge: 53
Registriert: Sa 19. Jun 2021, 11:16
Hat sich bedankt: 3 Mal

Re: Pool Zeit....

Beitrag von ToTo_OB »

Hallo Ulrich, leider nutzt mir dein Link nicht wirklich. Ich habe aber einen neuen Ansatz gefunden, den ich vielversprechender finde.
Hier stellt sich für mich nur die Frage, wo ich die EINGABE machen muss, wo in der Solaranzeige, nämlich in "pool" die Werte geschrieben werden.

mit define InfluxDBBucket geht es scheinbar nicht :-(

Hier mal mein Ansatz:

#include <WiFi.h>
#include <InfluxDbClient.h>

#define WIFI_SSID "xxxxxxxxxxxx"
#define WIFI_PASSWORD "xxxxxxxxxxxxxx"

// InfluxDB 1.x Server
#define INFLUXDB_URL "http://192.168.2.190:8086" // IP-Adresse und Port deiner InfluxDB
#define INFLUXDB_DB_NAME "solaranzeige" // Name der Datenbank
//#define INFLUXDB_BUCKET "pool"
// Optional, falls Authentifizierung aktiviert ist
////#define INFLUXDB_USER "deinuser"
//#define INFLUXDB_PASS "deinpass"

InfluxDBClient client(INFLUXDB_URL, INFLUXDB_DB_NAME);

void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Verbunden!");

// Optional: Authentifizierung setzen
//client.setConnectionParamsV1(INFLUXDB_URL, INFLUXDB_DB_NAME, INFLUXDB_USER, INFLUXDB_PASS);
}

void loop() {
// Beispiel: Temperaturwert simulieren
float temperatur = 23.5;

// Messpunkt erstellen
Point messpunkt("temperatur"); // Messung heißt 'temperatur'
messpunkt.addTag("device", "pool");
messpunkt.addField("wert", temperatur);

// Daten senden
if (client.writePoint(messpunkt)) {
Serial.println("Daten erfolgreich gesendet!");
} else {
Serial.print("Fehler beim Senden: ");
Serial.println(client.getLastErrorMessage());
}

delay(10000); // 10 Sekunden warten
}

Benutzeravatar
Ulrich
Administrator
Beiträge: 6393
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Hat sich bedankt: 159 Mal
Danksagung erhalten: 938 Mal

Re: Pool Zeit....

Beitrag von Ulrich »

Nein, dein Codeschnipsel ist für eine serielle Verbindung mit einer Influx Datenbank 2.x

Du musst, wenn überhaupt, einen HTTP Aufruf über das LAN zu einer Influx Datenbank 1.x nehmen.


Hast du das Programm curl auf deinem Arduino?
Dann gebe einmal auf der Konsole ein:

curl -i -XPOST 'http://192.168.2.190:8086/write?db=solaranzeige' --data-binary 'Temperaturen,Garten=26.4,Hof=30.1 1748786011000000000'

Danach sollte auf dem Raspberry der Solaranzeige in der Datenbank 'solaranzeige' im Measurement "Temperaturen" die Werte stehen.
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]

ToTo_OB
Beiträge: 53
Registriert: Sa 19. Jun 2021, 11:16
Hat sich bedankt: 3 Mal

Re: Pool Zeit....

Beitrag von ToTo_OB »

Hmmmmm,

Merkwürdig ist das aber schon. Mein Programm legt entsprechend der namensvergebung messstellen an und heute Mittag hat es scheinbar zweimal Werte in die Datenbank geschickt. Zumindest habe ich diese in grafana auf dem Trend 🤔

Zurück zu „HomeMatic, FHEM, ioBroker, Smart Home Zentralen und Solaranzeige“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste