Benutzer-Werkzeuge

Webseiten-Werkzeuge


feinstaub

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
feinstaub [2021/04/27 12:53] varnholtfeinstaub [2021/04/28 09:02] (aktuell) varnholt
Zeile 21: Zeile 21:
  
 Ach verflixt... geht natürlich nicht. man muss es in python2 machen, sonst kommen Fehlermeldungen der Art: **TypeError: unicode strings are not supported, please encode to bytes** Ach verflixt... geht natürlich nicht. man muss es in python2 machen, sonst kommen Fehlermeldungen der Art: **TypeError: unicode strings are not supported, please encode to bytes**
 +
 +Damit es in python3 geht, muss man das, was man an die serielle Schnittstelle schickt, erst in ein Byte-Array wandeln. Dann kann man natürlich nicht wie bei Springs mit + concatenieren. Abfragen auf einzelne Zeichen müssen dann natürlich auch wieder entweder als Byte abgefragt werden, oder als Zahl. Hier mal die Änderungen zwischen den beiden Dateien.
 +
 +<code>
 +<     #print(prefix + ' '.join(x.encode('hex') for x in d))
 +<     print(prefix + ' '.join(hex(x) for x in d))
 +    
 +<     ret = bytearray()
 +<     ret.append(0xaa)
 +<     ret.append(0xb4)
 +<     ret.append(cmd)
 +<     for x in data:
 +<         ret.append(x)
 +<     ret.append(0xff)
 +<     ret.append(0xff)
 +<     ret.append(checksum)
 +<     ret.append(0xab)
 +<     #ret = "\xaa\xb4" + chr(cmd) + ''.join(chr(x) for x in data) + "\xff\xff" + chr(checksum) + "\xab"
 +61,62c52
 +<     #checksum = sum(ord(v) for v in d[2:8])%256
 +<     checksum = sum(v for v in d[2:8])%256
 +68,69c58
 +<     #checksum = sum(ord(v) for v in d[2:8])%256
 +<     checksum = sum(v for v in d[2:8])%256
 +74c63
 +<     while byte != b"\xaa":
 +<     #while byte != "\xaa":
 +91c80
 +<     if d[1] == 0xc0:
 +>     #if d[1] == "\xc0":
 +</code>
 +
 +PROBLEM: Schlafen legen des Sensors funktioniert - aber nicht das aufwachen. es wird der korrekte - lange - string gesendet. nach dem wachwerden 'liest' er noch 3 Daten, ohne dass der Ventilator angeht, das war es dann aber. auch im internet nichts gefunden.
 +
 +LÖSUNG: Oh mann, ein paar ser.reset_input_buffer(); der.reset_output_buffer; und ein paar time.sleep(2); nach den Befehlen eingebaut und jetzt geht es - welche die richtigen sind, will ich jetzt gar nicht wissen.
 +
 +Auch die Ausgabe an MQTT hat nicht funktioniert. Es kam wieder das Problem mit bytes:
 +  TypeError: a bytes-like object is required, not 'str'
 +  TypeError: a bytes-like object is required, not 'dict'
 +Und wieder eine Korrektur:
 +<code>
 +    child = subprocess.Popen(cmd, shell=False, bufsize=0, stdin=subprocess.PIPE)
 +    data=json.dumps(jsonrow)
 +    child.communicate(data.encode())
 +
 +    #with subprocess.Popen(cmd, shell=False, bufsize=0, stdin=subprocess.PIPE).stdin as f:
 +    #    json.dump(jsonrow, f.decode())
 +</code>
 +
 +Das Umwandeln der Roh-Werte in AQI macht er mit JavaScript auf [[https://github.com/zefanja/aqi/blob/master/html/aqi.js|dieser Seite]].
 +
 +
 +Weiter geht es dann mit dem ESP32. mehr Infos dazu hier: https://sensor.community/de/sensors/airrohr/
 +
 +Stand April 2021
feinstaub.1619527995.txt.gz · Zuletzt geändert: 2021/04/27 12:53 von varnholt