Mains sensor
Inhoud
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).
Als geen naam bekend is voor 1 of meerdere sensoren, worden deze wèl meegeteld voor het aantal.
ID in gebruik (en voor wat)
Graag ook vermelden waar de sensor zich exact bevind, zodat deze bij defecten gevonden kan worden. (Of als we ooit verhuizen en het er weer uit moet allemaal).
ID (hex) | FW versie | Apparaat |
---|---|---|
EEEE | 07-09-2019 | Powerrail (Zit in schakelaar) |
B100 | 07-09-2019 | Testje op schakelklok (Zwarte stekkerkastje) |
BBBB | 07-09-2019 | Licht kleine ruimte, naast toegangs deur (Zit in schakelaar) |
DDDD | 07-09-2019 | Licht kleine ruimte, naast keuken/nooduitgang (Zit in lasdoos die aftakt naar noodverlichting) |
8442 | 07-09-2019 | Ventilatie lashoek/lasersnijders (Zit in schakelaar) |
ID' s reserved for future use: 89AB, A42A, FEE7, AAAA, B335, B005, BEE5, CCCC, 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.
For the CRC8 used; see the [[2]]. Deze is niet compatible met de hardware implementatie.
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 |
0x01 | reserved - zie hieronder. |
0xFF | ON/HI |
- | GARBLE / reserved |
Nota bene: De waarde 0x01 is speciaal - deze komt niet van een node - maar is een rapportage dat een node al meer dan 30 minuten niet gehoord is.
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.)
Aansluiten
230VAC kan worden aangesloten op de gemarkeerde aansluitingen. Zorg voor voldoende veilige inbouw en isolatie - de hele PCB is met het lichtnet verbonden, ook de antenne en de 5V en 12V staat t.o.v. aarde en aardbewoners 230VAC op.
MainsSensor kan ook met 9-12VDC gevoed worden, door dit aan te sluiten op de uitgaande kant van de brugcel, of, als dat makkelijker uit komt: de - op de - van de elco, en de + op de kant van R8 die aan de brugcel zit. C1,R8 en R1,R2 kunnen dan uiteraard onbestukt blijven.
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.
This is now working - use
mosquitto_sub -h space makerspaceleiden.nl -t 'mainsSensors/#'
to see the state `as it is receiveid' (with some caching of rapidly repeating messages):
SIG/2.0 DIA/yVs6COoOfghStbD3ocPE3hLXG2QSaLT1l2ds8yw50Drb7gEvIEvzS8aiQyOyfFFKtryFiHkNcQKqN1PXDw== 001571489580 update 0xEEEE 0xFF SIG/2.0 6Or/TzVF1CFz0Y7IweC38ypNmWA1SeukNIzOIGZQyUHz3bMcqTq5oPvRZPyPWyyQnrIf8Roc45cwBrQIj44sBg== 001571489583 update 0xB100 0xFF SIG/2.0 rnlLvNK+niGEVmV/YsyCAMxVHtk3V9nfgJLTaXP4hig6dPAQRDL0eF/SW4H0sWt3cdVyKh9y9s52xwRSG6GuBQ== 001571489652 update 0xB100 0xFF SIG/2.0 dFPOtBxNwzoxd9jqbGnbKvslPis2XSOOukurXXGxWm02KIIySzItnc+s3eN7h+9hB8QFpCSI8WcL0UJQ5pCkCg== 001571489686 update 0xB100 0xFF SIG/2.0 lOCHGSdatRj2ddGpvp49JNBloqavBY/+SH0age3ZWPGj+7NWM0yBtXdy4RTdin7EBsRXSEyRbMw9WPjhOxetCw== 001571489720 update 0xEEEE 0xFF SIG/2.0 7kdRVn1H/jujOljN9yRp7mSINawhETQr63kUnOBgkPvkIintIwLD+MaDch5GzdhUyKF/QJSMQ0hCNzgv+GYCBA== 001571489790 update 0xB100 0xFF SIG/2.0 zkP5KHWiadInvKh31CTU5xodTsZltYYItUMB4VlNFbVA59uYfgzIccjUGZwTkKvkcDn9gM1hE2Wy4FQdCOBoDQ== 001571489832 update 0xEEEE 0x0 SIG/2.0 PJcQ+0rcSVg0hQOQg0ThVDdxfM6CnumWYSQfX7Z0zLrHfdfxCY1r/gfSS+RbMgVdTTFtJfAN6qH0Wz1Cnp7YAw== 001571489841 update 0xEEEE 0x0 SIG/2.0 PJcQ+0rcSVg0hQOQg0ThVDdxfM6CnumWYSQfX7Z0zLrHfdfxCY1r/gfSS+RbMgVdTTFtJfAN6qH0Wz1Cnp7YAw== 001571489841 update 0xEEEE 0x0 SIG/2.0 +LoUxSPDeABNZ5IpshEXpGYA7m4/1GWmnOrliDdNCUBLKduyJ4WZe1sy6iI00kN3bmE/pXeHmpVVU6ycZ3qUDg== 001571490724 update 0xB100 0x1 SIG/2.0 0j4YjW9CNDmRsZKt1OrAbZtGeaN2Chc+G5UD2JlYTrTNqzBcSewlWvLcapeyqZnJaaiKFqX4w9fLWeAEOMzaAQ== 001571490741 update 0xEEEE 0x1
Bovenstaande sequence laat device 0xEEEE en 0xB1000 eerst `aan' zien (0xFF); en dan rapporteert 0xEEEE dat ie uit is (0x0) - drie maal (in werkelijkheid vaker - maar we laten van identieke berichten die snel na elkaar komen er maar één zien).
En even later zien we dat zowel 0xEEEE als 0xB1000 al meer dan 30 minuten niet gehoord zijn (de 0x1).
kastje op de deur
Het zwarte kastje op de deur heeft geen mqtt. Via usb (115200 8n1) kan worden meegekeken met de ontvangen berichten en kunnen nieuwe ID’s aan namen gekoppeld worden met “setname ID naam”. Dus b.v. “setname 0x8442 ventilatie”. Als het gelukt is wordt dit bevestigd, anders volgt een foutmelding. Doordat de ontvangen berichten tussendoor komen is dit niet heel overzichtelijk, let dus goed op (of koppel het ontvangertje af, maar let op waar de draadjes zaten en plaats ze correct terug).
demo, foto' s, achtergrond
https://www.eluke.nl/2019/09/12/mainssensor/
Test wat er gebeurt mocht C1 onverhoopt in sluiting gaan (is een 630V condensator, kan dus tegen netspanning, maar toch): https://www.circuitsonline.net/forum/view/message/2106626#2106626