Home automation met Pimatic

Door Koffie op woensdag 15 oktober 2014 20:39 - Reacties (42)
Categorie: -, Views: 25.381

Al enkele keren heb ik wat posts gemaakt over home automation met een Raspberry Pi. In het begin gebruikte ik hiervoor Pilight, maar inmiddels ben ik bijna helemaal overgestapt op Pimatic.
Het bijna gedeelte zal ik straks uitleggen ;)

Zoals gezegd: voorheen gebruikte ik pilight als service voor het aansturen van diverse RF devices. Aansturing van dit alles gebeurde met pimatic.
Er waren al wat experimenten om RF rechtstreeks aan te sturen vanuit pimatic, maar sinds begin deze week kan dat ook rechtstreeks via een RF 433 sender en receiver op de GPIO pinnen.

De eerste test zijn veelbelovend te noemen, op wat kleine problemen met KaKu na werkt zenden en ontvangen vlekkeloos. Zonder arduino of filter.
Wanneer mijn KaKu deurcontact goed functioneert, kan ik pilight volledig loslaten en alles via pimatic laten lopen, wel zo makkelijk :Y)

Wat kan pimatic dan wel niet allemaal ?
De allergrootste kracht (en de reden van mijn overstap) is het zogenoemde rules systeem. Door middel van rules kun je pimatic van alles laten uitvoeren - of juist niet :)
Een simpel voorbeeld

code:
1
IF it is after 08:00 THEN turn lamp1 on



Cool he?! Je kunt nu niet alleen je lampen via je browser aan of uit zetten, je kun het nu ook schedulen. Nog leuker word het om allerlei randvoorwaarden aan je rules te koppelen:

code:
1
IF lamp1 is turned off THEN turn lamp2 off


Oftewel : wanneer ik de ene lamp uitzet, ze dan de andere ook uit.

Plugins
Het tweede ijzersterke punt van pimatic is het plugin systeem.
Pimatic beschikt inmiddels over een aardig groeiende lijst met plugins die allemaal ook weer in de rules gebruikt kunnen worden.
Een greep van de plugins die ik gebruik:
• Cron (voor het kunnen sturen op basis van tijd)
• GPIO (voor het rechtstreeks aansturen van een GPIO, of kijken of deze wel of niet verbonden zijn)
• pilight (Vrijwel alle devices van pilight kunnen geïmporteerd en bestuurd worden)
• ping (is een device wel of niet bereikbaar?)
• pushover (Stuur berichtjes middels de pushover API naar je telefoon)
• Mail (Verstuur mail)
• shell-execute (uitvoeren van CMD opdrachten)
• sunrise (Een skala aan zonsop- en ondergang momenten op basis van locatie
• sysinfo (monitor CPU temp, CPU load, memory load, disksize en pimatic DB size)
• weather (Weersinformatie en voorspelling).

User en role systeem
Sinds enige tijd beschikt pimatic over een user en role systeem. Je kunt een oneindig aantal users defineren, samen met een oneinding aantal roles.
Vervolgens koppel je een user aan een role:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
      "name": "resident",
      "permissions": {
        "pages": "read",
        "rules": "read",
        "variables": "read",
        "messages": "read",
        "events": "read",
        "devices": "none",
        "groups": "none",
        "plugins": "none",
        "updates": "none",
        "controlDevices": true,
        "restart": false
      }


Zoals je ziet kun je dus door middel van een role een gebruiker behoorlijk afschermen van allerlei functies.

Cool, hoe ziet dat er nu uit?
Op dit moment ziet mijn pimatic er zo uit:

http://zooi.oostindie.com/images/396pimatic01_tn.jpg

Door het aanmaken van diverse pages (tabbladen) en groups (verdelingen over de pages) kun je alles naar eigen inzicht rangschikken.
Het mooie is ook dat een device niet zichtbaar op een pagina hoeft te staan om aangesproken te kunnen worden.
Een device is bekend (en aanspreekbaar) binnen het pimatic systeem, maar is dan nog standaard nog niet zichtbaar. Een device kan ook op meerdere pages geplaatst worden. Zo zou je dus voor elk vertrek een pagina kunnen maken, voorzien van de locatiegebonden devices. En vervolgens een page genaamd 'Favorieten' waar je de meest gebruikte devices bij elkaar zet :)

Vertel nog eens meer over die rules?
Het mooie van de rules is, dat je diverse plugins en devices kunt gebruiken. Zo heb ik een rule om mijn kachel naar 18 graden te zetten na 10 uur 's avonds, echter niet zolang de verlichting nog in gebruik is:

code:
1
IF it is after 22:00 and beneden-thermostaat-runprogram is on and pilight-Beneden-dressoir is off THEN $BenedenTemperatuurInstelling = 18


Dit vanuit de gedachtegang dat als de verlichting nog aan is, ik waarschijnlijk nog niet naar bed ben (en dus niet in de kou wilt zitten)

