Van houtkachel naar pelletkachel: 1 jaar later

Door Koffie op woensdag 28 februari 2018 12:55 - Reacties (53)
Categorie: -, Views: 13.394

Verhaaltje vooraf
Al jarenlang ben ik fervent houtstoker en heb vrijwel altijd een openhaard of houtkachel in mijn woningen gehad.
Toen we destijds ons huidige huis kochten was dan ook letterlijk het eerste wat we regelde een afspraak bij een openhaarden toko voor een mooie inbouw haard.
We kozen voor een strakke inbouw met glasliftdeur. Het enige wat zichtbaar was, was een glazen ruit welke bij openen volledig in de muur verdween.
Door deze liftdeur constructie kon de haard op 2 manieren gebruikt worden : met gesloten ruit was het een houtkachel en met de deur open werd het een openhaard. Beide standen van de deur zorgden voor een andere stand van de kleppen.

http://zooi.oostindie.com/images/404DSCF2508_resize.jpg

En toch knaagde het al die jaren: het rendement van deze haard viel tegen. Daar waar mijn vrouw op de hoek van de bank (naast de haard) wegdreef van het zweet, zat ik aan de andere kant van de bank te klagen over kou.
Ik was er van overtuigd dat geforceerde convectie dmv een inbouw fan voor deze haard een veel groter rendement zou opleveren.
Helaas kleeft er ook een groot nadeel aan een inbouwhaard: zonder de muur waar hij in staat te slopen kom je eigenlijk nergens bij.
Daar waar je aan de voorkant een ruit van circa 60x50 cm ziet, zit de rest (een kolos van 56x154) achter de muur weggewerkt.
Aan het eind van het stookseizoen 2015/2016 kregen we problemen met de liftdeur, deze wilde niet meer dicht.
We hebben het stookseizoen afgemaakt en eigenlijk gedacht 'daar kijken we nog wel eens naar'.
In de zomer heb je toch niet zoveel last van een half open deurtje in je houtkachel.
Na de zomer gingen we weer langzaam aan stoken, maar werd duidelijk dat er geen beweging meer in de liftdeur zat. Een paar keer contact met de verkoper gehad, maar die kon telefonisch weinig betekenen en alleen maar uitleggen dat reparatie/inspectie aan het hele mechanisme alleen maar mogelijk was door eerst de wand open te breken. Slik.

Wanneer de haard niet brandde was het goed te merken dat er een koude tocht via deze opening de woonkamer in kwam. Er moest iets gebeuren: of de deur werd gerepareerd of de haard moest eruit.
Paar avonden brainstormen en alle voors en tegens wegstrepen waren we er wel uit : de 14 jaar oude kachel ging eruit, en dus ook de muur. Hiermee hadden we eigenlijk 3 opties:
- Een nieuwe inbouwhaard plaatsen en de muur weer terugbrengen
- De muur volledig verwijderen en een vrijstaande haard plaatsen

Tijdens de zoektocht naar oplossing werd ik getipt "waarom kijk je niet naar een pelletkachel?". Nu had ik er wel eens wat over gehoord, maar in mijn hoofd gaf dit teveel nadelen : een klein zichtbaar vlammetje door een kijkglaasje en stervensduur.
Na een avondje googlen bleek er weinig waar te zijn van deze mening. Sterker nog : er viel zelfs subsidie te behalen bij de aanschaf van een pelletkachel.
Meer en meer werd ik fan van een pelletkachel, en uiteindelijk hebben we er dus eentje besteld.
We kozen voor een Magikal solea Cuba 13 kW.

Wat is een pelletkachel?
Even heel kort door de bocht uitgelegd: een pelletkachel is in basis niets meer dan een normale houtkachel waarbij je niet stookt op blokken hout maar op een soort korrels (pellets). Deze pellets zijn gemaakt van samengeperst (afval)hout. Pellets lijken qua vorm een beetje op biks (paardenvoer / konijnenvoer :P )

https://tweakers.net/ext/f/IdrVfD33NR3fmbWachnCXHRw/full.jpg

In principe kun je pellets in elke haard gebruiken. Gooi een handje pellets erin, steek de boel aan en blijf af en toe brandstof (pellets) toevoegen. Dat is natuurlijk niet handig, en daar komt de moderne pelletkachel om de hoek kijken.
Een pelletkachel is volgepropt met verschillende sensoren, fans en een moederbord. De pelletkachel kan alles zelf regelen. Druk op de knop en hij zal zelf pellets gaan laden, om deze vervolgens te onsteken en bij te blijven voeren. De verschillende sensoren geven informatie over de temperatuur op verschillende plekken (bijvoorbeeld de rookgasafvoer) waarop het moederbord reageert door alles te regelen.

De overstap
Half december 2016 stond ik dus een muur weg te bikken en rolde we een mini verbouwing in.
De verkoper was er eentje van de oude stempel : meedenken, stapje extra doen en als iets niet goed is doen we het opnieuw.
Hij heeft mij enorm geholpen met het inkorten van de bestaand dubbelwandige pijp van 200mm naar een enkelwandige pijp van 80mm voor de rookgasafvoer (het zichtbare gedeelte in de woonkamer, de rest van de pijp is nog steeds netjes dubbelwandig).
Op 1 van de allerlaatste dagen van 2016 werd de pelletkachel geleverd en geinstalleerd. Door problemen met een stucadoor (door het weghalen van de muur moest er een stuk opnieuw gedaan worden) wisten we dat een week later de kachel weer tijdelijk van zijn plek moest zodat de muren afgemaakt konden worden.
Bij de eerste inbrandsessie stond (uiteraard) het huis blauw van de rook, iets wat je altijd de eerste uurtjes hebt bij een nieuwe kachel. Ramen en deuren open (midden in de winter) en al snel was het 16 graden in de woonkamer. Na verloop van tijd steeg de temperatuur. Ik was verbluft : midden in de winter met ramen en deuren open en deze kachel weet de temperatuur omhoog te krijgen :o

http://zooi.oostindie.com/images/16220170104_195904_tn.jpg

Eerste gebruik
In de dagen na de installatie natuurlijk flink lopen spelen met onze nieuw aanwinst. Wat een warmte kwam eruit dat apparaat zeg!
Door de actieve ventilatie werd nu niet alleen het hoekje waar de kachel staat warm, maar zelfs tot in de keuken liep je tegen een muur van warmte op. Wanneer de pelletkachel uit gaat, kan hij tot nog een half uur daarna actief nadraaien om alle restwarmte uit de kachel de woning in te blazen.
Ik was in mijn nopjes met deze zee van warmte. Ik heb het dan ook krap een week volgehouden om er met mijn tengels af te blijven, maar daarna de knoop doorgehakt : de pelletkachel krijgt een ESP8266 om zo door mijn domotica systeem aangestuurd te kunnen worden. De stadsverwarming gaat dicht en de pelletkachel neemt de gehele benedenverdieping voor zijn rekening.
De eerste dagen zijn natuurlijk spannend (start zo'n ding wel goed op als je er niet bij bent?) maar al snel was het vertrouwd en heerlijk om 's ochtends beneden te komen in een warme woonkamer met een heerlijk brandende kachel :)

