Home Automation #3 - MIAUW

Door Hertog6 op dinsdag 2 juni 2015 16:34 - Reacties (11)
CategorieŽn: Arduino, Elektronica, Programmeren, Python, Views: 5.124

Mocht je opzoek zijn naar deel 1 en 2;
Deel #1
Deel #2

In de afgelopen paar weken ben ik flink bezig geweest met programmeren van de webinterface en de daarbij behorende backend. Maar het belangrijkste van alles! Het project heeft een codenaam gekregen, namelijk Project Skittles. De reden dat het Project Skittles heet is eigenlijk heel simpel, ik wist niks beters en mijn kat heet ook zo ;)

http://www.sandervankasteel.nl/wp-content/uploads/2015/05/skittles-485x300.jpg

Allereerst ben ik begonnen met maken van de webinterface en het toevoegen van een webserver aan het gehele pakket. Mijn eerste idee om mijn gehele automatiseringssysteem in PHP te schrijven, is in het water gevallen omdat de ESP8266 geen HTTP request kan hebben door de beperkte buffergrootte waardoor er corruptie van de data ontstaat en daarnaast vond ik dit een goed excuus om mijn roestige Python kennis bij te spijkeren. Dus heb ik er toen voor gekozen om zelf een simpel TCP protocol te gaan bedenken en implementeren. Sinds de vorige "versie" van het gehele systeem heb ik nog niks echt veranderd aan de implementatie van het protocol.

Om het systeem beheerbaar te maken via HTTP, heb ik besloten om CherryPy mee te leveren. CherryPy is een Python module die het mogelijk maakt om een HTTP server op te bouwen en te configureren naar jouw eisen / wensen. Als template engine heb ik gekozen voor Jinja 2, voor de HTML layout heb ik gekozen voor Bootstrap en grafische elementen heb ik gekozen voor Font Awesome. De reden dat ik gekozen heb voor Bootstrap is omdat Bootstrap mij super makkelijk een responsive layout geeft en ik me dus geen zorgen meer hoef te maken over CSS, verschillende resoluties etc etc.

In de vorige "versie" van mijn server, werden alle statussen weggeschreven in files en eigenlijk vond ik eigenlijk toch niet zo heel erg handig dus heb ik besloten om alles weg te schrijven in een MySQL database.

En dit is dan het eind resultaat van mijn Bootstrap "webdesign". Webdesign staat met een reden in quotes want ik ben verre van een webdesigner ;)

http://www.sandervankasteel.nl/wp-content/uploads/2015/05/lights-480x300.png

http://www.sandervankasteel.nl/wp-content/uploads/2015/06/Screenshot-from-2015-06-02-10-21-04-480x300.png

Dit zijn op dit moment de enige 2 pagina's die beschikbaar zijn en enigzins werken. De werking zal verder worden uitgewerkt zodra ik het systeem verder uitgedacht heb. Op de 'lampen' pagina, is het mogelijk om lampen aan en uit te zetten, maar nog niet verwijderen en/of toevoegen. Het toevoegen en/of verwijderen van lampen moet nog gebeuren de MySQL database. Het aan/uitzetten van lampen gebeurt via AJAX.

De data die op dit moment zichtbaar is op de 'temperatuur' pagina, is op dit moment allemaal test data en doet in mijn systeem nog helemaal niks want ik heb daarvoor nog niet de juiste onderdelen.

Ik ben mij vooral aan het focussen geweest op de API en een bijbehorende Android app. De API is op dit moment poepje simpel.


GET /api/lights
Deze functie†retourneert een array met Javascript objecten met daarin de naam en de huidige status. De huidige status†is een boolean, dus deze kan alleen maar aan of uit zijn (true of false).

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
      {
            'name': 'kitchen',
            'status': 'false'
      },
      {
            'name': 'gang',
            'status': 'false'
      },
      {
            'name': 'kamer',
            'status': 'false'
      }
]



POST /api/light/update
Met deze functie kan je een lamp een nieuwe status geven. Deze functie heeft op dit moment geen return, ook niet bij een fout.
Bijvoorbeeld;

POST

code:
1
2
3
4
{
      'lightname' : 'kitchen',
      'status' : 'true'
}