Het wil soms wel eens voorkomen dat per ongeluk de voeding van mijn draadloze temperatuur sensor losgetrokken word. Om nu te voorkomen dat pimatic ten onrechte denkt dat het heel lang te koud of te warm is, heb ik een rule gemaakt die mij hiervoor waarschuwt :

code:
1
IF temperature of pilight-thermostaat-woonkamerwireless was not updated for 1 hour THEN push title:"Temperature sensor error" message:"Woonkamer wireless is not update since 1 hour" and $BenedenStopWarmte = $BenedenStopWarmte + 1


Als extra veiligheid word de variabele $BenedenStopWarmte opgehoogd met 1. Er zit namelijk een beveiliging in het aansturen van de kachel, Zodra deze variabele hoger is dan 0 word er onherroepelijk gestopt met verwarmen en zal deze ook niet langer verwarmen, totdat deze variabele minstens 5 minuten 0 is.

Een andere rule die zorgt voor het ophogen van deze variabele:

code:
1
IF contact of pilight-Beneden-tuindeur = opened THEN $BenedenStopWarmte = $BenedenStopWarmte + 1



Met dus de volgende rule om te zorgen dat de kachel per direct gestopt word:

code:
1
IF $BenedenStopWarmte > 0 and warmte is on THEN turn warmte off



Waar gebruik jij zelf pimatic nu allemaal voor?
Zelf heb ik 2 onafhankelijke Raspberry Pi's draaien. Eentje in de meterkast voor het aansturen van alle verlichting en de kachel.
Deze leunt nu nog op pilight, maar zal deze week waarschijnlijk volledig op pimatic gaan draaien.

Een tweede Raspberry Pi hangt in de schuur om alles wat maar met het zwembad te maken heeft aan te sturen.
Voor het dagelijks laten draaien van de filterpomp en zoutelectrolyse hoef ik niets meer te doen, dit gaat volledig automatisch. Ook aansturing van verwarming gebeurt via deze installatie, op basis van 2 temperatuursensoren in de waterleidingen.

Hoe installeer ik pimatic?
Installatie is relatief eenvoudig en word hier besproken

Na installatie kun je de homeduino plugin installeren met het commando sudo npm install pimatic-homeduino
Onder de sectie plugins in je config.json plaats je dan de volgende config:

code:
1
2
3
4
5
6
7
{
      "plugin": "homeduino",
      "driver": "gpio",
      "driverOptions": {},
      "receiverPin": 16,
      "transmitterPin": 15
    }



Waarbij de pin nummering op basis van WiringPi nummering is.

Het gaat te ver om nu alles voor te kauwen in deze blog. Kijk eens rond op de site van pimatic of de issues pagina op github: https://github.com/pimatic/pimatic/issues

Mocht je ergens vragen over hebben, stel ze dan daar of hier in de comments op deze blog maar gelieve geen PM's te sturen met vragen ;)

Update: nog wat coole shizzle die je pimatic kan doen

Mijn zwembad heeft een LED RGB lamp met iets van 15 verschillende standen. Wanneer je de lamp uit zet en binnen x seconden weer aan, is dat een teken voor de lamp om naar het volgende programma te schieten. Zou je langer dan x seconden wachten, blijft hij gewoon bij het huidige programma.
Van begon af aan had ik dus al een knop 'volgend programma' die er voor zorgde dat de lamp uitging en na 1 seconde weer aan.
Later heb ik dit uitgebreid door er een variabele aan te koppelen. Elke keer als er op die knop gedrukt word, word de variabele met +1 opgehoogd.
Een andere rule zorgt er voor dat deze variabele nooit meer dan 15 kan worden, en dus na 15 weer naar 1 schiet.

Van de 15 mogelijke standen heb ik 2 favorieten : volledig wit en een stand waar de lamp heel rustig van kleur naar kleur verloopt.
Vervolgens 2 knoppen gemaakt "wit" en "kleuren programma". Wanneer 1 van die knoppen word ingedrukt, zal een rule net zo lang de lamp aan en weer uit zetten tot het gewenste programma is bereikt (lees: de variabele de juiste inhoud heeft).




Dit is nog een ouder filmpje waar het aansturen van een LCD met python ging, inmiddels kan pimatic rechtstreeks een LCD aansturen: op basis van rules kun je dus verschillende tekst laten zien.



Wanneer pimatic ziet dat er op de knop gedrukt word, stuur ik een python (pi-blaster) script aan die met soft PWM de LED ring van die kop aan of uit zet. Vervolgens word er nog een status info op het LCD gezet.

Building the dream

Door Koffie op donderdag 3 juli 2014 16:06 - Reacties (34)
Categorie: -, Views: 8.868

In de afgelopen weken is een langgekoesterde wens van ons gerealiseerd : het bouwen een eigen zwembad :Y)

Het bouwen van een zwembad en alles wat daarbij komt kijken is iets wat je niet zomaar even doet. Er is veel tijd gegaan in het uitzoeken, afwegen, rekenen en plannen.
Voordat je überhaupt ook maar 1 schep in de grond zet zul je moeten beslissen wat voor type bad je nu eigenlijk wilt hebben.
Grofweg zijn er 3 type baden:

