Coen Martinus

Coen Martinus

site eigenaar :-)

In het kader van de thuis automatisering heb ik sinds een weekje een Wifi ledlamp in huis. Middels de bijbehorende afstandsbediening en middels de app kun je de ledlampen bedienen. In het starterspakket zitten een ledlamp, afstandsbediening en Wifibox. De Wifibox is nodig om onder andere de 'Wifi Controller 2 App' te gebruiken welke beschikbaar is voor Android en IOS.

ledlamp01

 

Windows Wifi ledcontroller

Omdat de Wifi Controller app helaas nog niet IOS7 proof is en ik geen Android apparaten in mijn bezit heb kon ik tot op heden de app nog niet gebruiken. Onder dat mom gekeken of het mogelijk is om een eigen controller te maken. Eerst voor Windows en wellicht later voor de Synology. Met Visual Basic 2010 Express heb ik een basale Wifi Controller gemaakt voor Witte lampen! Maar met simpele aanpassingen kan het programma ook makkelijk aangepast worden voor gekleurde ledlampen. Bovenin kan het IP adres en port (standaard 50000) van de Wifibox worden opgegeven.

ledlamp02

 

De wifibox kan worden aangestuurd middels commando's van 3 bytes lang welke via het UDP protocol naar de wifibox gestuurd kunnen worden. Een API voor de wifi ledlamp is gemaakt door www.applamp.nl. Mijn programma is daar dan ook gebaseerd. Dus alle credits voor applamp.nl op dat gebied. De hexadecimaal getallen heb ik omgezet naar ASCII codes (ofwel de byte code). Alleen de eerste byte is echt van belang. Die geeft de feitelijke opdracht door aan de wifibox. De laatste twee bytes zijn altijd ASCII (0) en ASCII (85).

Het programma kent twee belangrijke basis SUB's:

  • SendUDP
  • Wcommand

 

SendUDP

ledlamp03

 

De eerste Sub, SendUPD is verantwoordelijk voor het verzenden van het UDP pakketje over het netwerk. Voor deze SUB moeten wel de volgende referenties worden opgenomen in het programma:

  • Imports System.Net.Sockets
  • Imports System.Text

 

Wcommand

 

ledlamp04

 

De twee sub bevat een lijst alle commando's die mogelijk zijn voor een witte lamp. Het IP adres en de port worden uitgelezen van de textboxen op het form. Voor de volledige programma code inclusief een gecompileerde versie (voor de niet programmeurs) van het programma bijgaande download (click op de hardisk).

download-icon

 

Vervolg...

Het programma kan natuurlijk uitgebouwd worden. Interessanter zou het zijn om een programma te schrijven voor een NAS zoals bijvoorbeeld voor de Synology NAS. Dan zou het bijvoorbeeld mogelijk zijn om een digitale tijdschakelaar te maken welke automatisch de lampen aan en uit zet op bepaalde tijdstippen. Wellicht is het ook mogelijk om statussen terug te krijgen van de lampen om zo te zien of een lamp aan of uit is. Dit zal nog uitgezocht moeten worden.

zondag, 15 september 2013 11:48

E-mail notificatie K2 Joomla blog op reactie

Sinds kort maak ik gebruik van de K2 extentie voor Joomla. K2 is vooral handig voor het maken van een blog op je website. Een blog maakt het mogelijk om (korte) artikelen te publiceren en ruimte te bieden aan lezers om reacties achter te laten. Daar ik niet fulltime mijn site bekijk is het handig als ik een e-mail ontvang als er een nieuwe reactie geplaatst wordt. Helaas voorziet K2 hier niet standaard in. Wat googlen leert dat er wel enkele betaalde extenties zijn voor K2 die dit kunnen ondervangen. Echter als echte Nederlander ga ik niet teveel betalen voor een simpele functionaliteit die je ook makkelijk zelf kan implementeren.

Een zoektocht op internet bracht me eerst op deze site. Het doorvoeren van deze wijzigingen leverde in mijn geval echter geen e-mails op. De reden hiervoor is dat 'joomla hack' uitgaat van het feit dat reacties voorafgaande aan publicatie dienen te worden goedgekeurd. Ik ga bij mijn site uit van controle achteraf. Dus mensen mogen reacties plaatsen. Als er spam of opmerkingen bij zitten die het daglicht niet kunnen verdragen dan haal ik die achteraf van mijn site. 