POST /api/temperature
Met deze functie kan je de huidige temperatuur opvragen binnen een kamer en zal bij succes een JSON object retourneren. De temperaturen die geretourneerd worden zijn in Celsius.
POST

code:
1
2
3
{
      'room' : 'gang'
}



RETURN

code:
1
2
3
4
{
      'room': 'gang',
      'temperature': 20.5
}



GET /api
Met deze functie kan je kijken of de API en daarmee ook de server nog online is. Deze functies retourneert een JSON object indien succesvol.

code:
1
2
3
{
      'miauw': 'said skittles'
}



En dat zijn op dit moment de API functies. In de loop van de tijd wil de API nog verder gaan uitbreiden. Maar voor het moment voldoet dit wel. Met deze beperkte API set, ben ik al wel in staat geweest om een Android app te ontwikkelen. Hieronder zie je een screenshot tijdens de ontwikkeling van de huidige versie.

http://www.sandervankasteel.nl/wp-content/uploads/2015/06/Screenshot-from-2015-05-26-16-22-01-449x300.png

Inmiddels is Android app qua ontwikkeling al wat verder gevorderd en is het inmiddels mogelijk om de status van de lampen te bekijken en te veranderen. Uiteraard hoort daar ook een demotje bij, zie hiervoor het onderstaande YouTube filmpje.



Nu het project verder en verder begint te komen, wordt het tijd om weer eens wat inkopen te gaan doen. Allereerst heb ik een voeding nodig om de hele boel te voorzien van stroom. Mijn eerste gedachte was om zelf een voeding te gaan ontwerpen op basis van de HLK-PM01. Voor de mensen die de HLK-PM01 niet kennen, het is een gereguleerde power module die het mogelijk maakt om 1 keer van 230 Volt AC naar 5 Volt DC te gaan. Dus dan hoef je niet zelf te gaan knutselen om een bruggelijkrichter (bridge rectifier in het Engels) te gaan bouwen en alle bijbehorende beveiliging. Het enige nadeel is de prijs. De module alleen al is op eBay te vinden voor ~ 6 dollar en dan moet er nog overspanning en kortsluiting beveiliging bij. Nog een beperking van de HLK-PM01 de output is beperkt tot 5V @ 600 mA. Na een kort rekensommetje is 600 mA toch wat aan de krappe kant, aangezien ik op ongeveer 550 mA uitkom met al mijn onderdelen (inclusief veiligheidsmarge). Dus heb ik besloten om een kant en klare voeding in China te kopen.

Na wat zoekwerk kwam ik uit op deze voeding, typenummer XK-1205DC. De verkoper beweert dat deze gereguleerde voeding maximaal 4 A kan leveren (nominaal tussen de 2 en 4 A) en deze voeding is ook nog eens een stuk goedkoper dan den HLK-PM01. De XK-1205DC kost namelijk slechts $ 3,83 (ten tijde van schrijven). Dus ik ben benieuwd wat ik voor dat bedrag ga krijgen ;). Zolang die al 1000mA of meer kan leveren ben ik al tevreden.

Als 230V relay heb ik gekozen voor de Songle SRD-05VDC-SL. Dit is een relais bedoelt voor het gebruik in Arduino en andere micro processoren omgeving. Hij heeft 1 digitale input waarmee je de relais kan laten schakelen tussen aan en uit.

Daarnaast heb ik nog een aantal andere dingen besteld vanuit China een DHT22 (temperatuur en luchtvochtigheid meter), een HC-SR501 PIR sensor (een sensor bedoelt voor het detecteren van beweging) en een setje van 2x 28BYJ-48 stepper motor inclusief ULN2003 driver board. Mijn plan is om deze stepper motors te gaan gebruiken voor het openen en dichtdoen van mijn gordijnen. Ik weet niet of ze daar krachtig genoeg voor zijn en hoe ik dit mechanisch ga aanpakken.

Maar het leukste komt nog. Al een flinke tijd droom ik van het hebben van een oscilloscoop, alleen iedere keer als ik op Marktplaats kijk staan ze er voor of belachelijk veel geld op. 200 euro voor een 2de hands analoge Tektronix (exclusief probes) en dan kan ik net zo goed een Owon / Rigol voor ~ 300 euro kopen of als ik ze goedkoper vind, dan zijn het meestal compleet afgetrapte Hameg / Philips oscilloscopen en die kosten dan nog tussen de 75 en 125 euro waarvan de werking nog maar te betwijfelen valt. En dat vind ik voor een stuk gereedschap waarvan ik betwijfel of ik hem ook echt vaak zal gebruiken redelijk aan de prijzige kant.

