433 MHz systeem.     Laatste wijziging 2013-09-25

ReactiesNaar.jpg


In het kort:
Besturing van een aantal aan/uit schakelpunten m.b.v. een 433 MHz zender en een aantal codeerbare stopcontact units. Er kunnen maximaal 16 schakelpunten bediend worden.

Het oorspronkelijke spul bestaat uit een handheld en een aantal contactdozen, aangeschaft bij Conrad.
De handheld met 1 contactdoos is bestelno 646447. Losse contactdozen zijn bestelno 646524.
Er zijn 4 groepen te vormen die elk 4 kanalen kennen.
De handheld kan ingesteld worden op 1 van de 4 groepen, en vervolgens kunnen de 4 kanalen van die groep aan- dan wel uit gezet worden.
Het lijkt dat het IC in de handheld een vrij eenvoudige code levert en het zendertje is een 1-transistor sort-of Collpits oscillator. Het is dus mogelijk om de code met een externe microprocessor te genereren om automatisch schakelen te kunnen toepassen. Dit is aanvankelijk geprobeerd, maar het werkte niet betrouwbaar.
De versie die hier beschreven wordt laat de handheld grotendeels intakt, en "bedient" de toetsen met een RaspberryPi.  
De contactdozen worden niet gemodificeerd, alhoewel ze wellicht gevoeliger gemaakt kunnen worden met een betere antenne, want dat stelt niet veel voor.

Rimg0301-tmb.jpg
Links de Raspberry Pi, midden de schakelfets en rechts de handzender. Er is een opening gemaakt in het huis van de zender, en de rubberen toetsen zijn verwijderd.
Niet zichtbaar: De batterij, het 12V typedat er bij hoort moet aanwezig zijn. (In een latere versie is er een 12Volt voeding beschikbaar en is de batterij weggelaten. Het bleek dat die toch vrij snel leeg was, een paar maanden. 

De zender gebruikt het IC SC5262  met de 20 pins package en de schakelunits de SC5272-L4 ontvanger.  
Met enig experimenteren en reverse engineering is het mogelijk gebleken om de bediening als volgt te doen:
 - Voor de keuze van de groep wordt 1 van de pins 1 t/m 4 van het IC laaggetrokken.
 - Voor de keuze van het kanaal wordt 1 van de pins 5 t/m 8 laaggetrokken.
 - Voor het zendcommando "aan" wodt pin 16 laaggetrokken
 - Voor het zendcommando  "uit" wordt pin 15 laaggetrokken.
De kanaal- en groepskeuze wordt eerst gedaan, en dan wordt het zendcommando gedurende ongeveer 1 seconde gegeven. Als er meerdere zendcommando's gegeven worden dient er een pauze van ongeveer 1 seconde aangehouden te worden.
Het laagtrekken van de betreffende pins gebeurt met een schakelfet BS170, en er zijn geen pull-up weerstanden nodig.
De GND aansluiting is pin 9, of een daaraan verbonden soldeerpunt. Zie foto, zwarte draad.
 

Rimg0303-tmb.jpg

De schakel fets zijn als volgt aangesloten op de GPIO connector van de Raspberry-Pi:

Functie Pin van IC
 in zender
Draadkleur Pin van GPIO connector GPIO bit
Groep 1 1 bruin 26 7
Groep 2 2 rood 24 8
Groep 3 3 oranje 21 9
Groep 4 4 geel 19 10
Kanaal 1 5 bruin 13 21
Kanaal 2 6 rood 15 22
Kanaal 3 7 oranje 16 23
Kanaal 4 8 geel 18 24
Aan commando 16 blauw 11 17
Uit commando 15 wit 12 18
GND ref 9 zwart 20 n.a.

Met deze indeling zijn de groepen en de kanalen afgebeeld op opvolgende bits in het 32-bit longword van de GPIO controller.
// GPIO 7..10  Group 1..4
// GPIO 21..24  Key 1..4
// GPIO 17 is On
// GPIO 18 is Off  

Refereer ook aan de GPIO-pins:

IOs.jpg

De firmware in de Raspberry heeft de volgende eigenschappen:
- De executable staat in /home/pi/Work als MyTCP.
- Het start automatisch aan het einde van de boot-sequence. Er is daarvoor geen login nodig.
- Als het opstart wordt er vanuit het opstart directory een bestand "settings.txt" gelezen met de timing informatie.
- Dan wordt er een TCP-IP server gestart die continu luistert op poort 4712.
- Ondertussen loopt de routine "ProcessData" die checkt of er een commando uitgezonden moet worden. Elk commando wordt 10 keer verzonden..
- Als er een passend bericht binnenkomt op poort 4712 dan wordt het timing bestand "settings.txt" herschreven en antwoordt de unit met een bericht waarin de actuele tijd staat, zodat je kunt controleren of 'ie nog op tijd loopt.

Merk op dat de Raspberry bij gebrek aan een RealTimeClock tijdens het booten een Network Time Server op het internet bevraagt voor de juiste tijd. De interne klok is mogelijk niet zo nauwkeurig dat die maandenlang correct blijft lopen. Een reboot is zo af en toe aan te bevelen. 

Het instellen van de tijden gaat momenteel (september 2013) met het VB programma Timer433. Daar hoort ook een bestand bij met de eerder gebruikte instellingen.
Voor iedere dag zijn de instellingen eender.


Gebruiksaanwijzing van het PC-programma.
[screenshot komt nog]
In de meest linkse kolom staan de groepen (romeinse cijfers) en kanalen. Je moet het stopcontact voor die functie zo instellen.
De tweede kolom geeft een naam aan het betreffende kanaal. Dit is vrije tekst.
Dan 2 kolommen "Aan" en "Uit"  De velden zijn onderling gekoppeld, zodat een veld meer naar rechts niet eerder kan zijn en een veld meer naar links niet later. Bedenk dat de dagelijkse tijdrekening telt vanaf middernacht. Als een lamp moet branden vanaf 's-avonds 9:00 tot 's-nachts 1:00 moet er komen:
[ screenshot, detail ]
Als er -zoals hier- staat dat het uit moet om 23:59 en weer aan op 00:00 dan gaat het rond middernacht niet even uit. Op andere aansluitende tijden gebeurt dat wel.
Ook gaat het niet weer aan als je vóór 23:59 een kanaal uitgeschakeld hebt met een aparte handzender, of uit als het toen aangezet hebt. 

De volgende 4 kolommen hebben de titels
- Timer.  Dit kanaal wordt bediend door de timer
- Aan: Dit kanaal is/gaat aan
- Uit: Dit kanaal is /gaat uit
- Licht: Dit kanaal wordt bediend door het lichtnivo buiten. Het lichtnivo waarbij in- of uitgeschakeld wordt is in te stellen in de volgende kolommen.
  Deze functies zijn nog niet geimplementeerd. Het vereist een buitenlichtmeter die door de RasPi en het PC-programma bevraagd kan worden.

De laatste kolom geeft aan of het betreffende kanaal nu aan of uit is. LetOp!  Dit is volgens de tijd van de PC waarop dit programma draait. Die kan verschillen van die van de RasPi.

Het verzenden van de instellingen gaat met het tweede window "TCP-Client" Je kunt de gegevens verzenden via het locale netwerk, of via het internet vanaf waar ook ter wereld. Je moet daarvoor wel een NAT instelling op je internet modem maken.
 

Downloads:
Firmware voor de RaspBerry-Pi. Deze is ontwikkeld en gecompileerd met de Hertaville Crosscompiling Toolchain op een Ubuntu LinuxBox. Dit is de enig benodigde file, de toolchain is ingesteld zoals in de Hertaville instructies.
PC programma + executable. Dit draait onder M$ Windows, en wellicht onder Wine op een Linux-box (nog niet getest) In beide gevallen is de M$ Visual Basic 6 Runtime omgeving nodig.  
 

Nog doen:
- Maak een web-interface voor de timerinstellingen, zodat het VB programma kan vervallen.
- Maak mogelijkheden om bijv. doordeweeks, weekend, incidentele afwezigheid en vakanties afzonderlijk te kunnen programmeren.
- De C-code kan wat opgeschoond en beter geformatteerd en bekommentarieerd worden.
- Check / Zorg dat er op gezette tijden een time-server aangeroepen wordt zodat de interne klok op tijd blijft lopen.
- Maak LAN en WAN IP's en poortnummer configurabel via een "Settings" menu.
- Zorg voor een interface met een ding dat het licht buiten meet. Implementeer dan de mogelijkheden om bij een bepaald lichtnivo lampen aan- of uit te schakelen. Er is al iets voorbereid.