Archive for the ‘PHP’ Category.

Hue Programmierung via REST – Teil 1

This entry is part 2 of 4 in the series Hue Programmierung

Der folgende Artikel und seine Folgeartikel sind für diejenigen gedacht, die ein Philips Hue System ihr Eigen nennen und ein wenig tiefer in die Programmierung einsteigen möchten. Grundvoraussetzung ist eine aktive Hue Bridge im lokalen Netz und mindestens eine gekoppelte Lampe.

In diesem Artikel erstellen wir einen neuen Api-Schlüssel, den wir für alle weiteren Experimente brauchen. In den Folgeartikeln zeige ich dann, wie man mittels Webinterface, CURL und Python entsprechende Befehle an die Hue Bridge senden kann.

Grundsätzliches

Die IP-Adresse der Hue Bridge bekommen wir über den Router raus, sofern wir sie nicht kennen, Philips selbst zeigt noch andere Wege. Ruft man diese IP-Adresse im Browser auf, so kommt nur die Webseite des Systems zusammen mit den Hinweisen auf die entsprechenden Opensource-Lizenzen, nichts sonderlich spannendes.

Spannender wird es allerdings, wenn man die IP-Adresse mit der URL /debug/clip.html aufruft. Dann nämlich präsentiert sich ein Formular mit mehreren Textfeldern und Buttons, die wir im Laufe der Artikel noch näher kennenlernen werden.

Drückt man den GET-Button, kommt die folgende Meldung zurück:

[
	{
		"error": {
			"type": 1,
			"address": "/",
			"description": "unauthorized user"
		}
	}
]

Der Hue Bridge fehlt also der entsprechende Authentifizierungsschlüssel, ohne den keine Befehle angenommen werden. Um einen solchen Schlüssel zu erstellen, geht man wie folgt vor:

  1. Drücke den Link-Button oben auf der Hue Bridge
  2. Gib in der URL Box /api ein
  3. Gib in der Message Body Box einen Text analog zum folgenden Muster ein

    {"devicetype":"commandline#Uwe"}. Ich habe hier einen Hinweis auf meine Kommandozeile als Namen gewählt, letztlich ist man hier aber recht frei. So nennt sich IFFT bei mir „ifft2“, der Logitech Harmony Hub heißt einfach „Harmony Hub“

Wenn alles geklappt hat, dann antwortet die Bridge mit einer Antwort analog zur folgenden:

[
	{
		"success": {
			"username": "yxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxt"
		}
	}
]

Der zufällige String hinter username, hier unkenntlich gemacht, ist der entsprechende Schlüssel, den wir bei jeder Anfrage an die HUE Bridge mitliefern müssen. Es empfiehlt sich daher, den in einer Textdatei zu parken und keinesfalls zu veröffentlichen.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Erste Schritte mit cakePHP

Vor ein paar Tagen habe ich mir mal cakePHP angeschaut, ein MVC Framework für PHP. Bei der Entwicklung von Web Anwendungen ist es – so finde ich – echt lästig, jedes bisschen an Code selbst zu schreiben. Um für die eigentliche Anwendung unwichtige Dinge wie User Authentifizierung etc. will ich mich nicht kümmern, ich möchte maximal festlegen, aus welcher Tabelle in der Datenbank die Login/Passwort Kombinationen gelesen werden sollen.

Mit cakePHP kommt man anscheinend recht einfach zu den entsprechenden Resultaten. Auf einem existierenden Xampp aufsetzend hat die Konfiguration von cakePHP knappe fünf Minuten gedauert. Das Abarbeiten der einzelnen Schritte aus dem Tutorial von http://book.cakephp.org/1.3/view/1528/Blog hat dann eine knappe halbe Stunde gedauert.

Interessant war insbesondere die Nutzung von Scaffolding. Basierend auf einem Datenbank-Modell reichen fünf Zeilen aus, um eine komplette Anwendung mit Anlage, Bearbeitung und Löschung von Datensätzen zu erhalten. Muss jetzt mal ein paar Handbücher lesen…

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

LaTeX mit PHP und Smarty erzeugen

In einem früheren Artikel habe ich beschrieben, wie man mit Python und der Template-Engine Cheetah LaTeX Dokumente erzeugt. Heute die grundlegenden Schritte, um mit PHP und der Template-Engine Smarty LaTeX Dokumente zu erzeugen. Ich folge dabei mehr oder weniger der Anleitung von http://smarty.incutio.com/?page=SmartyInstallationWindows.

Installation (unter der Windows Installation von Xampp):

  1. Download von http://smarty.php.net
  2. Entpacken des Smarty Ordners nach C:/xampp/libs/
  3. Anlage des Ordners „Smarty“ in htdocs, mit zwei Unterordnern „configs“ und „templates“
  4. Anlage des Ordners „Smarty“ in c:/xampp, mit zwei Unterordnern „cache“ und „templates_c“
  5. Anlage der Datei index.tpl in templates, mit folgendem Inhalt:
    <html>
    <body>
    Hello, {$name}!
    </body>
    </html>
  6. im htdocs Verzeichnis Anlage der Datei index.php, die folgendes enthält:
    <?php
    define('SMARTY_DIR', 'C:/xampp/libs/Smarty-3.1.11/libs/');
    require_once(SMARTY_DIR . 'Smarty.class.php');
     
    $smarty = new Smarty;
    $smarty->template_dir = 'C:/xampp/htdocs/smarty/templates';
    $smarty->config_dir = ' C:/xampp/htdocs/smarty/config';
    $smarty->cache_dir = 'C:/xampp/smarty/cache';
    $smarty->compile_dir = 'C:/xampp/smarty/templates_c';
     
    $smarty->assign('name','Uwe');
    $smarty->display('index.tpl');
    ?>
  7. jetzt die index.php im Webbrowser aufrufen

Damit ist die initiale Konfiguration von Smarty erledigt, jetzt müssen wir ihm die richtige Behandlung von LaTeX Code beibringen. Da Smarty zum Escapen geschweifte Klammern nutzt, müssen diese umdefiniert werden.

  1. Anlage der Datei tex1.tpl im templates Verzeichnis
    \documentclass[12pt,ngerman]{scrartcl}<br/>
    <br/>
    \author{<@$author@>}<br/>
    \title{<@$title@>}<br/>
    <br/>
    \begin{document}<br/>
    \maketitle<br/>
    <br/>
    \end{document}<br/>
  2. Anlage der tex1.php in htdocs:
    <?php
    define('SMARTY_DIR', 'C:/xampp/libs/Smarty-3.1.11/libs/');
    require_once(SMARTY_DIR . 'Smarty.class.php');
     
    $smarty = new Smarty;
    $smarty->template_dir = 'C:/xampp/htdocs/smarty/templates';
    $smarty->config_dir = ' C:/xampp/htdocs/smarty/config';
    $smarty->cache_dir = 'C:/xampp/smarty/cache';
    $smarty->compile_dir = 'C:/xampp/smarty/templates_c';
     
    $smarty->caching =false; //disable caching  
     
    $smarty->left_delimiter = '<@';
    $smarty->right_delimiter = '@>';
     
    $smarty->assign ('author', 'Uwe Ziegenhagen');
    $smarty->assign ('title', 'Hello Smarty!');
     
    $smarty->display ('tex1.tpl');
    ?>

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Google Chart API

Google hat vor einiger Zeit eine API herausgebracht, die die Erstellung von schicken Grafiken im Netz ermöglicht. Notiz an mich: Mal ausprobieren!

Hier der Link: http://code.google.com/intl/de-DE/apis/chart/ .

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

PHPExcel

Habe in einer alten c’t einen Hinweis auf PHPExcel gefunden, eine Bibliothek, die dynamisch Excel Dokumente erzeugen kann.

Hier mal ein „Hello World!“ Beispiel von der Webseite http://phpexcel.codeplex.com:

<?php
/** Error reporting */
error_reporting(E_ALL);
 
/** Include path **/
ini_set('include_path', ini_get('include_path').';../Classes/');
 
/** PHPExcel */
include 'PHPExcel.php';
 
/** PHPExcel_Writer_Excel2007 */
include 'PHPExcel/Writer/Excel2007.php';
 
// Create new PHPExcel object
echo date('H:i:s') . " Create new PHPExcel object\n";
$objPHPExcel = new PHPExcel();
 
// Set properties
echo date('H:i:s') . " Set properties\n";
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
$objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
 
 
// Add some data
echo date('H:i:s') . " Add some data\n";
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Hello');
$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'world!');
$objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Hello');
$objPHPExcel->getActiveSheet()->SetCellValue('D2', 'world!');
 
// Rename sheet
echo date('H:i:s') . " Rename sheet\n";
$objPHPExcel->getActiveSheet()->setTitle('Simple');
 
 
// Save Excel 2007 file
echo date('H:i:s') . " Write to Excel2007 format\n";
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
 
// Echo done
echo date('H:i:s') . " Done writing file.\r\n";

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website