Omdat deze pelletkachel veel meer warmte geeft in een kort tijdsbestek dan ik normaal met mijn radiators haalde was het niet langer nodig verwarming aan te sturen op basis van een standaard weekschema.
Al snel stapte ik dus over op aansturen op basis van aanwezigheid. Iemand thuis? Dan mag het 20 graden zijn. Iemand thuis, na 22:00 en woonkamer verlichting uit? Laat maar zakken tot 16 graden.
Vanaf 5 uur in de ochtend mag het dan weer 20 graden worden (mits iemand thuis).
Zodra iedereen in de loop van de dag weg is zakt het weer terug naar 17 graden.
In februari vorig jaar waren we een weekend weg, ik heb de thermostaat toen bij vertrek op 10 graden gezet zodat het hele weekend niet verwarm werd.
De maandagochtend vlak voor vertrek was het 13,75 graden in de woonkamer :o Op afstand de pelletkachel gestart en laten verwarmen. Tegen de tijd dat ik rond 12 uur 's middags de oprit op reed was het 20,75 :Y) In een kleine 3 uur tijd de woonkamer met 7 graden opgestookt.

Stookgedrag na een tijd experimenteren
Elke pelletkachel is anders en elke fabrikant heeft weer een andere manier van aansturen van de pelletkachel.
Vrijwel elke moderne pelletkachel kan minimaal verwarmen op basis van temperatuur. Zet de pelletkachel aan, stel een gewenste temperatuur in en hij zal de boel opwarmen. Is de temperatuur bereikt dan zijn een aantal scenarios mogelijk (afhankelijk van zowel de instelling als het merk en type). De kachel kan simpelweg stoppen met de aanvoer van pellets. Het vuur zal dan doven en het verwarmen stopt hiermee.
Ook kan de kachel gaan moduleren: hij houd het vuur brandend maar niet op vol vermogen. Hij zorgt dat de behaalde temperatuur behaald word.
Ook hebben de meeste pelletkachels wel een mogelijkheid om een weekschema te programmeren, zodat op gezette tijden het een bepaalde temperatuur is. Dit komt nog het dichtst bij een normale situatie met een wandthermostaat en een CV ketel.

Mijn pelletkachel kan alle bovenstaande opties : stoken tot een bepaalde temperatuur en dan uitgaan, stoken tot een bepaalde temperatuur en dan moduleren en uiteraard een voorgeprogrammeerd weekschema.
Ik he besloten geen van deze opties te gebruiken. De kachel staat standaard ingesteld op een temperatuur die hij normaal nooit bereikt (25 graden bijvoorbeeld).
Mijn domotica systeem stuurt, op basis van verschillende parameters de kachel aan. Wanneer het te koud is gaat de kachel aan en blijft net zolang stoken tot het domotica systeem vind dat de doeltemperatuur behaald is (en dus niet tot de pelletkachel dat vind).
Wanneer mijn pelletkachel uitgezet word, kan hij soms tot wel 3 kwartier daarna nog restwarmte uitblazen.
Ik heb dus een aantal extra voorwaarden verbonden aan het aan en uit mogen zetten van de pelletkachel:
- De pelletkachel mag pas aan wanneer deze minimaal 1 uur lang uitstaat. Ongeacht hoeveel graden het is (tijd heeft dus voorrang op de omgevingstemperatuur)
- De pelletkachel mag pas uit wanneer deze minimaal 1 uur aan staat. Ongeacht hoeveel graden het is (tijd heeft dus wederom voorrand op de omgevingstemperatuur)
- Wanner de pelletkachel aan gezet word, en de te overbruggen temperatuur tussen omgevingstemperatuur en doeltemperatuur is meer dan 2,5 graden dan word de zogenoemde powermodus met +1 opgehoogd voor 1 uur lang

Over de zogenoemde powermodus: mijn pelletkachel heeft een maximaal vermogen van 13 kw. Dit is verdeeld over 5 standen. Stand 1 is het laagst, stand 5 is het hoogst.
In de praktijk is stand 2 meer dan genoeg. Wil je snel veel warmte dan zet je deze modus een standje hoger. Hoe hoger de stand, hoe hoger het verbruik in pellets en hoe harder de kachel zijn warmte naar buiten blaast.
Heel eerlijk gezegd : deze kachel kan zo f*cking heet branden dat ik nog nooit voorbij stand 4 ben durven gaan :o

Verbruik
Mijn jaarafrekening voor warmtegebruik (ik heb stadsverwarming) vind elk jaar plaats in de laatste dagen van februari.
Het eerste jaar met de pelletkachel was nog even zoeken naar het gebruik in de praktijk, afstemmen van domotica op de pelletkachel ed.
In de praktijk blijkt dat ik maximaal 1 zak van 14 kilo pellets op een dag verbruik. Met maximaal bedoel ik : het is goed koud buiten en er is de hele dag iemand thuis. Overall gezien ligt het verbruik soms aardig lager.
In de periode van 1-1-2017 t/m 28-2-2017 (dag 1 pelletkachel t/m dag van afrekening) heb ik 42 zakken a 14 kilo gebruikt.

Zojuist heb ik wederom de stand van mijn warmtemeter moeten doorgeven en heb ik dus een volledig jaar met pelletkachel gedaan.
Over de periode 1-3-2017 t/m 28-2-2018 heb ik 99 zakken a 14 kilo gebruikt.
Kijk ik naar mijn historische data van jaarafrekeningen dan heb ik ongeveer 25 gigajoule miner verbruikt ten opzichte van een zelfde periode waarin geen pelletkachel gebruikt werd.
Die 25 gj zou mij bij de Nuon ongeveer 543 euro gekost hebben.
Voor de 1386 kilo pellets heb ik ongeveer 406,- betaald. Een besparing van 137 euro.

Nu hoor ik de gemiddelde betweterige tweaker al mopperen : je vergeet je aanschafkosten van de kachel en de verbouwingskosten. Dat klopt. Zoals ik al aangaf aan het begin van deze post heb ik altijd al een houtkachel gehad en was ik niet van plan deze weg te doen. Als ik al had besloten de kachel te verwijderen had ik minimaal de kosten gehad voor het weer in orde brengen van de muren, maar een nieuwe haard zou er sowieso al komen.
Daarnaast heb ik ook niet meegerekend dat ik in het jaar waar ik mee vergelijk, ik wel gewoon hout heb gestookt in de houtkachel. Dat hout heeft natuurlijk ook geld gekost.

Stook je nu wel of niet je hele huis op de pelletkachel?
Wij zijn een gezin van 2 volwassenen en 2 kinderen. In principe verwarmen wij alleen de woonkamer en de aangrenzende open keuken. Op de slaapkamers (en andere kamers) staat de radiator altijd dicht. Enige uitzondering : de badkamer.
Normaal was de badkamer altijd wel warm, als de woonkamer met stadsverwarming werd verwarmd werd de radiator in de badkamer automatisch ook warm. Doordat de radiators in de woonkamer dicht staan, en mijn domotica systeem de stadsverwarming niet meer open zet werd de badkamer ook niet meer warm.
Ik heb dit opgelost door de badkamer 1 uur aan te laten springen op het moment dat er iemand na 5 uur 's ochtends beneden komt.
In de avond gaat de badkamer ook 1 uur aan, maar dat is tot nu toe eigenlijk op basis van zelf even met de app een knopje indrukken.
Al het overige warmteverbruik komt door het gebruik van warm tapwater (handen wassen, douchen etc).

