Launchmenu’s in Retropie

Wanneer je een spel opstart in RetroPie, krijg je het zogenaamde launchmenu te zien. Hier kun je diverse zaken instellen voor het spel dat opgestart wordt. Je kunt door het menu heen lopen met je game-controller.

Helaas is dit erg vervelend wanneer je je kinderen spelletjes laat spelen en ze in al hun ongeduld op de knoppen van een controller beginnen te drukken. Ze verdwalen dan in de menu-structuur en krijgen hun spelletje niet opgestart.

Daarom is het wenselijk om deze optie uit te schakelen. Gelukkig kan dit erg eenvoudig:

  • Ga naar het instellingen-menu van RetroPie.
  • Kies Run Command Editor

  • Ga met de toetsen op je game-controller naar optie 3 en kies deze. Hiermee verzet je de instelling van Enabled naar Disabled.
  • Druk op rechts op je game-controller om naar Cancel te navigeren en kies deze optie.

Vanaf nu krijg je bij het opstarten van een spel nog wel het launch menu te zien, maar je kunt hem niet meer bedienen via de game-controller.

Raspberry Pi als spelcomputer

Een Raspberry Pi is uitermate geschikt voor leuke hobby-projecten. Zo wordt hij in ons huis reeds ingezet als telefooncentrale, mediaspeler en domotica-controller. Een andere leuke toepassing is om hem in te zetten als spelcomputer. In dit artikel lees je hoe je met een Raspberry Pi een relatief goedkope spelcomputer kunt maken en er héél veel (gratis) spelletjes op kunt spelen. Het systeem ondersteunt namelijk bijna alle game-console die we uit onze jeugd kennen, zoals de Super Nintendo en de Sega MegaDrive.

Je hebt de volgende hardware nodig: (Klik op de links om goedkoop te bestellen)

Om te beginnen bouw je de Raspberry Pi in de behuizing. Vervolgens sluit je de game-controllers aan op de USB-poorten van je Raspberry Pi.

Nu gaan we de benodigde software installeren. Hiervoor moeten we een image-bestand downloaden. Dit bestand moet op de micro-SD kaart geplaatst worden. Hiervoor moet je de SD-kaart middels de cardreader op je computer aansluiten. Vervolgens hebben we nog een stukje software nodig om het image-bestand op de SD-kaart te plaatsen:

  • Gebruik je Windows, dan kun je hiervoor Win32DiskImager gebruiken.
  • Gebruik je Linux of een Mac, dan adviseer ik je Etcher te gebruiken.

Als je het image-bestand op de SD-kaart geplaatst hebt, verwijder je deze uit je computer en steek je hem in de Raspberry Pi. Sluit nu de Raspberry Pi via de HDMI-kabel aan op je TV. Verbind de Raspberry Pi met je netwerk met behulp van de netwerkkabel. Tot slot sluit je een game-controller en de voedingsadapter aan en wacht je een minuutje totdat het apparaat is opgestart.

Wanneer de Raspberry Pi volledig is opgestart, krijg je het volgende scherm te zien:

Druk nu op een knop op de game-controller en je krijgt de naam van de controller te zien:

Druk nu weer op een knop om de controller te configureren:

Volg nu de instructies op het scherm.Als je geen knoppen meer hebt om te configureren, houd je gewoon een willekeurige knop ingedrukt om deze over te slaan. Zodra je bij OK komt, druk je op de knop die je als “A” geconfigureerd hebt.

Wifi instellen

De RetroPie is nu aangesloten via een netwerkkabel. Hoewel dit op zich prima werkt, is een draadloze verbinding wellicht wat handiger. De Raspberry Pi 3B(+) beschikt over onboard Wifi, dus een draadloze verbinding is eenvoudig op te zetten. Kies allereerst het volgende menu-item op de RetroPie:

Je komt nu in het instellingen-menu. Daar vindt je de optie Show IP. Kies deze optie en je krijgt een nieuw scherm te zien met het IP-adres van je RetroPie.

We kunnen nu een SSH-sessie opzetten naar de RetroPie. Als je een Windows-PC gebruikt, dan kun je hiervoor Putty gebruiken. Linux- en Mac gebruikers kunnen een SSH-sessie opzetten vanuit de terminal. Om via SSH in te loggen heb je een gebruikersnaam en wachtwoord nodig. De standaard gebruikersnaam voor de RetroPie is pi en het wachtwoord is raspberry.

Wanneer je via SSH ingelogd bent op je RetroPie, maak je eerst een bestand aan met de Wifi-instellingen:

nano /boot/wifikeyfile.txt

Voeg de volgende regels toe:

ssid="<naam_van_je_wifi_netwerk>"
psk="<je_wifi_wachtwoord>"

Vervolgens gebruik je de toetsencombinatie CTRL+X om het bestand op te slaan.

Nu ga je op de RetroPie weer naar het instellingenmenu, waar we eerder de optie Show IP gebruikten. Deze keer kies je de optie Wifi. Je krijgt nu een nieuw scherm te zien, waar je optie 3 kiest: Import wifi credentials from /boot/wifikeyfile.txt.

De instellingen voor de wifi worden nu door de RetroPie gebruikt. Omdat de RetroPie nu gebruikt maakt van zowel de bekabelde verbinding als de draadloze verbinding, kan hij nog steeds benaderd worden via het eerder opgezochte IP-adres. Wanneer je echter de netwerkkabel ontkoppelt, zal hij alleen bereikbaar zijn via het IP-adres van de Wifi-adapter. Deze is wederom op te zoeken via de optie Show IP in het RetroPie instellingen-menu.

Games toevoegen

Nu je RetroPie klaar is voor gebruik, wordt het tijd om spelletjes toe te voegen. Er wordt gebruik gemaakt van zogenaamde ROM’s. Dit zijn digitale versies van de game-cartridges die vroeger gebruikt werden in game-consoles. Deze ROM’s zijn gratis op het internet te downloaden. Om je op weg te helpen kun je alvast de onderstaande games downloaden:

Wanneer je de games hebt gedownload, kun je ze op je RetroPie zetten. Dit kan eenvoudig via je netwerkverbinding. De RetroPie ondersteunt namelijk het SMB-protocol waarmee je bestanden kunt versturen over je netwerk. Hiervoor open je een SMB-share op je RetroPie:

Voor Windows-gebruikers:

Ga naar Start->uitvoeren en typ:

\\retropie

Voor Mac-gebruikers:

Toets CMD+K en toets:

smb://retropie

Je krijgt nu de SMB-shares van je RetroPie te zien in je Verkenner (Windows) of je Finder (Mac). Kies nu de roms share.

roms in finderDeze share bevat een mappen voor de verschillende game-console, zoals bijvoorbeeld Nintendo Super Entertainment Set (snes) of Sega Megadrive (megadrive). De ROM’s dienen nu in de mappen geplaatst te worden van de bijbehorende systemen. Je kunt ze er eenvoudig naartoe slepen en de bestanden worden automatisch gekopieerd.

Zodra de spelletjes gekopieerd zijn, moet de RetroPie nog even opnieuw gestart worden zodat de nieuwe spelletjes herkend worden. Dit doe je door op de game-controller op Start te drukken en dan de optie Quit en vervolgens Restart te kiezen. Zodra het apparaat opnieuw is opgestart, zul je zien dat er in het menu systemen zijn bijgekomen. Wanneer je een systeem kiest met de toetsen op je game-controller, krijg je de geïnstalleerde spelletjes te zien. Selecteer het gewenste spel en start het met de A toets op je controller.

Meer games downloaden

Als je nog meer games wilt downloaden, kijk dan eens bij http://www.completeroms.com. Hier kun je een enorme hoeveelheid games downloaden voor verschillende platformen.

Meer leren over RetroPie?

Als je meer weten leren over de mogelijkheden van een RetroPie, kijk dan ook eens op https://retropie.org.uk.

Domoticz koppelen met Ikea’s Trädfri

ikea domoticz

In het verleden heb ik mijn Trädfri-systeem van Ikea al eens gekoppeld met HomeBridge, zodat ik de Ikea-lampen kon koppelen met HomeKit en dus kon bedienen via mijn iPhone. Sinds enige tijd biedt Ikea ook HomeKit-ondersteuning waardoor deze koppeling niet meer nodig is.

Wanneer je een AppleTV4 of iPad met minimaal iOS10 hebt, kun je ook zaken automatiseren met scenes en dergelijke. Heb je die ApplTV of iPad niet, dan ben je aangewezen op de zeer beperkte functionaliteit van Trädfri, waarbij je bijvoorbeeld lampen kunt schakelen op basis van tijd.

Natuurlijk wil ik lampen ook kunnen schakelen op basis van sensoren, tijd en combinaties hiervan, maar met de mogelijkheden van Trädfri zelf kom je niet heel ver. In Domoticz is het mogelijk om lampen te schakelen op basis van veel verschillende factoren en daarbij ook condities te hanteren. Bijvoorbeeld: schakel een lamp in wanneer een bewegingssensor geactiveerd wordt ná zonsondergang. Dit soort logica hanteer ik al een tijdje met de Zwave-devices in mijn huis, maar helaas nog niet met de Ikea-verlichting. Het wordt dus tijd om Domoticz nu ook eens te koppelen met Trädfri.

Standaard wordt Tradfri niet ondersteund door Domoticz, maar met de installatie van wat (opensource) software wordt het toch mogelijk. Trädfri ondersteunt namelijk het COAP-protocol, waarmee het basisstation een API biedt weer te tegen kunnen praten.

Om te beginnen hebben we het IP-adres van het Trädfri basisstation nodig. Dit basisstation verkrijgt zijn IP-adres via DHCP. Het is niet mogelijk om een vast IP-adres in te stellen. De eenvoudigste manier om achter het IP-adres van het basisstation te komen is door het MAC-adres af te lezen op de achterzijde van het apparaat. Met dit MAC-adres kun je dan in je router het IP-adres van het basisstation opzoeken. Noteer het IP-adres van het basisstation om het later te gebruiken.

Om de koppeling op te bouwen, moeten we een Python plugin installeren. Op het moment dat ik dit artikel schrijf, worden plugins enkel nog in de beta-versie van Domoticz ondersteund. Dat wil zeggen: Domoticz is er in twee versies: stable en beta.

  1. Open Domoticz in je browser door te surfen naar http://<ip_adres_van_domoticz>:8080
  2. Klik vervolgens op Instellingen en daarna weer op Instellingen. De instellingen-pagina wordt nu geopend.
  3. Kies nu onder Software-updates het distributie-kanaal Bèta.
  4. Klik nu rechtsboven weer op Instellingen en vervolgens op Controleer op updates.

Wanneer Domoticz draait op de laatste Beta-versie, kunnen we de plugin voor Ikea’s Trädfri installeren. Voor de plugin is Python versie 3.5 minimaal vereist. Wanneer je Domoticz hebt draaien op een Raspberry Pi (en dus op het RaspBian OS), heb je waarschijnlijk Python versie 2.x nog draaien en zul je dus je Python moeten upgraden.

Als je Python versie 3.5 of hoger hebt draaien, kun je verder gaan met de volgende stappen:

  1. Log in op je Domoticz-machine via SSH.
  2. Installeer pytradfri.
    Dit is een Python library die wordt gebruikt door de Domoticz-plugin die we zometeen gaan installeren. Je installeert deze library met het volgende commando:

    pip3 install pytradfri
  3. Vervolgens installeer je de Twisted library. De Domoticz-plugin maakt ook hier gebruik van:
    pip3 install twisted
  4. Ga nu naar de plugins-directory van je Domoticz installatie (op mijn Raspberry Pi is dat /home/pi/domoticz/plugins) en clone de Ikea Trädfri plugin via Git:
    cd /home/pi/domoticz/plugins
    git clone https://github.com/moroen/IKEA-Tradfri-plugin.git IKEA-Tradfri
  5. Creeer een identiteit en een sleutel. Hiervoor heb je het IP-adres en de beveiligingssleutel van je basisstation nodig. Het IP-adres heb je eerder al opgezocht en de beveiligingssleutel is te vinden op de achterzijde het basisstation. Het volgende commando genereert een sleutel voor de gebruiker DOMOTICZ. Vervang <BEVEILIGINGSSLEUTEL> en <IP_ADRES_VAN_BASISSTATION> door je eigen varianten.
    coap-client -m post -u "Client_identity" -k "<BEVEILIGINGSSLEUTEL>" -e '{"9090":"DOMOTICZ"}' "coaps://<IP_ADRES_VAN_BASISSTATION>:5684/15011/9063"
  6. Wanneer het commando succesvol wordt uitgevoerd, krijg je het onderstaande terug. In dit voorbeeld is de aangemaakte sleutel: 1.2.0042. Jouw sleutel zal natuurlijk een andere waarde bevatten. Noteer deze waarde. Je kunt hem namelijk maar één keer aanmaken en hij is naderhand niet meer op te roepen.
    {"9091":"PSK","9029":"1.2.0042"}
  7. Nu gaan we de COAP-adapter activeren. Hiervoor gebruiken we systemd.
    cd IKEA_tradfri
    sudo cp ikea-tradfri.service /lib/systemd/system/
    sudo systemctl daemon-reload
    sudo systemctl start ikea-tradfri.service
  8. Om er voor te zorgen dat de ikea-tradfri service automatisch wordt opgestart wanneer je de Domoticz-machine herstart, voer je het volgende commando uit:
    sudo systemctl enable ikea-tradfri.service
  9. Ga nu weer naar Domoticz in je browser en klik op Instellingen en vervolgens op Hardware.
  10. We gaan nu nieuwe hardware toevoegen. Kies bij type de optie IKEA Tradfri. Vul het IP-adres van je basisstation in. Bij identity vul je in: DOMOTICZ. Bij PSK vul je de gegenereerde sleutel in. Klik tot slot op Toevoegen.

    tradfri-domoticz-settings

  11. De gekoppelde lampen van Ikea verschijnen nu bij Instellingen->Apparaten. Je kunt ze nu gebruiken zoals alle andere devices in Domoticz.

Domotica, kleine kinderen en energie besparen

open door heat loss

Iedereen met kleine kinderen kent het probleem: Kinderen die vergeten de buitendeur dicht te doen, waardoor er onnodig gestookt wordt. Ook hier in huis hebben we dit probleem. Terwijl het buiten koud is laten de kinderen de keukendeur openstaan als ze in de tuin gaan spelen. Niet alleen loopt alle warmte uit het huis, maar de verwarming gaat ook nog eens harder stoken om het toch weer warm te krijgen.

Zo kwam ik op het idee om de verwarming eens wat slimmer te maken, waardoor hij stopt met stoken op het moment dat onze keukendeur te lang open staat. De domotica in ons huis draait op Domoticz en de verwarming wordt aangestuurd door een Nest Thermostaat. Het enige dat ik nog nodig had, was een manier om te detecteren of de keukendeur open stond. Hiervoor heb ik een zWave deursensor aangeschaft. Deze sensor werkt op een batterijtje (dat zo’n anderhalf jaar meegaat) en communiceert draadloos met het Domotica-systeem.

Ik heb gekozen voor de deursensor van Neo Coolcam. Deze is bestaat uit twee delen. Eén breng je aan op de deur en het andere deel breng je aan op het kozijn. Hiervoor kun je de meegeleverde schroefjes of dubbelzijdige tape gebruiken. Neo Coolcam door sensorBinnen 5 minuten zit de sensor op je deur en heb je hem gekoppeld aan Domoticz. Het is echt supereenvoudig!

Bij het schakelen van de verwarming wil ik ook graag rekening houden met de buitentemperatuur. Hiervoor heb ik de API van Weather Underground gebruikt. De handleiding voor hoe je deze in Domoticz integreert vindt je hier. Na de implementatie kreeg ik er in Domoticz een device bij, genaamd Buitentemperatuur.

Nu moest ik de logica gaan programmeren. Deze is als volgt:

  • Wanneer de keukendeur langer dan 2 minuten open staat en de buitentemperatuur lager is dan 20 graden, moet de Nest-thermostaat in ECO-mode gezet worden. Hierdoor stopt de verwarming met stoken.
  • Wanneer de deur weer gesloten wordt, moet de ECO-stand worden opgeheven waardoor de verwarming weer aan gaat.
  • Het opheffen van de ECO-mode moest echter alleen plaats vinden wanneer we niet thuis zijn.

Gelukkig weet onze Nest Thermostaat of we thuis zijn. Dit is door Domoticz uit te lezen; er is gewoon een sensor voor.



In eerste instantie heb ik geprobeerd de logica te programmeren in LUA, maar daarbij liep ik tegen problemen met het uitlezen van sommige sensoren. De oorzaak hiervan heb ik nog niet kunnen achterhalen. Tijdens het uitzoeken kwam ik DzEvents tegen: een nieuwe manier van LUA scripting die ik zelf veel prettiger vond en die ook ondersteund wordt door Domoticz.

Om deze LUA-scripts door Domoticz uit te laten voeren, plaats je deze in de ~/domoticz/scripts/dzVents/scripts directory. De bestandsnaam dient de extensie lua te hebben. Ik heb dus het bestand keukendeur.lua aangemaakt in deze directory. Dit is mijn code:

return {
    active = true,
    on = {
        devices = {
            'Keukendeur'
        }
    },
    execute = function(domoticz, switch)
        if (switch.state == 'Open' and domoticz.devices('Buitentemperatuur').temperature < 20) then
                domoticz.log('Timer set for 5 minutes before entering heating ECO mode')
                domoticz.devices('Thuis Family Room Manual Eco Mode').setState('On').afterMin(2)
        end

        if (switch.state == 'Closed' and domoticz.devices('Thuis Family Room Away').state == 'Off') then
            domoticz.devices('Thuis Family Room Manual Eco Mode').setState('Off')
        end

    end
}

Deze code wordt event-based uitgevoerd. Op het moment dat de status van Keukendeur wijzigt, wordt de bovenstaande code uitgevoerd. Daarbij wordt gekeken naar de status van de sensor (switch.state), de temperatuur van de Buitentemperatuur-sensor en de status van de Away-sensor in de Nest Thermostaat.

Door deze uitbreiding is ons huis weer een beetje slimmer geworden en kan het omgaan met kinderen die vergeten de deur achter zich dicht te doen.

 

VirtualBox Headless – Een VM aanmaken

PhpVirtualBox

In mijn vorige artikel heb ik je laten zien hoe je een VirtualBox Headless server met web-interface opzet. Nu ga ik je laten zien hoe je via deze webinterface een nieuwe Virtuele Machine (VM) aanmaakt en installeert.

In dit voorbeeld ga ik de machine installeren met Debian 9, maar je kunt natuurlijk ook kiezen voor een ander besturingssysteem, zoals Windows, MacOS of een andere Linux distributie.



Virtualisatie met headless VirtualBox

Regelmatig heb ik een nieuwe server nodig voor een nieuw projectje of een experiment. Vroeger betekende dit dat er weer nieuwe hardware bijgeplaatst werd, maar tegenwoordig maken we gebruik van virtualisatie. Simpel gezegd is dit het draaien van een virtuele computer op je PC. Zo kun je bijvoorbeeld een Windows-computer binnen je Mac-besturingssysteem laten draaien. Of een Linux-computer binnen je Windows-besturingssysteem.

Hiervoor zijn veel verschillende pakketten beschikbaar. Voor desktopcomputers zijn bijvoorbeeld VMware, Parallels en VirtualBox beschikbaar. Ik heb gekozen voor VirtualBox omdat deze gratis te verkrijgen is voor Windows, Linux en de Mac.

Het aardige van VirtualBox is dat deze ook “headless” te draaien is. Dat betekent dat je het pakket gebruikt zonder grafische gebruikersinterface. Reuze handig voor bijvoorbeeld server waar je toch nooit een scherm op aansluit en die je alleen via het netwerk benadert, zoals een web- of mailserver. Zo heb ik een server gebouwd waarin diverse virtuele servers draaien. Omdat de virtuele server hun geheugen niet met elkaar kunnen delen, is het verstandig om de machine waarop de virtuele servers gaan draaien (host) te voorzien van voldoende RAM-geheugen.



De virtuele servers worden voorzien van virtuele harddisks. Dit zijn feitelijk bestanden die op de harddisk van de host staan. Omdat meerdere virtuele servers tegelijkertijd lezen en schrijven naar hun virtuele harddisks, is het verstandig om de host te voorzien van een snelle harddisk of, nog beter, een SSD. Voor het besturingssysteem van de host heb ik gekozen voor Debian, een Linux-distributie. Deze is gratis te downloaden.

Nadat je Debian op je host-machine hebt geïnstalleerd, kun je VirtualBox als volgt installeren:

  • Om te beginnen heb je root-toegang. Wanneer je niet ingelogd bent als root, toets dan het commando su <enter> om te switchen naar de root-gebruiker.
  • Toets nu het volgende commando:
    nano /etc/apt/sources.list.d/virtualbox.list
  • De nano tekstverwerker wordt nu geopend. Voer de volgende regel in:
    deb http://download.virtualbox.org/virtualbox/debian stretch contrib
  • Sla nu het bestand op met CTRL+O en sluit vervolgens de tekstverwerker af met CTRL+X.
  • We hebben nu de Oracle repository toegevoegd aan het systeem. Om software te downloaden uit deze repository, moeten we ook de bijbehorende GPG-sleutel downloaden en toevoegen aan ons systeem. Dit doen we met het volgende commando:
    wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | apt-key add -

    De GPG-sleutel wordt gebruikt om de integriteit van te verifiëren van pakketten die we downloaden uit de toegevoegde repository.

  • Nu gaan we de lokale index van de APT package manager bijwerken zodat de beschikbare pakketten in de zojuist toegevoegde repository worden opgenomen:
    apt-get update
  • Vervolgens gaan we via de APT package manager VirtualBox installeren:
    apt-get install virtualbox-5.1

VirtualBox is nu geïnstalleerd. Vanaf de command line kun je nu virtuele machines machines aanmaken en opstarten. Om te leren hoe dit moet, raad ik je aan om de handleiding te lezen. Heb je daar geen zin in of tijd voor, dan kun je ook een user-interface installeren, waarmee je via een webpagina eenvoudige machines kunt aanmaken, instellen en beheren:

Deze user-interface heet PhpVirtualbox. Wanneer je deze installeert, kun je VirtualBox via een webpagina beheren. Je installeert hem als volgt:

  • Om te beginnen heb je een webserver met PHP nodig. Deze installeer je als volgt:
    apt-get install apache2 php5
  • Vervolgens installeren we unzip, omdat we PhpVirtualbox downloaden als ZIP-bestand en dus moeten uitpakken:
    apt-get install unzip
  • Nu gaan we naar de web-root (de directory waarin de webserver zijn bestand leest):
    cd /var/www/html
  • Nu downloaden we PhpVirtualbox:
    wget http://sourceforge.net/projects/phpvirtualbox/files/latest/download -O phpvirtualbox.zip
  • Vervolgens pakken we het gedownloade bestand uit:
    unzip phpvirtualbox.zip
  • De map die vervolgens uit het ZIP-bestand wordt, hernoemen we zodat ie gemakkelijker te benaderen is:
    mv phpvirtualbox-5.0-3/ phpvirtualbox
  • Nu gaan we de meegeleverde configuratie kopiëren:
    cd /var/www/html/phpvirtualbox/
    cp config.php-example config.php
  • Vervolgens openen we het configuratiebestand in nano:
    nano /var/www/html/phpvirtualbox/config.php
  • Wijzig de username en password in het configuratiebestand:
    var $username = 'vbox';
    var $password = 'P@55w0rd';

    In dit voorbeeld gebruiken we P@55w0rd als wachtwoord, maar natuurlijk kun je hier zelf een wachtwoord verzinnen.

  • Sla nu het bestand op met CTRL+X, en sluiten de tekstverwerker af met CTRL+X.
  • Nu wijzigen we het wachtwoord van de vbox gebruiker:
    passwd vbox
  • Tot slot zoeken we nog even het IP-adres van onze host-machine op:
    Toets het volgende commando:

    ifconfig

    Je krijgt nu het onderstaande overzicht te zien:

    eth0      Link encap:Ethernet  HWaddr 04:01:37:2f:c8:01  
              inet addr:188.226.175.14  Bcast:188.226.175.255  Mask:255.255.255.0
              inet6 addr: fe80::601:37ff:fe2f:c801/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:34653091 errors:0 dropped:0 overruns:0 frame:0
              TX packets:37594638 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:9932275540 (9.2 GiB)  TX bytes:15550676802 (14.4 GiB)
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:6093088 errors:0 dropped:0 overruns:0 frame:0
              TX packets:6093088 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:9777020882 (9.1 GiB)  TX bytes:9777020882 (9.1 GiB)

    In het bovenstaande voorbeeld zien we dat het IP-adres van onze netwerkkaart (eth0) is: 188.226.175.14

  • Open nu een browser op een computer in je netwerk en toets dit IP-adres in je browser, gevolgd door /phpvirtualbox, dus:
    ip.adres.vanje.hostcomputer/phpvirtualbox
  • Je wordt nu gevraagd om in te loggen. Standaard gebruikersnaam is admin en het standaard wachtwoord is ook admin.
    Het is mogelijk dat je een foutmelding krijgt over een verkeerde versie. Deze kun je wegklikken en negeren. Ik heb e.e.a. getest en geverifieerd dat het gewoon werkt.

Zodra je in bent gelogd, kun je via deze pagina nieuwe virtuele machines aanmaken en beheren. Hierover binnenkort meer…



Mijn eerste WordPress plugin

Jarenlang heb ik het kunnen vermijden: WordPress. Ik vond het veel leuker om maatwerk-oplossingen te maken en WordPress leek me toch meer een speeltuin voor paarse broeken. Toch besloot ik een tijd geleden om mijn website met WordPress te gaan maken, omdat maatwerk veel te veel werk zou zijn om mijn brain farts de wereld in te slingeren.

En zo gebeurde het dat mijn website op WordPress ging draaien. Even een theme uitgezocht, een paar plugins geïnstalleerd en hopla… klaar om te bloggen. Sindsdien heb ik al aardig wat artikeltjes getikt over de meeste uiteenlopende onderwerpen. Onlangs schreef ik nog een artikel over het bouwen van onze mining rig. En toen kwam ik op een idee dat ik niet kon oplossen met een standaard WordPress-plugin: Het tonen van de statistieken van de mining rig op mijn website. De mining rig beschikte over een API, waarmee ik de gegevens over het apparaat en zijn activiteit kon ophalen. Het schrijven van code voor het ophalen van deze gegevens en het verwerken daarvan zijn op zich een koud kunstje, maar met het tonen van de gegevens op een WordPress website had ik nog geen ervaring.

Na wat zoeken op het internet besloot ik een plugin te maken, die eenvoudig in WordPress geïnstalleerd kon worden. Op deze manier zouden anderen er ook nog iets aan hebben. De plugin die ik gebouwd heb, heet ethOS Statistics. Deze plugin biedt de mogelijkheid om verbinding te maken met het statistieken-paneel van een ethOS mining rig en vervolgens gegevens op te halen die middels een widget in WordPress getoond kunnen worden.

De plugin staat inmiddels online en kan gratis gedownload worden. Installatie in WordPress duurt een paar minuten en het instellen ervan is kinderlijk eenvoudig. Op dit moment is de plugin zowel nederlands- als engelstalig te gebruiken. Mocht ik de komende weken nog wat tijd over hebben, dan vertaal ik hem ook nog even in het Duits. Spreek jij een “vreemde” taal en vind je het leuk om mee te helpen vertalen? Laat dan even een commentaar achter onder dit artikel.

Nieuw project: Cryptocurrency miner

De gedachte om zelf cryptocurrency te gaan minen, spookte al een tijdje door mijn hoofd. Op het internet had ik al het één en ander gelezen over hoe je zelf met een krachtige videokaart virtueel geld kon minen en vorige jaar had ik al een beetje gespeeld met BitCoin. Nadat mijn BitCoins in waarde al meer dan verdubbeld waren, besloot ik toch eens serieus de mogelijkheden te gaan onderzoeken om zelf te gaan minen.

De hardware

Omdat de investering in de benodigde hardware toch substantieel zou zijn, heb ik eerst op internet gezocht naar zeer efficiënte hardware. Met name de benodigde krachtige videokaarten zouden behoorlijk wat energie nodig hebben, dus heb ik gezocht naar kaarten die zoveel mogelijk konden berekenen per opgenomen Watt. De snelste videokaarten bleken niet altijd de meest efficiënte. De videokaarten moesten natuurlijk ook nog terugverdiend worden. De ROI (Return On Investment) moest natuurlijk zo snel mogelijk zijn. De keuze viel uiteindelijk op de GTX1070 van NVIDIA.

Helaas bleken deze kaarten moeilijk verkrijgbaar en als ze te krijgen waren steeg de prijs erg snel. Samen met mijn vriend Maarten besloten we om te gaan minen met 6 kaarten. Deze kaarten zouden gezamenlijk een capaciteit moeten kunnen halen van 180 MH/s. Aangezien de kaarten zo’n 150 Watt per stuk zouden opnemen moest er een voeding komen van ruim 1000 Watt. We besloten een voeding in te zetten van 1200 Watt.

Het moederbord, waarop de kaarten zouden worden aangesloten, zou natuurlijk nooit het benodigde vermogen aan de kaarten kunnen leveren. Moderne videokaarten hebben een rechtstreeks verbinding met de voeding die het extra vermogen levert. Normaal gesproken levert het moederbord zo’n 75 Watt rechtstreeks aan de videokaart, maar dat is uitgaande van 1 of 2 videokaarten. Aangezien wij er 6 zouden plaatsen, moest er een andere oplossing komen.

PCI USB Riser card

We besloten PCI-risers te gebruiken. Op deze printplaatjes zouden we dan de videokaart aansluiten. Vervolgens werd de riser middels een SATA-voeding direct aangesloten op de voeding. Via een USB-kabel en een tweede printplaatje werd de riser aangesloten op het moederbord. Het was wel even zoeken naar het juiste moederbord, aangezien deze minimaal 6 PCI-sloten moest bevatten. Uiteindelijk hebben we de Asrock H81 Pro BTC r2.0 besteld. Omdat de CPU op het bord nauwelijks werk zou moeten verzetten hebben we een Intel Celeron 1840 aangesloten. Helaas bleek deze processor zeer moeilijk leverbaar, maar we vonden het toch zonde om een zwaardere (en dus duurdere) processor in te zetten. Gelukkig hadden de heren van Orbit in Nijmegen nog een tweedehands exemplaar liggen. De miner zou met 4GB RAM prima moeten kunnen werken, maar omdat geheugen niet echt duur is, hebben we het op de groei gekocht en 8GB RAM geplaatst. Tot slot moest er natuurlijk nog iets aangesloten worden voor de opslag. Hiervoor hebben we een 320GB harddisk gebruikt die een tijdje dienst gedaan heeft in mijn oude iMac. Deze schijf lag nog in mijn garage en het leek ons aardig om dit beestje nog eens aan het werk te zetten.

Omdat de miner toch aardig wat warmte zou gaan genereren, besloten we om hem niet in een traditionele computerkast te bouwen. Gezien het feit dat elke videokaart twee slots aan ruimte zou gebruiken, zou het ook fysiek niet passen. Daarom besloten we een open frame te bouwen. Hiervoor hebben we bij de lokale bouwmarkt enkele aluminium profielen opgehaald en een houten balkje om het geheel wat stevigheid te geven. Met zelfborende schroeven hebben we het frame in een middagje gebouwd.



Nadat het frame klaar was, hebben we de kaarten met hun risers in het frame geplaatst, samen met het moederbord en de voeding. De voeding hebben we zo geplaatst dat hij de warme lucht buiten het frame blaast. Aangezien warme lucht opstijgt, hebben we de kaarten bovenin het frame geplaatst.

 

De software

Aangezien de meeste handleiding voor het bouwen van een dergelijke mining rig op het internet gebaseerd zijn op Windows, leek het ons verstandig om in eerste instantie Windows 10 te gaan gebruiken. Helaas bleek de leverancier, waar we dit besturingssysteem besteld hadden, niet te leveren. Daarom hebben we toch eens gekeken naar EthOS, een geoptimaliseerde Linux-distributie. Het pakket, dat €39 kost, belooft eenvoudig in te stellen te zijn en je zou er in no-time up-and-running mee moeten zijn.Die belofte bleek het pakket inderdaad waar te maken. Na het downloaden heb ik via mijn MacBook en een USB-convertor de software op onze harddisk geplaatst. Dit duurde ongeveer 5 minuten en onze mining rig startte er zonder enig probleem mee op. Alle videokaarten werden probleemloos herkend en het minen startte automatisch. Het enige dat we nu nog even moesten doen, was een crypto-wallet aanmaken waarop onze virtuele muntjes gestort moesten gaan worden. Nadat we deze hadden aangemaakt, hebben we het adres van onze wallet ingevoerd in EthOS en klaar is kees. Met de standaard instellingen gaat EthOS minen in Ethereum, wat ETHER munten oplevert. EthOS kan ook andere munten minen zoals zCash, Monero en nog veel meer, maar dat gaan we later uitproberen.

Met de standaard-instellingen haalden de kaarten per stuk zo’n 26 MH/s. Door de kaarten te overclocken zouden we er nog wat meer uit moeten kunnen halen, maar in eerste instantie hebben we maar eens gedraaid met deze standaard instellingen om te kijken hoe de warmte-ontwikkeling zou zijn. Onze mining rig bleek toch aardig warmte te genereren. Om de levensduur van de videokaarten niet meteen drastisch te beperken, leek het niet verstandig om de ventilatoren op de kaarten op vol vermogen te laten draaien. De standaard-instellingen van EthOS zorgen er overigens voor dat deze op 85% draaien.

We hebben nu 24 uur getest en de mining rig loopt erg stabiel. In de woonkamer, waar we getest hebben, liep de temperatuur gemiddeld met 2 graden op. Gelukkig is het op dit moment niet zo warm buiten, want dan zouden we wellicht toch iets moeten verzinnen op de afvoer van de warmte. Één dezer dagen gaan we de mining rig verplaatsen naar de kelder, wat weer een paar graden zou moeten schelen.

Ledger Nano S - The secure hardware wallet

Hij draait, wat nu?

De komende weken gaan we de EthOS-software verder instellen om de rig zo efficiënt mogelijk te krijgen.

Zwave smart plug

We hebben een Zwave smart plug tussen het stopcontact en de voeding aangesloten, zodat we het opgenomen vermogen kunnen monitoren via ons domotica-systeem. Op dit moment trekt de hele mining rig zo’n 1050 Watt. Om deze energiekosten te dekken moet de rig natuurlijk zoveel mogelijk minen. Het apparaat draait dan ook 24 uur per dag. De bedoeling is dat we nog wat software gaan schrijven om zo goed mogelijk te monitoren en eventueel automatisch wijzigingen uit te voeren.

Natuurlijk zullen we verslag doen van de ontwikkelingen via deze site.

Ikea’s TRÅDFRI bedienen met HomeKit en Siri

tradfri-homekit

Onlangs heb ik mijn eerste ervaring met Ikea’s TRÅDFRI gedeeld. TRÅDFRI bleek nogal beperkt te zijn in de functionaliteit en, in tegenstelling tot wat de verkoper in de vestiging in Duiven vertelde, bleek het (nog) niet te werken met Apple’s HomeKit.

Zo’n systeem met beperkte functionaliteit vormt voor mij als techneut toch wel een uitdaging. TRÅDFRI werkt met het COAP-protocol, dus ben ik eens gaan uitzoeken wat we daar mee kunnen. Na wat zoeken kwam ik een plugin tegen voor HomeBridge. Hierdoor zou het mogelijk worden om TRÅDFRI toch te koppelen aan HomeKit. Nu zijn er meerdere plugins te vinden voor TRÅDFRI, maar de door mij gebruikte plugin blijkt niet alleen het beste te werken met Siri, maar biedt ook de mogelijkheid om de lichtkleur vanuit HomeKit te wijzigen. Een andere plugin die ik getest heb deed dit niet en werkte ook niet al te best via Siri.

Ik ga er vanuit dat je HomeBridge al hebt draaien. Is dit nog niet het geval, lees dan eerst dit artikel.

Het installeren van de plugin is vrij eenvoudig:

  • Log in op je Raspberry Pi via SSH.
  • Zorg dat je als root werkt d.m.v. hete volgende commando
    sudo bash
  • We gaan nu enkele software-pakketjes installeren die we verderop nodig hebben:
    apt-get install libtool autoconf
  • Nu gaan we de COAP library installeren. Deze wordt door de plugin gebruikt om met TRÅDFRI te communiceren. Voer de onderstaande commando’s één voor één uit:
    cd /root
    git clone --recursive https://github.com/obgm/libcoap.git
    cd libcoap
    git checkout dtls
    git submodule update --init --recursive
    ./autogen.sh
    ./configure --disable-documentation --disable-shared
    make
    make install
  • Installeer de plugin
    npm install -g homebridge-tradfri-plugin
  • Tot slot moeten we de HomeBridge-configuratie nog aanpassen, zodat de plugin ingesteld is en gebruikt kan worden. Open hiervoor het configuratiebestand:
    nano /home/pi/.homebridge/config.json
  • Voeg het platform toe door de onderstaande code toe te voegen. Je hebt hierbij het IP-adres van de TRÅDFRI-gateway nodig. Deze kun je terug vinden in de DHCP-tabel van je router. Daarnaast heb je de securitycode van de gateway nodig. Deze vindt je terug op de onderkant van je gateway.
  • {
      "platform": "IkeaTradfri",
      "name": "Tradfri",
      "host": "192.168.x.x",
      "key": "<jouw beveiligingscode>"
    }
    

    Als je de bovenstaande code toevoegt, vergeet dat niet achter het laatste platform dat je eerder geconfigureerd hebt, een komma achter de sluitende accolade te plaatsen. Anders klopt het JSON-formaat van je configuratiebestand niet meer en zal HomeBridge niet starten. Natuurlijk moet je het IP-adres en de beveiligingscode vervangen door die van jouw TRÅDFRI-gateway.

  • Nu gaan we het geheel testen. Hiervoor hoeven we niet langer als root ingelogd te zijn. Met het volgende commando worden we weer de standaard “pi”-gebruiker:
    exit
  • Omdat HomeBridge in de achtergrond nog loopt, gaan we deze stoppen en handmatig opstarten. Op die manier krijgen we de output van de applicatie op ons scherm, zodat we kunnen controleren of HomeBridge goed opstart. Als er iets misgaat, kunnen we dan ook de foutmeldingen zien.
    sudo systemctl stop homebridge.service
  • Nu starten we HomeBridge handmatig op:
    homebridge
  • Als alles goed gaat, zie je nu dat HomeBridge opstart en dat je TRÅDFRI-componenten automatisch gevonden worden. Je kunt ze ook direct terugvinden in de Woning-app op je iPhone of iPad.

