Beiträge von Hajulied

    Moin,

    nochmals ganz herzlichen Dank für Deine Mühe.

    Meine Lösungsversuche sind meist eher etwas laienhaft und nicht so ganz "python-konform".

    Aber ich verstehe sie und kann dann auch etwas anpassen.

    Bei diesem Projekt gehe ich jetzt als Zwischenschritt dazu, meine Daten via MQTT zu senden und habe eine Zwischenspeicherung auf einer SD-Karte eingefügt. So ist bei einem Neustart des Programms noch ein annähernd richtiger Zählerstand auf der SD-Karte. Bei zu starken Abweichungen schalte ich den ESP aus, stecke die SD aus , speichere aktuellen Stand darauf und starte den ESP neu. Nach einigen Tagen Probebetrieb läuft das Ganze zuverlässig, der Reed-Schalter prellt nicht und der Zählerstand stimmt. Vielleicht könnte ich die SD-Karte auch via "WebRepl" ändern? Das muss ich mal recherchieren.

    Hans-Jürgen

    Moin und vielen Dank für die viele Mühe und Zeit.

    Ich möchte nicht unhöflich sein, aber der Vorschlag übersteigt mein Know-How bei weitem :( .

    Aber ich versuche, ihn zu testen und bestmöglich zu verstehen:

    - aiorepl.py heruntergeladen und installiert.

    - rom2name ist sicher der richtige Weg, aber in meinem Programm lasse ich mir die Daten der Sensoren ausgeben und trage sie dann ein. Normalerweise ändere ich die Konfiguration ja nicht, insofern könnten die "statisch" drin bleiben und ich brauche dann nicht die Überprüfung, ob ein Sensor vorhanden ist.

    - in 114 bekomme ich einen Fehler, den ich nicht verstehe (und deshalb keine Änderungen ausprobieren kann)

    Code
                   if bytes(rom) not in self.rom2name:
                        print(f"Unbekannten Sensor gefunden. Ignoriere '{rom}'.")
                        continue
                    
         114       setattr(self, self.rom2name[rom], round(sensor.read_temp(rom), 1))

    hier der Fehler

    Code
    Starting asyncio REPL...
    --> Sensoren: [bytearray(b'(\xffd\x0e\x7f\\0g'), bytearray(b'(\xffd\x0e\x7fh\xaf!'), bytearray(b'(\xffd\x0e}p\x1e\x98')]
    
    --> Task exception wasn't retrieved
    future: <Task> coro= <generator object 'start' at 3ffd2db0>
    Traceback (most recent call last):
      File "asyncio/core.py", line 1, in run_until_complete
      File "<stdin>", line 114, in start
    TypeError: unsupported type for __hash__: 'bytearray'

    Bitte denke daran, dass ich beim nächsten Fehler wieder auf dem Schlauch stehe. Deswegen würde ich es sehr verstehen, wenn Du nicht noch mehr Zeit investieren möchtest.

    LG

    ich habe das vollständige Programm angehängt. (Die Kommentare und print Befehle erleichtern mir die Fehlersuche und werden später gelöscht.) Bei Unterbrechung des ESP behelfe ich mir damit, dass ich den aktuellen Wert des Zählers eintrage und dann wieder starte.

    mqtt ist eine gute Idee. Auf einem meiner Raspis läuft probeweise ein mqtt broker, mit dem ich andere Geräte verbunden habe. Ich weiß zwar, dass man mqtt in zwei Richtungen nutzen kann, aber das habe ich noch nicht ausprobiert.

    Moin

    Ich betreibe einen kleinen Webserver mit einem ESP32 in unserem Heizungsraum. Er liest verschiedene Temperaturen aus und berechnet den Gasverbrauch über einen Impulsgeber. Beim Start des Programms muss ich den Startwert des Gaszählers eingeben. Das Programm zählt dann die Impulse hinzu und gibt die Werte auf einer Webseite aus.

    Meine Frage:

    Wie kann ich den errechneten Zählerstand (Zeile 24) über WLAN bei dem laufenden Programm anpassen / ändern? Das kann notwendig sein nach einem Stromausfall oder wenn er sich "verzählt" hat.

    Vielen Dank schon jetzt

    Hans-Jürgen

    Moin,

    Du schreibst "mehr schlecht als recht..." bei der Kombination 8266 und nrf24xx.

    Empfehlenswert ist es jeden Fall "AhoyDtu" auszuprobieren. Läuft bei mir seit Monaten fast fehlerfrei und ist sehr komfortabel. Neben der Anzeige der Livedaten kann insbesondere die Ausgangsleistung des HM eingestellt werden. Dazu hat es eine mqtt Schnittstelle. Auf github gibt eine gute Doku und Support.

    Es reicht ja nicht, den nrf am raspi zu betreiben, du musst ja auch noch das Protokoll des HM entschlüsseln und entsprechend den raspi programmieren. Das würde ich mir nicht antun.

    Gruß Hans-Jürgen

    Moin,

    die Fehlermeldung lautet jetzt(ich habe wieder print eingefügt). Sie erscheint, sobald die Webseite aufgerufen wird.

    Code
    bytearray(b'(\xffd\x0e\x7f\\0g')
    23.375
    Traceback (most recent call last):
      File "<stdin>", line 121, in <module>
      File "<stdin>", line 112, in main
      File "<stdin>", line 66, in get_website
    TypeError: can't convert 'NoneType' object to str implicitly

    ist die if Abfrage so richtig?

     for key, value in POSITION_TO_SENSOR.items():
    position_to_temperature[key] = temperature if rom == key else None

    .... das Byte-Array für einen Sensor hatte ich angepasst. Für meine Tests habe ich nur einen Sensor angeschlossen, In der finalen Version benutze ich 4 Sensoren mit den angepassten Arrays .

    Hier die Ausgabe:

    ich habe noch nicht verstanden, warum das Design der Website geändert werden soll. Ich brauche sie nur als Hilfsmittel für das periodische Auslesen mit einem Raspi per WLAN. Dabei greife ich auf die festen Positionen der Werte zu, nicht über "parsen". Die bisherige Version hat hier gut funktioniert.

    hier die Ausgabe, habe wieder eine print - Anweisung eingefügt:

    bytearray(b'(\xffd\x0e\x7f\\0g')

    27.875

    Traceback (most recent call last):

    File "<stdin>", line 137, in <module>

    File "<stdin>", line 128, in main

    File "<stdin>", line 67, in get_website

    ValueError: need more than 0 values to unpack

    es scheint, als läge der Fehler in der darauf folgenden For-Schleife:

    Moin,

    Deine Idee finde ich grundsätzlich gut.

    Da ich nur sehr wenig Kenntnisse über mpy habe, nehme ich mir immer erst eine Baustelle von mehreren vor, versuche sie zu lösen und widme mich dann der nächsten. Darunter leidet zwar für einen Profi die Strukturerwartung, aber mir hilft es ein wenig.

    Bei dem vorliegenden Script taucht folgender Fehler auf:

    Code
    24.1875    # habe ich eingefügt, um zu prüfen, ob die Definition aufgerufen wird 
    Traceback (most recent call last):
      File "<stdin>", line 120, in <module>
      File "<stdin>", line 111, in main
      File "<stdin>", line 50, in get_website
    ValueError: need more than 0 values to unpack
    
    der Fehler bezieht sich auf folgende Zeile :
    vorlauf, ruecklauf, aussen = position_to_temperature