Waar vind ik meer informatie over een pelletkachel?
Zolang je pellet goed spelt (en dus niet 'pallet' ;) ) kom je met google aal een heel eind. Uiteraard is er ook een topic voor pelletkachels op het forum : Het pelletkachel topic

Build your own Pimatic GUI - with template

Door Koffie op maandag 20 februari 2017 14:58 - Reacties (3)
Categorie: -, Views: 2.652

Blog is in stonecoal English, sorry :P

This blog is a updated, English, version of my previous blog: Koffie's tweakblog: Maak je eigen HTML GUI voor Pimatic - Basic
I have created a template GUI that you can edit/extend with you own information

Prerequisites:? /
- Pimatic up and running
- Some sort of webserver for hosting your files with some basic webserver knowledge
- Basic Ppimatic knowledge
- A little knowledge of HTML/Javascript/Jquery
- Template webfiles : https://github.com/koffienl/PimaticGUI/tree/master/Template
- A admin username and password for Pimatic API connection

Installation :?
Installation is easy. Download the template webfiles from github and copy them into the webroot of your favorite webserver. The HTML assumes that the index.html file is in the root of the URL (http://ipwebserver/index.html not http://ipwebserver/mygui/index.html).

Open js/pimatic-socket.js in you favorite text editor and go to line 8 :

code:
1
var socket = io.connect('http://pimatic_ip/?username=admin&password=admin', {


Edit this line so that it corresponds with the FQDN / IP of your Pimatic server with a correct username and password.
Save the file

Now open your GUI by browsing to http://ipwebserver/index.html in your favorite browser.
You should a page like this:

http://zooi.oostindie.com/images/444pimatic_UI_template_tn.jpg

That is, you have installed your own GUI :Y)

Getting thermostat / heating info on the GUI :?
the first 'block' (Row 1, Column 1) contains everything to get info about thermostat/heating into the GUI. If you do not want this in your GUI you can remove it from the HTML file.

Open index.html in your favorite text editor and go to line 61 look for the following code:

code:
1
<h2 id="LivingRoomTemperature">LivingRoomTemperature</h2>



This line will be used to display the current livingroom temperature used in Pimatic. Go to the original pimatic website and look for the variable that is used for displaying the livingroom temprature. Click on the text, a black 'popup' will appear.

http://zooi.oostindie.com/images/300pimatic_UI_find_ID.jpg
The first line will begin with ID: followed by the ID of the device.
With this little trick you can find out the Pimatic ID of the device you wan to add to the GUI. When using a (Pimatic) ID in this guide, use this to find the ID you need.
Remember te ID you have. In my example the ID is id-woonkamer-temperatuur
Go back to the editor and change the ID used in the HTML.

Change this

code:
1
<h2 id="LivingRoomTemperature">LivingRoomTemperature</h2>



Into this:

code:
1
<h2 id="">LivingRoomTemperature</h2>



By default the template only supports buttons and presence devices. So we have to add some coded to js/pimatic-socket.js
Go to line 63 and add the following code:

code:
1
2
3
4
            if (devices[key].id == "id-woonkamer-temperatuur")
            {               
                $("#gui").find('#LivingRoomTemperature').html("LivingRoomTemperature" + devices[key].attributes[0].value +" °C")
            }



Save both file (index.html and pimatic-socket.js and do a hard refresh (CTRL-F5) in your browser.
If you did everything according to this guid, you should see the temperature of your livingroom with the same value as in Pimatic.

Unfortunately this code only updates the temperature upon connecting to Pimatic. We need to add some extra lines to update the temperature every time Pimatic send a updated temperature.

In /js/pimatic-socket.js search for the following code:

code:
1
2
socket.on('deviceAttributeChanged', function(attrEvent) {
    console.log(attrEvent);


Right after these 2 lines, add this code:

code:
1
2
3
4
   if (attrEvent.deviceId == "id-woonkamer-temperatuur")
   {
        $("#gui").find('#LivingRoomTemperature').html("LivingRoomTemperature " + attrEvent.value +" °C");
   }


Save the file and do a hard refresh in your browser.
You should see the livingroom temperature that will be updated realtime as soon as Pimatic receives a new value.

Now we can do the same for a other temperature. In my example I will use a weather temperature value.
Find the Weather temperature in the index.html :

code:
1
                                    <h4 id="WeatherTemperature">WeatherTemperature</h4>



Find the ID of your weather temperature. In my situation the ID is weer.
Find the previous added code:

code:
1
2
3
4
            if (devices[key].id == "id-woonkamer-temperatuur")
            {               
                $("#gui").find('#LivingRoomTemperature').html("LivingRoomTemperature" + devices[key].attributes[0].value +" °C")
            }



Right after that, add the following code:

code:
1
2
3
4
            if (devices[key].id == "weer")
            {
                $("#gui").find('#WeatherTemperature').html("Lelystad " + devices[key].attributes[0].value +" °C");
            }



Now we have to add extra code to update the temperature when getting pushed from pimatic.
find the previous added code:

code:
1
2
3
4
   if (attrEvent.deviceId == "id-woonkamer-temperatuur")
   {
        $("#gui").find('#LivingRoomTemperature').html("LivingRoomTemperature " + attrEvent.value +" °C");
   }


Right after that, add the following code:

code:
1
2
3
4
   if (attrEvent.deviceId == "weer")
   {
        $("#gui").find('#WeatherTemperature').html("Lelystad " + attrEvent.value +" °C");
   }



OK, so far we have added the livingroom temperature and the weather temperature. When we open the page the info is gathered from Pimatic and when Pimatic pushes a updated value it is immediately changed on your GUI.
Next step is to display some information about the state of the (dummy)thermostat).

In my example, the ID of the thermostat is thermostaat

Find the previous added code:

code:
1
2
3
4
            if (devices[key].id == "weer")
            {
                $("#gui").find('#WeatherTemperature').html("Lelystad " + devices[key].attributes[0].value +" °C");
            }


Right after that, add the following code:

code:
1
2
3
4
5
            if (devices[key].id == "thermostaat")
            {
                $("#gui").find('#setpoint').html("Setpoint " + devices[key].attributes[0].value +" °C");
                $("#gui").find('#mode').html(" [" + devices[key].attributes[2].value +"]");
            }



To update the information after a update from Pimatic:
Find the previous added code:

code:
1
2
3
4
   if (attrEvent.deviceId == "weer")
   {
        $("#gui").find('#WeatherTemperature').html("Lelystad " + attrEvent.value +" °C");
   }


Right after that, add the following code:

code:
1
2
3
4
5
6
7
8
9
   if (attrEvent.deviceId == "thermostaat" && attrEvent.attributeName == "temperatureSetpoint")
   {
       $("#gui").find('#setpoint').html("Setpoint " + attrEvent.value +" °C");
   }

   if (attrEvent.deviceId == "thermostaat" && attrEvent.attributeName == "mode")
   {
       $("#gui").find('#mode').html(" [" + attrEvent.value + "]");
   }



When doing a hard refresh on indedx.html in your browser, all the thermostat information should be the same as in Pimatic.
Try changing the mode or setpoint temperature in Pimatic, you should see a instant update in your own GUI :Y)

Now one more last thing we need is the option to change the setpoint from the GUI. In the pimatic-socket.js there is allready some code for this:


code:
1
2
3
4
5
6
7
8
9
10
function ChangeSetpoint(type){
    socket.emit('call', {
        id: 'executeAction-1',
        action: 'executeAction',
        params: {
            actionString: 'press ' + type
        }
    });

}



This function is called when you click / tap on the arrows you find next to the text "Change setpoint".
This code will tell the Pimatic API to press 2 buttons called setpoint-min and setpoint-plus
Go to Pimatic and create a buttons device:
http://zooi.oostindie.com/images/372pimatic_UI_ChangeSetpo_tn.jpg

You now have the 2 buttons that will be 'pressed' by the GUI through the API. Pressing these buttons will do nothing, so you have to add some rules to the buttons:

code:
1
WHEN setpoint-plus is pressed THEN set temp of thermostaat to ($thermostaat.temperatureSetpoint + 0.5)



code:
1
WHEN setpoint-min is pressed THEN set temp of thermostaat to ($thermostaat.temperatureSetpoint - 0.5)



Test it by clicking / tapping on the arrows. It should change your setpoint and update the new values immediately in the GUI.

You are almost done with the thermostat block. Only one last thing is needed: a ON/OFF button for your heating device.
Find the ID for your heating device in Pimatic. In my case the ID is pelletkachel-power
Search for the following line index.html :

code:
1
<button class="btn btn-default btn-lg fullwidth uibutton" onclick="toggleDevice('heating-device')" id="heating-device">Heating Device</button>


Change the 2 words heating-device with your Pimatic ID. For me this would be:

code:
1
2
3
4
5
6
7
8
9
<button class="btn btn-default btn-lg fullwidth uibutton" onclick="toggleDevice('pelletkachel-power')" id="pelletkachel-power">Heating Device</button>[/b]

Refresh the index.html in your browser. When you press the [b]Heating Device[/b] button in the GUI, it should by turned on in Pimatic. When you turn it off in Pimatic you should see change the button in your GUI

[b]Adding extra buttons to the GUI :? [/b]
OK, the hard part is done, almost any other devices will require just 1 line of HTML code.
On the GUI there is a button called [b]Button 1[/b]. We will change this into a working device. Fin a on/off device in Pimatic and remember the ID. In my case I will use a device with ID [b]terrasoverkapping[/b]
Find [b]Button 1[/b] in the [b]index.html[/b] :
[code]<button class="btn btn-default btn-lg fullwidth uibutton" onclick="toggleDevice('button1')" id="button1">Button 1</button>


Change the ID you hae in Pimatic, and if you want give it a better display name:

code:
1
<button class="btn btn-default btn-lg fullwidth uibutton" onclick="toggleDevice('terrasoverkapping')" id="terrasoverkapping">Button for terrasoverkapping</button>



Save the file and refresh in your browser. Your button should reflect the state in Pimatic when loading the GUI and also update immediately when it is changed in Pimatic.

Adding presence device to the GUI :?
You can add several types of presence devices to the GUI. It can be a dummy-presence device , a ping-device or a contact-device.
First, as usual, find the Pimatic ID of the device. In my example it will be anybody-home. Find the presence device in the index.html :

code:
1
<div class="well well-sm"><b>Presence 1 </b><span class="circle" id="anybody-home"></span></div>


And update it with your info:

code:
1
<div class="well well-sm"><b>Anybody home? </b><span class="circle" id="anybody-home"></span></div>



Save the HTML file and refresh your browser.

You are done! You have created your own GUI that reflects the Pimatic states. It will be update instantly when you something changes in Pimatic. Or, you can push the buttons in the GUI so Pimatic will execute the push on the button.
You can extend the GUI page with as many buttons, text or presence device as you want.

Maak je eigen HTML GUI voor Pimatic - Basic

Door Koffie op zondag 19 februari 2017 12:41 - Reacties (9)
Categorie: -, Views: 3.555

In mijn vorige blog had ik het al even over mijn laatste projectje : een tablet aan de muur om Pimatic aan te sturen.
Omdat de gewone Pimatic GUI soms wat overvol kan raken en niet altijd even vriendelijk is voor non-techneuten ben ik op zoek gegaan naar een makkelijk aan te passen GUI.
Het begon met deze post : https://forum.pimatic.org...g-your-own-user-interface
Gebruiker kitsunen had een HTML pagina in elkaar gezet welke gebruik maakt van de webocket-API van Pimatic.
Omdat de GUI nogal onoverzichtelijk in elkaar zat en heel veel handwerk bevatte, heb ik de files eens flink onderhanden genomen: https://github.com/koffienl/PimaticGUI/tree/master/Basic

Het resultaat is een simpele site welke verbinding maakt met de websocket-API en alles keurig verwerkt in de GUI.
Mijn huidige GUI is een stuk complexer dan waar deze blog over gaat. Daarom heb ik de configuratie behoorlijk gestript zodat er een basic GUI overblijft. Van hieruit kun je zelf aan de gang met uitbreidingen. Later zal ik wat complexere voorbeelden posten.
Om een idee te geven : mijn huidige GUI verschilt op basis van de stand van een dummy switch, welke weer gebaseerd is op het seizoen. Daarnaast heb ik mijn afspraken uit een google calendar ook op de GUI geplaatst. Maar dat is dus voor later.

http://zooi.oostindie.com/images/938pimatic_UI_winter_tn.jpg http://zooi.oostindie.com/images/797pimatic_UI_summer_tn.jpg

Installeren :?
Voor het installeren van de files is niet veel nodig. Gewoon een simpele webserver. Ik ge er vanuit dat je weet hoe je een simpel webservertje installeert en aan de praat krijgt.
Download deze files en plaats ze je in webroot.

Aanpassen naar je eigen pimatic :?
Het eerste wat je moet doen is het bewerken van js/pimatic-socket.js regel 7.
Standaard staat daar:

code:
1
var socket = io.connect('http://pimatic_ip/?username=admin&password=admin', {


Pas deze regel aan naar een correcte URL , username en password voor je pimatic installatie. Omdat de websocket verbinding door de client browser word opgezet, is het van belang dat de URL die je hier opgeeft ook benaderbaar is voor de client. Als je http://192.168.1.1 als URL gebruikt, zal je dit dus niet buiten je eigen netwerk kunnen gebruiken. Verderop in deze blog zal ik nog iets roepen over een reverse proxy hiervoor.

Wanneer je de URL aangepast hebt kun je de GUI gaan gebruiken. De standaard buttons uit mijn installatie zul je niet veel aan hebben, maar het gaat je een beeld geven van de mogelijkheden.
Wanneer de verbinding met de websocket gelukt is, zul je een GUI met buttons zien. Blijft deze leeg, dan is het inloggen niet gelukt en heb je waarschijnlijk wat verkeerd ingevoerd.

Je eigen buttons defineren :?
Ik heb de code zo gemaakt dat het zo simpel mogelijk werkt. Eigenlijk hoef je alleen in de index.html je eigen buttons aan te maken, de code doet de rest.
Bij het verbinden met de websocket krijgt het script de state van alles wat maar in Pimatic aanwezig is doorgestuurd.
De code looped door alle devices en kijkt of er in de GUI een button is met dezelfde naam. Indien deze gevonden word, zet hij de button in de correcte staat.

Wanneer Pimatic een update voor een device heeft, zal hij deze pushen naar alles wat met de websocket verbonden is. Onze GUI krijgt dus vrijwel direct een update wanneer Pimatic een device van state veranderd (dit kan door een gebruiker vanuit de Pimatic GUI zijn, of door Pimatic zelf middels een rule).
Ook hier geld weer hetzelfde : het script kijkt of er een button is met de devicenaam en zo ja dan word deze aangepast.

Om nu te zorgen dat je je eigen buttons in je GUI te zien krijgt, zal ik het eea uitleggen hoe dit te doen.
Open index.html in je favoriete tekst editor Ga naar regel 86, dit is de regel voor een switch met de naam eettafel :

code:
1
<button class="btn btn-default btn-lg fullwidth uibutton" onclick="toggleDevice('eettafel')" id="eettafel">Eettafel</button>



Je ziet hier 3 maal het woord 'eettafel'. Belangrijk om te weten is dat in deze regels de eerste twee woorden 'eettafel' refereren naar het Pimatic ID van een device met de naam 'eettafel' De laatste vermelding van 'Eettafel' (in mijn geval begint deze met een hoofdletter) is puur de weer te geven naam op de knop in de GUI. Je kan hier elke tekst in zetten die je wilt.

Goed, je heb nu in de HTML code gezien hoe een button eruit ziet. Ga nu naar Pimatic en zoek daar een device op die je in je eigen GUI wil zetten.
Stel je hebt een lamp met de naam "Mijn nachtlampje" klik dan op de naam "Mijn nachtlampje" in de Pimatic GUI Er zal nu een zwart popup menutje tevoorschijnkomen. De eerste regel begint met "ID"
Dit is het ID van het device. Stel dat er nu bij jou "ID: nachtlampje" staat, dan weet je dat het ID van "Mijn nachtlampje" "nachtlampje" is.
In de eerder aangehaalde regel voor "eettafel" ga je nu het ID "nachtlampje" gebruiken:

code:
1
<button class="btn btn-default btn-lg fullwidth uibutton" onclick="toggleDevice('nachtlampje')" id="nachtlampje">Knop voor mijn nachtlampje</button>



Sla je wijzigingen op en refresh de pagina in je browser.
Als het goed is zie je nu een knop met de tekst "Knop voor mijn nachtlampje" welke automatisch van staat wisselt wanneer je in Pimatic de knop op ON of OFF zet.
Andersom zal ook werken : wissel de knop in Pimatic en vervolgens vanuit je eigen GUI. Als het goed is kun je je nachtlampje nu vanuit 2 verschillende GUI's bedienen :Y)

Kan dit ook met een presence device :?
Jazeker! Ik maak nogal veel gebruik van de zogenoemde presence devices, dus deze wile ik zeker ook op kunnen nemen in de GUI.

Het bewerken van een presence device is redelijk gelijk aan hoe we een button kunnen bewerken/aanmaken.
Zoek de volgende regel op index.html :

code:
1
<div class="well well-sm"><b>Anybody home </b><span class="circle" id="anybody-home"></span></div>


De eerste vermelding van "Anybody home" is de vrije tekst op de GUI, de tweede vermelding "anybody-home" is het Pimatic ID van de presence device. Ook deze kun je op dezelfde manier achterhalen als het ID van een button.

Hoe zit het met variables :?
Uiteraard kun je ook variables afvangen vanuit de websocket.
Als je kijkt naar de index.html zie je daar linksbovenin een blok welke volledig bedoeld is voor alles wat verwarming en temperatuur te maken heeft.
In Pimatic heb ik een variable voor de woonkamertemperatuur. Deze komt ook terug in de index.html :

code:
1
<h2 id="WoonkamerTemperature"></h2>

code]

Dit ID word ook gebruikt in pimatic-socket.js :

code:
1
2
3
4
            if (devices[key].id == "id-woonkamer-temperatuur")
            {               
                $("#gui").find('#WoonkamerTemperature').html("Woonkamer " + devices[key].attributes[0].value +" °C")
            }


Er word gezocht naar een device met de naam id-woonkamer-temperatuur en vervolgens word de waarde van dit device gebruikt als tekst in het blok WoonkamerTemperature
Op deze manier kun je op verschillende plaatsen de aarde van een variable in je GUI zetten.

Temperatuur van een thermostaat wijzigen :?
Ik maak gebruik van een dummy-thermostat in Pimatic om de gewenste temperatuur in te stellen. Ik vond het belangrijk om de doeltemperatuur te kunnen zien en aanpassen vanuit mijn eigen GUI.
Het stuk in de inde.html wat hiervoor zorgt:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
                        <h3><span id="setpoint"></span><span id="mode"></span></h3>
            <table width=100%>
                <tr>
                    <td width=33% style="text-align:center;">
                        <span class='fa fa-arrow-up' onclick="ChangeSetpoint('setpoint-plus')"></span>
                    </td>
                    <td width=33% style="text-align:center;">
                        <h4>Change setpoint</h4>
                    </td>
                    <td width=33% style="text-align:center;">
                        <span class='fa fa-arrow-down' onclick="ChangeSetpoint('setpoint-min')"></span>
                    </td>
                </tr>
            </table>


Het ID setpoint bevat de waarde van de setpoint. Deze word gevuld vanuit pimatic-socket.js middels de volgende code:

code:
1
2
3
4
5
            if (devices[key].id == "thermostaat")
            {
                $("#gui").find('#setpoint').html("Setpoint " + devices[key].attributes[0].value +" °C");
                $("#gui").find('#mode').html(" [" + devices[key].attributes[2].value +"]");
            }



Het aanpassen van de setpoint vanuit de eigen GUI gebeurd door op de pijltjes te klikken bij de tekst "Change setpoint"
Als je goed kijkt zie je dat bij het klikken op het 'pijltje omhoog' de volgende function word aangeroepen: ChangeSetpoint('setpoint-plus')
Deze function is terug te vinden in pimatic-socket.js :

code:
1
2
3
4
5
6
7
8
9
10
function ChangeSetpoint(type){
    socket.emit('call', {
        id: 'executeAction-1',
        action: 'executeAction',
        params: {
            actionString: 'press ' + type
        }
    });

}


Eigenlijk doet dit niet meer dan een button in Pimatic indrukken met het ID setpoint-plus. Aan deze button hangt weer een rule:

code:
1
WHEN setpoint-plus is pressed THEN set temp of thermostaat to ($thermostaat.temperatureSetpoint + 0.5)



Dit truukje zou je ook voor andere zaken kunnen gebruiken om een wat complexere actie te laten gebeuren door op een simpel iccontje te drukken in je eigen GUI.

Maar mijn wachtwoord staat nu plaintekst in de sourcecode ?! :?
Dat klopt, daar valt helaas weinig aan te veranderen. ik heb dit als volgt opgelost:
- Zorg dat je een DNS record hebt voor je GUI : mijngui.mijndomein.nl en verwijs deze naar je eigen public IP
- Gebruik een Apache server met reverse proxy
- Vraag om een username/password wanneer de client buiten je eigen subnet valt


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<VirtualHost *:80>
        ServerName mijngui.mijndomein.nl

    <Location />
        AuthType Basic
        AuthName "Restricted Files"
        AuthUserFile /usr/local/apache/passwd/passwords
        Require user MijnUsername
  Order allow,deny
  Allow from 192.168.1
  Satisfy any
    </Location>


        ProxyPass / http://192.168.1.1/pimatic/
        ProxyPassReverse / http://192.168.1.1/pimatic/
</VirtualHost>



Op deze manier kun de GUI altijd bereiken via http://mijngui.mijndomein.nl maar krijg moet je een username en password gebruiken als je buiten je subnet (192.168.1.x) valt.
Aanmaken van een apache username : https://httpd.apache.org/...uth.html#gettingitworking

Het is toch nog aardig complex allemaal, kan dit niet wat simpeler :?
Klopt, je hebt een redelijke basiskennis van Pimatic, HTML en javacript/jquery nodig. Dat is inherent aan zelf hobbyen met dergelijke systemen. Wanneer dit allemaal te hoog gegrepen is, kun je wellicht beter gebruik blijven van de standaard GUI die Pimatic je bied.

Je pelletkachel aansturen met pimatic, een stapje verder

Door Koffie op donderdag 9 februari 2017 20:06 - Reacties (11)
Categorie: -, Views: 4.087

Het is alweer een tijd geleden dat ik wat (on)zinnigs heb geroepen over Pimatic, dus hoog tijd om jullie daar mee lastig te vallen :Y)
Eerst een kleine inleiding, daarna ga ik verder over Pimatic
Ik heb al een aantal keren wat verteld over het aansturen van je kachek mbv Pimatic : Koffie's tweakblog: Je kachel aansturen met pimatic, een echte thermostaat

Fikkie stoken!
Ik ben helaas gebonden aan stadsverwarming, wat als enige voordeel heeft dat ik nergens rekening hoef te houden met een modulerende ketel oid. Gewoon simpel aan en uit.
Aangezien het monopolistische stadsverwarming een zeer duur grapje probeer ik zo efficient mogelijk te verwarmen met zo veel mogelijk comfort.
Al sinds wij in ons huis wonen hadden wij een houtkachel. Lekker fikkie stoken, romantisch naar de vlammen staren en genieten van de warmte.

Helaas was de 9kW haard niet heel efficient geplaatst door de installateur, iets wat mij jaren tegen het zere been schopte.
Aanpassen was een prijzig klusje, want het betrof een inbouwhaard. De kleinste aanpassing betekende dus het openbreken van een muur en daarna de muur weer dichtmaken (en opnieuw voorzien van spachtelputz laag zodat de boel er weer netjes uit zag).
Inmiddels liep ik tegen een vastzittende schuifdeur van de haard aan wat er voor zorgde dat ik een open verbinding tussen woonkamer en buiten had via het rookkanaal. Niet echt goed voor de temperatuur in de woonkamer dus ;)

In december hakte we de knoop door : de muur moest open en er moest iets aan de haard gebeuren. Grofweg hadden we 2 opties : de bestaande haard repareren of een nieuwe haard plaatsen.
Aangezien de haard toch wel ruim 13 jaar oud was en niet de efficiėntie gaf die wilden, besloten we om een nieuwe haard te plaatsen. Ook de techniek rondom haarden heeft niet stil gestaan dus er waren modellen met veel meer rendement.

Bij toeval stuitte ik op pelletkachels. Ik wist van het bestaan af, maar had hier eigenlijk 2 vooroordelen over : verschrikkelijk duur in aanschaf en alleen een klein waakvlammetje.
Na een paar uur inlezen bleken beide vooroordelen ongegrond. Het budget wat ik in gedachte had voor de nieuwe haard was ook toereikend voor een pelletkachel, en dat waakvlammetje was toch echt wel wat groter dan ik dacht.
Na een paar avondjes internet afstruinen waren we er uit : de voorzetmuur gaat eruit en er komt een losstaande pelletkachel
Na de nodige verbouwingen aan de woonkamer rond de feestdagen, konden we eindelijk genieten van onze nieuwe warmtebron :Y)

http://zooi.oostindie.com/images/16220170104_195904_tn.jpg

Dit ging toch over Pimatic :?
Na deze lange intro is het tijd om weer op het oorspronkelijke onderwerp terug te keren: Pimatic.
Met het verwarmen middels stadsverwarming had ik een 'programma' nodig welke op gezette tijden de setpoint van de gewenste temperatuur te wijzigen, zodat het lekker warm zou zijn bij thuiskomst.
Omdat de pelletkachel een totaal andere warmte geeft, vele malen sneller verwarmd en door de geforceerde ventilatie een veel egalere warmte in de woonkamer weet te krijgen was dit programma niet meer zo nodig.
Hoog tijd om dit dus anders aan te pakken

Van voorgedefinieerd programma naar verwarmen op aanwezigheid
Zoals gezegd verwarmde ik voorheen op basis van een programma, gebaseerd op ons dagelijkse ritme door de week. Uitzondering zoals een dagje thuiswerken werden opgevangen door een knop "vandaag als zondag" op ON te zetten. Meer hierover is te lezen in mijn vorige blog onder het kopje "De thermostaat moet 'slimmer' worden".

Met de pelletkachel was een dergelijk strak schema niet meer nodig. Verwarmen word nu volledig gestuurd op basis van aanwezigheid.
Nu kun je aanwezigheid op verschillende manieren detecteren, maar ik heb besloten om dit op basis van bereikbaarheid van de smartphones te doen.
Wij zijn een redelijk standaard gezien (mannetje, vrouwtje, 2 kinderen en een videocamera) en lopen allemaal met smarphones rond.
Alle telefoons hebben een vast IP adres gekregen vanuit de DHCP server in de router.
In pimatic zijn alle telefoons opgenomen middels de pimatic-ping plugin.
De telefoons worden elke minuut gepinged om te kijken of ze online zijn.
Vervolgens is er een dummyPresence sensor genaamd Anybod-Home welke op absent of present word gezet op basis van pingen van die telefoons.
Zodra 1 telefoon online is, gaat Anybody-Home op present. Wanneer geen enkele telefoon online is schiet deze naar absent.

Ping device voor een telefoon:

code:
1
2
3
4
5
6
7
8
9
10
11
12
    {
      "host": "192.168.2.102",
      "interval": 60000,
      "id": "telefoon-richard",
      "name": "Telefoon Richard",
      "class": "PingPresence"
    },
[code]

De nodige rules:
[code]
WHEN [telefoon-simone is present for 1 minute or telefoon-elise is present for 1 minute or telefoon-richard is present for 1 minute] and $AnybodyHome = 0 THEN $AnybodyHome = 1 and set presence of anybody-home present



code:
1
WHEN telefoon-simone is absent for 1 minute and telefoon-elise is absent for 1 minute and telefoon-richard is absent for 1 minute THEN $AnybodyHome = 0 and set presence of anybody-home absent



Goed, nu hebben we een idee wanneer er iemand thuis is en kunnen we daarop de te behalen temperatuur instellen. Stel je nu botweg je setpoint in op 20 bij anybody-home en op 17 bij nobody-home, dan ben je 's nachts ook aan het stoken.
Daarom is het nog steeds 'nodig' om hier wat slimmigheidjes op toe te passen. Ik heb de volgende rules voor het wijzigen van de setpoint, op basis van aanwezigheid en andere omstandigheden:

Niemand thuis, dan mag de setpoint naar 17 graden. De marge om uit te gaan is 0,4 graden.

code:
1
WHEN $AnybodyHome = 0 and mode of thermostaat is auto THEN set temp of thermostaat to 17 and $PelletkachelStopMarge = 0.4



Vanaf 05:00 's ochtends mag het 20 graden worden als er iemand thuis is

code:
1
WHEN $AnybodyHome = 1 and it is after 05:00 and before 22:00 and mode of thermostaat is auto THEN set temp of thermostaat to 20 and $PelletkachelStopMarge = 0.6



Na 22:00 's avonds mag de setpoint naar 16,5 maar alleen als de woonkamerverlichting uit is.

code:
1
WHEN $AnybodyHome = 1 and dressoir is off and it is after 22:00 and mode of thermostaat is auto THEN set temp of thermostaat to 16.5 and $PelletkachelStopMarge = 0.4


Voor het geval ik nog even langer blijf hangen op de bank ..

code:
1
WHEN $AnybodyHome = 1 and dressoir is off and it is after 00:00 and before 05:00 and mode of thermostaat is auto THEN set temp of thermostaat to 16.5 and $PelletkachelStopMarge = 0.4



Omdat een pelletkachel niet te pas en te onpas aangezet kan worden, heb ik de regels voor aan en uit zetten wat strakker gemaakt:


code:
1
WHEN $WoonkamerTemperatuur < ($thermostaat.temperatureSetpoint - $PelletkachelStartMarge) for 10 minutes and pelletkachel-power is turned off for $PelletkachelMinStoptime minutes THEN turn pelletkachel-power on



code:
1
WHEN mode of thermostaat is not boost and $WoonkamerTemperatuur > ($thermostaat.temperatureSetpoint + $PelletkachelStopMarge) for 10 minutes and pelletkachel-power is turned on for $PelletkachelMinRuntime minutes THEN turn pelletkachel-power off



In principe komt het neer op : de pelletkachel moet minsten een uur branden om aan te mogen, en moet minsten 10 minuten onder setpoint - marge zijn. Uit zetten van de pelletkachel weer hetzelfde : minsten een uur branden en minsten 10 minuten setpoint + marge als temperatuur (als overdag iemand thuis is, is de marge 0,6).

Maar hoe stuur je een pelletkachel aan :?
Dat verschilt eigenlijk per merk en type. De duurdere hebben vaak een externe thermostaat aansluiting. Mijn pelletlkachel heeft dit niet. Wel beschikt de pelletkachel over een temperatuursensor (bedraad) zodat hij de omgevingstemperatuur kan meten.
De pelletkachel kan dan op basis van temperatuur aan of uit gaan. Ook kun je een volledig weekprogramma programmeren in de kachel.
Omdat ik alles al regel met Pimatic, en ik graag de kachel op afstand aan en uit wil kunnen zetten moest daar dus iets voor bedacht worden.

Mijn pelletkachel heeft dus geen externe input. Wel kan deze met een afstandsbediening aan en uit gezet worden.
Uiteindelijk heb ik een ESP gebouwd welke de IR commando's van deze afstandsbediening naar de pelletkachel stuurt. De ESP is weer via wifi te benaderen en an dus door pimatic aangestuurd. De ingebouwde thermostaat van de pelletkachel word dus vrijwel niet gebruikt.
Omdat mijn vader in dezelfde periode dezelfde pelletkachel kocht heb ik er direct een leuk webinterfaceje voor gemaakt:

http://zooi.oostindie.com/images/259Screenshot_20170117_06_tn.jpg

Cool! Waar vind ik meer informatie :?
Het makkelijkste is om gebruik te maken van bestaande topics, het bereik is zo vele malen groter en ik hoef geen persoonlijke helpdesk te spelen ;)
Voor pimatic : het grote pimatic topic - home domotica met je Raspberry Pi
Alles over pelletkachels : Het pelletkachel topic
Pimatic forum : https://forum.pimatic.org/

