DIY draadloze temperatuursensor voor pimatic - en meer! - Update

Door Koffie op zaterdag 23 januari 2016 13:42 - Reacties (21)
Categorie: -, Views: 6.460

[Update]
Na het plaatsen van deze blogpost is er het nodige op de Github repo geplaatst.
Vragen/problemen kun je kwijt in het issues 'forum' , ook is er een wiki aangemaakt. Er zijn inmiddels ook wat aanpassingen doorgevoerd op de code, lees even de release notes door op Git ;)

Zo'n 2 jaar geleden plaatste ik deze post : Koffie's tweakblog: DIY draadloze temperatuursensor voor pilight
Met deze sensor kon ik de temperatuur in de woonkamer meten en met RF naar pilight verzenden. In de tussentijd is er weer een hoop veranderd.
Zoals lezers van mijn spaarzame blogposts weten ben ik al lange tijd volledig over op Pimatic, een domotica systeem wat ik zelf erg fijn vind.

http://zooi.oostindie.com/images/49920160123_125539_tn.jpg

De hardware markt is ook veranderd. Inmiddels koop je voor een paar dollars een ESP8266. Een ESP is nog het best uit te leggen als 'een Arduino op 80 Mhz, meer flash geheugen onboard wifi'. Ja je leest het goed, fully wifi op een chip zo groot als een stuiver :Y)
Dit opent natuurlijk een wereld aan mogelijkheden.
Een lange wens was om een soort alles in 1 module te bouwen, waarbij ik in een config kan aangeven wat zijn functie is en gaan met die banaan, zonder dat ik voor elk mini-projectje de code hoef aan te passen.

Om dit voor elkaar te krijgen heb ik mijn persoonlijke wensen op een rijtje gezet en ben ik begonnen met schrijven van code en testen met diverse sensoren.
Mijn persoonlijk eisenpakket was/is:

- Compatible met Pimatic
- Temperatuur meten en versturen
- Eventueel luchtvochtigheid meten en versturen
- Relays aansturen
- infrarood zenden
- Weergave van temperatuur, leesbaar op grote afstand

Uiteindelijk is daar mijn project ESPimatic uit voortgekomen. Alle bovenstaande eisen zitten in de code, het is slechts een kwestie van de juiste hardware aan of uit zetten. De module is volledige te besturen vie een webinterface. Zelfs vervangen van een nieuwe flash of HTML bestanden kan vanaf de website.

http://zooi.oostindie.com/images/585espimatic_02.png

Wat heb ik allemaal nodig :?
Om te beginnen een ESP, Zelf gebruik ik een ESP8266-12 met 4mb flash. Daarnaast heb je de sensor naar wens nodig (DS18B20, DHTxx, max7219 LED Matrix).


Hoe installeer ik het :?
Download de code: https://github.com/koffienl/ESPimatic
Compileer de code met Arduino en upload deze via serial naar je ESP.

OK, software staat er op, en nu :?
De eerste keer zal de ESP opstarten in Access Point modus. Maak met verbinding met SSID ESPimatic en wachtwoord espimatic.
Ga met je browser naar 192.168.4.1 , je ziet nu een simpele pagina om je wifi gegevens in te vullen. Na het invullen zal de ESP herstarten en verbinding maken met je wifi netwerk.
Zoek op welk IP adres van je DHCP server heeft gekregen (is te zien op console of in je router/DHCP), en ga er met je browser naar toe.
Je ziet nu wederom een simpele pagina. Met deze pagina upload je 1 voor 1 alle HTML bestanden die je van GitHub hebt gedownload.
Herstart nu voor de laatste keer je ESP en maak verbinding met je browser naar het IP adres.
Je ziet nu de website zoals bedoeld is voor ESPimatic.
Begin door in het menu System -> GPIO aan te vinken welke GPIO's je tot je beschikking hebt. Vervolgens ga je in het menu System -> Pimatic om daar je pimatic API gegevens in te vullen.
Je bent nu klaar om sensoren aan of uit te zetten.
GPIO's die je niet in het begin als zijnde beschikbaar hebt aangevuld en GPIO's in gebruik door sensoren kun je niet kiezen.

