Project qnap.zip

Door Koffie op maandag 15 februari 2021 15:19 - Reacties (12)
Categorie: -, Views: 4.208

Ergens in 2013 kocht ik een Qnap NAS, de TS-869L.
Lang heeft deze als belangrijke spil in mijn netwerk dienst gedaan.
Zo'n 4 jaar later was ik wel klaar met het Qnap systeem en stapte ik over naar XPEnology op dezelfde Qnap.
Een jaar later was de rek er wel uit en eind 2018 bestelde ik nieuwe componenten voor een zelfbouw NAS.
De Qnap bleef, maar werd nu ingezet als 'local backup to disk'
Via een WoL commando word zondagnacht de Qnap opgestart, waarna diverse backup jobs richting de Qnap gaan lopen.
Door een notification van deze job naar Home Assistant te sturen, kan ik bijhouden hoeveel jobs er gelopen hebben, en een shutdown sturen wanneer de laatste klaar is.

https://tweakers.net/i/e2_LuFyCMRcTqm5d7KHkAXfi6Eo=/i/1357814358.png


Ondertussen heb ik een 19" rack in mijn werkkamer staan (oude nerd hobby) en is mijn zelfbouw NAS in een 4U serverkast geplaatst.
De Qnap had ook een plekje in de kast, maar stond er wat lullig bij.



Het idee begon te borrelen om de Qnap om te bouwen naar een 19" versie.
Een 4U kast was misschien wat overdreven, alhoewel aan ruimte geen gebrek in de kast.
Ik begon te googlen naar hoe de Qnap in elkaar stak en probeerde tussen in de lege drivebays te koekeloeren.
Ik was er inmiddels vrij zeker van dat de backplane een grote PCB was welke middels PCIe op het moederbord van de Qnap verbonden was.
Ik zag wel mogelijkheden en begon eens rond te zoeken naar een 1U server case.
Na wat zoeken kwam op marktplaats een "Supermicro 1U SC813MT-300C 4bay" tegen, compleet met moederboard/cpu/mem voeding en rack-rails. Maar het ging mij om de 1U case, niet om de (verouderde) hardware. De oude server kon ik voor weinig overnemen.
De basis voor het project was binnen, tijd om de Qnap uit elkaar te slopen!



Het moederbord van de Qnap is (van vooraf gezien) verticaal geplaatst tegen de linker zijkant. De backplane is eigenlijk een PCIe x8 'kaart' waar de disken in de SATA aansluitingen geschoven kunnen worden.
Het moederbord is formaatje mini-ITX-ish. en de meeste mounting holes komen overeen met dit formaat.
Nadeel aan het moederbord is dat er 2 SO-DIMM sloten zijn, 1 op de bovenkant (deze is af fabriek gevuld en niet te bereiken zonder de NAS volledige uit elkaar te halen) en 1 op de onderkant. Deze is in de originele behuizing te benaderen door de kap van de behuizing te halen zodat je een 2e SO-DIMM kan plaatsen.
Dit slot steek dus aan de onderkant uit tov de rest van het moederbord.
In de originele behuizing zit een plastic cover tussen de schroeven en het moederbord. Deze plastic cover heb ik ook in de 1U case gebruikt, om te voorkomen dat de SO-DIMM de kast raakt.



Goed, het moederbord kon dus makkelijk in de supermicro case geplaatst worden, nu kijken hoe we de rest erin kunnen proppen.
Hier waren een aantal uitdagingen uit te zoeken delen:

Qnap backplane
De backplane van qnap bevat niet alleen de male connectors voor een harddisk (dus power en data naast elkaar) maar ook de chipset van de SATA controller.
Deze backplane is dus meer dan alleen een wat data over printbaantjes laten lopen en dus essentieel voor de werking van de Qnap (welke sowieso geen SATA connectors op het moederbord heeft).
Verder zat er op de backplane een ATX-achtige power connector voor een 20-pin stekker, voor het voeden van de harddisks.
Mijn hoop en vermoeden was dat er verder geen controle of logica voor de voeding van de harddisks op de backplane aanwezig zou zijn, en dat ik de harddisks ook buiten de backplane om kon voeden.

