Batterie Anzeige für Solar

ich wusste nicht das sich die Displays so extrem unterschieden.

Habs hinbekommen :slight_smile:
20:20:39.751 → WiFi connected
20:20:39.751 → IP address:
20:20:39.751 → 192.168.115.153
20:20:40.812 → Attempting MQTT connection…connected

wie bekomm ich den mehrere Werte in eine Instanz?
werden sämtliche Werte etwa in nur einer Variable übertragen?

Von was sprichst du ? Welche Instanz ? Welche Werte ?
Wenn man dir helfen soll solltest du dir auch die Mühe machen entsprechende Details zu liefern.

bb

Ich habe in IP Symcon eine MQTT Server Device Instanz erstellt und kann dort auch den Wert in der Variable an den ESP übertragen, aber ich kann dort keine weiten Variablen erstellen welchen dann übertragen werden.
Deshalb die Frage ob ich alle Zeilen meiner Anzeige in eine Variable packen muss oder ob ich mehrere Variablen übermitteln kann und diese im ESP zusammenfügen muss.

Momentan kämpfe ich aber erstmal damit das ich in die MQTT Variable per PHP Script nichts schreiben kann.
Warning: Variable is marked as read-only and cannot be changed in C:\ProgramData\Symcon\scripts\33431.ips.php on line 3

Habs mit RequestAction hinbekommen

Du kannst beides machen, entweder mehrere Topics anlegen und diese einzeln übertragen, oder alles in ein Topic packen, ein Trennzeichen dazu, und dann im uC Code entsprechend aufsplitten.
Ich würde für jede Zeile ein eigenes Topic machen. Das ist übersichtlicher und einfacher handzuhaben.

bb

wie bekomm ich denn ein weiter Topic hinzu?
Muss ich etwa für jedes Topic eine eigenen MQTT Instanz nutzen?

Ich kann kein weiteres Thema erstellen.

edit: ok muss für jeden wert eine Instanz nutzen

wie füge ich hier jetzt zu meinem bestehen topic pverzeugung das topic akkuladezustand in die nächste Zeile ein?

void reconnect() {
// Loop until we’re reconnected
while (!client.connected())
{
Serial.print(„Attempting MQTT connection…“);
// Create a random client ID
String clientId = „ESP8266Client-“;
clientId += String(random(0xffff), HEX);
// Attempt to connect
//if you MQTT broker has clientID,username and password
//please change following line to if (client.connect(clientId,userName,passWord))
if (client.connect(clientId.c_str()))
{
Serial.println(„connected“);
//once connected to MQTT broker, subscribe command if any
client.subscribe(„pverzeugung“);
} else {
Serial.print(„failed, rc=“);
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 6 seconds before retrying
delay(6000);
}
}
} //end reconnect()

void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
lcd.init(); // initializing the LCD
lcd.backlight(); // Enable or Turn On the backlight
}

void loop() {
if (!client.connected()) {
reconnect();
}
client.setCallback(callback);
client.loop();

}

erstmal mit

client.subscribe(„akkuladestand“);

das „akkuladestand“ Topic subscriben.

In der callback() function fragst dann ab welches Topic gekommen ist.

Macht er automatisch jedes Topic in die nächste Zeile?
Kann ich auch für eine Zeile ein manuellen Text eintragen der einfach nur dargestellt wird?

Zeile 1 PV Erzeugung
Zeile 2 Wert vom MQTT
Zeile 3 Akkustand
Zeile 4 Wert vom MQTT
usw.

Wie schaffe ich den Wechsel bei Zeile 3 auf das nächste Display?

Nö, das hängt ab was du codest.
zzt. macht dein Code noch gar nichts. Es fehlt die callback() function.

C:\Users\Chrismaster\Desktop\solar_display\solar_display.ino: In function ‚void reconnect()‘:
solar_display:87:27: error: ‚akkuladestand‘ was not declared in this scope
client.subscribe(„akkuladestand“);

Kannst du mir die config anpassen. Ich bekomm Fehler

„akkuladestand“ mit gehört unter beidseitigem doppeltem Hochkomma.
Die Autokorrektur der Forumsoftware hat da wohl Quatsch gemacht.

danke werd es morgen testen

Hallo,

wenn nur der Akku sein soll, ich hätte vielleicht aus einer Nixie IN-9 was gemacht. Gibt so was wie Thermometer dafür…

Imgur

Ist klar jeder Geschmack ist anders

das ist echt cool, das kommt dann als nächstes.

wie stelle ich das im code an das ganze auf Displays zu verteilen?
Also das zuordnen der topics zu den einzelnen Displays.

void callback(char* topic, byte* payload, unsigned int length)
{
Serial.print(„Command from MQTT broker is : [“);
Serial.print(topic);
Serial.println();
Serial.print(" publish data is:");
lcd_pverzeugung.clear();
{
for(int i=0;i<length;i++)
{
Serial.print((char)payload[i]);
lcd_pverzeugung.setCursor(0, 0);
lcd_pverzeugung.print(„PV Erzeugung“); // Start Print text to Line 1
lcd_pverzeugung.setCursor(i, 1);
lcd_pverzeugung.write((char)payload[i]);

lcd_verbrauch.setCursor(0, 0);
lcd_verbrauch.print("Verbrauch"); // Start Print text to Line 1
lcd_verbrauch.setCursor(i, 1);
lcd_verbrauch.write((char)payload[i]);

lcd_akkuladezustand.setCursor(0, 0);
lcd_akkuladezustand.print("Akku Ladung"); // Start Print text to Line 1
lcd_akkuladezustand.setCursor(i, 1);
lcd_akkuladezustand.write((char)payload[i]);


}

}

Serial.println();
} //end callback

void reconnect() {
// Loop until we’re reconnected
while (!client.connected())
{
Serial.print(„Attempting MQTT connection…“);
// Create a random client ID
String clientId = „ESP8266Client-“;
clientId += String(random(0xffff), HEX);
// Attempt to connect
//if you MQTT broker has clientID,username and password
//please change following line to if (client.connect(clientId,userName,passWord))
if (client.connect(clientId.c_str()))
{
Serial.println(„connected“);
//once connected to MQTT broker, subscribe command if any

  client.subscribe("pverzeugung");
 // client.subscribe("einspeisung");
 // client.subscribe("bezug");
  client.subscribe("verbrauch");
  client.subscribe("akkuladezustand");
 // client.subscribe("akkuladung");
 // client.subscribe("akkuentladung");
} else {
  Serial.print("failed, rc=");
  Serial.print(client.state());
  Serial.println(" try again in 5 seconds");
  // Wait 6 seconds before retrying
  delay(6000);
}

}
} //end reconnect()