Wat kan ik met al die pagina's :?
Een korte toelichting op alle pagina's en menu optie's die er zijn:

Hardware -> DS18B20
Hier kun je een DS18B20 aan of uit zetten. Vul ook in hoe de variabele in pimatic heet zodat de temperatuur naar pimatic verstuurd kan worden

Hardware -> LED Matrix
Wanneer je 2 max7219 LED Matrix'en goed hebt aangesloten kun je die hier aan zetten. Let op : CLK moet naar GPIO14 en DIN naar GPIO13. CS gaat op de GPIO die je hier kiest.
Selecteer ook wat je wil zien op je matrix.

Hardware -> IR LED
Wanneer je een IR code weet voor je apparatuur (zie hiervoor http://www.righto.com/200...rared-remote-library.html ) kun je de ESPimatic een IR code laten versturen. In pimatic heb ik een variabele aangemaakt (bijvoorbeeld $ACwoonkamerON en als inhoud de IR code van mijn airco. Vervolgens heb ik een dummyswitch aangemaakt met de volgende rule:

code:
1
IF ACon is turned on THEN execute "sudo curl  --silent --data 'action=ir&value=$ACslaapkamerON' http://esp01/api > /dev/null"


Pimatic verstuurd dan naar de 'api' van ESPimatic de IR code, de ESP zal deze vervolgens naar de IR LED sturen.

Hardware -> Relay
Er kunnen tot maximaal 4 relais aangesloten worden op de ESP. Hier kun je de functie aan of uit zetten en de GPIO instellen.

Hardware -> DHT
Indien je liever een DHTxx gebruikt ipv een DS18B20 dan kan dat. Persoonlijk vind ik een DHT(11) verre van accuraat en stabiel .. andere zweren er bij. Je zou in theorie ook een DHT22 kunnen aansturen, maar omdat ik die niet heb weet ik niet of dat werkt. Volgens de code moet het werken ;)

System -> Wifi
Wijzig hier je wifi instellingen. Wanneer de ESP bij opstarten geen verbinding met wifi kan maken, zal deze altijd als Access Point opstarten (zelfde gegevens als bij eerste keer gebruiken).

System -> Pimatic
Hier kun je al je Pimatic gegevens invullen

System -> Firmware
Hier kun je een BIN file uploaden. Let op dat je bij het compileren in Arduino de juiste ESP aangeeft. Je kan zoveel flash hebben als je wil, maar als de draaiende BIN gecompileerd is als een 1mb chip gaat het simpelweg niet lukken.

System -> GPIO
Hier kun je beschikbare GPIO's instellen.

System -> Reset
Dit zal *alle* opgeslagen settings verwijderen, inclusief wifi gegevens. Deze gegevens zijn niet te herstellen!

System -> Filemanager
Hier kun je de HTML files uploaden en/of verwijderen. Let op : bestaande bestanden zullen zonder bevestiging overschreven worden. Verwijderde bestanden zijn niet meer terug te halen.
Wanneer je root.html verwijderd, zal de ESP opstarten met een versimpelde filemanager als root.

Refresh
Refresh haalt de specifieke instellingen van de pagina waar je je bevind opnieuw op.

Reboot
Hiermee herstart je de ESP.

De ESPimatic heeft ook een simpele 'api' waarmee je via een HTTP opdracht commando's kunt versturen.
Syntax van de URL is : http://esp-ip/api?action=[action]&value=[value]
De volgende opdrachten zijn mogelijk:

