IOT: LogiSmart Meter Plug Switch

Ik ben inmiddels een tijdje aan het spelen geweest met de ESP8266 en heb inmiddels voldoende projectjes bedacht om de komende tijd nog wel even verder te kunnen. Alleen toen ik op Facebook een berichtje van Netwerkwinkel voorbij zag komen over de LogiSmart Meter Plug Switch trok dat toch weer de aandacht. Met deze “smart plug” kan je via een app het stopcontact aan en uit zetten, nou is dat nog niet zo spannend, maar het feit dat ook het verbruik gemeten wordt is wel weer aardig.

LogiSmart Meter Plug Switch

Mijn doel is het kunnen schakelen van het ding via mijn eigen webinterface die ik ook al voor mijn Klik Aan Klik Uit systemen gebruik, de verbruiksgegevens wil ik kunnen opslaan in mijn mijn eigen (lokale) database. Ik verwacht aardig wat uitdagingen, vermoedelijk werkt het systeem met een cloud oplossing, ik ga dus uit moeten zoeken hoe ik er op de eerste plaats voor kan zorgen dat ik lokaal commando’s naar dat ding kan gaan sturen (“kleine” oefening Wireshark). De volgende stap is het uitzoeken hoe de verbruiksdata verzonden wordt, vervolgens moet ik kijken hoe ik dat verkeer ga afvangen en dus in mijn eigen database ga krijgen. Dit alles mag prima ten koste gaan van de cloud functionaliteit, maar ik ben benieuwd hoe ver ik ga komen.

Volgende week is het eerst even tijd voor The Party, maar daarna hoop ik daadwerkelijk aan de slag te kunnen.

Als iemand nog tips of suggesties heeft hoor ik het graag :).

AFAS Profit: Analyses mailen

Op dit moment spendeer ik 90% van mijn werkuren aan onze (Detron) AFAS Profit inrichting. De afgelopen jaren hebben we delen van het bedrijf gesplitst, andere delen samengevoegd, en bovenal de werkwijze zoveel mogelijk geharmoniseerd. Nu die zaken langzaamaan minder van onze tijd kosten hebben we meer tijd om aan de kleinere projectjes te kunnen werken.

Zo was er al een tijdje de wens om analyses uit AFAS Profit te kunnen mailen naar een of meerdere gebruikers. Dat was voor mij een mooie gelegenheid om eens te kijken of ik behalve met AutoIT dit soort “problemen” ook op kan lossen met het native aanwezige Powershell (Windows servers). Gezien ik daar helemaal zo goed als geen ervaring mee heb was het vooral een aardig uitzoekwerk, maar op een kleine stap na is het me uiteindelijk gelukt om zo goed als het hele proces vanuit Powershell te realiseren.

Het alternatief zou overigens zijn om analyses te publiceren op InSite, maar gezien deze analyses voor een hele kleine groep gebruikers bedoeld zijn en ook maar een zeer beperkte houdbaarheid hebben is dit geen goede optie. Daarbij kan het ook zo zijn dat een deel van deze analyses als “snapshots” bewaard worden. Ook dat zou niet nodig moeten zijn, maar soms is het niet anders.

Het systeem bestaat uit een aantal delen:

  • Een analyse in AFAS Profit bepaald wie welke analyse wanneer gemaild moet krijgen. Deze lijst wordt bijgehouden door het functioneel beheer team.
  • Deel 1 in Powershell: Publiceren en interpreteren bovenstaande analyse. Deze analyse wordt opgeslagen als CSV en omvat alleen het overzichttabblad, min of meer een to-do lijst dus.
  • Deel 2 in Powershell: Check of er regels in de eerder genoemde analyse binnen het huidige tijdvak vallen, regels die niet aan die voorwaarden voldoen worden verder genegeerd

Hier had ik wel een kleine uitdaging, op zich is het bepalen of een regel in het tijdvak valt nog niet zo lastig:

ControleTijdvak

Alleen die laatste regel bracht wel een probleem met zich mee, hoe bepaald je nou of de huidige dag de laatste dag van de maand is? Het zoekwerk voor oplossingen bracht ook eigenlijk alleen maar opties met zich mee die veel complexer waren dan dat ik nodig had.

Uiteindelijk heb ik dat als volgt opgelost (de naam van de variabelen verraad het wel een beetje):

ControleLaatsteDag