Dus hoe moeten we er dan wel voor zorgen dat er een e-mail notificatie komt als iemand op je K2 Blog een reactie heeft achtergelaten? Hiervoor moeten we een stukje PHP code gaan toevoegen aan het item.php bestand wat onderdeel is van de K2 installatie.

Het item.php bestand vindt je onder het mapje 'components' in je Joomla installatie. Vervolgens ga je daar naar het mapje 'com_k2' en vervolgens naar het mapje 'models'. Ofwel in het kort: /components/com_k2/models/item.php.

In het item.php bestand (bewerken met teksteditor of php editor) zoek je naar ' function comment()'. Vervolgens scroll je langzaam naar beneden totdat je een regel tegenkomt met de tekst 'K2_COMMENT_ADDED_REFRESHING_PAGE'. Voor deze regel plaats je de volgende regels code:

 

$mainframe = &JFactory::getApplication();
$mail = &JFactory::getMailer();
$senderEmail = $mainframe->getCfg('mailfrom');
$senderName = $mainframe->getCfg('fromname');

$mail->setSender(array($senderEmail, $senderName));
$mail->setSubject('K2 Blog commentaar ontvangen');
$mail->IsHTML(true);
$body = " <strong>".JText::_('K2_NAME')."</strong>: ".nl2br($row->userName)." <br/> <strong> E-mail: </strong>: ".nl2br($row->commentEmail)." <br/> <strong>".JText::_('K2_COMMENT')."</strong>: ".nl2br($row->commentText)." <br/> "; $mail->setBody($body);
$mail->ClearAddresses();
$mail->AddAddress($params->get('commentsReportRecipient',
$mainframe->getCfg('mailfrom')));
$mail->Send();


      

Na het doorvoeren van deze aanvulling en het opslaan van item.php (en het eventueel opnieuw uploaden van dit bestand) zouden er na iedere geplaatste reactie een e-mail verzonden moeten worden naar het mail adres van de administrator.

Ik merk wel op dat bij iedere update van het K2 component bovenstaande handeling opnieuw uitgevoerd moet worden omdat dan waarschijnlijk er weer een nieuwe versie van item.php is.

 

Nog een korte uitleg van de bovenstaande code:

- Met '&JFactory::getmailer()' wordt de Joomla standaard email component aangeroepen.

- $senderEmail, $senderName halen e-mailadres en naam(site) op uit het Joomla configuratiebestand.

- Met $mail, $body wordt gecommuniceerd met Joomla mailer. In dit geval wordt de mail door de administrator verzonden naar hem-/haar-zelf.

- $body bevat de daadwerkelijke inhoud van de het de e-mail. $row wordt door K2 gebruikt om te communiceren met de database. Hieruit vissen we de door de reageerder ingevulde mailadres en naam.

- JText is een Joomla vertaalfunctie.

 

 

maandag, 02 september 2013 19:29

Offline Rekening Overzicht IBAN proof maken?

Update: Zie ook update programma in blog 'OROV Updater'.

Met veel plezier gebruik ik al jaren het programma Offline Rekening Overzicht van de heer Verhaag. Een handig programma om bankmutaties te bewaren en vervolgens te kunnen analyseren. Het voordeel boven alle online rekening overzichten is dat je zelf heer en meester bent over de data.

Alhoewel het programma sinds 2006 niet meer bijgewerkt is werkt het naar behoren. Echter inmiddels zijn we bezig met de overgang naar SEPA, waar ook een IBAN rekening bij hoort. Het inlezen van CSV's gaat nog steeds prima met OROV. Het probleem is echter dat OROV het oude rekeningnummer niet kan linken met het nieuwe IBAN nummer. OROV denkt dat er een nieuw rekeningnummer is. Hierdoor kun je bijvoorbeeld niet meer het saldo per heden zien. Dit probleem speelt in ieder geval bij de NG Bank. Zeer waarschijnlijk zijn ook andere banken overgestapt op IBAN.

Wat is de oplossing? Er zijn twee oplossingen. Ten eerste het aanpassen van de CSV bestanden voordat ze ingelezen worden. Bijvoorbeeld door zoeken en vervangen. Nadeel van deze optie is echter dat dit voor ieder import gedaan moet worden. Handiger is om de historische gegevens aan te passen. Hiervoor moeten we in de database zijn.

OROV maakt gebruikt van een standaard Microsoft Acces Database (data.mdb). Deze is terug te vinden in programmamap van OROV. De standaardmap is C:/Program Files(x86)/Offline Rekening Overzicht/. In deze database zullen we dus de historische data gaan aanpassen.

 bestandsmap OREV

 

