Mains sensor

Uit MakerSpace Leiden
Versie door Lucas (overleg | bijdragen) op 12 sep 2019 om 10:23
Ga naar: navigatie, zoeken


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)

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, B005, BEE5, CCCC, DDDD, 8888

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 startconditie, gevolgd door 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].

De startconditie is 4*halfbittime (tussen de 750 us en de 1.2 ms) hoog, 4*halfbittime laag. Het eerste bit van het ID is "1", waarmee het einde van de startconditie gedetecteerd wordt.

START 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

Een "HI" bericht wordt 4x achter elkaar verstuurd met 3ms ertussen, elke 30s. Een BYE bericht wordt verstuurd na het wegvallen van de voeding, en maximaal 2 seconden lang herhaalt (Of tot de bufferelco leeg is, whichever comes first). Als de voeding binnen deze periode terugkomt, wordt de microcontroller na de 2 seconden gereset. (Technische achtergrondinformatie: Het wegvallen van de voeding wordt met een pin change interrupt gedetecteerd en er is niet genoeg plek op de stack om een nette context save / restore te doen. Dat is gelukkig ook niet nodig, dus is het een "naked" ISR (geen context save/restore) en wordt de WDT gebruikt om de avr te resetten, door deze op moment dat er nog voeding is op 2s in te stellen.)

test setup

A unit; ID=0xB100 is plugged in on a timer - on from the morning till 11-ish; with short off pulses a few times during the day.

A second unit; ID=0xEEEE - connected to the electronics on/off (Powerrail - so central tables in the small room and the electronics bench and its sidetables excluding the UltiMakers).

This servers to test a receiver under construction by dw.