action = ir , value = 3420,1592,500,1128, ...... hiermee laat je een IR code versturen
action = reboot , value = true Herstart de ESP
action = matrix_brightness value=[0-8] wijzig de helderheid van deLED Matrix
action = matrix_display , value = [on-off[ Zet de LED Matrix uit
action = relay[1-4] , value = [on-off[ Zet relay x aan of uit
action = clearerror , value =[wifi,ds18b20,eeprom,upgrade] Hiermee verwijder je bepaalde errors, dat wprd echter ook al gedaan door de webpagina die de foutmelding ontvangt.
action = reset , value=true Hiermee verwijder je alle opgeslagen gegevens, inclusief wifi

Je kachel aansturen met pimatic, een echte thermostaat

Door Koffie op maandag 6 april 2015 18:55 - Reacties (16)
Categorie: -, Views: 7.537

In het eerste deel heb je gezien hoe je de CV of stadsverwarming kunt schakelen en de temperatuur in de woonkamer kunt meten.
De basis is eigenlijk simpel : vind je het te koud zet je de CV aan, vind je het te warm ze je deze weer uit :) Tijd om hier slimmer mee om te gaan.

Het maken van een thermostaat
Om te beginnen gaan we een thermostaat device toevoegen aan pimatic. Zet het volgende stuk code in je config, onder de devices sectie.


code:
1
2
3
4
5
6
7
{
      "id": "thermostaat",
      "class": "DummyHeatingThermostat",
      "name": "Thermostaat",
      "comfyTemp": 20,
      "ecoTemp": 17
    },



Sla de wijzigingen op en reboot pimatic. Je hebt nu een thermostaat device in je installatie. Voeg de thermostaat toe aan je GUI en test de knoppen uit. Je zult zien dat alles werkt, maar pimatic heeft nog niets om op te reageren. Dit moet je allemaal zelf doen met extra rules
De thermostaat heeft 7 knoppen, verdeeld over 3 blokken.
De eerste 3 zijn : auto, manu en boost.
Dit zijn de standen waarin je je thermostaat kunt zetten. Omdat je zelf de rules schrijft, kun je zelf bepalen wat je er mee doet. In deze blog zullen ze het volgende betekenen :

auto : het systeem zal volgens alle rules gewoon automatisch werken aanpassingen zullen alleen tijdelijk van kracht zijn
manu : overrulled volledig alle programma's en zal voor onbepaalde tijd de huidige temperatuur handhaven
boost : verhoogd de huidige temperatuur met 2 graden voor 1 uur lang

De knoppen eco en comfy zijn hardcoded waardes, in dit geval 17 voor eco en 20 voor comfy.
Met de + en - knoppen kun je de temperatuur instelling veranderen.

http://zooi.oostindie.com/images/2282015_04_06_16_tn.35_tn.52_tn.jpg

Pimatic laten reageren op wijzigingen aan de thermostaat
Zoals gezegd : de thermostaat is een dom device wat niets uit zichzelf kan doen. Dat is mooi, want dat kunnen wij alles precies doen zoals we zelf willen ;)
De 3 standen van de thermostaat zijn op te vragen en veranderen door middel van rules :

code:
1
IF mode of thermostaat = boost THEN set mode of thermostaat to "auto"


Ook de temperatuurinstelling is uit te lezen en te wijzigen:

code:
1
IF mode of thermostaat = "boost" THEN set temp of thermostaat to 25



Een simpele AAN/UIT thermostaat'
We hebben nu een sensor die de temperatuur meet, en een thermostaat device waarmee we het e.e.a aan kunnen sturen. We kunnen nu relatie makkelijk een simpele thermostaat maken.
Dit kun je doen door de volgende rules aan te maken:


code:
1
2
IF temperature of woonkamer < $thermostaat.temperatureSetpoint THEN turn on warmte
IF temperature of woonkamer > $thermostaat.temperatureSetpoint THEN turn off warmte



Is het kouder dan de gewenste temperatuur, dan zal de CV (relais) aan gaan, is het warmer dan gaat hij vanzelf weer uit.
Je thermostaat is vanaf nu niet meer nodig:)

De thermostaat moet 'slimmer' worden
Ik ben al langere tijd bezig met het aansturen van de verwarming dmv een Raspberry Pi python scripts / pilight / pimatic, en ben uiteindelijk op de volgende aanpak uitgekomen: zorg dat er 1 variabele waarnaar gekeken word (in dit geval: de setting van de thermostaat) laat allerlei rules die setting beÔnvloeden op basis van dag/tijdstip/externe factoren. Laat vervolgens je thermostaat simpelweg naar die setting kijken tov woonkamer temperatuur.

Op mijn eigen installatie heb ik dus enorm veel regels die (mogelijkerwijs) de gewenste temperatuur beÔnvloeden. Of vervolgens de kachel aan of uit moet gebeurt slechts op basis van 2 rules.
Zo heb ik bijvoorbeeld een rule die er zo uitziet:

code:
1
[it is monday or tuesday or thursday or friday] and it is after 07:30 and before 13:30 and beneden-thermostaat-sunday is off and mode of thermostaat = auto THEN set temp of thermostaat to 18


Op maandag, dinsdag en vrijdag is er van half 8 tot 3 (de rule is tot half 2 ivm opwarm tijden) niemand thuis. Tussen die periode mag het dus afkoelen tot 18 graden.

Elke dag om 10 uur 's avonds mag de kachl terug van 20 naar 18 graden, tenzij de woonkamer verlichting nog aan is - als de hoofdverlichting nog brand is de kans namelijk reŽel dat ik nog beneden ben):

code:
1
IF it is after 22:00 and mode of thermostaat = auto and dressoir is off THEN set temp of thermostaat to 18


Wanner de verlichting om 22:00 nog brand zal de thermostaat op 20 blijven staan. Ga ik uiteindelijk om 23:50 naar bed, dan zal de thermostaat automatisch terugvallen naar 18 graden.

Deze rules kun je net zo moeilijk of makkelijk maken als je wil, ik ken situaties waar men gewoon een AAN/UIT thermostaat heeft gemaakt, aangevuld met aanwezigheid van personen op basis van een ping plugin voor de smartphones.

Voor de boost knop heb ik de volgende rule aangemaakt:


code:
1
IF mode of thermostaat = "boost" THEN $BeforeBoostTemp = $thermostaat.temperatureSetpoint and set temp of thermostaat to ($thermostaat.temperatureSetpoint + 2) and after 1 hour set mode of thermostaat to "auto" and after 3601 seconds set temp of thermostaat to $BeforeBoostTemp



Deze rule schrijft de huidige temperatuur weg in de $BeforeBoostTemp en verhoogt deze temperatuur met 2 graden. Na 1 uur word de mode naar auto gezet, en de vorige temperatuur uit BeforeBoostTemp weer gebruitk.

Andere slimme manieren om om te gaan met de temperatuurinstelling en je thermostaat:
- Bijhouden of de temperatuur van je woonkamer stijgt. Waarom zou je verwarmen wanneer de woonkamer op een natuurlijke manier opwarmt?
- Stoppen met verwarmen als er een deur of raam geopend word
- Heb je behoefte aan een warme kamer in de ochtend, voor je naar werk gaat? Warm dan slechts op tot 19,5 graden. Dit scheelt behoorlijk in tijd
- Stuur bij op basis van aanwezigheid van smartphones. Waarom verwarmen als de smartphones niet aanwezig zijn?

Het lukt niet, ik snap het niet, ik heb hulp nodig! :?
Als je vragen hebt, kun je deze beter in het pimatic topic stellen : het grote pimatic topic - home domotica met je Raspberry Pi
Dat is makkelijker dan her te behandelen (je bereikt ook een groter publiek dan alleen Koffie :P ).

Inhoudelijk reacties op specifiek dit artikel kunnen uiteraard gewoon in de comments.

Ik ben zeker benieuwd naar de handigheidjes die jullie gebruiken om slim om te gaan met het verwarmen van de woonkamer, post vooraal je tips en tricks!

Je kachel aansturen met pimatic, de basics

Door Koffie op maandag 6 april 2015 09:52 - Reacties (19)
Categorie: -, Views: 10.448

Na de vele artikelen over homeautomation, is het weer eens een tijd voor een stukje van mijn kant :)