Monoblock/polyester kuip
De meest makkelijke manier een om een bad te plaatsen. Vanaf de fabriek word een grote bak/kuip geleverd welke je alleen nog maar 'even' in de grond hoeft te plaatsen.

http://zooi.oostindie.com/images/328Polyester_zwembad_ibiz_tn.jpg

Ovale stalen wand
Voor dit type bad hoef je alleen 2 steunmuren te maken op de beide lange zijden, vervolgens plaats je een stalen wand tussen de muren, waardoor deze vanzelf ovaal zal gaan staan.

http://zooi.oostindie.com/images/145staalwand_tn.jpg

Bouwkundig bad
De term bouwkundig bas is wat divers maar komt er eigenlijk ook neer dat je van scratch af aan een bak/kuip opbouwt. Meestal is dit met grote betonblokken of styropor bouwstenen.

http://zooi.oostindie.com/images/809Styropor_Gerade_03_300_tn.jpg

Een monoblock viel voor ons af vanwege de prijs en het feit dat deze nogal snel omhoog kunnen 'drijven' bij leegstand en hoog grondwater.
Onze eerste keuze was een stalen wand, maar in overleg met de leverancier hebben we hier vanaf gezien. Bij ons hebben we nogal last van grondwater, en waren toch wel bang dat dit een probleem voor de relatief dunne zou kunnen zijn.
Uiteindelijk hebben we dus gekozen voor een bouwkundig bad.
En dan begint het rekenen, wikken/wegen en uitzoeken in het kwadraat :+

De plek waar het bad globaal moest komen wiste we al, maar nu begon het echte meten. Met touwtjes hebben we een rechthoek van 8 x 4 meter uitgezet

http://zooi.oostindie.com/images/9382013_09_01_11_tn.25_tn.40_tn.jpg http://zooi.oostindie.com/images/1442013_09_01_11_tn.28_tn.39_tn.jpg

Het plan was om pas tegen de zomer te beginnen met de bouw, ook om het financiële plaatje op orde te krijgen.
In de tussentijd kon ik mooi beginnen met alle informatie op te slurpen die er maar te vinden was.
Na veel inlezen, nadenken en afwegen kwamen we op het volgende wensenlijstje uit

Zwembad rechthoek 8x4x1.5
Zandkleurige liner
2 mini inbouw LEDlampen
2 extra brede skimmers
2 inspuiters
stofzuigeraansluiting
Graniet randstenen
Zoutelectrolyse
13 kW warmtepomp (zelf uit Duitsland laten komen)

Ondertussen waren we druk bezig met uitzoeken hoe we de bouw aan zouden pakken. In de eerste instantie gingen we voor een DIY project, maar dat is uiteindelijk volledig uitbesteed. We waren toch wel heel erg bang voor grote problemen met het extreem hoge grondwater wat wij hebben.
Omdat we van tevoren al inzagen dat de tuin naar de knoppen zou gaan door al het bouwmaterieel besloten we ook meteen een stuk terras rondom het bad aan te laten leggen.
Na diverse partijen gesproken te hebben, kwamen we uit bij een bedrijf die alles in volledig eigen beheer wilde uitvoeren, terwijl ik alle spullen zou leveren.

We hebben gezorgd dat alle spullen ruim voor de bouw binnen waren, zodat er marge was om spullen te kunnen omruilen of bijbestellen. Het gevolg is wel dat je hele huis vol meuk staat, maar ik vond het toch wel erg fijn om zo alles tijdig te kunnen regelen.

En toen was het dan zover .. de graafmachines arriveerde en de eerste stukken gras vlogen je om de oren :+





Het graven is op een vrijdag begonnen en op zaterdag afgemaakt. Omdat de kleilaag zo vreselijk hard was hebben we halverweg een extra graafmachine laten komen.
Al bij het graven bleek dat het grondwater (gelukkig) reuze mee bleek te vallen. Sterker nog: op de laagste diepte (circa 1.90) hadden we geen grondwater terwijl het hoger (circa 1.50).
Onze conclusie (achteraf) is dat we niet zozeer last hebben van grondwater, maar dat de kleilaag zo dik is, dat het hemelwater er amper doorheen komt.

Na het afgraven van het gat moest er een betonvloer in komen. Na een dag hard werken stond er een bekisting met daarin 2 lagen betonnetten, klaar om gestort te worden.



http://zooi.oostindie.com/images/5412014_06_10_16_tn.32_tn.45_tn.jpg http://zooi.oostindie.com/images/1292014_06_10_16_tn.33_tn.51_tn.jpg http://zooi.oostindie.com/images/3422014_06_10_16_tn.34_tn.24_tn.jpg

http://zooi.oostindie.com/images/6322014_06_10_16_tn.37_tn.54_tn.jpg http://zooi.oostindie.com/images/7602014_06_10_16_tn.42_tn.26_tn.jpg http://zooi.oostindie.com/images/1952014_06_10_17_tn.14_tn.46_tn.jpg