Nu was ik gisteren middag even aan het rondspeuren op Banggood.com en vond ik een kit van een oscilloscoop voor §21.63 . Om precies te zijn is dit de JYE Tech DSO 138. Stiekem heeft dit wel mijn interesse gewekt. Het is een oscilloscoop kit met een maximale analoge bandbreedte van 200 Khz, maximaal 1 miljioen samples per seconde, een maximale peak-to-peak input van 50V, triggering en DC,AC en GND coupling. Nu weet ik zelf dat het geen vervanging is voor een echt oscilloscoop maar voor het geld, vind ik het best grappig. Dus die heb ik ook nog besteld en dan kan ik die gelijk ook even op de pijnbank / reviewbank leggen ;)

Maar zodra al deze onderdelen binnen zijn, kan ik mijn huidige prototype eens verder gaan uitbouwen en hopelijk snel gaan verwerken tot echt werkende module inclusief professioneel gefabriceerde PCB en behuizing.

Tot die tijd staat er echter nog genoeg op mijn ToDo lijst. Zo wil ik alle componenten binnen Project Skittles kunnen toekennen aan een ruimte. Bijvoorbeeld "lamp x" hoort bij ruimte "gang". Daarnaast staan er nog een paar dingen op het lijstje. De mogelijkheid tot bijvoorbeeld het updaten van de temperatuur vanaf het TCP protocol. Ik wil ook nog leuke grafiekjes kunnen genereren zoals gemiddelde brandtijd van lamp x per dag, gemiddelde temperatuur per dag etc etc. Ondersteuning voor LED strips. Al met al genoeg te doen dus!

Mocht je geÔnteresseerd zijn in de source en eventueel kritiek hebben op mijn Python, bijna alles staat op Github. Het enige wat op dit moment nog niet op Github staat, is de Arduino code voor de "appliances" (de Arduino module). Maar die zal ik in de loop van de dag online zetten.

Ik hoop dat dit lange verhaal een beetje leuk was om te lezen en tot de volgende keer! :)

Volgende: JYE Tech DSO 138 - Review / buildlog 06-'15 JYE Tech DSO 138 - Review / buildlog
Volgende: Recept voor “frambozen taart” of hoe ik een Raspberry Pi gerepareerd heb 05-'15 Recept voor “frambozen taart” of hoe ik een Raspberry Pi gerepareerd heb

Reacties


Door Tweakers user H!GHGuY, dinsdag 2 juni 2015 19:24

Misschien loop ik vooruit op #4, maar wat is er nou automation aan de schakelaar van de muur verplaatsen naar je smartphone/PC/tablet/...? Het is trouwens nog eens onhandig, traag en dwaas dat je je smartphone telkens bij de hand moet hebben.

Je wil een systeem dat aan jou aangepast is en niet omgekeerd. Het systeem detecteert waar je bent, wat je doet en wil doen en helpt daarbij. Liefst zonder enige vorm van aansturing of mits een minimale aanzet.

Door Tweakers user Strykeforce, woensdag 3 juni 2015 08:28

H!GHGuY schreef op dinsdag 02 juni 2015 @ 19:24:
Misschien loop ik vooruit op #4, maar wat is er nou automation aan de schakelaar van de muur verplaatsen naar je smartphone/PC/tablet/...? Het is trouwens nog eens onhandig, traag en dwaas dat je je smartphone telkens bij de hand moet hebben.

Je wil een systeem dat aan jou aangepast is en niet omgekeerd. Het systeem detecteert waar je bent, wat je doet en wil doen en helpt daarbij. Liefst zonder enige vorm van aansturing of mits een minimale aanzet.
Je moet natuurlijk wel bij de basis beginnen ;). Eerst een lampje uit/aan kunnen zetten daar begint het mee en leg je de basis. Op termijn kan je dan natuurlijk met 1 druk op de knop alles in je huis uitzetten of sensoren er bij zetten zodat het systeem dingen kan detecteren.