Omdat de harddisks niet rechtstreeks in de connectors op de backplane geschoven zouden worden, moest ik een manier vinden om SATA van de backplane richting de backplane van de Supermicro te krijgen.
Na wat zoeken kwam ik op het idee om SATA verlengkabels te bestellen, met aan de ene kant de gebruikelijke female connector en aan de andere kant een male connector.
Ik had al een vermoeden dat deze niet zomaar gingen passen vanwege 'nokjes' naast de goudkleurige SATA banen, maar dat zou vast wel te modden zijn was mijn gedachte.




Supermicro backplane
Ook de Supermicro heeft een backplane. Deze zag er redelijk dom uit en is alleen maar bedoel om de harddisken te in te laten glijden. Sata kom vanaf het moederbord naar de backplane. Stroom komt vanaf de voeding middels 1 simpele molex stekker.
Hier hoefde ik dus bar weinig aan te doen, ik moest alleen met 4 SATA kabels de Supermicro backplane zien te verbinden met de Qnap backplane.
Het voeden van de harddisks vindt dan plaats via de Supermicro backplane, terwijl de Qnap backplane dienst doet als SATA controller.

Als ik de Qnap backplane op de een of andere manier plat, naast het moederbord kon monteren (ruimte zit in zo'n 19" kast) dan moest het plan uitvoerbaar zijn.
Tijd om een boodschappenlijstje te maken en te gaan shoppen.

- ATX verlengkabel (de ATX connector op het moederbord zat echt centimeters te ver weg, waardoor de ATX stekker van de voeding het nét niet haalde naar de connector) *
- Flexibele PCIe verlengkabel om Qnap backplane en moederbord te verbinden
- SATA verlengkabels (om Qnap backplane met Supermicro backplane te verbinden)

* Ik zeg hier wel even simpel PCIe flex cable, maar dat had wat voeten in de aarde.
Het PCIe slot op het moederbord is PCIe x8, evenals de connector op de backplane.
Een PCIe flex cable van rond aanzienlijke lengte (ik heb uiteindelijk eentje van 50 cm genomen) in specifiek x8 formaat is behoorlijk duur (richting de 40 euro), niet leuk voor een hobbyprojectje.
Ik heb uiteindelijk een PCIe x16 flex cable van 50 cm gekocht voor 13 euro samen met een korte (15cm) flex riser van PCIe x8 naar PCIe x16 voor 3 euro.

Na 2 weken F5en op de track&trace pagina begonnen de onderdelen binnen te druppelen, Ik kon eindelijk knutselen! :)

Het modden van de SATA bleek gelukkig simpel, met een kniptang kon ik de 2 zwarte nokjes links en rechts van de connector afknippen, waarna de connector zonder problemen in de data connector van de Qnap backplane gestoken kon worden.
Door deze constructie mis je wel enig 'vastgrijpen' waardoor de kabels onder spanning makkelijk er uit kunnen komen.



De PCIe flex cable kwam niet veel later binnen. Weinig bijzonders aan, doet wat het moet doen. Ik was blij dat ik voor een aanzienlijke lengte had gekozen, op deze manier kan ik wat makkelijker 'de hoek om' zonder dat de kabel onder spanning komt te staan. Liever te lang dan te kort in dit geval.



Nu de spullen binnen waren was het tijd om de boel aan elkaar te knopen, zou mijn Frankenstein NAS uberhaupt booten? Zouden de disken gezien worden?
Het doorlussen van de backplanes was appeltje eitje. Ook het PCIe gedeelte was zo gedaan. Tijd om de NAS op te starten.
Euh ... hoe doen we dat? Oeps niet bij stil gestaan.
Zowel de Supermicro als Qnap gebruiken voor status LED's en power knop een eigen kabel met aansluiting, hier moest ik dus even goed kijken hoe dit alles in elkaar staak.

