Feinstaubsensor richtig ansprechen

  • Hallo Forum,

    Ich möchte den PM-Feinstabsensor SDS011 der Firma NOVA auslesen. Es gibt es im Netz Skripte in Python. Problem ist, dass ich das Programm nicht verstehe und der Sensor via TTYS0 angesprochen werden soll. Hier die Beschreibung zum Protokoll

    Aber wie spreche ich den Sensor an?

    Mit String’s (zb: "AA"), hex (zb: 0xAA) oder bytes (zb: \xAA) ??

    Beispiel:

    TypeError: unicode strings are not supported, please encode to bytes: 'ª´\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ÿÿ\x00«'

    Wäre schön, wenn mir mal jemand das Grundsätzliche erklären könnte.

    Grüße

  • Ich würde mit der allgemeinen Abfrage beginnen:

    1)Needs all sensor response:Send command:

    AA B4 04 00 00 00 00 00 00 00 00 00 00 00 00 FFFF02AB

    Die Daten sind als Hexwert zu interpretieren und binär zu senden. Ich bin nicht sicher, ob Du in Python einen String mit 0x00 befüllen darfst: In C würde das bedeuten, dass der String zu ende ist...

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

  • In Python kenne ich mich nicht so aus aber das könnte passen, zwei Werte hast Du verändert:

    inhalt = b'\xAA\xB4\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x02\xAB'

    Am besten mal probieren...

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

  • der erste Wert ist der Befehl "was tue ich" und der Zweite ist das sich ergebende Prüfbit.
    Nach ersten Versuchen sehe ich von einer String-Erzeugung durch das Programm ab, weil hier diverse Umwandlungen vorgenommen werden müssen.
    Das gebe ich mir (akktuell) nicht. Ansonsten scheine ich mit dieser Variante zurecht zu kommen.

  • Angefangen und die Lust verloren.


    Erst mal vorweg sollte man denjenigen 24/7 auspeitschen, der sich das schwachsinnige Protokoll ausgedacht hat.

    Ich habe schon mit einigen Protokollen gearbeitet, aber das ist ein totales Durcheinander.


    Im Endeffekt muss eine Funktion, die vom Sensor die Antworten bekommt, zwischen den Arten der Antworten unterscheiden können.

    Das habe ich nicht implementiert.


    Wichtig ist, dass serial.write() bytes erwartet. Wenn man bytes z.B. in eine Liste packt, bekommt man ints.



    Vielleicht hilft es dir weiter.


  • Es gibt es im Netz Skripte in Python. Problem ist, dass ich das Programm nicht verstehe und der Sensor via TTYS0 angesprochen werden soll.

    Welche Skripte hast du denn schon ausprobiert? Das hier (https://github.com/ikalchev/py-sds011) sieht am zuversichtlichsten aus und müsste man dort nicht einfach "TTSY0" eintragen, also sensor = SDS011("/dev/tty0", use_query_mode=True)?


    Hier sind noch andere Python-Skripte, vielleicht ist ein passendes dabei: https://github.com/search?l=Py…=sds011&type=Repositories