Om dit te doen hebben we wel een programma nodig waarmee we de database kunnen lezen en daarna kunnen aanpassen. Een handig en gratis (open source) programma daarvoor is AxBase. Als dit programma geïnstalleerd is kunnen we aan de slag.

Alhoewel we geen risicovolle manipulaties van de database gaan doen adviseer ik toch om een back-up te maken. Bijvoorbeeld door de hele programmamap te koperen of anders alleen het mdb bestand.

Na de back-up openen we met AxBase het data.mdb bestand. We krijgen aan de linkerkant een overzicht te zien met alle tabellen welke in deze database aanwezig zijn. Hierin zien we ook de tabel 'mutaties' tussen staan. Dit is de tabel met alle mutaties. Indien je deze selecteert dan krijg je een beeld wat ongeveer overeenkomt met onderstaande afbeelding:

OREV database voorbeeld

 

In bovenstaande afbeelding zie je dat de laatste import geïmporteerd is met IBAN nummer terwijl de oudere mutaties nog het oude rekeningnummer hebben. Om de oude mutaties aan te passen gaan we gebruik maken van de standaard database taal SQL.
Stel dat uw oude rekeningnummer 76999xx was en het bijbehorende IBAN nummer NL27INGB00076999xx dan moet u in het witte vlak boven in het programma de volgende SQL code intikken:

UPDATE mutaties SET rekening = 'NL27 INGB 0007 6999 xx' WHERE rekening = '76999xx'

Zorg ervoor dat de IBAN rekening spaties bevat na iedere 4e letter of cijfer, conform de wijze waarop de ING Bank dit in haar CSV bestanden verwerkt.

Klik op 'Run SQL' en de database is aangepast. Dit kun je testen door eerst aan de linker kant een andere tabel te selecteren en vervolgens weer de tabel mutaties.

AxBase Run SQL

 

Vervolgens gaan we nog twee dingen doen. Ten eerste gaan we in AxBase naar de tabel rekeningen. Indien u al eerder een import heeft gedaan met een CSV waar het rekeningnummer een IBAN nummer is dan zult u in deze tabel zowel het oude als uw IBAN rekeningnummer zien. In dit geval dubbelklikt u op de rekeningomschrijving van het IBAN nummer. U kunt nu een omschrijving toevoegen. Het oude rekeningnummer kunt u weghalen met het '–' teken boven de formule. U krijgt in het Frans de vraag of u de regel wil verwijderen.

Indien er nog geen IBAN nummer geïmporteerd waren dat treft u hier alleen uw oude rekeningnummer aan. Dubbelklik op het rekeningnummer en pas het rekeningnummer aan.

Vervolgens open u Offline Rekening Overzicht en geeft een nieuw referentiesaldo op. Kies vervolgens herberekenen en het IBAN rekening met saldo zal vervolgens verschijnen bij 'Toon Saldi'.
Waarschijnlijk ziet u ook nog het laatst berekende saldo van uw oude rekeningnummer terugkomen. Dit komt doordat dit saldo is weggeschreven in orev.ini (configuratie)bestand welke u ook aantreft in de bestandsmap. Open deze met kladblok en haal hier de regel 76999xx= 180.92,13-8-2013, waar natuurlijk '76999xx' uw rekeningnummer is en uw bedrag en laatste berekendatum.

Beter zou natuurlijk een update zijn van het programma Offline Rekening Overzicht. Inmiddels ben ik hier zelf reeds mee bezig om dit programma geheel vanaf scrap weer te maken**. Uiteraard IBAN proof!

Disclamer: Gebruik van deze handleiding is voor eigen risico. Deze handleiding is met grootste zorgvuldigheid opgesteld. Alhoewel er zeker als er een back-up gemaakt is niet veel mis kan gaan aanvaard ik geen aansprakelijkheid mocht er onverhoopt wel iets misgaan.

 ** Ik krijg veel reacties of het programma al klaar is etc. Ik heb al een basis klaar zoals het zoeken in de database. Een heel programma maken is echter niet 123 zomaar gedaan. Zeker omdat programmeren voor mij gewoon een hobby is en ik ook gewoon een fulltime job etc. Het eerste bruikbare versie verwacht ik zelf op zijn vroegs eind dit jaar of anders begin 2014.

*** Bij inleesproblemen doordat het inleesbestand niet meer wordt herkend zie ook mijn conversietoolblog.

 

 

Pagina 2 van 2