Nog andere nieuwtjes :?
Jazeker!
Ddoor omstandigheden had ik een tablet 'over'. Hierdoor begon mijn oude wens toch weer te kriebelen : een tablet aan de muur waarmee ik in 1 oogopslag alles rondom pimatic kon bedienen. Ik ben hier inmiddels al een behoorlijk eind mee. Bedrading (voor permanent aan de lader hangen) is al netjes in de muur weggewerkt. Nu nog even een mooi frame maken en dan kan de tablet opgehangen worden. Ik zal hier binnenkort een apart blogje over maken.
Sneak preview:

http://zooi.oostindie.com/images/938pimatic_UI_winter_tn.jpg http://zooi.oostindie.com/images/797pimatic_UI_summer_tn.jpg

Inmiddels staat er ook een nieuwe versie van ESPimaticRF op github welke MQTT ondersteund. Zie ook het vorige blog hierover: Koffie's tweakblog: ESPimaticRF : verstuur RF verkeer over wifi vanuit Pimatic

ESPimaticRF : verstuur RF verkeer over wifi vanuit Pimatic

Door Koffie op zondag 13 november 2016 18:25 - Reacties (16)
Categorie: -, Views: 3.740

Een lang verwachte feature voor Pimatic is eindelijk beschikbaar: verzenden van RF verkeer over wifi op plekken waar de Pimatic op de Raspberry Pi geen bereik heeft :Y)