In deze blog wil ik beginnen met het behandelen van aansturing van je kachel door middel van pimatic. Ik ga er vanuit dat je stadsverwarming of een normale CV met thermostaat hebt. Dus geen opentherm toestanden oid. Twijfel je ? Trek je thermostaat van de muur en kijk hoeveel draden er van je thermostaat naar je ketel gaan. Indien dit er 2 zijn, zit je goed :Y)

Wat heb ik allemaal nodig :?
- Raspberry Pi met pimatic geÔnstalleerd
- 1 relay (bijvoorbeeld : http://r.ebay.com/1RNzF8 )
- 1 temperatuursensor (DS18B20 + 4.7K weerstand of zelfbouw)
- Diverse kabeltjes (handjevol jumperwires en bijvoorbeeld UTP)

Stap 1 : De CV aansluiten aansluiten
Als allereerste haal je de huidige thermostaat van de muur af, die gaan we niet meer nodig hebben. Straks kun je daar een prachtige tablet hangen om je hele huis aan te sturen.
Laat de kabel zitten, deze hebben we wellicht nog nodig. Sowieso : liever bekabeling nutteloos laten zitten dan dat je een jaar later een probleem hebt omdat er geen kabel meer in de leiding te krijgen is.
De kabel die aan je thermostaat zat, loopt helemaal door naar je CV of stadsverwarmingsklep. De vraag is : waar gaat de Raspberry Pi komen?
Er is geen noodzaak om de Pi in de woonkamer te hangen, dus waarom niet gewoon lekker bij je CV plaatsen?
En nu komt die kabel die er al lag mooi van pas. We kunnen (indien je dat wilt) deze kabel hergebruiken voor de temperatuursensor. Controleer eerst hoeveel aders er van de muur naar je CV gaan. Indien dit er echt maar 2 zijn, zul je de kabel moeten vervangen. Voor de DS18B20 sensor hebben we minimaal 3 aders nodig.
Haal eerst de 2 aders van je CV af, en vervang deze voor 2 nieuwe aders (bijvoorbeeld een stukje UTP).
Verbind de andere kant van de 2 aders aan je relay.
Afhankelijk van je relay heb je verschillende aansluitmogelijkheden. Indien je 3 terminalschroeven hebt, zorg er dan voor dat 1 ader in de COM zit en de andere in de NO. Op deze manier zal je relay zonder tussenkomst van pimatic in een verbroken toestand staan.
Aan de andere kant van je relay zul je hoogstwaarschijnlijk 3 terrminalschroeven hebben : DC+ , DC- en CH1 (of VCC en GND ipv DC).
Verbind de VCC of DC+ met de 5v pin van je Raspberry Pi, en verbind de DC- of GND met de GND van je Raspberry Pi.
Verbind CH1 met GPIO0 van je Raspberry Pi (dat is BCM GPIO nummer 17).
De eerste stap is nu gezet, je ketel is verbonden met je Raspberry Pi :Y)

Voordat we verder gaan, testen we eerst of alles goed werkt. Zorg dat je pimatic goed hebt werken en installeer indien nodig de GPIO plugin.
Zet het volgende stuk code in je config, onder de devices sectie.


code:
1
2
3
4
5
6
{
      "id": "warmte",
      "class": "GpioSwitch",
      "name": "warmte",
      "gpio": 17
    },



Sla de wijzigingen op en reboot pimatic. Je hebt nu een ON/OFF device met de naam warmte in je installatie. Voeg de knop toe aan je GUI en test de knop uit. Wanneer je deze op ON zet, zal de klep van je stadsverwarming open moeten gaan. Indien je een ketel hebt, zal deze moeten gaan branden.
Gebeurt er niets? Controleer dan je bedrading tussen de Raspberry Pi, relay en CV nogmaals goed.

Stap 2 : Temperatuur in de woonkamer meten
We kunnen nu de CV aan en uit zetten wanneer we maar willen. Victory! Tijd om een stap verder te gaan, we willen namelijk ook weten hoeveel graden het in de woonkamer is.
De makkelijkste manier om de sensor op te hangen op de plek van je oude thermostaat. Er zit al een gaatje in de muur, en er loopt al een kabel naar de CV (waar je Raspberry Pi hangt).
Verbind de 3 pootjes van de sensor aan de 3 aders van je kabel. Onthoud welke kleur aan welk pootje.
Kijk naar het plaatje voor de juiste layout :

http://zooi.oostindie.com/images/247ds18b20_pinout.gif

Aan de andere kant van de kabel hebben we nog 1 onderdeel nodig : een weerstand van 4.7K. Plaats de weerstand tussen de VCC en de data (middeslte poot):

http://zooi.oostindie.com/images/736sensor_connection.png

Verbind vervolgens de VCC aan de 3.3V van de Raspberry Pi, de GND aan de GDN en de data aan GPIO 4 (BCM GPIO 23).
Zorg dat je de DS18B20 plugin geÔnstalleerd hebt op Pimatic en pas je modules bestand aan:

sudo nano /etc/modules


Voeg de volgende regels toe:

code:
1
2
w1-gpio
w1-therm


Reboot je Raspberry Pi en kijk of de sensor gevonden word:

cd /sys/bus/w1/devices
ls -l

Je ziet nu 2 directorys, 1 daarvan ziet er zo uit 28-xxxxxxxxxxxx
Indien je geen directory met 28-xxxxxxxxxxxx ziet , klopt je bedrading niet. Controleer deze. Is je sensor gloeiend heet? Dan heb je de VCC en GND omgedraaid of zit je weerstand niet goed. De sensor kun je dan weggooien :(
Onthoud het volledige 28-xxxxxxxxxxxx nummer.

Mocht je meerdere DS18B20 sensors willen toevoegen, dan kan dat. Onthoud goed : alle sensors moeten op 1 kabel met slechts 1 weerstand. Je mag er meerder op 1 lange kabel plaatsen, of vanuit de Raspberry Pi als een soort ster netwerk.
Elke keer als je een nieuwe sensor toevoegt, zul ju op bovenstaande manier het ID moeten achterhalen.

Zet het volgende stuk code in je config, onder de devices sectie.


code:
1
2
3
4
5
6
7
{
  "id": "woonkamer-sensor",
  "name": "Woonkamer",
  "class": "DS18B20Sensor",
  "hardwareId": "28-xxxxxxxxxxxx ",
  "interval": 60000
}



Waarbij 28-xxxxxxxxxxxx dus het eerder onthouden ID van je sensor is.
Sla de wijzigingen op en reboot pimatic. Je hebt nu een temperatuur device met de naam Woonkamer in je installatie. Voeg de sensor toe aan je GUI. Je moet nu de temperatuur van de woonkamer zien.

Stap 3 : Warmte schakelen op basis van omgeving
Nu begint het leuk te worden. We kunnen nu de CV aan of uit zetten wanneer we dat willen, en we kunnen ook nog eens de temperatuur in de woonkamer meten. De Raspberry Pi is ineens een slimme thermostaat geworden :Y)
Door middel van rules kun je nu de CV aan of uit zetten. Je kunt hier zo creatief in zijn als je zelf wil. In een volgende blog ga ik dieper in op de aansturing van je CV om dit zo slim mogelijk en gebruikersvriendelijk mogelijk te doen.

Het lukt niet, ik snap het niet, ik heb hulp nodig! :?
Als je vragen hebt, kun je deze beter in het pimatic topic stellen : het grote pimatic topic - home domotica met je Raspberry Pi
Dat is makkelijker dan her te behandelen (je bereikt ook een groter publiek dan alleen Koffie :P ).

Inhoudelijk reacties op specifiek dit artikel kunnen uiteraard gewoon in de comments.

=[UPDATE]=
Deel 2 is nu ook online: Koffie's tweakblog: Je kachel aansturen met pimatic, een echte thermostaat

(stads)verwarming draadloos schakelen

Door Koffie op woensdag 12 november 2014 21:31 - Reacties (17)
Categorie: -, Views: 6.524

Zoals nu toch wel bekend zou moeten zijn, stuur ik mijn verlichting en verwarming aan met een Raspberry Pi en pimatic. Nog niet mee bekend? Kijk dan vlug bij mijn andere blogs.

Mijn manier van verwarming aansturen verschilt iets van die van de meeste: wij zitten namelijk opgezadeld met stadsverwarming.
Dat betekend dat er simpelweg een gesloten circuit voor mijn radiators in huis aanwezig is, met een aan- en afvoer van heet water van de nuon.
Toen wij dit huis kochten was er niets geregeld om dit te sturen. Geen thermostaat en ook geen afsluiter.
Wij hebben toen direct een honeywell klep op de aanvoer laten zetten, zodat we deze met een normale thermostaat konden bedienen.

Een van de allereerste dingen die ik automatiseerde in huis was dan ook deze afsluiter.
In plaats van een thermostaat, was het nu een relay die de afsluiter open of dicht zette.
Dit heeft tot nu toe altijd prima gewerkt, maar had toch wel 2 nadelen:
- De Raspberry Pi moest in de buurt van het relay geplaatst worden om zo de GPIO rechtstreeks aan het relay te hangen
- Bij een major storing op de Raspberry Pi kan ik de verwarming niet handmatig aanzetten.