Leuke blog, ik zal em zeker volgen!

Door Tweakers user CurlyMo, woensdag 3 juni 2015 08:38

Niet om je eigen creativiteit af te doen, maar heb je ook wel eens gekeken naar bestaande opensource domotica oplossingen zoals pilight of pimatic? Het bundelen van krachten kan bestaande projecten natuurlijk ook goed van pas komen :)

Door Tweakers user LeonNL87, woensdag 3 juni 2015 14:41

Leuk project om te volgen!

Ben met een soortgelijk iets bezig. Heb op dit moment de DHT22 voor temperatuur en luchtvochtigheid, een BMP180 voor de luchtdruk draaien op 1 Arduino. een 2de draait met een TCRT5000 om mijn stroomverbruik te monitoren.

volgende stap wordt het schakelen van lampen in huis via 433 Mhz!

Door Tweakers user rc5proxy, donderdag 4 juni 2015 00:20

volgende pagina wordt dus
Status Waterbak Skittles
Vul voerbak Skittles
en natuurlijk Skittles uitrusten met een Gps halsband
zodat je via de web interface kunt zien dat Skittles op je schoot ligt te knorren.

Door Tweakers user Splorky, donderdag 4 juni 2015 14:05

Erg leuk en leerzaam om te zien.
zit zelf met het idee om huisautomatisering toe te gaan passen. proof of concept gemaakt voor een RGB led en draadloze afstandsbediening (met HUE instel mogelijkheid).
Heb ook een ESP8266 wifi module maar zat al te bedenken hoe ik die koninstellen, maar dankzij jou eerdere deel weet ik hoe ik dat kan doen, thanx.

Ben ook benieuwd wat je oplossing gaat zijn voor de verduistering in de avond (en vooral hoe dat mechanisch afgehandeld gaat worden).

Door Tweakers user rvtk, vrijdag 5 juni 2015 00:05

Hoe bevalt de XK-1205DC? In eerste instantie zat ik zelf aan de HLK-PM01 te denken voor een esp-8266 rgb led lamp project (via google kwam ik hier uit). Dit lijkt me wat veiliger en degelijker dan goedkope en doorgaans slechte chineze voedingen zoals de XK-1205DC (zeker omdat het direct aan de 220v hangt).

Door Tweakers user Hertog6, vrijdag 5 juni 2015 12:16

Strykeforce schreef op woensdag 03 juni 2015 @ 08:28:
[...]


Je moet natuurlijk wel bij de basis beginnen ;). Eerst een lampje uit/aan kunnen zetten daar begint het mee en leg je de basis. Op termijn kan je dan natuurlijk met 1 druk op de knop alles in je huis uitzetten of sensoren er bij zetten zodat het systeem dingen kan detecteren.

Leuke blog, ik zal em zeker volgen!
Bedankt en dat wat je zegt klopt inderdaad. Ik ben nu eerst bezig met het leggen van een basis en daarna kan ik er op gaan uitbreiden. 1 van de uitbreidingen waarover ik aan het nadenken ben is het koppelen van de data in mijn agenda systeem (OwnCloud) i.c.m. bewegingssensoren. Dus dat lampen niet aan gaan, als in mijn agenda staat dat ik de deur uit zou moeten zijn. Dit zou je dan eventueel ook nog kunnen uitbreiden dat je een mailtje krijgt als er beweging gedetecteerd wordt als ik niet thuis zou zijn a.ka. "inbraakbeveiliging".
CurlyMo schreef op woensdag 03 juni 2015 @ 08:38:
Niet om je eigen creativiteit af te doen, maar heb je ook wel eens gekeken naar bestaande opensource domotica oplossingen zoals pilight of pimatic? Het bundelen van krachten kan bestaande projecten natuurlijk ook goed van pas komen :)
Om heel eerlijk te zijn,. daar heb ik wel een beetje naar gekeken maar van wat ik begreep uit de documentatie moest alle electronica gebasseerd zijn op de 433 Mhz band en ik weet uit ervaring dat er hier in de buurt wel redelijk was 433 Mhz zenders en ontvangers zitten. Dus om storingen en eventuele drama te voorkomen heb ik gekozen om daar niet voor te gaan.
LeonNL87 schreef op woensdag 03 juni 2015 @ 14:41:
Leuk project om te volgen!

Ben met een soortgelijk iets bezig. Heb op dit moment de DHT22 voor temperatuur en luchtvochtigheid, een BMP180 voor de luchtdruk draaien op 1 Arduino. een 2de draait met een TCRT5000 om mijn stroomverbruik te monitoren.

volgende stap wordt het schakelen van lampen in huis via 433 Mhz!
Cool! Hoe pak jij dat precies aan met de TCRT5000 om je stroomverbruik te meten ? Hang je die dan voor je energiemeter en tel je dan de hoeveelheid pulses die de TCRT5000 ontvangt ?
Splorky schreef op donderdag 04 juni 2015 @ 14:05:
Erg leuk en leerzaam om te zien.
zit zelf met het idee om huisautomatisering toe te gaan passen. proof of concept gemaakt voor een RGB led en draadloze afstandsbediening (met HUE instel mogelijkheid).
Heb ook een ESP8266 wifi module maar zat al te bedenken hoe ik die koninstellen, maar dankzij jou eerdere deel weet ik hoe ik dat kan doen, thanx.

Ben ook benieuwd wat je oplossing gaat zijn voor de verduistering in de avond (en vooral hoe dat mechanisch afgehandeld gaat worden).
Leuk om te horen omdat je er wat van geleerd hebt, dat is voor mij de hoofdreden dat ik mijn 'oplossing' deel, zodat andere mensen er van kunnen leren.
rc5proxy schreef op donderdag 04 juni 2015 @ 00:20:
volgende pagina wordt dus
Status Waterbak Skittles
Vul voerbak Skittles
en natuurlijk Skittles uitrusten met een Gps halsband
zodat je via de web interface kunt zien dat Skittles op je schoot ligt te knorren.
Om heel eerlijk te zijn hebben ik er wel eens over nagedacht over een GPS halsband ... O-) In combinatie met een kleine batterij, zonnecel.... Maar misschien ben ik ook wel een beetje de "overbezorgde ouder" in dit scenario ;)
rvtk schreef op vrijdag 05 juni 2015 @ 00:05:
Hoe bevalt de XK-1205DC? In eerste instantie zat ik zelf aan de HLK-PM01 te denken voor een esp-8266 rgb led lamp project (via google kwam ik hier uit). Dit lijkt me wat veiliger en degelijker dan goedkope en doorgaans slechte chineze voedingen zoals de XK-1205DC (zeker omdat het direct aan de 220v hangt).
Ik heb de XK-1205DC nog niet binnen gekregen, maar zodra die binnen is krijgt die naar alle waarschijnlijkheid een eigen post omdat ik hem toch wel even flink aan de tand wil voelen ;)

Door Tweakers user rvtk, vrijdag 5 juni 2015 12:47

Interessant, ik hou je blog in de gaten!

Door Tweakers user CurlyMo, vrijdag 5 juni 2015 18:34

Om heel eerlijk te zijn,. daar heb ik wel een beetje naar gekeken maar van wat ik begreep uit de documentatie moest alle electronica gebasseerd zijn op de 433 Mhz band en ik weet uit ervaring dat er hier in de buurt wel redelijk was 433 Mhz zenders en ontvangers zitten. Dus om storingen en eventuele drama te voorkomen heb ik gekozen om daar niet voor te gaan.
Ik heb deze week z-wave toegevoegd en ben bezig met IR. De modulaire opzet van pilight maakt het juist makkelijk om nieuwe apparaten toe te voegen en frequentiebanden. Daar ging de uitnodiging ook om. Dan kan je gebruik maken van beproefde code aangaande eventing, webgui, API, heb je direct ondersteuning voor alle mobiele apps etc., maar tevens je eigen apparatuur laten ondersteunen via hardware drivers. Oftewel "bundeling van krachten".

[Reactie gewijzigd op vrijdag 5 juni 2015 18:39]


Door Tweakers user ThinkPad, dinsdag 1 september 2015 14:49

De HLK-PM01 is veilig bevonden, zie deze uitgebreide review: http://lygte-info.dk/revi...Link%20HLK-PM01%20UK.html

Reactie formulier
(verplicht)
(verplicht, maar wordt niet getoond)
(optioneel)

Voer de code van onderstaand anti-spam plaatje in: