Categories
Tools (NL) Software Ontwikkeling Web (NL)

Philips Hue Lampen voor in je Smart Home is dat nu echt slim?

Philips Hue. Om je verlichting in huis te automatiseren, ook wel slimme lampen genoemd… maar zijn ze wel zo slim?

Als je direct gewoon voorbeelden van lampen wil zien klik dan een van de vier Hue varianten aan, wil je meer weten over koppelingen met Hue klik dan op de link om direct naar dat stuk te gaan:

Inhoudsopgave

Je kan de Philips Hue lampen gebruiken met Google, Apple, Amazon Alexa en Toon van Eneco, hieronder lees je hoe je dat moet… Voor een meer technische beschrijving van hoe Hue werkt kijk je onder het kopje ZigBee (het protocol wat de lampen gebruiken om te kunnen communiceren)

Google Assistant

Bij Google kan je gebruik maken van Assistant op je Android telefoon, of via een Google Home / Google Mini speaker. Je kan met je stem de lampen aan of uit schakelen, ook kun je verschillende routines instellen in de App. Hoe je dat doet? Daarvoor verwijs ik je door naar mijn blog over Google Home

Externe Links:

Apple HomeKit


Je kunt ook via Apple (Siri) je Philips Hue lichten met je stem bedienen. Je kan ook je Apple TV als hub instellen van je Smart Home. Verder kun je ook via de Apple Home App (iPad / iPhone) je lichten uit en aan doen.

Externe Links:

Toon van Eneco

Via je wifi-netwerk en de Toon thermostaat van Eneco bedien je alle Philips Hue-lampen in huis. Kies je favoriete kleur, stel de intensiteit in of zet ze aan of uit. Ben je even niet bij Toon in de buurt? Je kunt de lampen ook op afstand bedienen met de Toon-app.

Amazon Echo (Alexa)

Alexa is de stem van de Amazon Echo.

Aan en uit zetten van lampen via Alexa

“Alexa, turn on the lights.”
“Alexa, turn on the living room lights.”
“Alexa, turn off all lights.”

Lichten dimmen met Alexa

“Alexa, dim the lights”
“Alexa, brighten the lights in the living room to 100%”
“Alexa, dim my lights by 50%”

Kleuren instellen met Alexa

“Alexa, turn my kitchen lights blue.”
“Alexa, set the family room lights to red.”

Voor meer informatie over Alexa ga je naar MeetHue.com

Philips Hue App

Met de Philips Hue app kun je eenvoudig je afzonderlijke lampen in kamers organiseren. Schakel lichten in/uit of verander de kleur of helderheid van al je lampen, zodat ze passen bij je stemming en activiteit. Wat voor lampen je ook hebt, je kunt ze eenvoudig bedienen. Je moet alleen een goede naam te verzinnen voor iedere lamp. Je kan kiezen uit 16 miljoen kleuren of elke tint wit licht.

Download de Philips App voor Apple IOS (App Store)

Download de Philips App voor Google Android (Play Store)

Het ZigBee protocol

Philips Hue maakt gebruik van ZigBee. Een communicatieprotocol wat, net als WiFi en Bluetooth, ervoor zorgt dat apparaten met elkaar kunnen communiceren. Zigbee heeft een mesh-network topologie. Elke lamp in maakt met minimaal twee andere lampen een verbinding. Dit heeft enkele voordelen ten opzichte van andere protocollen. Zo verbruikt het Zigbee protocol zeer weinig energie, dan gaan je lampen dus gewoon langer mee. Hue lampen leggen contact met een centraal punt bijv de Philips Hue Bridge of je (WiFi) router. Maar ze staan daarnaast ook met elkaar in verbinding. Dat zorgt voor een betere verbinding want alle lampen kunnen een bericht doorgeven aan elkaar.

Philips Hue Starter Kit

Met de starter kit kun je zelf beginnen aan het Hue avontuur.

In de starter kits zitten altijd:

  • 1 Bridge
  • 1 Dimmer
  • 3 lampen (Afhankelijk van het type starterkit)

Philips Hue Bridge (Hub)

Philips Hue Bridge
Philips Hue Bridge

Dit is het centrale kastje wat je nodig hebt om je lampen te besturen. Je moet deze aansluiten op je thuisnetwerk, zodat je met je via je telefoon, tablet of met je stem de lichten kan bedienen.

Hue Dimmer & Schakelaar

Dit is het lichtknopje wat je zelf via de app kan instellen, moet deze 1 lamp beheren of een hele kamer. Je kan ook door een aantal keren op de aan (I) knop te drukken snel het licht op een van de vele scenes zetten.
Met de dim functie (midden) kun je ervoor zorgen dat je lichten feller of minder fel worden. de (0) zorgt ervoor dat de lichten uitgaan. Je kan meer van dit soort dimmers hebben en je kunt ze via de app allemaak een eigen naam geven.

Iris Philips Hue Lamp

Hue Iris
Hue Iris Lamp op een kast

Een kant-en-klare lamp.

Spot Philips Hue Lamp (GU10)

Hue GU10 4x
4x Philips Hue GU10 (Spot lampen)

Philips Hue Lamp (E27)

Hue Lamp Slaapkamer
Philips Hue (E27) lamp met IKEA omhulsel

Candle Philips Hue Lamp (E14)

Hue Candle
Philips Hue Candle (E14) in de keuken

IFTTT

De Hue lampen werken ook samen met If This Then That daarmee kun je als ontwikkelaar je eigen routine schrijven. Of een lamp drie keer laten knipperen gaan op het moment dat je stofzuigrobot klaar is met zijn werk.

Categories
Ontwikkelaars Software Ontwikkeling Tools (NL) Web (NL)

APNS: Apple Push Notificatie Service voor iPhone / IOS

Push notificaties, misschien ken je ze wel van de NOS als er groot nieuws in Nederland is. Deze kun je versturen naar mobiele telefoons (Android / IOS ) als je een app ontwikkeld. In dit artikel leg ik uit hoe je dat doet voor IOS op iPhone via Apple Push Notificatie Service door gebruik te maken van PHP.

I18N: This article is also available in English (click to switch)

HTTP/2 is een nieuwe standaard op het web, daarover later meer. Bij Apple gaan ze vanaf November 2020 helemaal over naar HTTP/2. Je kan dan niet meer verbinden via de HTTP/1 “legacy” API. In dit artikel vertel ik je hoe je verbinding kunt maken met APNS op de nieuwe manier.

Apple’s service om push notificaties te versturen (APNS: Apple Push Notification Service) gebruikt JSON web tokens voor authenticatie methode waar voorheen certificates werden gebruikt.

Hiervoor gebruiken we bij SaMauto een JWT package / library van Luís Cobucci om dit te kunnen realiseren (Bekijk lcobucci/jwt op GitHub of op packagist.org.

Om dit package via composer toe te voegen aan je project gebruik je het volgende commando:

composer require lcobucci/jwt

De verbinding wordt gemaakt door gebruik te maken van JWT (JSON Web Tokens – RFC 7519) dit heet in technisch jargon Token Based Authentication.

Om een sleutel te krijgen met je naar developer.apple.com surfen, inloggen, naar “Certificates, Identifiers & Profiles -> Keys“ gaan en een sleutel (private_key.p8) downloaden.

Let op!
De sleutel kan je maar één keer downloaden. Bewaar deze goed!

Hieronder een voorbeeldscript:

<?php
require __DIR__ . '/vendor/autoload.php'; // Stap 0: PSR-0 Autoloader

// Stap 1: Importeer de Lcobucci\JWT library
use Lcobucci\JWT\Signer\Key;
use Lcobucci\JWT\Signer\Ecdsa\Sha256;
use Lcobucci\JWT\Configuration;

// Stap 2: specificeer de configuratie

$device_token = "uniek_token_van_het_apparaat";
$apns_topic = 'nl.samauto.ios-applicatie';
$p8file = "/home/dave/samauto/sleutel_van_apple.p8";
$url = "https://api.sandbox.push.apple.com/3/device/$device_token"; // hier gebruik ik de sandbox API


$config = $container->get(Configuration::class);
assert($config instanceof Configuration);

// Stap 3: Genereer een JWT Token.
$token = (string) $config->createBuilder()
->issuedBy("DEF123GHIJ") // het TeamId
->issuedAt(time()) // de tijd dat het token is uitgegeven
->withHeader('kid', "ABC123DEFG") // Encryptie sleutel van Apple
->setKey('file://' . $p8file) // het .p8 bestand (via apple download)
->setSigner(new Sha256()) // APNs ondersteund alleen het ES256 Algorithme (Elliptic Curve Digital Signature Algorithm using P-256 and SHA-256)
->getToken();

// Stap 4: Maak een bericht om te versturen
$payloadArray['aps'] = [
  'alert' => [
    'title' => "SaMauto.nl Push Notificatie", // titel van de notificatie
    'body' => "Kijk op SamAuto.nl voor meer tips", // bericht inhoud
  ],
  'sound' => 'default',
  'badge' => 1
];

// Stap 4.1: vorm het om naar JSON
$payloadJSON = json_encode($payloadArray);


// Stap 5: Maak en verzend het bericht via cURL (HTTP/2) naar APNs.
$ch = curl_init($url);

curl_setopt($ch, CURLOPT_POSTFIELDS, $payloadJSON);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer $token","apns-topic: $apns_topic"]);
$response = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// Als alles gelukt is verwacht je een "200 OK!" terug te krijgen van Apple.
// Voor alle mogelijke antwoorden zie https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/TheNotificationPayload.html#//apple_ref/doc/uid/TP40008194-CH107-SW1

var_dump($response);
var_dump($httpcode); // 200... als alles goed ging.
?>

Dit is eigenlijk alles wat je nodig hebt om de notificaties van een server naar een IOS apparaat te sturen. Heb je nou geen zin om alles zelf te bouwen, dan kan je een kant en klare software gebruiken om je bericht te versturen.

Op internet staat een package genaamd github.com/edamov/pushok of via packagist.org/edamov/pushok. Deze kan je direct gebruiken in je eigen PHP project door het volgende te doen:

composer require edamov/pushok

Hetzelfde bericht als hierboven ziet er dan als volgt uit:

<?php
// Stap 0: PSR-0 Autoloader
require __DIR__ . '/vendor/autoload.php';

// Stap 1: Importeer de edamov/pushok library
use Pushok\AuthProvider;
use Pushok\Client;
use Pushok\Notification;
use Pushok\Payload;
use Pushok\Payload\Alert;

// Stap 2: Opties / Configuratie
$options = [
    'key_id' => 'ABC123DEFG', // Het Key ID van je Apple developer account
    'team_id' => 'DEF123GHIJ', // Het TeamId van je Apple developer account
    'app_bundle_id' => 'nl.samauto.ios-applicatie', // De bundleId van je Apple developer account
    'private_key_path' => __DIR__ . '/private_key.p8', // Bestandslocatie van de prive sleutel
    'private_key_secret' => null // Wachtwoord voor de private key (indien dit op je sleutel zit)
];

$authProvider = AuthProvider\Token::create($options);

$alert = Alert::create()->setTitle('SaMauto.nl Push Notificatie');
$alert = $alert->setBody('Kijk op SamAuto.nl voor meer tips');

$payload = Payload::create()->setAlert($alert);

//set notification sound to default
$payload->setSound('default');

//add custom value to your notification, needs to be customized
$payload->setCustomValue('key', 'value');

$deviceTokens = ['<apparaat_token_1>', '<apparaat_token_2>', '<apparaat_token_3>'];

$notifications = [];
// verstuur het bericht naar apparaat 1,2 en 3
foreach ($deviceTokens as $deviceToken) {
    $notifications[] = new Notification($payload,$deviceToken);
}

$client = new Client($authProvider, $production = false); // gebruik de sandbox.
$client->addNotifications($notifications);



$responses = $client->push(); // je krijg een array van ApnsResponseInterface's (een antwoord per verstuurde notificatie)

foreach ($responses as $response) {
    $response->getApnsId();
    $response->getStatusCode();
    $response->getReasonPhrase();
    $response->getErrorReason();
    $response->getErrorDescription();
}

Er zijn nog veel meer geweldige PHP packages gemaakt om notificaties te versturen. Maar als je echt behoefte hebt aan betrouwbare en snelle software die je leven makkelijker maakt dan kan ik je aanraden om toch eens te kijken naar bijvoorbeeld een package in Golang.

GoRush: Een Push Notificatie server met ingebouwde API (Apple IOS + Google Android)

  ________                              .__
 /  _____/   ____ _______  __ __  ______|  |__
/   \  ___  /  _ \\_  __ \|  |  \/  ___/|  |  \
\    \_\  \(  <_> )|  | \/|  |  /\___ \ |   Y  \
 \______  / \____/ |__|   |____//____  >|___|  /
        \/                           \/      \/

Usage: gorush [options]
GitHub
Bekijk GoRush op GitHub
(Klik op het logo)

Als je net als DevOps Dave liever niet het wiel opnieuw wil uitvinden, dan kan je ervoor kiezen om een kant en klare oplossing te gebruiken zoals GoRush.

Met o.a. IOS HTTP/2 ondersteuning, Firebase Cloud Messaging (Android), YAML Configuratie, CLI (Command Line), een Web API die je zo aan kan roepen (ook vanuit PHP), Statistieken over de notificaties, een HTTPS of SOCKS5 Proxy, gratis TLS certificaten via Let’s Encrypt. Beschikbaar voor Docker, Kubernetes en AWS Lambda (Draait native in Golang)