Omdat de verkoper van Ikea mij verzekerde dat TRÅDFRI HomeKit op dit moment al ondersteunde, heb ik voor de zekerheid nog even met de klantenservice van Ikea gebeld. Ook daar bleek men slecht geïnformeerd over hun eigen product, maar nadat ik een tijdje in de wachtrij had gezeten, kon men mij vertellen dat het in de toekomst wel ondersteund zou gaan worden. Op mijn vraag, of dit via een software-update zou gaan of dat ik een nieuwe gateway zou moeten aanschaffen, kon men mij helaas geen antwoord geven. Ook op de vraag wanneer men deze functionaliteit verwachtte, kon men geen antwoord geven.

Gelukkig hoef ik met deze oplossing via HomeBridge niet meer op Ikea te wachten.

Update: Inmiddels ondersteunt Ikea’s Trädfri ook HomeKit, waardoor deze koppeling via HomeBridge niet meer nodig is.

Aanwezigheids-detectie met Domoticz via wifi

Soms is het handig wanneer Domoticz weet of er iemand thuis is, zodat je bijvoorbeeld al je verlichting kunt uitschakelen wanneer er niemand thuis is. Nu kun je natuurlijk je hele huis volhangen met bewegingsdetectoren, maar dat wordt toch een dure grap.

Aangezien zo’n beetje iedereen tegenwoordig een smartphone heeft, die verbonden is met het wifi-netwerk thuis, kunnen we de connectie van deze smartphones met het wifi-netwerk gebruiken om te kijken of iemand thuis is.

Stap 1:Virtuele switches creëren voor je smartphones

  • Open de webinterface van Domoticz.
  • Klik op Instellingen en vervolgens op Hardware.
  • Voer nu als naam Smartphones in.
  • Selecteer het type Dummy en klik vervolgens op Toevoegen.
  • Klik nu op het tabblad Schakelaars.
  • Klik linksboven op de knop Handmatig.
  • Kies nu als Hardware Smartphones.
  • Als naam voer je een naam in die verwijst naar een smartphone van iemand in je huis.
    Bijvoorbeeld: Rutger’s iPhone.
  • Bij schakelaar-type kies je voor On/Off.
  • Als type kies je X10, bij House code kies je A en bij Unit code kies je 1.
  • Bij Als kies je Hoofdapparaat. Klik tot slot op toevoegen.
  • Als je meerdere smartphones in huis hebt, herhaal je de laatste 6 stappen voor elke smartphone.

Stap 2: Software installeren via SSH

  • Log in op je domoticz-server via SSH.
  • Typ het volgende commando om Python en apin te installeren:
    sudo apt-get install python arping
  • We gaan Python gebruiken om via arping de verschillende smartphones te pingen. Veel smartphones reageren niet op een ping wanneer ze stand-by staan. In tegenstelling tot het standaard ping-commando stuurt arping een ‘apr-whois’ uit waar de smartphones ook op reageren wanneer ze stand-by staan.
  • Domoticz-gebruiker Chopper Rob heeft een handig stukje Python-code geschreven dat een smartphone pingt en vervolgens communiceert met Domoticz. Maak een bestand, genaamd check_device_online.py aan in de map /home/pi/domoticz/scripts. Je kunt dit eenvoudig doen door de onderstaande code te kopiëren. (CTRL+c / CMD+C). Vervolgens toets je het volgende command in via je SSH-sessie:
  • nano /home/pi/domoticz/scripts/check_device_online.py
  • De nano teksteditor wordt nu geopend. Plak nu de code in het bestand en toets CTRL+x om het bestand op te slaan en de teksteditor af te sluiten.
#!/usr/bin/python
#   Title: check_device_online.py
#   Author: Chopper_Rob
#   Date: 25-02-2015
#   Info: Checks the presence of the given device on the network and reports back to domoticz
#   URL : https://www.chopperrob.nl/domoticz/5-report-devices-online-status-to-domoticz
#   Version : 1.6.2
 
import sys
import datetime
import time
import os
import subprocess
import urllib2
import json
import base64
 
# Settings for the domoticz server
domoticzserver="192.168.1.5:8080"
domoticzusername = "admin"
domoticzpassword = "admin"
domoticzpasscode = "protectedswitch"
 
# If enabled. The script will log to the file _.log
# Logging to file only happens after the check for other instances, before that it only prints to screen.
log_to_file = False
 
# The script supports two types to check if another instance of the script is running.
# One will use the ps command, but this does not work on all machine (Synology has problems)
# The other option is to create a pid file named _.pid. The script will update the timestamp
# every interval. If a new instance of the script spawns it will check the age of the pid file.
# If the file doesn't exist or it is older then 3 * Interval it will keep running, otherwise is stops.
# Please chose the option you want to use "ps" or "pid", if this option is kept empty it will not check and just run.
check_for_instances = "pid"
 
 
 
# DO NOT CHANGE BEYOND THIS LINE
if len(sys.argv) != 5 :
  print ("Not enough parameters. Needs %Host %Switchid %Interval %Cooldownperiod.")
  sys.exit(0)
 
device=sys.argv[1]
switchid=sys.argv[2]
interval=sys.argv[3]
cooldownperiod=sys.argv[4]
previousstate=-1
lastsuccess=datetime.datetime.now()
lastreported=-1
base64string = base64.encodestring('%s:%s' % (domoticzusername, domoticzpassword)).replace('\n', '')
domoticzurl = 'http://'+domoticzserver+'/json.htm?type=devices&filter=all&used=true&order=Name'
 
if check_for_instances.lower() == "pid":
  pidfile = sys.argv[0] + '_' + sys.argv[1] + '.pid'
  if os.path.isfile( pidfile ):
    print datetime.datetime.now().strftime("%H:%M:%S") + "- pid file exists"
    if (time.time() - os.path.getmtime(pidfile)) < (float(interval) * 3):
      print datetime.datetime.now().strftime("%H:%M:%S") + "- script seems to be still running, exiting"
      print datetime.datetime.now().strftime("%H:%M:%S") + "- If this is not correct, please delete file " + pidfile
      sys.exit(0)
    else:
      print datetime.datetime.now().strftime("%H:%M:%S") + "- Seems to be an old file, ignoring."
  else:
    open(pidfile, 'w').close() 
 
if check_for_instances.lower() == "ps":
  if int(subprocess.check_output('ps x | grep \'' + sys.argv[0] + ' ' + sys.argv[1] + '\' | grep -cv grep', shell=True)) > 2 :
    print (datetime.datetime.now().strftime("%H:%M:%S") + "- script already running. exiting.")
    sys.exit(0)
 
def log(message):
  print message
  if log_to_file == True:
    logfile = open(sys.argv[0] + '_' + sys.argv[1] + '.log', "a")
    logfile.write(message + "\n")
    logfile.close()
 
def domoticzstatus ():
  json_object = json.loads(domoticzrequest(domoticzurl))
  status = 0
  switchfound = False
  if json_object["status"] == "OK":
    for i, v in enumerate(json_object["result"]):
      if json_object["result"][i]["idx"] == switchid:
        switchfound = True
        if json_object["result"][i]["Status"] == "On": 
          status = 1
        if json_object["result"][i]["Status"] == "Off": 
          status = 0
  if switchfound == False: print (datetime.datetime.now().strftime("%H:%M:%S") + "- Error. Could not find switch idx in Domoticz response. Defaulting to switch off.")
  return status
 
def domoticzrequest (url):
  request = urllib2.Request(url)
  request.add_header("Authorization", "Basic %s" % base64string)
  response = urllib2.urlopen(request)
  return response.read()
 
log (datetime.datetime.now().strftime("%H:%M:%S") + "- script started.")
 
lastreported = domoticzstatus()
if lastreported == 1 :
  log (datetime.datetime.now().strftime("%H:%M:%S") + "- according to domoticz, " + device + " is online")
if lastreported == 0 :
  log (datetime.datetime.now().strftime("%H:%M:%S") + "- according to domoticz, " + device + " is offline")
 
while 1==1:
  # currentstate = subprocess.call('ping -q -c1 -W 1 '+ device + ' > /dev/null', shell=True)
  currentstate = subprocess.call('sudo arping -q -c1 -W 1 '+ device + ' > /dev/null', shell=True)
 
  if currentstate == 0 : lastsuccess=datetime.datetime.now()
  if currentstate == 0 and currentstate != previousstate and lastreported == 1 : 
    log (datetime.datetime.now().strftime("%H:%M:%S") + "- " + device + " online, no need to tell domoticz")
  if currentstate == 0 and currentstate != previousstate and lastreported != 1 :
    if domoticzstatus() == 0 :
      log (datetime.datetime.now().strftime("%H:%M:%S") + "- " + device + " online, tell domoticz it's back")
      domoticzrequest("http://" + domoticzserver + "/json.htm?type=command&param=switchlight&idx=" + switchid + "&switchcmd=On&level=0" + "&passcode=" + domoticzpasscode)
    else:
      log (datetime.datetime.now().strftime("%H:%M:%S") + "- " + device + " online, but domoticz already knew")
    lastreported=1
 
  if currentstate == 1 and currentstate != previousstate :
    log (datetime.datetime.now().strftime("%H:%M:%S") + "- " + device + " offline, waiting for it to come back")
 
  if currentstate == 1 and (datetime.datetime.now()-lastsuccess).total_seconds() > float(cooldownperiod) and lastreported != 0 :
    if domoticzstatus() == 1 :
      log (datetime.datetime.now().strftime("%H:%M:%S") + "- " + device + " offline, tell domoticz it's gone")
      domoticzrequest("http://" + domoticzserver + "/json.htm?type=command&param=switchlight&idx=" + switchid + "&switchcmd=Off&level=0" + "&passcode=" + domoticzpasscode)
    else:
      log (datetime.datetime.now().strftime("%H:%M:%S") + "- " + device + " offline, but domoticz already knew")
    lastreported=0
 
  time.sleep (float(interval))
 
  previousstate=currentstate
  if check_for_instances.lower() == "pid": open(pidfile, 'w').close()

Stap 3: Het script inplannen met Cron

Het script dat we zojuist gemaakt hebben, kan gaan we om de tien minuten laten controleren of een bepaalde smartphone verbonden is met het netwerk. Dit doen we door eerst onze crontab te openen:

crontab -e

Vervolgens voeren we de volgende regel helemaal onderin toe:

*/10 * * * * /usr/bin/python /home/pi/domoticz/scripts/check_device_online.py 192.168.1.10 23 10 300

Deze regel zorgt er voor dat het apparaat met IP-adres 192.168.1.10 (parameter 1) de dummy-schakelaar met IDX 23 (parameter 2) om de 10 minuten (parameter 3) gepingd wordt.

De IDX kun je achterhalen in Domoticz via Instellingen -> Apparaten. Er wordt een cooldown-periode (parameter 4) gehanteerd van 300 seconden. Binnen die tijd wordt er wel gecontroleerd of het device aanwezig is, maar wordt de status niet doorgegeven aan Domoticz. De cooldown-periode is met name belangrijk wanneer je een iPhone gebruikt, omdat deze zijn Wifi-verbinding regelmatig uitschakelt om de accu te sparen. Ik heb redelijk succes geboekt met 300 seconden, maar wellicht werkt een langere periode beter, dat moet ik nog proberen.

Als je meerdere smartphones wilt controleren, dan voeg je voor elke smartphone een eigen regel toe in de crontab, natuurlijk met elk zijn eigen IP-adres.

Router instellen

Je smartphone krijgt zijn IP-adres van de router via DHCP. Dit is niet altijd hetzelfde IP-adres. Wanneer je smartphone een ander IP-adres krijgt, zal het script niet meer werken omdat het een IP-adres probeert te pingen dat de smartphone niet meer heeft.

In je router heb je de mogelijkheid om static leases in te stellen. Hierdoor krijgt een device op basis van zijn MAC-adres altijd hetzelfde IP-adres uitgedeeld, omdat het IP-adres exclusief voor het device reserveer is. Raadpleeg hiervoor de handleiding van je router.

Als je meerdere smartphones gebruikt, kan het handig zijn om nog een dummy-schakelaar aan te maken. Deze kun je dan via Blockly in Domoticz laten schakelen als één van de smartphone dummy-schakelaars actief is. Deze nieuwe dummy-schakelaar noem je dan bijvoorbeeld “Iemand thuis”. Daarna kun je de status van deze schakelaar gebruiken in andere gebeurtenissen.