Heizungssteuerung mit WIFI ESP8266

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Heizungssteuerung mit WIFI ESP8266

      Hallo zusammen.

      Ich weis nicht ob es üblich ist sich vorzustellen bzw. sein Projekt.?
      Wenn ja, würde ich dies natürlich im zweiten Beitrag tun.

      Mein Projekt (Kurzfassung) Heizungssteuerung mit Software Bascom Version 2.0.8.2

      Steuerung: Atmege 644P mit ESP8266 (WIFI)
      7x Temperatur-Sensor: Attiny84, 1-Wire (DS18B20) und ESP8266
      2x Temp/Humidity-Sensor: Attiny84, ESP8266 und BME280 Sensor

      Mein Problem:
      Nach unterschiedlichen Zeiten werden Variable falsch angezeigt.
      Ich wäre für jede Hilfe dankbar.

      LG
      Horst
      Files
    • Da waren einfach 88 Milionen Fehler :D
      Auf dem Ersten Blick nichts auffälliges.
      Ist immer die selbe Variable falsch? oder immer der gleiche Falschwert?
      e_n bei der nächsten Meldung auch null?
      Vielleicht versuchsweise E-count(10) als Byte Dimmen oder anstelle i eine andere Variable nehmen(nicht einen anderen Namen für i sondern eine ganz andere/neue)
    • Pluto25.... Vielen Dank für die schnelle Antwort.

      Frage: Ist immer die selbe Variable falsch?
      Antwort: Nein, leider unterschiedliche Variable.

      Frage: oder immer der gleiche Falschwert?
      Antwort: Nein, unterschiedliche falsche Werte.

      Frage: bei der nächsten Meldung auch null?
      Antwort: Nein, unterschiedliche falsche Werte.

      Vielleicht versuchsweise E-count(10)
      Es sind unterschiedliche Variable betroffen (nicht nur E-count)

      Ich hoffe auf weitere Antworten

      Vielen Dank im Voraus

      Horst
    • Sie kommen ja Alle aus den e_count. Möglicherweise haut da etwas in die Konvertierung rein(oder ins i). Sind die nur Byte ist die Wahrscheinlichkeit geringer.

      Topgun wrote:

      bei der nächsten Meldung auch null?
      Das wäre aber ein blöder Zufall der genau danach das e_n schreddert. Wenn es gesund ankommt ist es dann 0 oder 1? (Direkt nach einer mit einem Fehler)
      Oder ist jede Meldung fehlerhaft?
    • Hallo
      ich habe dein Prog zwar nur grob überflogen, aber mir ist dabei etwas aufgefallen.
      Deine Kommunkations mit den ESPs beinhaltet sehr viele "exits" in der seriellen Komunikation.
      Dann solltest du auch den RX-Buffer löschen. Das kann bei fehlerhaften RX-Daten (9k6 Baud! ca.100 Zeichen/sek) mächtig helfen ;)
      Vieleicht bist du auch noch an einem weiteren tipp interssiert.
      Du konvertierst deine Zeitfenster von Sekunden zu Stunde und Minuten.
      Ich mache da aus Stunde/Minute einen Integer. Z.B. aus 17:00Uhr wird dezimal 1700.
      Wie man da z.B. Start 2100 und Ende 0600 auswertet ist auch nicht schlimm.
      Kann man dann bequem mit "Case" auswerten und verschlankt dein Prog und die Lesbarkeit mächtig.

      cu zipp

      P.S.: Ich mach das auch mit ESPs. Aber nicht mit der originalen SW, sondern mit Tasmota. Zeitschaltuhr integriert. :)
    • New

      Guten Morgen.

      Pluto25
      Frage: Das wäre aber ein blöder Zufall der genau danach das e_n schreddert
      Antwort: Es werden unregelmäßig (Zeit) verschiedene Variable verändert. Von E_Count über e_n und auch Temperaturwerte.

      Ich werde mal die Variable auf Byte setzen und überprüfen ob das hilft.

      Zipp
      Das mit dem RX-Buffer löschen verstehe ich nicht.
      Meinst du "Clear Serialin1" oder den Uartstring "" ?? Vielleicht kannst du mir ein Beispiel schreiben.

      Dein Tipp mit der Zeit werde ich mir nach der Lösung anschauen. Danke

      Horst
    • New

      Hallo zusammen,

      leider hat die Änderung die Variable auf Byte umzustellen keine Verbesserung gebracht.

      Ich habe auch nochmals nachgeschaut, ob jedes mal wenn Uartstring benutzt wird vorher ein Serialin1 und Uartstring = ""
      im Programm steht. Tut es.
      Aber was mir aufgefallen ist, dass manchmal Uartstring = "" in Kursiv Schrift angezeigt wird.

      Clear Serialin1
      Uartstring = ""

      Softtimer = 0
      Timer0 = Timer0_preload
      Start Timer0

      Print #1 , "TEMP=?"

      Dies bedeutet: Dead Code

      Ich weis nicht, warum dies ein "Dead Code" sein soll.
      Ich verstehe auch nicht, ob ein "Dead Code" übersetzt wird oder nicht.

      Pluto25 wrote:

      Topgun wrote:

      und auch Temperaturwerte.
      Also nicht nur die Fehler Mitteilung sondern einfach alle (Zahlen) sind betroffen ? Die Texte bleiben immer ok?Und e_n bleibt auch immer 0 ? (Wenn sie dann zu lesen ist) :D
      Siehe Bild

      Der falsche Wert wird dann in den String umgewandelt und weiterverarbeitet.
      Beim nächsten Durchlauf ist ist der falsche Wert nicht mehr vorhanden.
      Beispiel: e_n ist 5 dann 6 dann falscher Wert "<00000004" dann 6 dann 6 usw.
      Files
    • New

      Hallo Pluto25

      " anstelle i eine andere Variable nehmen(nicht einen anderen Namen für i sondern eine ganz andere/neue)"

      ich verstehe das nicht!

      Soll ich anstatt DIM i as byte z.B

      DIM Zähler_1 as Byte nehmen
      oder
      DIM Zähler_1 as word

      Vielen Dank
      Horst
    • New

      Nicht anstatt sondern zusätzlich. Dim i belassen. Später im Code Dim Zähler_1 as egal . Und mit dem Zähler_1 dann zählen.
      Der Hintergedanke ist das evt die bits gleich vor dem I es beschädigen. Vermutlich nur Paranoia aber um es wirklich auszuschließen.
      Das e_n vor dem Fehler stieg war Zufall? Oder ist es immer so das zuerst e n steigt und gleich darauf der Fehler folgt?
      Aus Eigeninteresse (hilft vermutlich nicht bei dem Problem) wie oft steigt e_n? Jedes 10te,100ste mal?
      Der Dead Code ist nicht immer tot, da irrt sich die Analyse hin und wieder. Es ist jedoch unnötig wenn darauf ein ' Uartstring = "+" ' folgt, damit wird er von vorn beschrieben und alles was vorher drinn war ist "weck". Sie werden aber mit compiliert.
    • New

      Hallo Pluto25

      Du: Und mit dem Zähler_1 dann zählen
      Ich: das werde ich versuchen, ist jedoch mit etwas Aufwand (Zeit) verbunden. Werde erst mal nur die Errorcounter ändern und berichten.

      Du: Das e_n vor dem Fehler stieg war Zufall? Oder ist es immer so das zuerst e n steigt und gleich darauf der Fehler folgt?
      Ich: Der Wert ist vor dem Fehler und nach dem Fehler gleich. Der Wert ändert sich nicht. Siehe Dateianhang
      Einfach nach "000" suchen.

      Du: Der Dead Code ist nicht immer tot, da irrt sich die Analyse hin und wieder.
      Ich: Das Gefühl habe ich auch. Ich hoffe deine Aussage " Sie werden aber mit compiliert." stimmt. :)

      Du: Es ist jedoch unnötig wenn darauf ein ' Uartstring = "+" ' folgt
      Ich: Habe ich überprüft und du hast recht. Habe ich geändert. Vielen Danke!

      Du: wie oft steigt e_n? Jedes 10te,100ste mal?
      Ich: Total unterschiedlich (Siehe Dateianhang). Der Fehler tritt mal nach 15 Min. mal erst nach 3 Std. auf.
      Files
    • New

      11 Fehler in >15000 Nachrichten klingt doch erstmal Super (<1%o) :D
      Es läßt sich schwer simulieren.
      Vergiss das mit dem I, dem scheints gut zu gehen es macht sonst nirgendwo Fehler.
      Vielleicht hilft ein größerer Stack (schon 3/4 Füllung im Simulator, gehts richtig los könnte da noch mehr kommen)
      Es sind wohl die Interrupts die die String Konvertierung stören. (Einen hab ich hinbekommen - irgendwie a_27_b277ca12

      Ein Disable URXC(1) vor der Ausgabe könnte helfen da die ESP schon mal gerne drauflos "quaseln".
      Vielleicht versuchsweise Disable Interrupts wenns die Uhr dann nicht zu sehr stört.

      Hatte das Clear Serialin eine Wirkung?

      PS Erstaunlich gut hat das Ganze den Fehler von 19:13:26 verkraftet :thumbsup:
      Ich hätte erwachtet das es bis jetzt noch auf die letzten Bytes der 8 Miliarden wachtet. ^^

      The post was edited 1 time, last by Pluto25 ().

    • New

      Hallo Topgun,
      ich würde jetzt nicht wild irgendwo Änderungen vornehmen sondern eher versuchen, den Fehler systematisch einzukreisen.
      Bei der Ausgabe von GET /store_err.php?... soll die Länge doch eigentlich 110 sein, alles andere deutet auf einen Fehler hin. Also würde ich die ganze sonstige Ausgabe weglassen und mich auf diesen Fehler konzentrieren.

      Also nur GET /store_err.php?...ausgeben, falls Länge<>110.

      Dann alle Einzelkomponenten des Strings ausgeben. Ist dort auch eine falsch, würde ich noch mal die Konvertierung E_count_str(i) = Str(e_count(i)) für diese Variable ausführen und mir den String ausgeben lassen. Ist der jetzt wieder genauso falsch liegt ein systematischer Fehler bei dieser Zuweisung vor. Dann musst du da weitersuchen.

      Ist der Fehler weg, was wahrscheinlicher ist, liegt es wohl an einem Stackproblem oder an einem Interrupt, der dazwischenfunkt. Als nächstes also Interrupts komplett abschalten. Falls der Fehler bei der Ausgabe der Einzelkomponenten aufgetreten ist, dann dort bei der Zuweisung. Ansonsten bei der Erzeugung von Db_data.
    • New

      Hallo Pluto25

      Du: Vergiss das mit dem I,
      Ich: Ich habe alle Zähler wieder mit "i" zurück gestellt. Das ist wohl nicht das Problem.

      Du: ein größerer Stack (schon 3/4 Füllung im Simulator,
      Ich: mit dem Simulator kenne ich mich nicht aus, aber ich hatte den HWStack und den SWStack schon beide mit 512 ausgetestet und
      das Problem war das gleiche.

      Du: Vielleicht versuchsweise Disable Interrupts
      Ich: werde ich jetzt einbauen und versuchen. Morgen kommt das Ergebnis

      Du: Hatte das Clear Serialin eine Wirkung?
      Ich: Ich hatte diesen Befehl schon vor jedem Input drin und somit keine Wirkung.

      Du: Erstaunlich gut hat das Ganze den Fehler von 19:13:26 verkraftet
      Ich: in der Datenbank wurden zu diesem Zeitpunkt 2x keine Daten eingetragen.

      Bis Morgen
      Horst
    • New

      Hallo Franz,

      erst mal Danke für deine Antwort.

      Der Fehler tritt ja nicht nur bei der Länge auf, sondern auch bei Temperaturwerten und Fehlerwerten.

      Deine Idee, den Fehler einzukreisen finde ich richtig und wir versuchen das gerade.

      Wie schon an Pluto25 geschrieben, werde ich als nächstes den Interrupt disable einfügen.

      Beim SWStack und HWstack glaube ich nicht an ein Problem. Siehe auch Beitrag vorher

      Trotzdem bin ich für jede weitere Hilfe dankbar.

      Horst
    • New

      Topgun wrote:

      Du: Vergiss ...
      Ich: Ich habe...
      Mal als Info: Das Forum hat eine sehr schöne Zitatfunktion (geht nicht, wenn du Android o.ä. nutzt).
      Du markierst den Text von einem anderen User und wartest kurz.
      Dann erscheint ein kleines Menü bei dem du nur noch auf "Zitat einfügen" klicken musst und schon steht der Text und der Autor in deiner Antwort.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • New

      Topgun wrote:

      Der Fehler tritt ja nicht nur bei der Länge auf, sondern auch bei Temperaturwerten und Fehlerwerten.
      Schon klar, dass der Fehler an verschiedenen Stellen auftritt, aber ich denke, dass die alle die gleiche Ursache haben. Deswegen würde ich zunächst nur an einer Stelle suchen.

      Topgun wrote:

      Wie schon an Pluto25 geschrieben, werde ich als nächstes den Interrupt disable einfügen.
      Wo willst du denn das Int Disable einfügen? Dabei ist ja wichtig, dass du den Rest deines Programmes möglichst wenig beeinflusst.

      Topgun wrote:

      Beim SWStack und HWstack glaube ich nicht an ein Problem. Siehe auch Beitrag vorher
      Hast du verstanden, wofür die verschiedenen Stacks verwendet werden? Du glaubst, dass sie nicht die Ursache sind, wobei dein Fehler sehr gut dazu passen würde.