Om dit op te lossen heb ik een attiny samen met een RF zender en ontvanger op een klein breadboardje geplaatst. Vervolgens het relay op dezelfde attiny aangesloten en vervolgens afgemaakt met een stukje software.

De attiny reageert op een normaal klik aan klik uit adres van mijn afstandsbediening. Wanneer er een ON signaal ontvangen word, gaat het relay aan. Word er een OFF signaal ontvangen gaat hij weer uit.
Als extra zekerheid word er 5 seconden na het ontvangen van het signaal een antwoord teruggestuurd. Dit antwoord is wederom KaKu, maar nu een ander adres met dezelfdestate als ontvangen is.
Doordat er nu een bevestiging teruggestuurd word, kan ik in pimatic rules maken die een nieuwe poging doen wanneer er na het versturen geen antwoord is ontvangen. Bij een 2e milsukte poging word er dan een alert via push-over verstuurd.

Door bewust een adres van mijn bestaande KaKu afstandsbediening te gebruiken, weet ik zeker dat ik altijd makkelijk met de hand de kachel kan overrulen als er een probleem met de Raspberry Pi is.

Attiny sketch, inclusief pin bezetting, en libraries staan op github: https://github.com/koffienl/attiny-kaku

Foto's en video (let niet op de bende in de meterkast :+ ) :

http://zooi.oostindie.com/images/6042014_11_12_20_tn.55_tn.38_tn.jpg http://zooi.oostindie.com/images/7592014_11_12_20_tn.56_tn.13_tn.jpg

Native RF zenden en ontvangen met pimatic

Door Koffie op vrijdag 7 november 2014 21:46 - Reacties (43)
Categorie: -, Views: 22.290

Na mijn vorige blog over pimatic is er al weer een hoop gebeurt.
Inmiddels is er een eigen topic op het forum: het grote pimatic topic - home domotica met je Raspberry Pi en beik volledig overgestapt van zenden en ontvangen via pilight naar pimatic.

Het is misschien iets moeilijker dan gewoon een zender en ontvanger aan je pi knopen, maar het levert een hoop voordelen op. Zo is mijn CPU verbruik gezakt van gemiddeld 50% naar gemiddeld 5% :Y)

Wat heb ik allemaal nodig :?
Eigenlijk niet veel. Om te beginnen een goed setje RF zender en ontvanger (liefst type "433MHz Superheterodyne") en een Arduino Nano clone. That's it.
Een nano clone is al voor een dollar of 4 te koop op ebay, dus dat zijn de kosten niet.

Hoe sluit ik het allemaal aan :?
Het makkelijkste is om de zender, ontvanger en arduino op een breadboard te plaatsen, en deze vervolgens met jumperwires met elkaar te verbinden.
Hoewel je verschillende pinnen van je arduino kunt gebruiken, is het 't makkelijkst om de standaard te volgen:

http://zooi.oostindie.com/images/862pins_nano.png

Je ontvanger heeft als het goed is 4 pinnen: GND, DATA, DER, VCC
Wij hebben alleen de GND, DATA en VCC nodig. Sluit de GND aan op pin 29 GND, sluit DATA aan op pin 5 D2 en de VCC op pin 27 +5V

Je zender heeft er ook 4 : VCC, DATA, GND, ANT
Sluit de VCC aan op pin 27 +5V, de DATA op pin 7 D4 en de GND op png 29 GND.
Eventueel kun je een jumperwire op de ANT plaatsen.

Sluit vervolgens de nano aan op de USB port van je Raspberry Pi, dubbelcheck dat deze ttyUSB0 toegewezen heeft gekregen:
pi@raspberrypi ~ $ cd /dev
pi@raspberrypi /dev $ ls -l ttyUSB?
crw-rw---T 1 root dialout 188, 0 Nov  7 20:26 ttyUSB0
pi@raspberrypi /dev $


Indien je geen andere gekke dingen aan je Pi hebt hangen zal deze gewoon ttyUSB0 zijn.