De Qnap heeft een ribbon cable welke naar 1 aansluiting op het moederbord gaat. deze ribbon cable zit aan 2 losse PCB's.
De meest interessante PCB is die met de powerknop (de groene op de foto). Hier worden maar 6 pins gebruikt voor 3 doelen (power LED, power button en USB copy button). Die is dus redelijk makkelijk te herleiden.
De blauwe PCB bevat nog specifiekere LED's voor de Qnap (individuele disk activity LED's, status LED, LAN LED, USB LD en eSATA LED) en een IR ontvanger.



De Supermicro server heeft voor zijn knopjes en LED's ook een ribbon cable met connector gemaakt. gelukkig staat er op het moederbord bij elke pin beschreven waar deze voor is.
Dit maakte het zoeken al een stuk makkelijker dan aan de Qnap kant.
De power button doorlussen van de Supermicro cable naar de ribbon cable van Qnap was uiteindelijk snel gevonden. Even 2 jumperwires tussen de connectors, een druk op de knop en ... it's alive!



Gespannen staarde ik naar het beeldscherm, dit was hét moment. In een flits zag ik de gevonden disken in de POST op scherm verschijnen. De NAS startte keurig op en alle disken werden gedetecteerd *O*
Enkele minuten later kreeg ik ook repsonse op mijn lopende ping en kon ik weer rustig ademhalen. De Qnap functioneerde volledig naar behoren Operatie geslaagd!

Leuk, en nu?
De NAS is nu weer volledig operationeel, afgelopen nacht heeft de eerste automatische local backup alweer gelopen.
Nu is het een kwestie van de boel ff flink aanstampen en het deksel van de 1U behuizing er vlug op doen :+
Nee zonder dollen, op het moederbord na ligt alles er nog los in.
Voor de backplane moet ik iets verzinnen om deze netjes te monteren, zonder dat er componenten in contact met de ijzeren behuizing kunnen komen. Ook cable management zal nog de nodige aandacht moeten krijgen.
Belangrijkste is de Qnap backplane, die moet eerst een vast plek krijgen. Als die vast zit kan ik kijken of het nodig is om de SATA connectors nog met een kloddertje hotglue te fixeren.
Daarnaast heb ik nu tijdelijk een andere riser op het moederboard zitten waardoor de kast nog niet dicht kan, zodra 1 dezer dagen de uiteindelijke riser binnen is kan ik beginnen met alles vast te schroeven en ducttapen
Wellicht dat ik nog een 2e blogpost maak met foto's wanneer alles een vast plekje heeft.


Alvast enkele te verwachten vragen beantwoorden:

- Was een nieuw moederbord niet goedkoper geweest?
Wellicht wel, maar voor dit bedrag ga je dan al snaar 2e hands, dan moet het geen stroomvreter uit het jaar kruik worden. Ook moet je rekening houden met compatibiliteit voor XPEnology
Uiteindelijk ben ik nu zo'n kleine twintig euro kwijt geweest aan diverse kabels, waarvan de PCIe verlengkabel het duurste was.

- Had je niet gewoon het moederbord van die Supermicro kunnen gebruiken?
De CPU op dat bord is een Intel Core 2 Duo E6600 met een TDP van 65W. De Qnap bevat een Intel Atom D2700 met een TDP van 10W.
Voor wat local backup heb ik helemaal geen brute CPU kracht nodig, dan ga ik liever voor zuiniger.

- wat is die afgrijselijk wanstaltige vertoning van een vage desktop kast op z'n zijkant in een houten plank in je rack?!
Dat was voorheen mijn pfSense bak :+
Deze is inmiddels gedownscaled naar een mini-ITX bordje met passief gekoelde CPU in een 1U behuizing (ook een Supermicro).

Van houtkachel naar pelletkachel: 1 jaar later

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

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: 5.472

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: 5.582

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: 6.970

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