Wat heb je nodig :?
Een werkende Pimatic installatie
ESPimaticRF
Minstens 2 ESP8266 modules
Minstens 1 setje sender/receiver (zorg dat je een zogenoemd superheterodyne setje hebt)
Arduino IDE 1.6.5
ESP8266 core for Arduino 2.3.0

Het probleem :?
Normaal zul je een Raspberry Pi hebben met daarop Pimatic, waar vervolgens een Arduino Nano aan hangt voor het RF verkeer (zie ook : Koffie's tweakblog: Native RF zenden en ontvangen met pimatic)
Het nadeel hiervan is dat de Raspberry Pi vaak ergens weggewerkt word (bij mij bijvoorbeeld in de meterkast) en je niet altijd overal een voldoende RF bereik hebt. Het gevolg is dat niet elk RF signaal door Pimatic ontvangen word, of een uitgezonden signaal niet altijd aankomt.

De oplossing
Met ESPimaticRF kun je het RF signaal eerst over wifi laten versturen zodat het vanaf een andere plek alsnog als RF verstuurd word. andersom kan ook : ergens op een andere plek word het RF signaal opgepikt om vervolgens via wifi naar Pimatic gestuurd te worden.
Het systeem is zo opgebouwd dat je op meerdere plekken een zogenoemde node kunt neerleggen, welke allemaal met Pimatic communiceren. Op deze manier kun jet het RF bereik enorm vergroten. In theorie zou je zelfs een node ergens op een totaal ander adres kunnen installeren en zo met 1 groot Pimatic netwerk bouwen.

Hoe installeer ik het :?
Ik ga er vanuit dat je reeds een werkend Pimatic systeem hebt, met Arduino Nano en RF hardware zoals uitgelegd in Koffie's tweakblog: Native RF zenden en ontvangen met pimatic
Neem een ESP8266 (bij vooorkeur een NodeMCU).
Download de software van Github en op ESPimaticRF.ino in je Arduino IDE
Zorg dat je de correct ESP in je boardmanager hebt geselecteerd, met voldoende SPIFFS ruimte (3M SPIFFS).
Compileer en upload de code naar je ESP
Na het uploaden zal de ESP opnieuw opstarten en, indien nodig, de SPIFFS formatteren. Dit kan even duren - hou de boel in de gaten via de Serial Monitor
De ESP zal nu in AP modus gestart zijn. Verbind je pc/table/telefoon met het wifi netwerk van de ESP (SSID : ESPimaticRF , wachtwoord espimaticrf).
Ga naar http://192.168.4.1 en vul hier je eigen wifi gegevens in.
De ESP zal nu wederom opnieuw opstarten en verbinden met je eigen wifi netwerk.
Op de Serial Monitor kun je zien welk DHCP adres de module heeft gekregen van je wifi.
Ga naar het nieuwe IP adres met je favoriete browser. Je zult nu een simepel upload pagina zien. Upload nu alle bestanden in de directory "SPIFFS" van de github download.
Wanneer de upload klaar is, start de ESP handmatig opnieuw op.
Ga nu wederom naar het IP adres van de ESP met je browser, de volledige webGUI is nu beschikbaar.
Kies Menu -> System -> Config

http://zooi.oostindie.com/images/148espimaticrf_config.png

We gaan de ESP configureren om als 'homeduino' te reageren. Bij mode kies je dus voor de optie 'homeduino'.
De homeduino kan zowel met als zonder RF hardware werken, we beginnen zonder. Laat de opties 'Receiver pin' en 'Transmitter pin' dus leeg.
Bij Receive Action kies je voor 'Do nothing' (er hang immers geen onvanger aan deze module.
Bij Transmit Action kies je voor 'Transmit to all nodes' (wederom : we hebben aan deze ESP geen RF hardware hangen).
Bij UDP repeat is het een beetje kiezen wat het beste voor je werkt. Het versturen van RF over wifi gaat via UDP. Omdat UDP van zichzelf een onbetrouwbaar protocol is, word het pakket een paar keer herhaald. Afhankelijk van de afstand die je met de modules moet overbruggen adviseer ik een waarde tussen de 3 en de 6.
Bij API key vul je een API key in die door alle ESP's gebruikt zal worden. Belangrijk : deze API key moet hetzelfde zijn als de optionele API key in config van de homeduino plugin in Pimatic!
De wifi velden zijn al ingevuld.
Sla de wijzigingen op en herstart de ESP om config te laden.

Je kunt de ESP nu van je computer loskoppelen en aan je Rasperry Pi aansluiten. Let op dat je pimatic eerst stopt voordat je de ESP middels USB aan de Raspberry Pi koppelt.
Start nu Pimatic op en controleer de logfile. Als het goed is denkt Pimatic nog steeds dat er een doodnormale homeduino aangesloten is.

Nu nemen we nog een ESP en voorzien deze wederom van ESPimaticRF software. Deze keer sluiten we ook een RF zender en ontvanger aan.
Herhaal deze stappen als bij de vorige module om de ESP te configureren.
Bij 'mode' kies je echter deze keer voor 'node'.
Vul de correcte Transmitter pin en Receiver pin in (GPIO nummering!).
Bij Receive action kies je voor 'send to Pimatic' , bij Transmit action kies je voor 'Transmit with local RF'.
Zorg ervoor dat je bij Pimatic IP het correct IP/FQDN van je Pimatic installatie kiest en bij Pimatic Port de juiste port waarop het draait.
Bij Black/Whitelist mode kiezen we voorlopig 'Allow everything'.
Sla de wijzigingen op en herstart de ESP.
Indien je dit nog niet gedaan hebt, sluit nu eerst de RF modules aan op de correcte GPIO's

Laat de node nog aan je computer verbonden en op de Serial Monitor. Wissel nu een RFdevice op pimatic van status, als het goed is moet je nu op de Serial Monitor zien dat er een pakket van de homeduino binnenkomt, en nog mooier : de local RF zender op de node zal nu het RF verkeer gaan versturen.

Het werkt, wat kan ik er verder nog mee :?
Met bovenstaande uitleg heb je een basic netwerk van ESP's kunnen maken. Wat de node ontvangt word keurig naar Pimatic verstuurd, en wat Pimatic over RF wil versturen komt keurig bij de node terecht.
Je kunt nu verder gaan met het finetunen van de configuratie. Zo kun je alsnog een RF zender en ontvanger aan de homeduino koppelen, en in de config aangeven dat deze gebruikt kunnen worden.
Ook kun je een extra ESP installeren in node mode en deze ergens anders plaatsen. Beide nodes zullen dan het verkeer wat door de homeduino verstuurd word ontvangen en uitzenden.
Dit laatste kan natuurlijk een probleem zijn als beide nodes binnen het bereik van een RF device liggen. Deze kan dan meerdere keren hetzelfde signaal ontvangen.
Daarom kan er gebruik gemaakt worden van blacklisting of whitelisting.
Via de config kun je aangeven welke modus de node moet hebben (allow everything, allow everything except blacklist of allow nothing except whitelist).
Om nu een bepaal device aan de blacklist of whitelist toe te voegen ga je als volgt te werk :
Zorg dat de node communicatie van de homeduino kan ontvangen
Vanaf Pimatic schakel je 1 keer het device waar het om gaat
Op de WebGUI van de node ga je nu naar Menu -> System -> BlackWhitelist , als de opdracht voor het RFdevice bij deze node aangekomen is, zul je hier het protocol , ID en unit zien.
Kies nu voor Blacklist of Whitelist
Afhankelijk van de gekozen configratie zal het nieuwe device expliciet wel of niet toegelaten worden.

Om een bepaald device te kunnen black/whitelisten moet het protocol bekend zijn (en herkend worden) binnen ESPimaticRF. Alle protocollen staan beschreven in protocols.json.
Op moment van publiceren van deze blogpost staan er nog maar een paar protocollen beschreven (switch1 t/m switch5 en dimmer1).
Ik hoop op korte termijn het aantal protocollen hierin snel uit te breiden, hou de github pagina in de gaten voor updates.

Mocht je nog vragen hebben kan dat altijd hier, in het GoT topc (https://gathering.tweakers.net/forum/list_messages/1609839) of op het Pimatic forum (https://forum.pimatic.org...t-espimaticrf-coming-soon)