Ik gebruik hier twee variabelen, één met de huidge maand, en de andere welke de maand van één dag later bevat. Als die niet gelijk zijn is vandaag dus de laatste dag van de maand. Overigens had ik deze vergelijking ook wel in één regel kunnen stoppen, maar dit vond ik voor nu zelf even overzichtelijker.

We gaan weer verder..

  • Deel 3 in Powershell / AFAS Profit: Regels die in het huidige tijdvak worden opgepakt, er wordt een batch file (jammer..) aangeroepen die via de commandline de desbetreffende analyse laat publiceren. Dit publiceren gebeurt overigens met een macro van 4 regels die toegevoegd moet worden aan de analyse. De macro:
Sub PublishAnalysis()
Dim fileName As String
ActiveWorkbook.SaveAs fileName:="C:\Powershell\testanalyse.xlsx", FileFormat:=xlOpenXMLWorkbook
End Sub

De reden dat de macro PublishAnalysis heet heeft te maken met het feit dat ik het publiceren laat doen door AFAS Profit via de commandline, de publicatie wordt getriggerd via een batchfile en uitgevoerd door deze macro.

  • Deel 4 in Powershell: Na het genereren van de analyse (als .xlsx) wordt deze verstuurd naar het mailadres dat op de regel in de eerste analyse is ingevoerd.
  • Deel 5 in Powershell: Logging wordt bijgewerkt, als de log meer dan 2Mb groot is wordt deze opzij gezet, als er al oude logging aanwezig is wordt deze overschreven.

Op dit moment is het mogelijk om analyses te verzenden op een specifieke dag van de week, een specifieke dag van de maand, iedere dag, de laatste dag van de maand of tot slot de eerste dag van de maand. Dit lijkt me nu voldoende, maar gebruikers kennende is er vast nog een optie die ik nu nog niet bedacht heb ;).

De oplossing die ik nu geschreven heb zal qua efficientie nog wel het nodige te wensen over laten, maar het werk naar behoren. Ik heb nog wel een aantal wensen die ik in de komende tijd wil doorvoeren om vooral de kans op fouten bij de invoer te verkleinen. Daarnaast moet ik nog een filter maken die voorkomt dat we files proberen te mailen die groter zijn dan onze Exchange omgeving toelaat.

Mocht iemand interesse hebben in het script zie ik wel een berichtje verschijnen, als iemand nettere of andere oplossingen heeft hoor ik het natuurlijk ook graag . Verder is het voor mij zelf wel een mooie eerste echte ervaring met Powershell. Gezien dit een native systeem is zie ik wel wat voordelen die het waard maken om te gaan kijken of ik (een deel van ) de andere Profit koppelingen om kan zetten naar Powershell scripts. Deze worden nu over het algemeen ondersteund door AutoIT “applicaties” die ik in de afgelopen jaren gemaakt heb.

IoT – ESP8266 gepruts

Een tijdje terug ben ik bezig geweest met het aansturen van mijn KlikAanKlikUit lampen via een Raspberry, rond die tijd kwam ook ineens Andries met een reeks blogposts  over het draadloos aansturen / dimmen van ledverlichting. Dat triggerde mij om me eens te verdiepen in dat soort systemen en de mogelijkheden die daarbij komen kijken.

Als we bedrijven als Intel mogen geloven moet The Internet of Things (IoT) DE toekomst worden op technologisch vlak. Dat zou er op neer komen dat zo’n beetje alles om je heen is aangesloten op het internet, waardoor je altijd alles kan monitoren, je op afstand je lampen aan / uit kan zetten, je de wasmachine kan starten, thermostaat kan instellen enzovoorts. Er zijn meerdere mogelijkheden om dit te realiseren, maar WiFi is hiervoor het meest toegankelijk als je er zelf mee aan de slag wil.

Dit is waar de ESP8266 een rol gaat spelen, via de posts van Andries raakte ik bekend met het bestaan van dit platform (ESP8266)

esp8266 ESP-01

Door de chip te flashen met een NodeMCU firmware kan je de aansturing van het “systeem” in LUA schrijven. Mijn Lua kennis is ongeveer net zo groot als mijn kennis over curling, dus daar ligt nog wel een kleine uitdaging. Maar juist dat uitzoekwerk maakt het wel leuk om hier tijd aan te spenderen.

