Senden von Daten über stabile Funkverbindung (433MHz o.ä.)

mwyraz:

Und was sendest Du in 20 Bytes?

6 Byte - ein fester String, der angibt, was ich überhaupt sende (ds1820)
1 Byte trennzeichen
4 Byte Sensor-ID
4 Byte Temperatur (float)
3 oder 4 Byte hängt Virtual Wire für Paketlänge und Checksumme dran.

könnte man sicher halbieren...

Du sendest ja die reinsten Romane!

Die Bytes, die Virtualwire als Startcode, Länge und Prüfsumme sendet mal aussen vor: Du sendest 15 Bytes und tatsächlich benötigt werden nur 3, d.h. Du sendest das fünffache an Daten wie es notwendig ist!

Tatsächlich notwendig wären:

  • ID = 1 Byte
  • Temperatur 2 Byte

Und den Rest packst Du als Tabelle/Programmlogik in den Empfänger, der dann Bescheid weiß.

Mit einer Byte-ID kodierst Du 256 verschiedene Werte. Die 8-Bit könntest Du also verwenden, um 256 verschiedene Sensoren eindeutig zu unterscheiden. Oder wenn Du je 4 Bit für die Codierung der Sensorart und 4 Bit für die Sensornummer verwendest, könntest Du Daten von 16 Arten verschiedener Sensoren senden, mit 16 möglichen Sensoren von jeder Art.

Dass der Sensor mit der Funk-ID 47 ein ds1820 ist und welche Chip-ID er hat, das kannst Du doch in einer Tabelle im Empfänger ablegen, das muß doch nicht jedesmal gesendet werden, weil es sich überhaupt niemals ändert?

Und die Temperatur als float? Wird die Temperatur genauer als auf 0.1°C übertragen? Im Normalfall würdest Du Temperaturen als Integer (2 Bytes) in Zehntel-Grad senden, das wären von -200.0°C bis +200.0°C die Werte -2000 bis +2000 als Integer gesendet. Oder wenn es auf hundertstel Grad genau sein soll, dann Werte zwischen -20000 bis +20000. Und der Empfänger weiß, dass es Zehntelgrade oder Hundertstelgrade sind, die er in den zwei Bytes empfängt und verarbeitet die Werte entsprechend weiter.

Ich finde, Dein Funkprotokoll ist viel zu lang.

Wenn Du Befürchtungen hast, dass in der Nähe Deiner Sensoren andere Sensoren senden, die mit der VirtualWire-Library senden, dann ändere die CRC-Berechnung in Virtualwire leicht ab, z.B. per XOR mit einer individuellen Konstante, so dass Dein Empfänger nur Funkpakete mit gepatchten CRC-Prüfsummenberechnung akzeptiert.