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 20: Zeile 20:
  
  
-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.1619527983.txt.gz · Zuletzt geändert: 2021/04/27 12:53 von varnholt