Als eerste project ben ik maar eens begonnen met het nabouwen van het project van Andries (met wat kleine aanpassingen), een mooie oefening om ook het solderen weer eens onder de knie te krijgen. Ondertussen heb ik gewoon om te proberen ook een printje gemaakt waarmee ik via WiFi en mijn Raspberry (als webserver) mijn lampen aan en uit kan zetten, het programma en de print zijn erg basic, maar het is wel bijzonder bevredigend om zoiets zelf te maken.

Heel kort samengevat wordt er een web request gestuurd naar de Raspberry op het moment dat een van de twee GPIO poorten op de ESP8266 naar High gaat (er dus spanning op komt te staan), dit gebeurt wanneer de drukknop ingedrukt is.

Je kan diverse sensors aan het systeem knopen waarvan je de output relatief eenvoudig naar een webserver kan versturen, deze informatie kan je dan vervolgens weer voor uiteenlopende zaken gebruiken.

Al met al leuk speelgoed, mocht ik ergens nog een keer een toepassing bedenken waarvan ik denk dat deze ook nuttig kan zijn voor anderen zal ik eens een uitgebreid verslag / instructie schrijven.

Wintersport 2015

Vorige week was het tijd voor onze winterpsort vakantie. Samen met Bo en Inge zijn we ruim 1.000 km naar het zuid-oosten gereden om deze keer uit te komen op het Landal park in Katschberg.

De heenreis verliep redelijk soepel, op wat kleine stukjes file na hebben we eigenlijk vrij vlot door kunnen rijden. Totdat we in Oostenrijk waren was de stemming ook super, echter naarmate we dichter bij onze bestemming kwamen begon het eerst te regenen, en vervolgens echt te storten. De gehele route hebben we geen sneeuw gezien, alleen regen, regen en vooral veel groene / bruine bergen en dalen.

Dit tot we de laatste weg naar Katschberg indraaien, de regen slaat om in sneeuw, en een kleine 500 meter verder ontkomen we er niet aan om de sneeuwkettingen op te leggen (voor alles is een eerste keer..). Gelukkig hadden we deze bij en konden we binnen 15 minuten na wat gedoe met wat Slovenen onze rit vervolgen.

Sneeuwkettingen

De laatste 5 km hadden we zonder sneeuwkettingen niet kunnen halen en bij aankomst is eigenlijk zo ver we kunnen kijken alles wit. Grappig hoeveel verschil een paar honderd meter kunnen maken. We hadden allemaal al een hele korte treurige vakantie in ons hoofd zitten, maar gelukkig is dat anders uitgepakt.

Uitzicht vanuit café

We hebben een week lang perfect weer gehad en alle dagen goed kunnen skiën, we zijn uit eten geweest en hebben van de mogelijkheid om in het huisje zelf te koken gebruik gemaakt. Verder hebben we herhaaldelijk aangetoond dat ik Carcassonne maar niet kan winnen van de andere drie aanwezigen.

Carcassonne

We hebben bewust voor deze week gekozen omdat dat een week is waarop zover wij kunnen vinden geen schoolvakanties te vinden zijn in Europa, en dat lijkt prima gelukt. We hebben dagen gehad waarop je het idee hebt dat er maar een man of twintig op de pistes te vinden waren. Lekker rustig en alle ruimte voor onszelf.

Na een week lekker rustig aan doen zijn we gisteren weer naar huis gereden, in tegenstelling tot de heenweg was zo ongeveer de hele terugrit alles wit en hebben we goed veel last gehad van sneeuw en files. Maar als je dan eenmaal thuis bent is het ook wel weer fijn om alles op te kunnen ruimen en lekker in je eigen bed te slapen.

Op naar de volgende vakantie, in April zoeken we de warmte van Las Vegas weer eens op :)

Joe syntax highlighting aanpassen

Soms loopt je tegen van die problemen aan die je eens in de zoveel tijd tegen komt, maar die net niet vaak genoeg voorkomen om de oplossing te onthouden.. In dit geval is het de kleur van de PHP Syntax Highlighting in Joe via Putty (volg je het nog?)

Standaard is de instelling voor “Constant_sq” blauw, donkerblauw om precies te zijn, en dat leest toch net niet lekker op een zwarte achtergrond:

Joe PHP Syntax

Dus daarom heb ik het liever zo:

Joe PHP Syntax aangepast

Gezien ik dus iedere keer weer op zoek moest naar hoe ik dit definitief aan kon passen (dus niet iedere keer handmatig een andere syntax highlighting selecteren) heb ik besloten er maar een korte blogpost aan te besteden zodat ik de volgende keer niet zo ver hoef te zoeken :).

