Dies ist die Beschreibung der PHP API Bindings für die IP Connection. Die IP Connection kümmert sich um die Kommunikation zwischen einem Brick Daemon oder einer WIFI/Ethernet Extension. Bevor Bricks und Bricklets über deren API angesprochen werden können muss eine IP Connection erzeugt und die TCP/IP Verbindung hergestellt werden.
Eine Installationanleitung für die PHP API Bindings ist Teil deren allgemeine Beschreibung.
Der folgende Beispielcode ist Public Domain (CC0 1.0).
Download (ExampleEnumerate.php)
1<?php
2
3require_once('Tinkerforge/IPConnection.php');
4
5use Tinkerforge\IPConnection;
6
7const HOST = 'localhost';
8const PORT = 4223;
9
10// Print incoming enumeration
11function cb_enumerate($uid, $connectedUid, $position,
12 $hardwareVersion, $firmwareVersion,
13 $deviceIdentifier, $enumerationType)
14{
15 echo "UID: $uid\n";
16 echo "Enumeration Type: $enumerationType\n";
17
18 if($enumerationType == IPConnection::ENUMERATION_TYPE_DISCONNECTED) {
19 echo "\n";
20 return;
21 }
22
23 echo "Connected UID: $connectedUid\n";
24 echo "Position: $position\n";
25 echo "Hardware Version: $hardwareVersion[0].$hardwareVersion[1].$hardwareVersion[2]\n";
26 echo "Firmware Version: $firmwareVersion[0].$firmwareVersion[1].$firmwareVersion[2]\n";
27 echo "Device Identifier: $deviceIdentifier\n";
28 echo "\n";
29}
30
31// Create IP connection and connect to brickd
32$ipcon = new IPConnection();
33$ipcon->connect(HOST, PORT);
34
35// Register enumerate callback to "cb_enumerate"
36$ipcon->registerCallback(IPConnection::CALLBACK_ENUMERATE, 'cb_enumerate');
37
38$ipcon->enumerate();
39
40echo "Press ctrl+c to exit\n";
41$ipcon->dispatchCallbacks(-1); // Dispatch callbacks forever
42
43?>
Download (ExampleAuthenticate.php)
1<?php
2
3require_once('Tinkerforge/IPConnection.php');
4
5use Tinkerforge\IPConnection;
6use Tinkerforge\TinkerforgeException;
7
8const HOST = 'localhost';
9const PORT = 4223;
10const SECRET = 'My Authentication Secret!';
11
12// Authenticate each time the connection got (re-)established
13function cb_connected($connectReason, $userData)
14{
15 $ipcon = $userData;
16
17 switch ($connectReason) {
18 case IPConnection::CONNECT_REASON_REQUEST:
19 echo "Connected by request\n";
20 break;
21 }
22
23 // Authenticate first...
24 try {
25 $ipcon->authenticate(SECRET);
26 echo "Authentication succeeded\n";
27 } catch (TinkerforgeException $e) {
28 echo "Could not authenticate\n";
29 return;
30 }
31
32 // ...then trigger enumerate
33 $ipcon->enumerate();
34}
35
36// Print incoming enumeration
37function cb_enumerate($uid, $connectedUid, $position,
38 $hardwareVersion, $firmwareVersion,
39 $deviceIdentifier, $enumerationType)
40{
41 echo "UID: $uid, Enumeration Type: $enumerationType\n";
42}
43
44// Create IP connection and connect to brickd
45$ipcon = new IPConnection();
46
47// Register connected callback to "cb_connected"
48$ipcon->registerCallback(IPConnection::CALLBACK_CONNECTED, 'cb_connected', $ipcon);
49
50// Register enumerate callback to "cb_enumerate"
51$ipcon->registerCallback(IPConnection::CALLBACK_ENUMERATE, 'cb_enumerate');
52
53$ipcon->connect(HOST, PORT);
54
55echo "Press ctrl+c to exit\n";
56$ipcon->dispatchCallbacks(-1); // Dispatch callbacks forever
57
58?>
Erzeugt ein IP Connection Objekt das verwendet werden kann um die verfügbar Geräte zu enumerieren. Es wird auch für den Konstruktor von Bricks und Bricklets benötigt.
Erstellt eine TCP/IP Verbindung zum gegebenen $host und $port. Host und Port
können auf einen Brick Daemon oder einer WIFI/Ethernet Extension verweisen.
Bricks/Bricklets können erst gesteuert werden, wenn die Verbindung erfolgreich aufgebaut wurde.
Blockiert bis die Verbindung aufgebaut wurde und wirft eine Exception, falls kein Brick Daemon oder WIFI/Ethernet Extension auf dem gegebenen Host und Port horcht.
Trennt die TCP/IP Verbindung zum Brick Daemon oder einer WIFI/Ethernet Extension.
Führt einen Authentifizierungs-Handshake mit dem verbundenen Brick Daemon oder WIFI/Ethernet Extension durch. Ist der Handshake erfolgreich dann wechselt die Verbindung vom nicht-authentifizierten in den authentifizierten Zustand und die Kommunikation kann normal weitergeführt werden. Schlägt der Handshake fehl wird die Verbindung durch die Gegenseite geschlossen. Die Authentifizierung kann fehlschlagen wenn das Authentifizierungsgeheimnis nicht übereinstimmt oder Authentifizierung für den Brick Daemon oder die WIFI/Ethernet Extension nicht aktiviert ist.
Für mehr Informationen zur Authentifizierung siehe das dazugehörige Tutorial.
Added in version 2.1.0.
Kann die folgenden Zustände zurückgeben:
IPConnection::CONNECTION_STATE_DISCONNECTED = 0: Keine Verbindung aufgebaut.
IPConnection::CONNECTION_STATE_CONNECTED = 1: Eine Verbindung zum Brick Daemon oder der WIFI/Ethernet Extension ist aufgebaut.
Setzt den Timeout in Sekunden für Getter und für Setter die das Response-Expected-Flag aktiviert haben.
Standardwert ist 2,5.
Gibt den Timeout zurück, wie er von setTimeout() gesetzt wurde.
Broadcast einer Enumerierungsanfrage. Alle Bricks und Bricklets werden mit einem Enumerate Callback antworten.
Liefert eingehende Callbacks für die gegebene Dauer in Sekunden aus (negative Werte bedeuten unendlich). Da PHP keine Threads unterstützt muss diese Methode periodisch aufgerufen werden, um sicherzustellen, dass eingehende Callbacks behandelt werden. Falls keine Callbacks benutzt werden braucht diese Methode nicht aufgerufen zu werden.
Die empfohlene Auslieferungsdauer ist 0. Dadurch werden nur die Callbacks ausgeliefert die noch auf Auslieferung warten. Es wird jedoch nicht auf den Eingang weitere Callbacks gewartet.
Registriert die $function für die gegebene $callback_id. Die optionalen
$user_data werden der Funktion als letztes Parameter mit übergeben.
Die verfügbaren Callback IDs mit zugehörenden Funktionssignaturen sind unten beschrieben.
Callbacks können registriert werden um über Ereignisse informiert zu werden.
Die Registrierung wird mit der Funktion registerCallback() durchgeführt. Die Parameter bestehen aus der
Callback ID, der Callback Funktion und optionalen Benutzer Daten:
<?php
function my_callback($param)
{
echo $param . "\n";
}
$ipcon->registerCallback(IPConnection::CALLBACK_EXAMPLE, 'my_callback');
?>
Die verfügbaren Konstanten mit den zugehörigen Callback Funktionssignaturen werden im Folgenden beschrieben.
<?php void callback(string $uid, string $connectedUid, char $position, array $hardwareVersion, array $firmwareVersion, int $deviceIdentifier, int $enumerationType [, mixed $userData]) ?>
Der Callback empfängt sieben Parameter:
$uid: Die UID des Bricks/Bricklets.
$connectedUid: Die UID des Gerätes mit dem der Brick/das Bricklet verbunden
ist. Für ein Bricklet ist dies die UID des Bricks oder Bricklets mit dem es verbunden ist.
Für einen Brick ist es die UID des untersten Bricks im Stapel.
Der unterste Master Brick hat die Connected-UID "0". Mit diesen Informationen
sollte es möglich sein die komplette Netzwerktopologie zu rekonstruieren.
$position: Für Bricks: '0' - '8' (Position in Stapel). Für Bricklets:
'a' - 'h' (Position an Brick) oder 'i' (Position des Raspberry Pi (Zero) HAT)
oder 'z' (Bricklet an Isolator Bricklet).
$hardwareVersion: Major, Minor und Release Nummer der Hardwareversion.
$firmwareVersion: Major, Minor und Release Nummer der Firmwareversion.
$deviceIdentifier: Eine Zahl, welche den Brick/Bricklet repräsentiert.
$enumerationType: Art der Enumerierung
Mögliche Enumerierungsarten sind:
IPConnection::ENUMERATION_TYPE_AVAILABLE = 0: Gerät ist verfügbar
(Enumerierung vom Benutzer ausgelöst: enumerate()). Diese Enumerierungsart kann mehrfach für das
selbe Gerät auftreten.
IPConnection::ENUMERATION_TYPE_CONNECTED = 1: Gerät wurde neu verbunden (Automatisch vom Brick gesendet nachdem die Kommunikation aufgebaut wurde). Dies kann bedeuten, dass das Gerät die vorher eingestellte Konfiguration verloren hat und neu Konfiguriert werden muss.
IPConnection::ENUMERATION_TYPE_DISCONNECTED = 2: Gerät wurde getrennt (Nur
bei USB-Verbindungen möglich). In diesem Fall haben nur $uid und
$enumerationType einen gültigen Wert.
Es sollte möglich sein Plug-and-Play-Funktionalität mit diesem Callback zu implementieren (wie es im Brick Viewer geschieht)
Die Device Identifier Werte sind hier zu finden. Es gibt auch Konstanten für diese Werte, welche nach dem folgenden Muster benannt sind:
<device-class>::DEVICE_IDENTIFIER
Zum Beispiel: BrickMaster::DEVICE_IDENTIFIER
oder BrickletAmbientLight::DEVICE_IDENTIFIER.
<?php void callback(int $connectReason [, mixed $userData]) ?>
Dieser Callback wird aufgerufen wenn die IP Connection eine Verbindung zu einem Brick Daemon oder einer WIFI/Ethernet Extension aufgebaut hat, mögliche Gründe sind:
IPConnection::CONNECT_REASON_REQUEST = 0: Verbindung aufgebaut nach Anfrage vom Benutzer.
<?php void callback(int $disconnectReason [, mixed $userData]) ?>
Dieser Callback wird aufgerufen wenn die Verbindung der IP Connection zu einem Brick Daemon oder einer WIFI/Ethernet Extension getrennt wurde, mögliche Gründe sind:
IPConnection::DISCONNECT_REASON_REQUEST = 0: Trennung wurde vom Benutzer angefragt.
IPConnection::DISCONNECT_REASON_ERROR = 1: Trennung aufgrund eines unlösbaren Problems.
IPConnection::DISCONNECT_REASON_SHUTDOWN = 2: Trennung wurde vom Brick Daemon oder WIFI/Ethernet Extension eingeleitet.