muellerjm Geschrieben May 7, 2012 at 11:37 Geschrieben May 7, 2012 at 11:37 Hallo, als ich von tinker in der CT las, war ich gleich angetan. ich bin gerade am Basteln eines Homecontrols. Klar, es gibt das schon einiges. Aber wie es oft so ist, nicht das was man möchte. Meine Lösung sieht derzeit so aus: Ein Arudino Mini kommuniziert via seriell mit einem Linuxsystem (nächste Woche raspberry pi). Daten lesen und schreiben in die Datenbank erledigt ein Pythonskript. Das Zeitnahe bedienen eines Aktors über die Weboberfläche regelt SOAP. Also die PHP-Variableninhalte werde an Python-Variablen übergeben. Ich kann also künftig direkt mit PHP ansteuern? Das wäre schon was... Gruß Joachim Müller Zitieren
Christian Geschrieben May 7, 2012 at 13:09 Geschrieben May 7, 2012 at 13:09 Servus, also ich denke, dass es möglich sein wird. Es heißt, dass evtl sogar schon diese Woche die PHP Bindings fertig werden könnten... Ich freu mich auch schon sehr drauf! Hab heut auch schon meine 2te Lieferung bekommen... Wie das letzt endlich aussieht bin ich auch mal gespannt. Gerade im Hinblick auf "Events"... Tue was, wenn die Helligkeit über 600 Lux steigt --> Rollo Runterlassen oder Tue was bei Tastendruck auf LCD-Taster1 Letztendlich kommuniziert man mit dem brick-daemon ja immer via tcp-ip. Das wird wohl auch über php machbar sein. ich bin auf jedenfall gespannt wie wir das nutzen können! Ich hätt jetzt selbst nur keine Ahnung wie man via php diese "speziellen" TCP-Pakete absetzen kann (sieh TCP-IP low-level Doku). Gruß Christian Zitieren
photron Geschrieben May 7, 2012 at 14:41 Geschrieben May 7, 2012 at 14:41 Und ich schätze immer noch, dass die PHP Bindings diese Woche verfügbar sein werden. Hier mal ein Beispiel Programm, das die Versionsinformation und die aktuelle Position eine Linear Poti Bricklets ausliest. <?php require_once('Tinkerforge/IPConnection.php'); require_once('Tinkerforge/BrickletLinearPoti.php'); use Tinkerforge\IPConnection; use Tinkerforge\BrickletLinearPoti; $host = 'localhost'; $port = 4223; $uid = '7jb'; $ipcon = new IPConnection($host, $port); $lp = new BrickletLinearPoti($uid); $ipcon->addDevice($lp); echo "getVersion():\n"; var_dump($lp->getVersion()); echo "getPosition():\n"; var_dump($lp->getPosition()); ?> Hier die Ausgabe des Programms mit dem PHP Kommandozeilen Tool ausgeführt. Die Minimum PHP Version wird 5.3 sein. Das ganze funktioniert auch mit dem PHP Modul in Apache. getVersion(): array(3) { ["name"]=> string(24) "Linear Poti Bricklet 1.0" ["firmwareVersion"]=> array(3) { [0]=> int(1) [1]=> int(1) [2]=> int(0) } ["bindingVersion"]=> array(3) { [0]=> int(1) [1]=> int(0) [2]=> int(0) } } getPosition(): int(43) Hier noch ein Beispiel mit Callback <?php require_once('Tinkerforge/IPConnection.php'); require_once('Tinkerforge/BrickletLinearPoti.php'); use Tinkerforge\IPConnection; use Tinkerforge\BrickletLinearPoti; $host = 'localhost'; $port = 4223; $uid = '7jb'; $ipcon = new IPConnection($host, $port); $lp = new BrickletLinearPoti($uid); $ipcon->addDevice($lp); function cb_position($position) { echo "position changed: $position\n"; } $lp->registerCallback(BrickletLinearPoti::CALLBACK_POSITION, 'cb_position'); $lp->setPositionCallbackPeriod(20); $ipcon->dispatchCallbacks(-1); ?> Und hier die Ausgabe nach Bewegen des Potis. position changed: 45 position changed: 52 position changed: 56 position changed: 55 position changed: 48 position changed: 43 position changed: 39 position changed: 34 position changed: 30 position changed: 26 position changed: 23 position changed: 21 position changed: 20 Da PHP keine Threads unterstütz und die Workarounds alle recht plattformspezifisch sind muss man selbst dafür sorgen das Callbacks ausgeliefert werden. Dafür ist die dispatchCallbacks Methode der IPConnection da. Der kann man ein Zeitspanne in Sekunden übergeben, die Callbacks ausgeliefert werden sollen bevor dispatchCallbacks returned. -1 wie im Beispiel bedeutet unendlich. Falls ihr Vorschläge oder Kommentare dazu habe dann würde ich sie gerne hören. Zitieren
Nifty Geschrieben May 7, 2012 at 15:41 Geschrieben May 7, 2012 at 15:41 Die Callback Lösung ist nicht wirklich berauschend. Wenn man das in eine Webapplikation einbauen würde, was bei PHP ja zu erwarten ist, ist das aus meiner Sicht unbenutzbar ? Zitieren
Christian Geschrieben May 7, 2012 at 15:58 Geschrieben May 7, 2012 at 15:58 ja aber das war ja irgendwie klar, oder? Jeder der schon ein bisschen mit php rumgefrickelt hat weiß doch, dass ein Script nach dem "abarbeiten" idr. zuende ist... Ich hab auch noch keine wirkliche Idee wie man das Nutzbar macht . Eine kleine Anregung möchte ich aber noch liefern: http://winbinder.org Das ist ein System um nativ wirkende (!!) Windows-Anwendungen zu schreiben. Hab auch schon mal kurz mit rumgespielt und war mittelmäßig bis stark beeindruckt. Leider gibt’s seit fast 2 Jahren nichts neues mehr von dem Projekt. Gruß Christian Zitieren
photron Geschrieben May 7, 2012 at 16:12 Geschrieben May 7, 2012 at 16:12 Die Callback Lösung ist nicht wirklich berauschend. Wenn man das in eine Webapplikation einbauen würde, was bei PHP ja zu erwarten ist, ist das aus meiner Sicht unbenutzbar ? Der Sinn der Callbacks ist, dass du nicht pollen musst um Ereignisse mitzubekommen. Man kommt aber an fasst alle Informationen auch ohne Callbacks. Typischerweise hast du da ein Programm das länger läuft wenn du Callbacks nutzt. Im Rahmen einer Webapplikation wird aber PHP immer nur kurz ausgeführt um die Webseite zu erstellen. Dort hast du kein lange laufendes PHP Programm, daher machen dort Callbacks wenig Sinn. Oder verstehe ich jetzt hier was falsch? In einem lange laufenden Standalone PHP Programm musst du eben dafür sorgen dispatchCallbacks regelmässig aufzurufen, wenn du Callbacks nutzt. Das ist bisher die portabelste Lösung auf die ich bis jetzt gekommen bin. Christian, mir ist nicht ganz klar was du mir mit WinBinder sagen willst. Ich sehe zumindest nichts was dich hindern sollte WinBinder und Tinkerforge in einem Programm zu verwenden. Zitieren
Christian Geschrieben May 7, 2012 at 16:21 Geschrieben May 7, 2012 at 16:21 Christian, mir ist nicht ganz klar was du mir mit WinBinder sagen willst. Ich sehe zumindest nichts was dich hindern sollte WinBinder und Tinkerforge in einem Programm zu verwenden. Ne ich wollte darauf auch gar nicht hinaus sondern einfach mal auf dieses Projekt hinweisen bei dem man mit PHP an sich Windows-Anwendungen (mehr oder weniger) entwickeln kann. War mir bis letzte Woche völlig fremd dass so etwas geht Zitieren
ThomasKl Geschrieben May 7, 2012 at 22:56 Geschrieben May 7, 2012 at 22:56 ich denke für Webanwendungen wären Callbacks dann interessant, wenn sie über Websockets laufen würden. Dann könnte man sich mit Client seitigem Javascript vollständige Anwendungen bauen. Zitieren
photron Geschrieben May 8, 2012 at 08:10 Geschrieben May 8, 2012 at 08:10 Wenn du WebSockets verwendest hast du aber auch ein PHP Programm auf dem Server das dauerhaft (zumindest länger) läuft und dann kannst du in der Schleife die die Clients bedient auch zwischendurch mal dispatchCallbacks() aufrufen und alles ist gut Zitieren
ThomasKl Geschrieben May 8, 2012 at 08:30 Geschrieben May 8, 2012 at 08:30 ich hatte da jetzt eher an einen mehr oder weniger transparenten webserver gedacht, für den es dann javascript bindings gibt. Also dass man anstatt Phyton/Java/C... zu nutzen, einen Browser und Javascript nimmt. Aber ich sehe ein, dass das wenig mit php zu tun hat :-) Zitieren
photron Geschrieben May 8, 2012 at 08:41 Geschrieben May 8, 2012 at 08:41 Das wäre in der Tat eine Möglichkeit Javascript Bindings zu machen. Aber warum so kompliziert? Wenn ich in Javascript schon WebSocket habe dann kann ich auch gleich von Javascript aus direkt mit brickd reden. Zitieren
ThomasKl Geschrieben May 8, 2012 at 08:57 Geschrieben May 8, 2012 at 08:57 wenn man sich per websocket am brickd anmelden kann umso besser, hatte dazu bisher noch nichts gesehen. Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.