Software compileren en naar je Arduino Nano uploaded
Voordat we verder kunnen, hebben we arduino-mk nodig: sudo apt-get install arduino-core avr-libc avrdude binutils-avr gcc-avr libconfig-yaml-perl libftdi1 libyaml-perl screen python-serial.
Na installatie kun je de sketch file downloden: git clone --recursive https://github.com/pimatic/homeduino.git

Bewerk nu met nano het Makefile bestand in de homeduino folder. Er van uitgaande dat je een Arduino Nano Clone op basis van een ATmega328 hebt, kun je de BOARD_TAG gewoon op nano328 laten staan.
Let even goed op de setting MONIOR_PORT deze staat default op /dev/ttyUSB1 terwijl de kans dus groot is dat deze op /dev/ttyUSB0 moet staan.
Sla je wijzigingen op en run het command make upload.

Pimatic configuratie aanpassen
Je hebt nu nog de volgende aanpassingen nodig in je config.json :

code:
1
2
3
4
5
6
7
8
9
10
{
  "plugin": "homeduino",
  "driver": "serialport",
  "driverOptions": {
    "serialDevice": "/dev/ttyUSB0",
    "baudrate": 115200
  },
  "receiverPin": 0,
  "transmitterPin": 4
}



Let hier weer op de ttyUSB0 ;)
De receiverpin en transmitterpin zijn gelijk aan de pinnen van deze handleiding.
Als je nu ook nog debug aan zet in je config, zul je in de logfile alle receives voorbij zien komen:

code:
1
2
3
"settings": {
    "debug": true,
    "logLevel": "debug",



Sla je wijzigingen op en start pimatic. Bekijk nu je logstream door middel van tail -f pimatic-daemon.log als je nu bijvoorbeeld een KaKu commando verstuurd zul je deze voorbij zien komen:
20:42:47.990 [pimatic-homeduino] debug: switch1:  { id: 9565958, all: false, state: true, unit: 1 }
20:42:48.022 [pimatic-homeduino] debug: contact1:  { id: 9565958, all: false, state: true, unit: 1 }
20:42:48.603 [pimatic-homeduino] debug: data: "RF receive 270 2716 1363 10620 0 0 0 0 010002000202000002000202000002000200020200020002000200020000020200020002000002000200020002000202000200000200020200000200020002020003"


Als je nu een KaKu switch aan je config wil toevoegen, gebruik je het volgende voorbeeld:


code:
1
2
3
4
5
6
7
8
9
10
11
12
{
  "id": "rfswitch",
  "name": "RFSwitch",
  "class": "HomeduinoRFSwitch",
  "protocols": [{
    "name": "switch1",
    "options": {
      "id": 42,
      "unit": 0
    }
  }]
}



Voor een complete lijst van ondersteunde protocollen kun je hier even kijken: https://github.com/pimati.../blob/master/protocols.md

Een van de protocollen die direct mijn aandacht trok is het zogenoemde generic protocol. Met dit ptocol kun je een ID, sensornummer en value versturen.
Oftewel : een volledig build-in protocol voor mijn draadloze tempereatuur sensor :Y)
Geen gedoe meer met een protocol in pilight welke weer omgecat moet worden tot een generic_weather welke weer door pimatic-pilight plugin opgepikt word, maar gewoon rechtstreeks een temperatuur naar pimatig sturen.
Inmiddels draait mijn bestaande sensor op de aangepaste code, maar meer daarover in een andere blogpost.


Resources:
https://github.com/Yves911/generic_433_sender
https://github.com/pimatic/homeduino
https://github.com/pimatic/pimatic-homeduino
https://github.com/pimati.../blob/master/protocols.md
http://r.ebay.com/WucSA6 (Arduino Nano)
http://r.ebay.com/Abfrlq (433 Mhz Superheterodyne)
https://github.com/pimatic/pimatic/issues
het grote pimatic topic - home domotica met je Raspberry Pi

Prototype pimatic-homeduino zender/ontvanger met antenne:
http://zooi.oostindie.com/images/3092014_10_30_19_tn.25_tn.34_tn.jpg http://zooi.oostindie.com/images/2302014_11_05_09_tn.14_tn.08_tn.jpg