Nu de vloer er lag kon er een begin gemaakt worden aan het opbouwen van de wanden. Zoals gezegd hebben wij gekozen voor een bouwkundig bad met styropor blokken. Deze blokken zijn zeer stevig en stapelen als lego. Wanneer goed geplaatst, kun je de hele muur van bovenaf volstorten met beton.
Na het plaatsen van de muur (maar vóór het storten) kun je alle inbouwdelen in de muur plaatsen (skimmers, inspuiters, lampen, stofzuigeraansluting.





Nu ging het al echt op een zwembad ijken, helemaal na het dichtgooien van de wanden en voorzichtig uitmeten van de randstenen.



Inmiddels was het minder zomers weer geworden, en dat begon toch wel invloed te hebben op de planning.
Halverwege het aansmeren van de vloer begon het zo hard te regenen dat we alles er weer uit konden scheppen. Gene leuk klusje en zonde van het werk en uren. Direct een tentje erop gebouwd en het maar afgemaakt met egaline.

De volgende was het zover: deze dag zou de liner (zeg maar de folie waar het water er in zit) gaan, spannend!
Het plaatsen van de liner ging sneller dan verwacht en zonder noemenswaardige problemen.



http://zooi.oostindie.com/images/2350445_1445_tn.jpg

Direct na het inhangen van de liner moet je beginnen met vullen met water. Wanneer je een centimeter of 10 onder het eerste inbouwdeel bent, kun je voorzichtig een opening in de liner snijden en de pakking erop schroeven.

Helaas zat er een lang weekend tussen deze en de volgende werkdag, maar daarna kon gelukkig al het water in 1 dag erin lopen.



Het bad zat nu officieel vol! :Y)

Ondertussen is ook het pomphuis zo goed als klaar, nog wat laatste puntjes op de I om alles via de relais van de Raspberry Pi te laten lopen.

http://zooi.oostindie.com/images/577RaspiPool_tn.jpg

http://zooi.oostindie.com/images/9852014_06_30_21_tn.02_tn.34_tn.jpg http://zooi.oostindie.com/images/6362014_06_30_20_tn.26_tn.27_tn.jpg http://zooi.oostindie.com/images/4602014_06_30_21_tn.01_tn.34_tn.jpg

http://zooi.oostindie.com/images/2452014_06_30_21_tn.01_tn.48_tn.jpg http://zooi.oostindie.com/images/6832014_06_29_14_tn.01_tn.17_tn.jpg http://zooi.oostindie.com/images/3152014_06_29_14_tn.01_tn.38_tn.jpg

Voor de geintresseerden naar hoe de timelapse filmpjes zijn gemaakt: Men neme een Raspberry Pi met camera module, bouw deze in een of ander vogelhuisje en hang deze uit het raam van de slaapkamer van je dochter :P

http://zooi.oostindie.com/images/3912014_06_05_18_tn.41_tn.55_tn.jpg http://zooi.oostindie.com/images/4082014_06_05_20_tn.00_tn.29_tn.jpg

Raspberry Pi met pilight voor noobs deel 2

Door Koffie op zondag 27 april 2014 14:32 - Reacties (29)
Categorie: -, Views: 30.649

Vol goede moed heb ik deel 1 gepost: Koffie's tweakblog: Raspberry Pi met pilight voor noobs deel 1 om vervolgens niets mee te posten. Beetje jammer :P

De reden is eigenlijk zoals zo vaak: ik was veel te druk. Ondertussen heb ik niet stil gezeten met mijn eigen Raspberry Pi project, ook de verschillende software voor aansturen van je domotica is verder ontwikkelt.
Met deze post wil ik de draad toch weer oppakken. Wanneer je deel 1 gevolgd hebt, heb je werkende Raspberry Pi, maar verder nog niets.
Tijd om een breadboard in elkaar te prutsen.

Benodigdheden
Breadboard
433MHz Superheterodyne 3400 RF Transmitter and Receiver link kit
Jumperwires

Al deze onderdelen kun je o,a, bij Nederlandse webshops vinden, maar als je enig geduld op komt brengen ook voor een fractie van de prijs van ebay. Let goed op dat je RF set de juiste frequentie is (433Mhz) en dat het een Superheterodyne is (deze hebben veel beter ontvangst).

Hardware installeren
Zorg ervoor dat je de Raspberry Pi zo voor je hebt liggen dat de GPIO pinnen rechtsboven zitten. De pin linksboven is pin 1, de pin rechtsonder is pin 26.
Maak gebruik van het volgende schema:

http://zooi.oostindie.com/images/842raspberrypi_GPIO_tn.jpg

Pak de zender en receiver en druk deze in je breadboard. Naast elkaar, niet onder elkaar!
Pak nu 2 jumperwires (rood/zwart of rood/blauw) . Plaats de rode op de 5v en de zwarte/blauwe op de 0v/GND van de Raspberry Pi.
De andere kant van de jumperwires steek je in de + en - baan die over de hele breedte van het breadboard loopt.
Vervolgens lus je de + en - vanaf die baan door naar de + en - van de zender en ontvanger (zie beschrijving bij de pinnen op de modules).
Vervolgens moet je alleen nog een jumperwire op de data van de zender en ontvanger plaatsen.
De data jumperwire van de ontvanger plaats je op GPIO 0, de data van de zender plaats je op GPIO 1.

http://zooi.oostindie.com/images/1422014_04_27_13_tn.39_tn.26_tn.jpg

http://zooi.oostindie.com/images/9952014_04_27_13_tn.39_tn.49_tn.jpg

pilight installeren
Op dit moment is pilight 3.0 de huidige stable version, dat is dus ook de versie die we gebruiken.
Breng een SSH verbinding met je Raspberry Pi tot stand, en voer het volgende commando uit: git clone --depth 5 -b master https://github.com/pilight/pilight.git
Mogelijk mis je nog wat onderdelen die pilight nodig heeft, deze installeer je als volgt:
sudo apt-get install dialog
sudo apt-get install cmake

Nu kun je pilight compileren met alle benodigde opties. Ga naar de pilight directory: cd pilight en start de setup: sudo ./setup.sh

http://zooi.oostindie.com/images/399piligt_install1_tn.jpg

In principe kun je alle opties laten voor wat ze zijn, maar persoonlijk zet ik alle protocollen die ik niet gebruik uit,. Door middel van SPATIE kun je een optie aan of uit zetten.
Zorg er voor dat HARDWARE_433_LIRC en WEBSERVER in ieder geval enabled zijn. Wacht tot de installatie klaar is met alle benodigde onderdelen te compileren.

http://zooi.oostindie.com/images/971piligt_install2_tn.jpg

LIRC configureren
Na de installatie moet pilight nog geconfigureerd worden. Het is verstandig om pilight in lirc-modus te gebruiken. In deze modus laat je LIRC alles verzenden en ontvangen. In een later stadium kun je dan overstappen naar een hardwarematig filter welke de CPU van de Raspberry Pi zal ontlasten.
Voor het volgende commando uit: sudo modprobe lirc_rpi gpio_in_pin=17 gpio_out_pin=18. Op deze manier vertel je LIRC op welke GPIO de ontvanger (GPIO 0, BCM pin 17) en zender (GPIO 1, BCM pin 18) zit.
Wanneer dit commando geen foutmeldingen geeft, kun je deze direct in je bootprocedure opnemen. Edit je modules bestand dmv sudo nano /etc/modules en voeg daar de volgende regel aan toe: lirc_rpi gpio_in_pin=17 gpio_out_pin=18.
Sluit af met de toetsencombinatie CTRL-x en bevestig het schrijven van de wijzigingen door op y te drukken. Houd de opgegeven naam aan.

pilight configureren
Open de settings van pilight: sudo nano /etc/pilight/settings.json. Zorg dat je settings er als volgt uitzien:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
        "log-level": 4,
        "pid-file": "/var/run/pilight.pid",
        "config-file": "",
        "hardware-file": "/etc/pilight/hardware.json",
        "log-file": "/var/log/pilight.log",
        "send-repeats": 3,
        "receive-repeats": 1,
        "webserver-enable": 1,
        "webserver-root": "/usr/local/share/pilight",
        "webserver-port": 80,
        "webserver-cache": 1,
        "webserver-authentication": 0,
        "webserver-username": "",
        "webserver-password": "",
        "whitelist": "",
        "update-check": 1,
        "standalone": 0,
        "port": 5000
}


Sluit af met de toetsencombinatie CTRL-x en bevestig het schrijven van de wijzigingen door op y te drukken. Houd de opgegeven naam aan.

Bewerk nu je hardware.json: sudo nano /etc/pilight/hardware.json en zorg dat deze er als volgt uitziet:

code:
1
2
3
4
5
{
        "433lirc": {
                "socket": "/dev/lirc0"
        }
}


Sluit af met de toetsencombinatie CTRL-x en bevestig het schrijven van de wijzigingen door op y te drukken. Houd de opgegeven naam aan.

pilight starten en testen
Start nu de pilight daemon in debug modus op: sudo pilight-daemon -D.

http://zooi.oostindie.com/images/900pilight_daemonstart_tn.jpg

Pak een KlikAanKlikUit (of gelijksoortig ondersteund merk( afstandsbediening (of andere zender) en stuur een signaal. Als het goed is, zul je nu op je console zien dat pilight het commando ontvangt.

http://zooi.oostindie.com/images/997pilight_daemonreceive_tn.jpg

Nu we weten dat alle hard- en software werkt, kun je de daemon stoppen dmv CTRL-C. Start nu de daemon als service : sudo service pilight start.
Standaard zal deze service al als autostart in het bootproces geplaatst worden bij de pilight installatie.

Devices in de GUI plaatsen
Nu komt het leuke: de diverse apparaten in de config zetten, zodat deze vanuit een GUI te bedienen zijn.
In mijn test heb ik een afstandsbediening gebruikt welk een KlikAanKlikUit apparaat aanstuurt met ID 8934706 en Unit 0. Deze zullen voor dit voorbeeld gebruikt worden.

Indien deze nog draait, stop de service: sudo service pilight stop, en open de config: sudo nano /etc/pilight/config.json.
Zorg dat de inhoud er als volgt uit ziet:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
        "woonkamer": {
                "name": "Woonkamer",
                "lamp1": {
                        "name": "Lamp 1",
                        "protocol": [ "kaku_switch" ],
                        "id": [{
                                "id": 8934706,
                                "unit": 0
                        }],
                        "state": "on"
                }
        }
}


Sluit af met de toetsencombinatie CTRL-x en bevestig het schrijven van de wijzigingen door op y te drukken. Houd de opgegeven naam aan.

Open daarna settings.json: sudo nano /etc/pilight/settings.json en bewerkt de regel waar "config-file" staat. Zorg dat hier het jusite pad ingevuld staat:

code:
1
"config-file": "/etc/pilight/config.json",


Sluit af met de toetsencombinatie CTRL-x en bevestig het schrijven van de wijzigingen door op y te drukken. Houd de opgegeven naam aan.

Start nu de daemon op: sudo service pilight start en ga met een browser naar het IP adres van je Raspberry Pi
Vanaf nu kun je met 1 druk op de knop in een browser een lamp aan of uit zetten.

http://zooi.oostindie.com/images/385pilight_GUI_tn.jpg

Mocht je nog vragen hebben, of foutjes in deze post zien: laat het in de comments even weten.
Binnenkort hoop ik een post te kunnen voor het aansturen van een kachel dmv een relais in combinatie met uitgebreide rules uitleg. Gezien het warme weer van de laatste tijd is het namelijk niet zo erg als je de kachel een dag 'down for maintenance' hebt ;)

Raspberry Pi met pilight voor noobs deel 1

Door Koffie op zondag 26 januari 2014 18:21 - Reacties (8)
Categorie: -, Views: 15.911

Omdat ik nog wel eens reacties krijg dat men een Raspberry Pi (van een verloren XBMC projectje) over heeft en graag met simpele domotica wil beginnen leek het mij leuk om in een aantal posts stap voor stap uit te leggen wat je moet doen. Aan het eind van deze serie posts heb je een Raspberry Pi waarmee je diverse lampen en je kachel kunt aansturen (voor de kachel ga ik uit van een normale CV of 2-wegklep welke een normaal aan/uit contact gebruikt).
Deze eerste post is simpel, we gaan beginnen bij het begin :)

Benodigdheden:
Raspberry Pi
Meest recente versie Raspbian
Win32 Disk imager
SD kaart
USB wifi dongle (optioneel)
Putty (optioneel)

Raspbian downloaden en installeren
Download Raspbian en Win32 Disk imager via bovenstaande links.
Na het downloaden start je Wind32 Disk imager en schrijf je het gedownloade IMG bestand naar je SD kaart.

http://zooi.oostindie.com/images/654win32diskimager2_tn.jpg

Tip : mocht je een SD kaart die eerder in een Raspberry Pi gezeten heeft opnieuw willen gebruiken, en je krijgt de melding dat er te weinig ruimte is omdat er slechts een partitie van 8 Mb is : stop de kaart in je camera en kies voor formatteren ;)

De eerste keer booten
Deze stap kan op 2 manieren : via SSH of via een HDMI scherm aan de pi (met keyboard).
Als je via SSH wil connecten zul je uiteraard even in je DHCP server moeten kijken wat het IP adres is.
Maak vervolgens verbinding met putty naar het IP adres van je Raspberry Pi.

http://zooi.oostindie.com/images/509putty_tn.jpg http://zooi.oostindie.com/images/655pi_login_tn.jpg

Standaard username is pi met als wachtwoord raspberry.

Wanner je gewoon een scherm met toetsenbord gebruikt hoef je niet in te loggen.
Het eerste wat je nu moet doen, is een korte configuratie doorlopen. Configureren doe je met het commando sudo raspi-config.

http://zooi.oostindie.com/images/508raspi_config_tn.jpg http://zooi.oostindie.com/images/381raspi_config_new_tn.jpg

Van boven naar beneden zijn dit de belangrijkste wijzigingen die je aan moet brengen. Indien je een nieuwere versie van raspi-config hebt, zal het er iets minder nerdie staan (de tweede omschrijving).

- expand_rootfs / Expand filesystem
Deze optie zorgt ervoor dat de partitie op je SD kaart vergroot word naar het maximaal haalbare voor je kaartje. Standaard is de partitie maar 2 Gb, de rest is dan ongebruikt.

- change_pass / Change user password
Het is verstandig om het standaard wachtwoord aan te passen naar iets anders :)

-change_timezone / Internationalisation Options -> Change timezone
Stel deze in op Europe en daarna Amsterdam.

-memory_split / Advanced options -> memory split
Hiermee kun je de verdeling van het geheugen wijzigen tussen de GPU en CPU Standaard zet ik het geheugen voor de GPU op 16 Mb, aangezien we zoveel mogelijk geheugen voor processen willen en de Raspberry Pi ergens headless in de hoek gegooid zal worden.

-SSH / Advanced options -> SSH
Eerlijk gezegd weet ik niet of de Raspberry Pi eenmalig met SSH opstart, of dat dit default aan staat. Voor de zekerheid maar even enablen dus ;)

-update / Advanced options -> Update
Hiermee update je raspi-config zelf. Zeker als je geen optie 'camera' ziet is het verstandig een update te draaien.

Als echte dwangneuroot wil je na deze opties je Raspberry Pi rebooten: sudo reboot.
Na het rebooten kun je de Raspberry Pi headless gebruiken, het is niet meer nodig om deze aan een scherm met toetsenbord te hangen (mag wel).

Upddaten en basis software installeren
Afhankelijk van hoe oud je Raspbian image is, is het verstandig eerst een update te draaien. Let op : afhankelijk van de snelheid van je SD kaart kan dit even duren.
Eerst start je het commando sudo apt-get update hiermee ververs je de lokale lijst met repositories. Na het updaten start je sudo apt-get upgrade. Met dit commando update je lokale software die via apt-get geinstalleerd is.

Na deze update ronden moet er nog wat extra software geïnstalleerd worden. Voer de volgende regels stap voor stap uit (voor de gevorderde gebruiker : ik weet dat je alles met 1 lange opdracht kunt downloaden installeren, maar ik vind het fijner om het stap voor stap te doen).
sudo apt-get install git-core
sudo apt-get install php5
sudo apt-get install php5-mysql
sudo apt-get install samba samba-common samba-common-bin

Samba configureren
Om enigszins op makkelijk wijze bestanden van en naar de Raspberry Pi te hevelen maken we gebruik van samba. Voer de volgende stappen uit om een share aan te maken.
Maak een directory aan in de homedirectory van user pi (standaard zit je al in deze directory bij het starten van een SSH sessie) : mkdir share.
Ga naar de samba directory: cd /etc/samba/
Verwijder de default configuratie : sudo rm -rf smb.conf
Maak een nieuwe configuratie : sudo nano smb.conf
Zorg dat je nieuwe config er als volgt uit ziet:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[global]
workgroup = WORKGROUP
netbios name = RASPBERRYPI
server string = %h server (Samba %v)
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0

[SHARE]
path=/home/pi/share
browseable=yes
writeable=yes
valid users = pi
admin users = pi



Sluit af met de toetsencombinatie CTRL-x en bevestig het schrijven van de wijzigingen door op y te drukken. Houd de opgegeven naam aan.
Voer het volgende commando uit om je username en password voor de share op te geven: sudo smbpasswd –a pi wanneer er om een wachtwoord gevraagd word kun je deze opgeven. Ik kies er altijd voor (zoals aan de commando's te merken is) om zowel username als password gelijk te houden aan het linux account pi.
Vanaf nu kun je via \\raspberrypi.local\share (of via het IP adres) bij je nieuwe samba share

WiFi installeren (optioneel)
Let op : voor gebruik van een USB WiFi dongle heb je een goede voeding nodig. Indien je voeding te weinig ampere kan leveren, is de kans groot dat je Raspberry Pi instabiel word.
Als je gebruik wilt maken van een USB WiFi dongle, volg dan de volgende stappen uit:
Start de Raspberry Pi op met de USB dongle erin.
Maak verbinding met SSH (bedraad)
Controleer of je dongle gezien word met het commando lsusb in mijn test setup word deze gevonden als "Belkin Components F7D2101 802.11n Surf & Share Wireless Adapter v1000 [Realtek RTL8192SU]". Mocht je dongle niet gevonden worden, zul je een guide moeten zoeken hoe je een driver installeert - ik heb namelijk nog nooit een WiFi dongle gehad die niet direct herkend werd :+
Nu we weten dat de WiFi dongle gevonden word, kunnen we de juiste software installeren.
sudo apt-get install wicd wicd-curses
Als de installatie klaar is start je met sudo wicd-curses de grafische configuratie op.

http://zooi.oostindie.com/images/285wicd_curses_tn.jpg

Als het goed is, zie je nu tenmisnte je eigen WiFi netwerk. Selecteer het juiste WiFi netwerk en druk op het pijltje naar rechts. Je kunt nu je verbinding configureren.
De belangrijkste opties die je hier moet kiezen zijn "Use DHCP Hostname" , " Automaticly connect to this network" en uiteraard je WPA key.
Sla de wijzigingen op met F10

http://zooi.oostindie.com/images/843wicd_curses2_tn.jpg

Sluit de configuratie af door de q in te toetsen.
Als laatste moet er nog een kleine aanpassing de netwerkconfiguratie plaatsvinden. Bewerk de configuratie met het volgende commando: /etc/network/interfaces
Zorg dat de inhoud er als volgt uit ziet:

code:
1
2
3
4
5
6
7
8
9
10
auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp


Sluit af met de toetsencombinatie CTRL-x en bevestig het schrijven van de wijzigingen door op y te drukken. Houd de opgegeven naam aan.
Reboot de Raspberry Pi middels sudo reboot en trek de netwerkkabel er uit.
Zoek in je DHCP server op welk IP adres je Raspberry Pi nu heeft gekregen (indien je geen vast IP hebt opgegeven) en test of je een verbinding kunt maken met SSH.

Je hebt nu een Raspberry Pi (al dan niet draadloos) klaar voor de volgende stappen. Have fun with it :)
Mocht je nog vragen hebben, kun je die uiteraard in het reactie venster hieronder kwijt.

