Mains sensor: verschil tussen versies

Uit MakerSpace Leiden
Ga naar: navigatie, zoeken
(berichtstructuur)
(berichtstructuur)
Regel 33: Regel 33:
  
 
== berichtstructuur ==
 
== berichtstructuur ==
De berichten die op 433 MHz worden uitgezonden zijn manchester encoded. Elk "1" bit is dus "10", elke "0" is "01". Hierop werkt de data slicer van de 433 MHz ontvanger het beste, omdat het signaal ongeveer 50% dutycycle heeft. De bittijd is ongeveer 200 a 300 us, dus elke groep van "10" of "01" is dus zo'n 600 us.
+
De berichten die op 433 MHz worden uitgezonden zijn [[https://en.wikipedia.org/wiki/Manchester_code|manchester encoded]] volgens de orginele G.E. Thomas methode (dus '''niet''' de IEEE 802.3 methode die in veel bibliotheken zit) . Elk "1" bit is dus "10", elke "0" is "01". Hierop werkt de data slicer van de 433 MHz ontvanger het beste, omdat het signaal ongeveer 50% dutycycle heeft. De bittijd is ongeveer 200 a 300 us, dus elke groep van "10" of "01" is dus zo'n 600 us.
  
 
Het bericht bestaat uit een 16 bits ID, een 8 bits bericht, en een 8 bits CRC. Dit wordt dus verzonden als 64 bits na manchester encoding. De crc is berekend over het ID en bericht voordat dit encoded is. Het bericht wordt verstuurd met het meest significante bit eerst (MSB first), en ook de bytevolgorde is MSB first.
 
Het bericht bestaat uit een 16 bits ID, een 8 bits bericht, en een 8 bits CRC. Dit wordt dus verzonden als 64 bits na manchester encoding. De crc is berekend over het ID en bericht voordat dit encoded is. Het bericht wordt verstuurd met het meest significante bit eerst (MSB first), en ook de bytevolgorde is MSB first.
 +
 +
The CRC16 used is the ANSI Polynomal version; see the [[https://www.nongnu.org/avr-libc/user-manual/group__util__crc.html|source]] -- known als [[https://en.wikipedia.org/wiki/Cyclic_redundancy_check|Bisync, Modbus, USB, ANSI X3.28, SIA DC-07, many others; also known as CRC-16 and CRC-16-ANSI]].
  
 
{| class="wikitable"
 
{| class="wikitable"

Versie van 8 sep 2019 om 12:31

Start with the "Why?"

Doel: Monitoren of een apparaat nog aan is, als hulpmiddel bij de afsluitronde om alles wat uit moet uit te schakelen.

Purpose: Monitor if a device is still on, as an aid at the closing round to power off everything that needs te be off.

Expliciet NIET bedoeld als nagging robo-nanny die je thuis nog mailt dat iets aan staat, waarvoor je dan weer terug zou moeten fietsen. Er komt dus een schermpje bij de deur.

Hoe?

Kleine zuinige sensortjes in apparatuur, werkend op 9 - 12 VDC of 230 VAC, die via 433 MHz een uniek ID uitzenden elke halve minuut. Tevens wordt bij uitschakelen een bericht verzonden dat de sensor wordt uitgeschakeld (Op lading in een bufferelco kan na uitschakelen het bericht worden verstuurd).

De sensortjes zijn gebaseerd op een 433MHz zendertje en een attiny10. Ze gebruiken ongeveer 0.15 W. (De meter knippert tussen de 0.1 en 0.2 en is eigenlijk niet geschikt voor dergelijk lage vermogens). Schema en software zijn te vinden op [1]

Ontvangstkant houd van ontvangen ID' s de status bij: Aan of Uit. Als een ID langere tijd (1.5 minuut) niet gezien wordt, wordt aangenomen dat het "Uit" bericht gemist is, maar dat het apparaat toch uit staat. Normaal gesproken wordt het "Uit" bericht gebruikt om zonder wachttijd het apparaat als "uit" te markeren.

Het schermpje bij de deur toont het aantal apparaten-met-een-sensor dat nog aan is, en de namen van deze apparaten, geen ID's. (In de ontvanger wordt dus een vertaling gemaakt).

ID in gebruik (en voor wat)

Er zijn nog geen mainssensor geplaatst. Onderstaand is een planning.

ID (hex) FW versie Apparaat
EEEE 07-09-2019 Powerrail
B100 07-09-2019 Testje op schakelklok

ID' s reserved for future use: 89AB, A42A, FEE7, 8442, BBBB, AAAA, B335.

Nieuwe ID' s maken?

ID' s moeten beginnen met een "1" , dus het eerste nibble moet een 8,9,A,B,C,D,E of F zijn.

berichtstructuur

De berichten die op 433 MHz worden uitgezonden zijn [encoded] volgens de orginele G.E. Thomas methode (dus niet de IEEE 802.3 methode die in veel bibliotheken zit) . Elk "1" bit is dus "10", elke "0" is "01". Hierop werkt de data slicer van de 433 MHz ontvanger het beste, omdat het signaal ongeveer 50% dutycycle heeft. De bittijd is ongeveer 200 a 300 us, dus elke groep van "10" of "01" is dus zo'n 600 us.

Het bericht bestaat uit een 16 bits ID, een 8 bits bericht, en een 8 bits CRC. Dit wordt dus verzonden als 64 bits na manchester encoding. De crc is berekend over het ID en bericht voordat dit encoded is. Het bericht wordt verstuurd met het meest significante bit eerst (MSB first), en ook de bytevolgorde is MSB first.

The CRC16 used is the ANSI Polynomal version; see the [[2]] -- known als [Modbus, USB, ANSI X3.28, SIA DC-07, many others; also known as CRC-16 and CRC-16-ANSI].

IDH IDL MSG CRC
// On the wire packet structure of the v2.00 packets.
typedef struct __attribute__((__packed__)) MainSensorPacket_v2_00 {
    union { 
       struct { 
            uint8_t id8_high;
            uint8_t id8_low;
       };
       uint16_t id16; // in network order
    };
    uint8_t msg;
    uint8_t crc;
};
} MainSensorPacket_v2_00_t;

typedef enum { 
    MSG_OFF = 0x00,
    MSG_ON = 0xFF,
} messages_t;


Valide berichten kunnen zijn:

MSG Meaning
0x00 OFF/BYE
0xFF ON/HI
- GARBLE / reserved