HRdns.de

Cookie Datenschutzhinweis

Cookies helfen uns bei der Bereitstellung unserer Dienste. Um unsere Dienste im vollen Umfang verwenden zukönnen, bitten wir Sie um Erlaubnis Cookies verwenden zu dürfen.
Weitere Informationen zu diesem Thema finden Sie in unserer Datenschutzerklärung.

Philips HUE Api Disco

Author:
Richard Hülsberg
E-Mail:
Veröffentlicht am:
Sprache:
php

#!/usr/bin/php
<?php

class HueDisco
{

    protected $bridge; // IP

    protected $apiKey; // Api Key

    protected $lights = array(); // Lights infos

    public function run(array $params=array())
    {
        parse_str(implode('&',$params),$options);
        foreach ( $options as $key => $value ) {
            if ( isset($this->$key) ) {
                $this->$key = $value;
            }
        }
        $this->findLights();
        $this->disco();
        return 0;
    }

    private function findLights()
    {
        $curl = $this->getCurl('lights');
        $result = curl_exec($curl);
        $this->lights = json_decode($result,true);
    }

    public function disco()
    {
        $curl = $this->getCurl();
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
        $state = true;
        while ( true ) {
            sleep(0.1); // 100 ms
            $lightIds = array_keys($this->lights);
            foreach ( $lightIds as $id ) {
                $json = array(
                    'hue' => mt_rand(0,65535),
                    'sat' => mt_rand(1,254),
                    'bri' => mt_rand(50,254),
                    'on' => true
                );
                $data = json_encode($json);
                curl_setopt($curl,CURLOPT_URL,$this->getUrl('lights/'.$id.'/state'));
                curl_setopt($curl, CURLOPT_HTTPHEADER, array(
                    'Connection: keep-alive',
                    'Content-Type: application/json',
                    'Content-Length: '.mb_strlen($data),
                    'Expect:'
                ));
                curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
                curl_exec($curl);
                echo $id."\t".$data."\n";
            }
        }
    }

    private function getCurl($url='/')
    {
        $curl = curl_init($this->getUrl($url));
        curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
        return $curl;
    }

    private function getUrl($url)
    {
        return sprintf(
            'http://%s/api/%s/%s',
            $this->bridge,
            $this->apiKey,
            ltrim($url)
        );
    }

}

$argv = isset($argv) ? $argv : array();
exit ( (new HueDisco())->run($argv) );

// php hue.php bridge=1.2.3.4 apiKey=1234567890abcdef1234567890abcdef