De configfile staat op ubuntu op deze locatie:

sudo joe /usr/share/joe/syntax/php.jsf

Vrijwel boven in de config staat dit stuk:

# Define colors
=Idle
=Comment green
=Constant cyan
=Constant_sq blue
=Escape bold cyan
=Keyword bold
=Var red
=Methods bold

Je wil hier de dikgedrukte regel aanpassen, in mijn voorbeeld heb ik er dit van gemaakt:

# Define colors
=Idle
=Comment green
=Constant cyan
=Constant_sq yellow
=Escape bold cyan
=Keyword bold
=Var red
=Methods bold

Lampen aansturen deel 2

Technisch was het niet bijzonder complex om het aansturen van de KlikAanKlikUit schakelaars werkend te krijgen, het installeren van Raspbian duurder langer dan het werkend maken van de aansturing.

De grotere uitdaging zat in  het maken van een beetje normaal werkende “webinterface”, en alhoewel het er niet uit ziet heb ik nu wel een werkend systeem om op alles wat een website kan openen thuis de lampen te kunnen schakelen.

screenshot

Er wordt ook direct nog wat data opgehaald uit een losse database die ik al een paar maanden aan het vullen ben met statistieken over ons gas en stroomverbruik. Sinds kort zit daar ook een tabel met weergegevens bij zodat ik ook nog een patroon zichtbaar kan maken met bijvoorbeeld de invloed van het weer op het gasverbruik. Of gevolgen van het wisselen van zomer en wintertijd op stroomverbruik en dergelijken. Overigens zit er een foutje in het bovenstaande screenshot, het stroomverbruik moet nog even door 10 gedeeld worden :).

Ondanks dat het geheel alleen intern op mijn eigen netwerk beschikbaar is heb ik toch wel wat aandacht besteed aan het “beveiligen” van het geheel zonder dat dit hinder oplevert in het gebruik. Effectief doet de pagina niets anders dan een paar variabelen uit de URL pakken (locatie en status) en aan de hand daarvan wordt er middels een php shell_exec een script aangeroepen dat de schakeling uitvoert. Gezien de gebruikte variabelen met wat geluk en probeerwerk dus misbruikt zouden kunnen worden voor kwalijkere zaken wordt de input vergeleken met de beschikbare opties, als het in orde is wordt het script aangeroepen, klopt het niet gebeurt er verder niets. Dit voorkomt ook meteen dat een foutje van mijn kant niet direct te grote gevolgen heeft ;).

Wat ik nu nog wil maken is dat ik via dezelfde webpagina ook de mogelijkheid krijg om schema’s te maken die de lampen op gezette tijden automatisch aan of uit kunnen zetten.

Lampen aansturen met de Raspberry Pi

Een paar dagen geleden kwam ik een (oude) tweakblog post tegen over het aansturen van een “Klik aan Klik uit” systeem via een Raspberry Pi. Gezien ik sowieso al een Raspberry heb draaien voor het uitlezen van de energiemeter (daarover schijf ik een andere keer nog wel een stukje) was het een leuke uitbreiding die ik voor een paar euro wel kon maken.

kaku - overzicht

Gisteren is dus de 433Mhz zender die ik nodig had binnen gekomen, deze heeft iets meer dan 3 euro gekost, dus dat is nog wel te overzien :). Zoals op de foto’s te zien is stelt het ding zelf helemaal niets voor en na het lezen van de ervaringen van wat andere gebruikers had ik het idee dat het bereik van de zender nog wel eens een probleem zou kunnen worden. Gelukkig blijkt dat uiteindelijk wel mee te vallen. Het werkend maken van de zender in Raspbian is met de eerder genoemde tweakblog geen noemenswaardige uitdaging meer.

Ik gebruik in huis al wat oudere schakelaars, ze komen ongeveer overeen met dit model:

klikaanklikuit

Ik denk wel dat ik met het uitzoeken van de adresseringen van mijn schakelaars wel wat buren heb lastig gevallen met lampen die uit en aan gaan.. Maar na wat puzzelwerk is het me in ieder geval gelukt om via de commandline de lampen aan en uit te kunnen zetten. De volgende stap was om dit via een webinterface te doen, maar dat stelt na de andere stappen niets meer voor.

Het enige wat ik nu nog wil kunnen doen is via een webinterface een schema in te kunnen stellen waarop lampen “vanzelf” en en uit kunnen gaan, maar dat is een uitdaging voor volgend jaar :).