DIY draadloze temperatuursensor voor pilight

Door Koffie op zondag 26 januari 2014 16:41 - Reacties (17)
Categorie: -, Views: 11.441

Zoals uit mijn eerdere posts al op te maken is, gebruik ik de Raspberry Pi voor het aansturen van centrale verwarming.

Door een probleem met de electrabuizen in mijn plafond komt de DS18B20 sensor op een onhandige plaats uit : een centraaldoos in het plafond vlakbij een radiator.
Aangezien warme lucht stijgt, de sensor in de buurt van een radiator zit en dit geheel ook nog eens om de hoek van de zithoek hangt (mijn woonkamer is een L vorm) geeft dit een totaal vertekend beeld van de werkelijkheid tov wat de sensor meet.
Hier moest dus iets aan gedaan worden!
Na een weekend prutsen ben ik tot het volgende gekomen:

http://zooi.oostindie.com/images/3362014_01_12_11_tn.43_tn.11_tn.jpg

Nu je zul je direct willen roepen 'maar ik zie niets!' en dat was nu precies de bedoeling ;)
Wat je ziet is een oud fotolijstje met daarachter een breadboard geplakt, Op het breadboard zit een ATtiny84 met een DS18B20 en een 433MHz Superheterodyne RF sender.
De ATtiny is zo geprogrammeerd dat deze elke minuut de temperatuur uitleest en via de RF module de lucht instuurt.
Omdat ik geen zin (en kennis) had een heel nieuw RF protocol te verzinnen voor pilight, heb ik de KaKu_new protocol misbruikt.
Het KaKu_New dimmer protocol bied de optie om een dimstand van 0 t/m 15 te versturen. Als je dus een bepaald ID neemt en daar 2 opeenvolgende unit's van pakt heb je al 2 x 15 waardes om te versturen.
pilight kan out of the box al KaKu_new dimmer ontvangen, dus het is alleen nog een kwestie van het detecteren van de broadcast en deze waarde uit te lezen. Vervolgens deze waarde naar een generic_weather protcol sturen en klaar ben je.

Nu weet ik dat pilight ook diiverse andere weather protocols onderstuend, maar op de een of andere manier krijg ik de output van mijn Alecto weerstation niet op pilight binnen. Aangezien het versturen van de omgevingstemperatuur al in de planning lag voor onze te bouwen module, was dit een mooi begin.

Voor de ATtiny heb je de volgden code nodig:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <OneWire.h> // http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip
#include <DallasTemperature.h> // http://download.milesburton.com/Arduino/MaximTemperature/DallasTemperature_LATEST.zip
#include <NewRemoteTransmitter.h>

#define txPin 10     // RF TRANSMITTER PIN
const int ledPin = 8;

#define ONE_WIRE_BUS 9

OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance
DallasTemperature sensors(&oneWire); // Pass our oneWire reference to Dallas Temperature

void setup() {
    pinMode(ledPin, OUTPUT); // LED
    pinMode(txPin, OUTPUT); // RF sender
}

void loop() {
  int NewUnit;
  int NewId;
  int temperature;

NewRemoteTransmitter transmitter(8934000, txPin, 245,2);
  Blink(ledPin,2);  
  sensors.begin(); //start up temp sensor
  sensors.requestTemperatures(); // Get the temperature
  temperature = sensors.getTempCByIndex(0);
  int RoundTemp = round(temperature);

  if(RoundTemp <= 15) {
    NewId = 1;
  }
  
  if(RoundTemp >= 16) {
    NewId = 2;
    RoundTemp = RoundTemp - 15;
  }  
  
  transmitter.sendDim(NewId, RoundTemp);    
  delay(60000);
}

void Blink(int led, int times){
  for (int i=0; i< times; i++){
    digitalWrite(ledPin,HIGH);
    delay (50);
    digitalWrite(ledPin,LOW);
    delay (50);
  }
}



Deze code zorgt ervoor dat de ATtiny elke minuut de temperatuur uitleest en als KaKu_new dimmer code lucht instuurt.
Wanneer het 6 graden is, word er dus het volgende verstuurd : unit [b]8934000[/b[ id 1 dimlevel 6. Wanner het echter 16 graden is, zal hij het volgende versturen: unit [b]8934000[/b[ id 2 dimlevel 1.

Nu is het een kwestie van een process script draaien op je Raspberry Pi welke alle ontvangen protocollen in de gaten houd, en reageert wanneer er een unit 8934000 voorbij komt.
In een latere post zal ik het process script wat ik voor pilight gebruik uitleggen.

Het eindresultaat ziet er dan zo uit: