nachdem ich hier nichts mehr anfügen kann, muss ich leider eine neue Anfrage starten. Nach dem dort geposteten Code habe ich mir meinen eigenen zusammengebastelt. Leider bleib ich immer wieder an der Konvertierung hängen.
Derzeit nutze ich die hier nicht auskommentierte Zeile und sende mir den String per MQTT an den iobroker und wandel in dort mit parseInt() um.
for(int x = 0; x < sizeof(smlMessage); x++){
temp = smlMessage[x];
if (temp == consumptionSequence[startIndex])
{
startIndex = (startIndex +1) %1000;
if (startIndex == sizeof(consumptionSequence))
{ Gesammtzaehler ="";
for(int y = 0; y< 8; y++){
//hier muss für die folgenden 8 Bytes hoch gezählt werden
consumption[y] = smlMessage[x+y+1];
//strcat(lbuf,hex02str(consumption[y])); //try and error
Gesammtzaehler += hex02str(consumption[y]); //passt fast. "0" wird weggelassen
//Serial.println(consumption[y],HEX); //korrekte Ausgabe
// sprintf(test, "%02d",consumption[y]); //try and error
}
stage = 4;
startIndex = 0;
}
Dann Teile ich diesen dort noch durch 10000000 und ich erhalte meine Zähler.
Leider werden nicht immer 16 Stellen übertragen, da offenbar die 0 beim konvertieren weggelassen wird.
hat jemand eine funktion auf Tasche? Am leibsten wäre mir ja auch, wenn ich die Konvertierung gleich auf
dem ESP8266 machen könnte
Krass 7 Nachrichten... Danke für die Boardverlinkungen. Ich habe versucht zu verstehen was dort steht, aber ich glaub ich drehe mich im Kreis und ich wurde auch wahrscheinlich nicht richtig verstanden.
Welchen Nutzen soll die Darstellung einer Fließkommazahl als HEX haben?
Es ist anders herum. Ich bekommen vom Serial.read einen HEX-Wert z.B. "000164a7bafdb". Diese wird mit dieser Zeile für meine Begriffe immer korrekt angezeigt.
Serial.println(consumption[y],HEX);
Mein Taschenrechner in DECIMAL ergibt das "95738900443". Diese Zahl Geteil durch 10000000 und auf 3stellen nach dem Koma gerundet ergibt meine Zählerstand. "9573.890". (das als String wäre das Optimum)
Mit meiner funktionieren Lösung sende ich mir den HEX-Wert "000164a7bafdb" mit mqtt und iobroker macht den Rest mit javascript parseint. String deshalb, da ich per mqtt eh nur Zeichen versenden kann.
Sorry aber von pointer und byteweise verschieben bekomme ich wohl nicht mehr in meine Kopf. Da bin ich wohl schon zu alt...Ja microcontroller kann nun mal keine Hochsprache, aber vielleicht habe ich mich jetzt wenigsten verständlich ausdrücken können.
Dein Taschenrechner ist ja auch anders angelegt.
Wir haben so einfach keine Möglichkeit Zahlen > 32 Bit (long) als Hexzahlen einzulesen. Da muss man etwas Handarbeit einsetzen.
Vielen Dank!! Bis auf eine paar Zeilen, verstehe ich es zwar nicht, aber es tut jetzt alles was es soll.
Ich werde mit jetzt noch die anderen Zahlen holen und das Script aufräumen. Ich bin nicht stolz auf den zusammengeklauten Code, würde ihn aber bei Interesse dennoch teilen. Mein Zähler ist ein Q3MA1170 V6.03. Abgegriffen über die "INFO"-Schnittstellen nach PIN Eingabe.