7,80. Deutschland. Österreich 9,00 Schweiz 15,80 sfr Luxemburg 9,20. Core Bluetooth ab. Einführung in die BLE-Entwicklung mit ios
|
|
- Eva Vogt
- vor 8 Jahren
- Abrufe
Transkript
1 Oktober 2013 München Deutschland 7,80 Österreich 9,00 Schweiz 15,80 sfr Luxemburg 9,20 Volume 12 MOBILE TECHNOLOGY Expo: Oktober 2013 Ausgabe 3/2013 KSH R O W R E W PO INTERNATIONAL PHP CONFERENCE 2013 #MVFUPPUI -& t J04 t "OESPJE t #MBDL#FSSZ t 3BTQCFSSZ 1J LI U J. 8 1 S I SPECIAL B OPS FOR FREE Große Infografik: CI mit Git 34 Core Bluetooth ab ios 6 Einführung in die BLE-Entwicklung mit ios istockphoto.com/oktalstudio Java in ios und Android Media-Partner: Präsentiert von: Veranstalter: Mobile Entwicklung mit dem Application Developer Framework BlackBerry Live 2013: BlackBerry wieder in der Offensive App Store Optimization: Alternative App Stores und das Freemium-Modell Odyssee: Mit Sencha Touch und Apache Cordova zur mobilen Applikation Raspberry Pi: Spaß mit Embedded Monetarisierung: zanox SDK für ios und Android Sieben Zwerge: Die beliebtesten Einplatinencomputer im Überblick
2 012 ios Bluetooth LE und ios 6 Einführung in die BLE-Entwicklung mit ios Erste Schritte mit Core Bluetooth ab ios 6 istockphoto.com/oktalstudio Mobile Technology
3 Bluetooth LE und ios 6 ios 013 Core Bluetooth hat für typische Anwendungsfälle aus den Bereichen Healthcare, Heimvernetzung, Entertainment, Security und Sport/ Fitness Einzug in ios 5 gehalten. Selbst Themen wie abstandsabhängige Kommunikation zwischen Geräten werden mit dem relativ neuen Standard adressiert. In diesem Zuge entwickelt sich Bluetooth LE zu einer echten Alternative zu NFC und wird selbst für Szenarien wie mobiles Bezahlen oder die Spieleindustrie interessant. von Wolfgang Frank und Samuel Mellert Mobile Technology
4 014 ios Bluetooth LE und ios 6 Das in ios 5 eingeführte Core-Bluetooth- Framework deckt die meisten Aspekte der Bluetooth-4.0-Low-Energy-(LE-)Spezifikation ab. Konnte man mit ios 5 nur auf Bluetooth-LE-Geräte zugreifen, die Daten bereitstellen, so wurde mit ios 6 das API erweitert, damit sich ios-geräte selbst als Datenlieferant anbieten können. Leider unterstützen nur die neueren ios-geräte und Macs die Bluetooth- LE-(BLE-)Spezifikation. Dazu gehören das iphone 4S, iphone 5, der Mac Mini, das neue ipad, MacBook Air und MacBook Pro. Seit ios 6 gibt es auch eine BLE- Unterstützung des iphone-simulators, die allerdings in der Praxis aufgrund der verschiedenen BLE Dongles recht problematisch ausfällt. Apple wird den Support des Simulators voraussichtlich in nächsten ios-versionen wieder einstellen. Alternativ zu echten ios-devices gibt es auch diverse Bluetooth-LE-Development-Kits, die Sensordaten wie Gyroscope, Temperatur, Accelerometer und Ähnliches anbieten. Am Bekanntesten ist momentan vermutlich das Sensor-Tag von Texas Instruments, das man für nur 25 US-Dollar erwerben kann. Das Tüfteln mit diesen externen Sensoren macht wirklich viel Spaß und beflügelt manch eine Idee im Kontext des Internet of Things und der Machine Listing 1: BizCardServer.m #import "BizCardServer.h" #import <CoreBluetooth/CoreBluetooth.h> #define NOTIFY_MTU BizCardServer () (nonatomic, strong) CBPeripheralManager (nonatomic, strong) CBMutableService (nonatomic, strong) CBMutableCharacteristic (strong, nonatomic) NSData (nonatomic, readwrite) NSInteger Listing 2: BizCardServer.m: init // First create the peripheral manager to act as server (manager) for data -(id)init if (self = [super init]) _peripheralmanager = [[CBPeripheralManager alloc] initwithdelegate:self queue:dispatch_queue_create("ble_queue", nil)]; return self; to Machine -Vernetzung. Es liegt durchaus nahe, dass BLE ebenfalls die Grundlage für die viel spekulierte iwatch bilden wird. Im Gegensatz zu WLAN oder dem klassischen Bluetooth ist Bluetooth LE nicht besonders gut geeignet, um große Datenmengen wie Bilder, Videos oder Dokumente zu übertragen, da sich nur geringe Transferraten realisieren lassen. Die Stärken von BLE liegen in der geringeren Sendeleistung so kann ein BLE-Gerät, ausgestattet mit einer kleinen Knopfbatterie, leicht über mehrere Monate betrieben werden. Das wäre mit herkömmlichem Bluetooth oder WLAN undenkbar. Weiter ist es möglich, BLE-Geräte ad hoc miteinander zu verbinden, ohne mühselige Pairing-Orgien durchzuführen. Ein explizites Pairing ist nur für verschlüsselte Übertragungen notwendig. Bluetooth LE verlangt keine Konformität zu MFI (Made for iphone), sondern man kann auch ohne Zertifizierung eigene Peripherals erstellen, bzw. verwenden. Die wichtigsten Frameworkklassen Schauen wir uns die wichtigsten Klassen aus dem Core- Bluetooth-(CB-)Framework genauer an. Grundsätzlich wird zwischen Central und Peripheral unterschieden. Das gesamte Framework dreht sich um diese beiden Komponenten und regelt anhand von Delegate Callbacks den Austausch von Informationen und Daten zwischen ihnen. Eine Analogie findet man in Client-/ Serverarchitekturen, bzw. im Provider-/Subscriber- Muster. Das Central übernimmt dabei die Rolle des Clients/Subscriber, der Daten abfragt bzw. benötigt. Das Peripheral enthält Daten, die angeboten werden, und spielt somit die Rolle eines Servers/Provider. Wie bereits erwähnt, kann ab ios 6 ein Gerät sowohl Central als auch Peripheral sein, jedoch leider nicht beides zur selben Zeit! Die Central-Komponente wird durch die CBCentralManager-Klasse und die Peripheral- Komponente durch die CBPeripheralManager-Klasse repräsentiert. CBCentralManager-Objekte werden verwendet, um entdeckte oder verbundene Peripherals, die durch CBPeripheral-Objekte repräsentiert werden, zu verwalten. Der CBCentralManager dient insbesondere dazu, nach Peripherals zu scannen, diese zu entdecken und sich mit ihnen zu verbinden. Anders herum wird auf der Seite eines Peripherals durch ein CBCentral- Objekt der Client repräsentiert, der sich mit dem Peripheral verbunden hat. Man kann sich das so vorstellen, dass ein Peripheral nach außen hin über Broadcasts bekannt gibt, Daten anzubieten. In diesem Angebot können so genannte Services enthalten sein. Auf der Gegenseite scannt ein Central die Umgebung nach vorhandenen Services. Sobald ein gesuchter Service gefunden wird, kann der Central eine Verbindung zum Peripheral aufbauen. Ist diese Verbindung erfolgreich aufgebaut, können die beiden Geräte Daten untereinander austauschen. Die Daten für den Austausch sind in Services organisiert, die wiederum aus verschiedenen so genannten Characteristics bestehen. Eine Characteristic ist im Grunde ein definierter Attributtyp, der einen logischen Mobile Technology
5 Bluetooth LE und ios 6 ios 015 Wert enthält. Zahlreiche Services und Characteristics sind mittlerweile standardisiert, sodass auch herstellerunabhängig beispielsweise ein Heartrate-Monitor durch einen gleichen Service oder zumindest gleiche Characteristics seine Daten anbietet. Auf der Central- Seite wird ein Service durch eine CBService-Klasse repräsentiert. Jeder dieser Services enthält eine Liste von Characteristics, jeweils repräsentiert durch eine CBCharacteristics-Klasse. Auf gleiche Weise werden Services und Characteristics auf Seiten des Peripherals durch ihre erzeugbaren, bzw. veränderbaren Pendants, CBMutableService und CBMutableCharacteristic umgesetzt. Sowohl ein Service als auch eine Characteristic müssen eindeutig durch eine UUID identifizierbar sein. Das Core-Bluetooth-Framework stellt hierfür die Hilfsklasse CBUUID bereit. In Abbildung 1 wird der Zusammenhang der Kernkomponenten nochmals illustriert. Im Folgenden werden anhand eines einfachen Beispiels die grundlegenden Mechanismen von Core Bluetooth in der Anwendung vorgestellt. Dazu erstellen wir ein Peripheral, das einen Service anbietet, sowie ein Central, das sich ab einer bestimmten räumlichen Nähe zum Peripheral verbindet und die bereitgestellten Daten abruft. Idealerweise probiert man das Beispiel mit zwei BLE-fähigen ios-geräten aus. In diesem Beispiel kapseln wir die Client-, bzw. Serverfunktionalität in zwei eigene Klassen (BizCardServer => Peripheral und Biz- CardClient => Central). Ein eigenes Peripheral bauen Die im Folgenden aufgeführten Schritte sind notwendig, um ein Peripheral zu erstellen: Einen CBPeripheralManager erzeugen und starten Einen CBMutableService mit CBMutableCharacteristic erzeugen Service bekanntgeben (advertise) Mit der Central verbinden und Daten austauschen Im Xcode-Projekt muss als Allererstes das CoreBluetooth.framework unter LINKED FRAMEWORK AND LIBRARIES eingebunden werden In unserem BizCardServer (Listing 1) importieren wir die Core-Bluetooth-Framework-Header (<CoreBluetooth/CoreBluetooth.h>). Damit wir auf die Callbacks in der Rolle als Peripheral reagieren können, müssen wir das entsprechende CBPeripheralManagerDelegate- Protokoll implementieren. Zusätzlich legen wir Properties für den Peripheral-Manager, den zu erstellenden Service und die beinhaltende Characteristic an. Ebenso benötigen wir für das Beispiel ein datatosend-property, das die anzubietenden Daten in einem NSData Object hält, sowie eine senddataindex als Hilfszähler, um auch Datenmengen versenden zu können, die nicht in einem einzigen Chunk übertragen werden können, sondern auf mehrere Datenpakete aufgeteilt werden müssen. Abb. 1: Die wichtigsten Kernkomponenten in Core Bluetooth In der init-methode initialisieren wir den Peripheral- Manager. Das erste Argument setzt das delegate (in unserem Fall self). Im zweiten Argument kann eine Queue angegeben werden, falls zum Beispiel der Peripheral- Manager nicht im Main Thread laufen soll. Wir erzeugen in unserem Beispiel eine eigene BLE_Queue-Queue mittels Grand Central Dispatch und übergeben diese als Argument (Listing 2). Sobald der Peripheral-Manager initialisiert wurde, müssen wir seinen Zustand überprüfen (Listing 3). Dies ist notwendig, um sicherzustellen, dass unsere App auch tatsächlich auf einem Bluetooth-LE-fähigen Gerät läuft. Dazu implementieren wir die Delegate-Methode peripheralmanagerdidupdatestate:. Hier können wir auch ggf. passende Infomeldungen an den User weitergeben, Listing 3: BizCardServer.m: Status BLE prüfen // Check if Bluetooth LE is available and setup service - (void)peripheralmanagerdidupdatestate:(cbperipheralmanager *)peripheral switch (peripheral.state) case CBPeripheralManagerStatePoweredOn: [self setupservice]; break; default: NSLog(@"Peripheral Manager did update state"); UIAlertView *alert = [[UIAlertView alloc] Info" message:@"bluetooth LE is not available or activated" delegate:nil cancelbuttontitle:@"ok" otherbuttontitles:nil, nil]; [alert show]; break; Mobile Technology
6 016 ios Bluetooth LE und ios 6 falls Bluetooth im System nicht aktiviert wurde oder nicht verfügbar ist. Im Falle des Status CBPeripheralManagerState- PoweredOn wissen wir, dass BLE verfügbar ist, und wir können unseren anzubietenden Service erzeugen ([self setupservice], Listing 4). Die weiteren validen States findet man in der Core-Bluetooth-Framework-Referenzdokumentation. Jeder Service und jede Characteristic wird durch eine 16- bzw. 128-Bit-UUID identifiziert. Im Falle von eigenen Anwendungen muss man eine 128-Bit-UUID verwenden und sollte dafür sorgen, dass es keine Kollisionen mit anderen UUIDs von anderen Services bzw. Characteristics gibt. Die 16-Bit-UUIDs werden durch die Bluetooth-SIG vergeben. Als Hilfe kann man im OSX-Terminal einfach das Kommando uuidgen aufrufen, um eigene eindeutige Identifier zu erzeugen. Listing 4: BizCardServer.m: Service und Characteristic erzeugen // Construct a new service and publish it - (void)setupservice // Create characteristic self.cardcharacteristic = [[CBMutableCharacteristic alloc] nitwithtype:[cbuuid UUIDWithString:kCardCharacteristicUUID] properties:cbcharacteristicpropertynotiy value:nil permissions:cbattributepermissionsreadable]; // Create service and add characteristic self.cardservice = [[CBMutableService alloc] initwithtype: [CBUUID UUIDWithString:kCardServiceUUID] primary:yes]; // Set the characteristic for service self.cardservice.characteristics // Publish service [self.peripheralmanager addservice:self.cardservice]; Listing 5: BizCardService.h: UUIDs für Service und Characteristic #ifndef BizCardService_h #define BizCardService_h #define #define #endif In unserem Fall benötigen wir zwei UUIDs: eine für den Service und eine für die Characteristic (Listing 5). In Listing 4 sieht man die Erzeugung eines Service. Als Erstes wird jedoch eine Characteristic erzeugt und die CBUUID, die unserer selbst generierten UUID entspricht, als ersten Parameter der initwithtype:proper ties:value:permissions-methode übergeben. Als drittes Argument wird nil übergeben, was so viel bedeutet, wie dass sich der Wert für diese Characteristic dynamisch ergibt und nicht schon statisch feststeht. Das entspricht dem generellen Vorgehen beim Erzeugen von dynamischen Daten. Falls der Wert jedoch sowieso immer konstant bleibt, spricht natürlich auch nichts dagegen, diesen hier fest anzugeben. Der zweite Parameter der init-methode bestimmt, in welcher Form der Wert verwendet werden soll. Ein paar der wichtigsten Möglichkeiten sind im Folgenden aufgelistet: CBCharacteristicPropertyBroadcast: Erlaubt den Broadcast eines Characteristic-Werts durch Verwendung des characteristic configuration descriptor. CBCharacteristicPropertyRead: Erlaubt das Lesen des Characteristic-Werts. CBCharacteristicPropertyWriteWithoutResponse: Ermöglicht das Schreiben des Characteristic-Werts, jedoch ohne Antwort. CBCharacteristicPropertyWrite: Ermöglicht das Schreiben des Characteristic-Werts. CBCharacteristicPropertyNotify: Ermöglicht die Benachrichtigung bei Änderungen des Characteristic- Werts ohne Antwort. Des Weiteren sind Konstanten, bzw. Parameter für Verschlüsselung und Signierung von Characteristic- Wertänderungen verfügbar. Für diese weiterführenden Themen findet man die Details in der Core-Bluetooth- Developer-Dokumentation. Das letzte Argument der init-methode sind die Lese-, Schreibe- und Verschlüsselungsrestriktionen für Attribute. Mögliche Werte sind: CBAttributePermissionsReadable CBAttributePermissionsWriteable CBAttributePermissionsReadEncryptionRequired CBAttributePermissionsWriteEncryptionRequired Nachdem die Characteristic erzeugt wurde, wird der Service erstellt. Auch dieser erhält eine CBUUID, die wir zuvor selbst generiert haben. Diesem Service fügen wir eine Liste der Characteristics hinzu, um die hierarchische Struktur aufzubauen (Abb. 2). Am Ende der Methode sagen wir dem Peripheral-Manager, dass dieser Service dem Peripheral hinzugefügt werden soll. Durch das Hinzufügen des Service zum Peripheral- Manager wird der nächste Delegate Callback peripher almanager:didaddservice:error ausgelöst. Oft wird an dieser Stelle das Bekanntmachen (Advertising) des Service gestartet. In unserem Beispiel wollen wir das expli- Mobile Technology
7 Bluetooth LE und ios 6 ios 017 zit durch eine Nutzeraktion starten können und haben dazu eine eigene Methode startadvertisingbizcardservice und stopadvertisingbizcardservice erzeugt, die unsere BizCardServer-Klasse auch im Header File publik macht (in Listing 6 nicht explizit gezeigt). Das Advertising erfolgt durch periodische Broadcasts des Peripherals. Um die initiale Erkennung zu beschleunigen, aber auch gleichzeitig die Batterie zu schonen, werden nach dem Starten des Advertisings die Pakete in kurzen Zeitabständen versendet und nach einiger Zeit werden diese Intervalle automatisch vergrößert. Das gleiche Vorgehen trifft auf das Scanning nach Devices durch das Central zu. Befindet sich die App im Vordergrund, erfolgt das Advertising des Peripherals sowie das Scanning auf Central-Seite mit höherer Intensität, als wenn sich die App im Hintergrund befindet. Man sollte also beachten, dass sich die Zeiträume für das Entdecken und Verbinden von BLE- Geräten im Background verlängern. Core Bluetooth verfügt über ein Caching der Characteristics (nicht der Werte), um das Entdecken und Analysieren der Services zu beschleunigen. Das Advertise-Paket, das maximal 31 Bytes an Daten/Informationen enthalten kann, liefert neben der Service-UUID auch eine Information zur Signalstärke (RSSI), die verwendet werden kann, um die Distanz zwischen den Geräten zu bestimmen. Es handelt sich dabei um einen ungenauen Wert, der lediglich helfen kann, zwischen nah, mittelweit und ganz weit zu unterscheiden, wobei die Grenzen je nach Geräten und Wetterlage und Umgebungsparametern (z. B. Luftfeuchtigkeit, Temperatur, elektromagnetische Störquellen) schwanken können. Nachdem der Peripheral-Manager begonnen hat, den Service bekannt zu machen (Advertising), empfängt er über seine Delegate-Methoden die Nachricht peripheral- Manager:didStartAdvertising:. Sobald sich ein Central mit dem Peripheral verbunden hat, bekommt man den centraldidconnect-callback des CBPeripheralManagerDelegate. Üblicherweise gefolgt von Read Requests für den Wert einer Characteristic, die durch den Callback didreceivereadrequest signalisiert werden. Der CBPeripheralManager antwortet in der Regel mit respondtorequest auf die Anfragen und liefert somit die gewünschten Daten, bis der Central die Verbindung beendet, was durch einen Aufruf des centraldiddisconnect aus dem Delegate-Protokoll auf Seiten des Peripherals sichtbar wird. Eine andere, oftmals bessere Möglichkeit, ist es, den sog. Subscription/Notify-Mechanismus zu verwenden, bei dem ein Central über angebotene Daten und deren Änderungen automatisch benachrichtigt wird. Hat sich ein Central für einen Service, bzw. für eine Characteristic subscribed (siehe BizCardClient), wird dies über einen Callback der peripheralmanager:cent ral:didsubscribetocharacteristic: Delegate-Methode bekannt gemacht. An dieser Stelle kann dann der dynamische Inhalt erstellt und per updatevalue:forcha Abb. 2: Struktur von Services und Characteristics Listing 6: BizCardServer.m: Advertise starten // When service is added start advertising it via Bluetooth LE - (void)peripheralmanager:(cbperipheralmanager *)peripheral didaddservice:(cbservice *)service error:(nserror *)error if (error == nil) NSLog(@"Service Setup (not advertised yet!)"); else NSLog(@"Error adding service: %@", [error localizeddescription]); // Public method - (void)startadvertisingbizcardservice // Start advertising service [self.peripheralmanager CBAdvertisementDataServiceUUIDsKey UUIDWithString:kCardServiceUUID] ] ]; // Public method - (void)stopadvertisingbizcardservice // Stop advertising service [self.peripheralmanager stopadvertising]; Mobile Technology
8 018 ios Bluetooth LE und ios 6 Listing 7: BizCardServer.m: Daten senden // Recognize when the central unsubscribes - (void)peripheralmanager:(cbperipheralmanager *)peripheral central:(cbcentral *)central didunsubscribefromcharacteristic:(cbcharacteristic *)characteristic NSLog(@"Central unsubscribed from characteristic"); // Catch when someone subscribes to our characteristic, then start sending // them data - (void)peripheralmanager:(cbperipheralmanager *)peripheral central:(cbcentral *)central didsubscribetocharacteristic:(cbcharacteristic *)characteristic if ([characteristic.uuid isequal:[cbuuid UUIDWithString:kCardCharacteristicUUID]]) NSLog(@"Central subscribed to kcardcharacteristicuuid"); // Create some sampel data --> could be provided dynamically! self.datatosend = [@"'firstname' : 'Peter', 'lastname' : 'Pan','organization' : 'New kids on the block', 'location' : 'Neverland','contact' : 'pp@neverland.org'" datausingencoding:nsutf8stringencoding]; // Reset index self.senddataindex = 0; // Start sending data [self senddata]; // Sends the next amount of data to the connected central - (void)senddata // First up, check if we're meant to be sending an EOM static BOOL sendingeom = NO; if (sendingeom) // send EOM if ([self.peripheralmanager updatevalue: [@"EOM" datausingencoding:nsutf8stringencoding] forcharacteristic:self.cardcharacteristic onsubscribedcentrals:nil]) // Mark it as sent sendingeom = NO; NSLog(@"Sent: EOM"); else // It didn't send, so we'll exit and wait for // peripheralmanagerisreadytoupdatesubscribers to call senddata again // We're not sending an EOM, so we're sending data // Data left to send? if (self.senddataindex >= self.datatosend.length) // No data left. Do nothing // There's data left, so send until the callback fails, or we're done. BOOL didsend = YES; // Make the next chunk while (didsend) // How big should chunk be NSInteger amounttosend = self.datatosend.length - self.senddataindex; // Can't be longer than 20 bytes if (amounttosend > NOTIFY_MTU) amounttosend = NOTIFY_MTU; // Copy out the data we want NSData *chunk = [NSData datawithbytes: self.datatosend.bytes+self.senddataindex length:amounttosend]; // Send next chunk of data if ( [self.peripheralmanager updatevalue: chunk forcharacteristic:self.cardcharacteristic onsubscribedcentrals:nil] ) NSString *stringfromdata = [[NSString alloc] initwithdata: chunk encoding:nsutf8stringencoding]; NSLog(@"Sent: %@", stringfromdata); // Update our index self.senddataindex += amounttosend; // Was it the last one? if (self.senddataindex >= self.datatosend.length) // It was - send an EOM // Set this so if the send fails, we'll send it next time sendingeom = YES; // Send EOM if ([self.peripheralmanager updatevalue: [@"EOM" datausingencoding:nsutf8stringencoding] forcharacteristic:self.cardcharacteristic onsubscribedcentrals:nil]) // we're all done sendingeom = NO; NSLog(@"Sent: EOM"); else else // Didn't work - drop out and wait for the callback // This callback comes in when the PeripheralManager is ready to send the next // chunk of data. This is to ensure that packets will arrive in the order they are sent. - (void)peripheralmanagerisreadytoupdatesubscribers: (CBPeripheralManager *)peripheral // Start sending again [self senddata]; Mobile Technology
9 Bluetooth LE und ios 6 ios 019 racteristic:onsubscribedcentrals: versendet werden. Sollte die Größe der Daten 20 Bytes überschreiten (NO- TIFY_MTU), können diese nicht mit einem Mal übertragen werden und der Datenstrom muss in Häppchen ( Chunk ) übertragen werden. In unserem Beispiel wird ein EOM als Signal für das Ende einer Nachricht gesendet (Listing 7). Das Zerteilen der Nachricht entspricht weitestgehend dem BTLE-Beispielprojekt von Apple, wobei es hier natürlich auch schönere Wege gibt, um diesen Mechanismus zu realisieren. Die Interaktion zwischen Central und Peripheral sowie der Datenaustausch können auch mit entsprechenden BackgroundModes in der info.plist im Hintergrund durchgeführt werden. Apple empfiehlt jedoch, die Apps so zu gestalten, dass das Scannen und Verbinden über ein Start/Stop-Konzept für einen Nutzer aktiv und sichtbar umgesetzt wird, da ansonsten durch die Hintergrundtätigkeiten der Anwendung der Energie- und Datenbedarf des Geräts schnell sehr hoch ausfallen kann, was wiederum zu einer schlechten User Experience führt. Ein Central bauen Nachdem wir mit unserem Peripheral als Server Daten anbieten, müssen wir noch ein Central als Client erstellen, der diese Daten konsumiert. Dazu implementieren Die Interaktion zwischen Central und Peripheral sowie der Datenaustausch können auch im Hintergrund ausgeführt werden. wir in unserem Central (gekapselt durch BizCardClient) das CBCentralManagerDelegate- sowie das CB- PeripheralDelegate-Protokoll, um die entsprechenden Callbacks für das Set-up des Centrals, den Verbindungsaufbau und die Interaktion mit dem Peripheral zu erhalten. Als Properties merken wir uns einen CBCentralManager sowie das verbundene CBPeripheral und ebenfalls ein NSMutableData-Property, das die empfangenen Daten aufnimmt. Analog zum Peripheral zuvor wird in der init-methode der Central-Manager erzeugt, self als Delegate gesetzt und eine GCD-Queue angegeben, in der das Central ablaufen soll, da ansonsten bei nil die Main Queue verwendet wird. Sobald der Central- Manager initialisiert ist, kann sein Status überprüft werden, um ebenso sicherzustellen, dass das Gerät BLE Anzeige Wissen, wie s geht.
10 020 ios Bluetooth LE und ios 6 unterstützt. Wie beim Peripheral erfolgt dies durch die Implementierung einer Delegate-Methode centralmanagerdidupdatestatus: (Listing 8). Oft wird hier bereits der Scan nach Peripherals gestartet. In unserem Beispiel haben wir diesen Schritt, um den Scan zu starten, Listing 8: BizCardClient.m: Initialisierung des Centrals #import "BizCardClient.h" #import <CoreBluetooth/CoreBluetooth.h> #define kupperproximityrssilimit -15 #define klowerproximityrssilimit BizCardClient () <CBCentralManagerDelegate, (nonatomic, strong) CBCentralManager (nonatomic, strong) CBPeripheral (nonatomic, strong) BizCardClient // First create the central manager to act as client (manager) for data -(id)init if (self = [super init]) _centralmanager = [[CBCentralManager alloc] initwithdelegate:self queue:dispatch_queue_create("ble_queue", nil)]; _data = [[NSMutableData alloc] init]; return self; - (void)centralmanagerdidupdatestate:(cbcentralmanager *)central switch (central.state) case CBCentralManagerStatePoweredOn: //[self scan]; // We'll make the scanning startable by the user NSLog(@"Central Manager ready to scan for services"); break; default: NSLog(@"Central Manager did change state"); break; - (void)scan [self.centralmanager [CBUUID UUIDWithString:kCardServiceUUID] ] options:@cbcentralmanagerscanoptionallowduplicateskey ]; in eine eigene public-methode verlagert, um den Scan durch den User direkt start- und stopbar zu machen. Die scanforperipheralswithservices:options-methode wird verwendet, um das Scanning nach Advertisements des Peripherals zu starten. Als Argument kann eine Liste der spezifischen Services (UUIDs) mitgegeben werden, um die Suche einzuschränken. Wenn ein Peripheral entdeckt wird, erfolgt ein Aufruf des Delegates central:diddiscoverperipheral:advertism entdata:rssi: mit den Advertisement-Daten und dem RSSI-Signalstärkewert (Received Signal Strength Indicator). Letzterer kann verwendet werden, um sich nur mit einem Gerät zu verbinden, das sich in einem gewünschten Abstand befindet (Listing 9). Hat man ein passendes Peripheral gefunden, wird eine Verbindung über die Central-Manager-Methode connectperipheral:options: hergestellt. Mit dem Optionsparameter kann gesteuert werden, ob das Connect und Disconnect mit einem Peripheral zu weiteren Notifications/Alerts führen soll. Dieser Connect-Aufruf mündet in einen Delegate Callback didconnectperipheral:. Ist eine Verbindung zu dem Peripheral hergestellt, wird dieses mittels discoverservices: mit optionaler Liste der Service-UUIDs als Parameter gefragt, die zum Peripheral gehörenden Services zu finden (Listing 9). Analog zum Entdecken des Peripherals wird ein gefundener Service durch einen asynchronen Delegate Callback peripheral:diddiscoverservice: und eine gefundene Characteristic durch den Delegate Callback peripheral: diddiscovercharacteristics: signalisiert. In letzterem Fall sieht man im Beispielcode (Listing 10), dass die von uns gewünschte (und vom Peripheral bereitgestellte) Characteristic durch setnotifyvalue:forcharacteristic: subscribed wird. Dadurch erfolgt bei Änderungen des Werts auf Seiten des Peripherals in unserem Central ein Callback der Delegate-Methode peripheral:didupdatenotification- StateForCharacteristic:error: sowie ein Aufruf von peri pheral:didupdatevalueforcharacteristic:error:, der die empfangenen Chunks für die subscribed Characteristic entgegennimmt und in unserem Beispiel zu einem gesamten NSData-Objekt zusammenfügt, bis das EOM als Terminierungssignal empfangen wird (Listing 11). Im Beispiel trennen wir danach auch die Verbindung zum Peripheral mittels cancelperipheralconnection: und unsubscriben uns von der Characteristic. Damit haben wir auch schon alle Schritte durchgeführt, um Daten zwischen zwei BLE-Geräten abhängig von der Distanz zueinander auszutauschen. Wie man sieht... Wie man sieht, macht es das Core-Bluetooth-Framework einem Entwickler sehr einfach, die Funktionalität in eigene Apps zu integrieren und auch verschiedenste bereits vorhandene BLE-Endgeräte anzubinden, oder vielleicht sogar auch als Bastler mit z. B. Raspberry Pi und Bluetooth LE Dongle eigene externe Sensoren und Steuer-/Regelmechanismen zu entwerfen. Die zahl- Mobile Technology
11 Bluetooth LE und ios 6 ios 021 Listing 9: BizCardClient.m: Initialisierung des Centrals - (void)centralmanager:(cbcentralmanager *)central diddiscoverperipheral:(cbperipheral *)peripheral advertisementdata:(nsdictionary *)advertisementdata RSSI:(NSNumber *)RSSI // Reject any where the value is above reasonable range // Reject if the signal strength is too low to be close enough (Close is // around -22dB) if (RSSI.integerValue > kupperproximityrssilimit RSSI.integerValue < klowerproximityrssilimit) NSLog(@"Too far or too close RSSI: %@", RSSI); // Stops scanning for peripheral if close enough [self.centralmanager stopscan]; if (self.connectedperipheral!= peripheral) self.connectedperipheral = peripheral; NSLog(@"Connecting to peripheral %@", peripheral); NSLog(@"Advertisement Data %@ : %@", [advertisementdata objectforkey:cbadvertisementdatalocalnamekey], [advertisementdata objectforkey:cbadvertisementdataserviceuuidskey]); NSLog(@"RSSI: %@", RSSI); // Connects to the discovered peripheral [self.centralmanager connectperipheral:peripheral options:nil]; - (void)centralmanager:(cbcentralmanager *)central didconnectperipheral:(cbperipheral *)peripheral NSLog(@"didConnectPeripheral"); // Clears the data [self.data setlength:0]; // Set peripheral delegate peripheral.delegate = self; // Asks peripheral to discover service [peripheral discoverservices:@[ [CBUUID UUIDWithString:kCardServiceUUID] ]]; - (void)centralmanager:(cbcentralmanager *)central didfailtoconnectperipheral:(cbperipheral *)peripheral error:(nserror *)error if (error) NSLog(@"Error connecting to peripheral: %@", [error localizeddescription]); [self cleanup]; - (void)centralmanager:(cbcentralmanager *)central diddisconnectperipheral:(cbperipheral *)peripheral error:(nserror *)error if (error) NSLog(@"Error disconnecting peripheral: %@", [error localizeddescription]); [self cleanup]; self.connectedperipheral = nil; // Disconnected ==> start scanning again //[self scan]; Listing 10: BizCardClient.m: Services und Characteristics entdecken - (void)peripheral:(cbperipheral *)peripheral diddiscoverservices:(nserror *)error if (error) NSLog(@"Error discovering service: %@", [error localizeddescription]); [self cleanup]; for (CBService *service in peripheral.services) NSLog(@"Service found with UUID: %@", service.uuid); // Discovers the characteristics for a given service if ([service.uuid isequal:[cbuuid UUIDWithString:kCardServiceUUID]]) [peripheral discovercharacteristics:@[[cbuuid UUIDWithString:kCardCharacteristicUUID]] forservice:service]; - (void)peripheral:(cbperipheral *)peripheral diddiscovercharacteristicsforservice:(cbservice *)service error:(nserror *)error if (error) NSLog(@"Error discovering characteristic: %@", [error localizeddescription]); [self cleanup]; if ([service.uuid isequal:[cbuuid UUIDWithString:kCardServiceUUID]]) for (CBCharacteristic *characteristic in service.characteristics) if ([characteristic.uuid isequal:[cbuuid UUIDWithString:kCardCharacteristicUUID]]) // Subscribe to characteristic [peripheral setnotifyvalue:yes forcharacteristic:characteristic]; Mobile Technology
12 022 ios Bluetooth LE und ios 6 reichen Kaskaden über die diversen Delegate-Aufrufe durchzuführen, macht den Code leider nicht sehr übersichtlich, aber hier gibt es bereits erste Frameworks, die versuchen, durch Block-APIs zu verbessern. Die Bluetooth-LE-Technologie und Core Bluetooth als Framework stehen gemessen an den Möglichkeiten sicher noch ganz am Anfang und haben ein enormes Potenzial für weitere fantasievolle Anwendungsfälle. Unserer Meinung nach handelt es sich dabei um ein Zukunftsthema, dass man als ios-entwickler auf jeden Fall auf dem Radar behalten sollte. Wolfgang Frank ist Geschäftsführer der arconsis IT-Solutions GmbH aus Karlsruhe. Er beschäftigt sich seit mehreren Jahren hauptsächlich mit der Android- und ios-entwicklung. Als Agile Coach und Softwarearchitekt für komplexe Enterprise-Systeme unterstützt er Kunden beim Bau von Mobile Gateways zur Anbindung an die mobile Welt. Er schreibt für diverse Magazine Fachartikel und hält regelmäßig Vorträge auf Fachkonferenzen wie der MobileTech Con. Samuel Mellert ist seit 2012 bei der arconsis IT-Solutions GmbH im Bereich Mobile Software Development in der ios-entwicklung tätig. Davor hat er bereits fünf Jahre Berufserfahrung in der Erstellung verteilter skalierbarer Web Services bei einem großen deutschen Internetunternehmen gesammelt. Samuel ist unter anderem als Coach für ios-trainings und -Workshops tätig. Links & Literatur [1] invasivecode-blog: [2] Apple-Core-Bluetooth-Referenz: [3] WWDC 2012 Video Core Bluetooth 101 Session 703 [4] WWDC 2012 Video Advanced Core Bluetooth Session 705 [5] WWDC 2013 Video Core Bluetooth Session 703 [6] WWDC 2013 Video Nearby Networking with Multipeer Connectivity Session 708 [7] WWDC 2013 Video What s New in Core Location Session 307 [8] Beispielcode des Artikels: Listing 11: BizCardClient.m: Empfang von Daten an der Central // This callback lets us know more data has arrived via notification // on the characteristic - (void)peripheral:(cbperipheral *)peripheral didupdatevaluefor Characteristic:(CBCharacteristic *)characteristic error:(nserror *)error if (error) NSLog(@"Error discovering characteristics: %@", [error localizeddescription]); [self cleanup]; NSString *stringfromdata = [[NSString alloc] initwithdata:characteristic. value encoding:nsutf8stringencoding]; // Have we got everything we need? if ([stringfromdata isequaltostring:@"eom"]) // We have, so show the data NSString *receiveddata = [[NSString alloc] initwithdata:self.data encoding:nsutf8stringencoding]; NSLog(@"Received Data so far: %@", receiveddata); // Cancel our subscription to the characteristic [peripheral setnotifyvalue:no forcharacteristic:characteristic]; // and disconnect from the peripehral [self.centralmanager cancelperipheralconnection:peripheral]; dispatch_async(dispatch_get_main_queue(), ^ UIAlertView *alert = [[UIAlertView alloc] initwithtitle:@"received" message:@"data arrived" delegate:nil cancelbuttontitle:@"ok" otherbuttontitles:nil]; [alert show]; ); // Otherwise, just add the data on to what we already have [self.data appenddata:characteristic.value]; // Log it NSLog(@"Received: %@", stringfromdata); // The peripheral letting us know whether our subscribe/unsubscribe // happened or not - (void)peripheral:(cbperipheral *)peripheral didupdatenotificationstatefor Characteristic:(CBCharacteristic *)characteristic error:(nserror *)error if (error) NSLog(@"Error changing notification state: %@", error.localizeddescription); // Exit if it's not the transfer characteristic if (![characteristic.uuid isequal:[cbuuid UUIDWithString:kCardCharacteristicUUID]]) // Notification has started if (characteristic.isnotifying) NSLog(@"Notification began on %@", characteristic); // Notification has stopped else // so disconnect from the peripheral NSLog(@"Notification stopped on %@. Disconnecting", characteristic); [self.centralmanager cancelperipheralconnection:peripheral]; Mobile Technology
Tammo Freese Freiberuflicher Softwareentwickler. CoreBluetooth ios kommunikativ
Tammo Freese Freiberuflicher Softwareentwickler CoreBluetooth ios kommunikativ CoreBluetooth: ios kommunikativ MobileTechCon 2013 Spring Tammo Freese, FlockOfBirds UG @tammofreese / @FlockOfBirds Was ist
MehrVersion smarter mobile(zu finden unter Einstellungen, Siehe Bild) : Gerät/Typ(z.B. Panasonic Toughbook, Ipad Air, Handy Samsung S1):
Supportanfrage ESN Bitte füllen Sie zu jeder Supportanfrage diese Vorlage aus. Sie helfen uns damit, Ihre Anfrage kompetent und schnell beantworten zu können. Verwenden Sie für jedes einzelne Thema jeweils
MehrErstellen einer E-Mail in OWA (Outlook Web App)
Erstellen einer E-Mail in OWA (Outlook Web App) Partner: 2/12 Versionshistorie: Datum Version Name Status 13.09.2011 1.1 J. Bodeit Punkte 7 hinzugefügt, alle Mailempfänger unkenntlich gemacht 09.09.2011
MehrBluetooth Low Energy Demo mit dem Apple iphone 4s
Bluetooth Low Energy Demo mit dem Apple iphone 4s Die hier dokumentierte Demo zeigt die einfache Übertragung von ASCII Zeichen zwischen einem iphone 4s (iphone 5, ipad 3, ipad 4, ipad mini) und einem connectblue
MehrAbamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER
Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER Abamsoft Finos in Verbindung mit der Webshopanbindung wurde speziell auf die Shop-Software shop to date von DATA BECKER abgestimmt. Mit
MehrHow to install freesshd
Enthaltene Funktionen - Installation - Benutzer anlegen - Verbindung testen How to install freesshd 1. Installation von freesshd - Falls noch nicht vorhanden, können Sie das Freeware Programm unter folgendem
MehrDaten fu r Navigator Mobile (ipad)
[Kommentare] Inhalte Navigator Mobile für das ipad... 3 Programme und Dateien... 4 Folgende Installationen sind erforderlich:... 4 Es gibt verschiedene Dateiformate.... 4 Die Installationen... 5 Installation
MehrROFIN App Benutzerhandbuch. Version 1.0
ROFIN App Benutzerhandbuch Version 1.0 Inhaltsverzeichnis 1. Beschreibung 2. Passwort und Einstellungen 3. Support Tab 4. Vertriebs Tab 5. Web Tab 6. Häufig gestellte Fragen BESCHREIBUNG Die ROFIN App
MehrMobile Anwendungen Google Cloud Messaging
Mobile Anwendungen Google Cloud Messaging 1. Allgemeines zu Google Cloud Messaging (GCM): - 60% der Top 100 Apps nutzen Google Cloud Messagging - 200.000 Messages pro Sekunde = 17 Milliarden Messages pro
MehrLieber SPAMRobin -Kunde!
Lieber SPAMRobin -Kunde! Wir freuen uns, dass Sie sich für SPAMRobin entschieden haben. Mit diesem Leitfaden möchten wir Ihnen die Kontoeinrichtung erleichtern und die Funktionen näher bringen. Bitte führen
MehrKonzept zur Push Notification/GCM für das LP System (vormals BDS System)
Konzept zur Push Notification/GCM für das LP System (vormals BDS System) Wir Push Autor: Michael Fritzsch Version: 1.0 Stand: 04. Februar 2015 Inhalt 1. Was ist eine Push Notification? 2. Wofür steht GCM?
MehrDer Kalender im ipad
Der Kalender im ipad Wir haben im ipad, dem ipod Touch und dem iphone, sowie auf dem PC in der Cloud einen Kalender. Die App ist voreingestellt, man braucht sie nicht laden. So macht es das ipad leicht,
MehrGrundfunktionen und Bedienung
Kapitel 13 Mit der App Health ist eine neue Anwendung in ios 8 enthalten, die von vorangegangenen Betriebssystemen bislang nicht geboten wurde. Health fungiert dabei als Aggregator für die Daten von Fitness-
MehrDatenaustausch@IC RL
Datenaustausch@IC RL SAP cfolders Erste Schritte Erstes Login: Ihre Initial-Zugangsdaten zu SAP cfolders finden Sie im ProjektPortal nach Klick auf den Reiter Projekt SAP cfolders, im Channel SAP cfolders
MehrTelefonieren mit App's"! iphone mit Bria Informationen zur Nutzung von TeScript
Telefonieren mit App's"! iphone mit Bria Informationen zur Nutzung von TeScript Der Begriff App ist die Kurzform für Applikation und bedeutet Anwendungssoftware. Mit dem Herunterladen von App s kann man
Mehr1. Loggen Sie sich mit Ihrem Benutzernamen in den Hosting-Manager (Confixx) auf Ihrer entsprechenden AREA ein.
Page 1 of 7 Mailing Listen verwenden Vorwort Mailing-Listen (Mailing Lists) dienen der E-Mail Konversation zwischen mehreren Mitgliedern einer Liste. Man kann sich das wie ein Online-Forum vorstellen,
MehrBedienungsanleitung für den SecureCourier
Bedienungsanleitung für den SecureCourier Wo kann ich den SecureCourier nach der Installation auf meinem Computer finden? Den SecureCourier finden Sie dort, wo Sie mit Dateien umgehen und arbeiten. Bei
Mehriphone- und ipad-praxis: Kalender optimal synchronisieren
42 iphone- und ipad-praxis: Kalender optimal synchronisieren Die Synchronisierung von ios mit anderen Kalendern ist eine elementare Funktion. Die Standard-App bildet eine gute Basis, für eine optimale
MehrGEZIELT MEHR SICHERHEIT MIT 4I ACCESS SERVER & 4I CONNECT CLIENT
Seite 1/7 GEZIELT MEHR SICHERHEIT MIT 4I ACCESS SERVER & 4I CONNECT CLIENT ZENTRAL LOKALE MANAGEMENT-PLATTFORM FÜR EINE W ELTWEIT SICHERE INDUSTRIELLE KOMMUNIKATION. Seite 2/7 Auf den folgenden Seiten
MehrAnleitung zur Installation des EPSON TM-m30 WLAN Moduls
Anleitung zur Installation des EPSON TM-m30 WLAN Moduls Dieses Dokument leitet Sie durch den Installationsprozess des WLAN Moduls für den EPSON TMm30 (nachstehend Bondrucker ). Es wird davon ausgegangen,
MehrNie wieder eine Sitzung verpassen unser neuer Service für Sie!
Nie wieder eine Sitzung verpassen unser neuer Service für Sie! Bisher war es nicht immer leicht, den Überblick über die Ammersbeker Sitzungstermine zu behalten. Entweder man hat die Bekanntmachung übersehen
MehrInformationen als Leistung
PUSH-NOTIFICATIONS 2 Informationen als Leistung Immer mehr Anbieter von Apps möchten mehr als nur eine schöne Oberfläche, sondern den Usern auch wirklichen Nutzen bieten. Der Nutzen besteht darin, aktuelle
Mehr5.2 Neue Projekte erstellen
5.2 Neue Projekte erstellen Das Bearbeiten von bestehenden Projekten und Objekten ist ja nicht schlecht wie aber können Sie neue Objekte hinzufügen oder gar völlig neue Projekte erstellen? Die Antwort
MehrBeschreibung E-Mail Regeln z.b. Abwesenheitsmeldung und Weiterleitung
Outlook Weiterleitungen & Abwesenheitsmeldungen Seite 1 von 6 Beschreibung E-Mail Regeln z.b. Abwesenheitsmeldung und Weiterleitung Erstellt: Quelle: 3.12.09/MM \\rsiag-s3aad\install\vnc\email Weiterleitung
MehrUM ALLE DATEN ZU KOPIEREN. ZUNÄCHST die Daten des alten Telefons auf einen Computer kopieren
IPHONE UM ALLE DATEN des alten Telefons auf einen Computer Software von welcomehome.to/nokia auf Ihrem PC oder Mac. verbinden Sie Ihr altes Telefon über 3. Wenn Sie Outlook nutzen, öffnen Sie itunes, um
MehrKurzanleitung für das Bezahlen mit dem Kartenlesegerät von VASCO girocard im Internet
Kurzanleitung für das Bezahlen mit dem Kartenlesegerät von VASCO girocard im Internet Herzlich willkommen Mit Ihrer girocard und Ihrem persönlichen Kartenlesegerät bezahlen Sie jetzt auch im Internet so
MehrAcceptor-Connector. Acceptor-Connector
Acceptor-Connector Das Acceptor-Connector Pattern trennt den Verbindungsaufbau zwischen zwei Peer-Services und der Verarbeitung, welche bei bestehender Verbindung durchgeführt wird. Kontext Ein Netzwerksystem
MehrKostenstellen verwalten. Tipps & Tricks
Tipps & Tricks INHALT SEITE 1.1 Kostenstellen erstellen 3 13 1.3 Zugriffsberechtigungen überprüfen 30 2 1.1 Kostenstellen erstellen Mein Profil 3 1.1 Kostenstellen erstellen Kostenstelle(n) verwalten 4
MehrNach Ihrer erstmaligen Anmeldung sollten Sie Ihr Passwort ändern. Dazu klicken Sie bitte auf Ihren Namen.
1 Passwort ändern Nach Ihrer erstmaligen Anmeldung sollten Sie Ihr Passwort ändern Dazu klicken Sie bitte auf Ihren Namen Abb 1-1 Erstmaliger Anmeldung Danach erscheint ein PopUp indem Sie Ihr Passwort
MehrSEMINAR Modifikation für die Nutzung des Community Builders
20.04.2010 SEMINAR Modifikation für die Nutzung des Community Builders Step by Step Anleitung ecktion SEMINAR Modifikation für die Nutzung des Community Builders Step by Step Anleitung Bevor Sie loslegen
MehrGeoPilot (Android) die App
GeoPilot (Android) die App Mit der neuen Rademacher GeoPilot App machen Sie Ihr Android Smartphone zum Sensor und steuern beliebige Szenen über den HomePilot. Die App beinhaltet zwei Funktionen, zum einen
MehrGuide DynDNS und Portforwarding
Guide DynDNS und Portforwarding Allgemein Um Geräte im lokalen Netzwerk von überall aus über das Internet erreichen zu können, kommt man um die Themen Dynamik DNS (kurz DynDNS) und Portweiterleitung(auch
MehrAlbert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen
Open Source professionell einsetzen 1 Mein Background Ich bin überzeugt von Open Source. Ich verwende fast nur Open Source privat und beruflich. Ich arbeite seit mehr als 10 Jahren mit Linux und Open Source.
MehrProfessionelle Seminare im Bereich MS-Office
Der Name BEREICH.VERSCHIEBEN() ist etwas unglücklich gewählt. Man kann mit der Funktion Bereiche zwar verschieben, man kann Bereiche aber auch verkleinern oder vergrößern. Besser wäre es, die Funktion
MehrMailUtilities: Remote Deployment - Einführung
MailUtilities: Remote Deployment - Einführung Zielsetzung Die Aufgabe von Remote Deployment adressiert zwei Szenarien: 1. Konfiguration der MailUtilities von einer Workstation aus, damit man das Control
MehrANYWHERE Zugriff von externen Arbeitsplätzen
ANYWHERE Zugriff von externen Arbeitsplätzen Inhaltsverzeichnis 1 Leistungsbeschreibung... 3 2 Integration Agenda ANYWHERE... 4 3 Highlights... 5 3.1 Sofort einsatzbereit ohne Installationsaufwand... 5
MehrKalenderfunktion in Open-Xchange richtig nutzen (PC-Support)
funktion in Open-Xchange richtig nutzen (PC-Support) 1.) Bei Open-Xchange mit der RUMMS-Kennung einloggen unter http://ox.uni-mannheim.de 2.) Links oben im Menü den aufrufen: 3.) In der Mitte oben bei
Mehrmysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank
mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank In den ersten beiden Abschnitten (rbanken1.pdf und rbanken2.pdf) haben wir uns mit am Ende mysql beschäftigt und kennengelernt, wie man
Mehr2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE
2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE 2.1 Die Einrichtung der Benutzeroberfläche Das Einrichten einer Android-Eclipse-Entwicklungsumgebung zur Android-Entwicklung ist grundsätzlich nicht
MehrSoftwareupdate-Anleitung // AC Porty L Netzteileinschub
1 Softwareupdate-Anleitung // AC Porty L Netzteileinschub Softwareupdate-Anleitung // AC Porty L Netzteileinschub HENSEL-VISIT GmbH & Co. KG Robert-Bunsen-Str. 3 D-97076 Würzburg-Lengfeld GERMANY Tel./Phone:
MehrBenutzerhandbuch. Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer.
Benutzerhandbuch Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer. 1 Startseite Wenn Sie die Anwendung starten, können Sie zwischen zwei Möglichkeiten wählen 1) Sie können eine Datei für
MehrÜbung: Verwendung von Java-Threads
Übung: Verwendung von Java-Threads Ziel der Übung: Diese Übung dient dazu, den Umgang mit Threads in der Programmiersprache Java kennenzulernen. Ein einfaches Java-Programm, das Threads nutzt, soll zum
MehrWeb Sockets mit HTML5. Quelle: www.html5rocks.com/de
Web Sockets mit HTML5 Quelle: www.html5rocks.com/de Intensive Client-Server-Kommunikation: Beispiele Online-Spiele mit mehreren Mitspielern Chat-Anwendungen Live-Sport-Ticker Echtzeit-Aktualisierungen
MehrOnline Newsletter III
Online Newsletter III Hallo zusammen! Aus aktuellem Anlass wurde ein neuer Newsletter fällig. Die wichtigste Neuerung betrifft unseren Webshop mit dem Namen ehbshop! Am Montag 17.10.11 wurde die Testphase
MehrAK Medientechnologien 05 Delegation
AK Medientechnologien 05 Delegation TableViews, XML Parser, Application Josef Kolbitsch josef.kolbitsch@tugraz.at http://businesssolutions.tugraz.at/ Übersicht Allgemeines zum Delegation Pattern Theoretische
MehrMit jedem Client, der das Exchange Protokoll beherrscht (z.b. Mozilla Thunderbird mit Plug- In ExQulla, Apple Mail, Evolution,...)
Das tgm steigt von Novell Group Wise auf Microsoft Exchange um. Sie können auf ihre neue Exchange Mailbox wie folgt zugreifen: Mit Microsoft Outlook Web Access (https://owa.tgm.ac.at) Mit Microsoft Outlook
Mehr10.6 Programmier-Exits für Workitems
10.6 Programmier-Exits für Workitems 279 10.6 Programmier-Exits für Workitems 10.6.1 Das Interface IF_SWF_IFS_WORKITEM_EXIT Am Schritt einer Workflow-Definition im Reiter»Programmier-Exits«können verschiedene
MehrDNS-325/-320 und FXP
DNS-325/-320 und FXP Das FXP-Protokoll (File exchange Protocol) erlaubt dem DNS-320/-325 Daten über FTP direkt zu einem anderen FTP-Server zu übertragen. Dabei muss der Datenstrom keinen Client passieren.
Mehriphone Push bei den VZ Netzwerken
iphone Push bei den VZ Netzwerken Max Horváth, Steffen Irrgang 1 Vorstellung der Speaker 2 Was sind Push Notifications?? 3 Was sind Push Notifications? Eine Möglichkeit, eine Nachricht an individuelle
MehrTipps und Tricks zu Netop Vision und Vision Pro
Tipps und Tricks zu Netop Vision und Vision Pro Zulassen, filtern, sperren: Das Internet im Unterricht gezielt einsetzen Das Internet ist ein dynamisches Gebilde, das viel Potenzial für den Unterricht
Mehr:: Anleitung Hosting Server 1cloud.ch ::
:: one source ag :: Technopark Luzern :: D4 Platz 4 :: CH-6039 Root-Längenbold LU :: :: Fon +41 41 451 01 11 :: Fax +41 41 451 01 09 :: info@one-source.ch :: www.one-source.ch :: :: Anleitung Hosting Server
MehrSo nutzen Sie die HiDrive App mit Ihrem Android Smartphone
So nutzen Sie die HiDrive App mit Ihrem Android Smartphone Die STRATO HiDrive App ermöglicht Ihnen die bequeme Nutzung Ihres Kontos mit Ihrem Android Smartphone. Betrachten Sie direkt Ihre Inhalte und
MehrInstallation und Sicherung von AdmiCash mit airbackup
Installation und Sicherung von AdmiCash mit airbackup airbackup airbackup ist eine komfortable, externe Datensicherungslösung, welche verschiedene Funktionen zur Sicherung, sowie im Falle eines Datenverlustes,
MehrSecond Steps in eport 2.0 So ordern Sie Credits und Berichte
Second Steps in eport 2.0 So ordern Sie Credits und Berichte Schritt 1: Credits kaufen, um Zugangscodes generieren zu können Wählen Sie Credits verwalten und klicken Sie auf Credits kaufen. Geben Sie nun
MehrZählen von Objekten einer bestimmten Klasse
Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --
MehrKurzanleitung zu. von Daniel Jettka 18.11.2008
Kurzanleitung zu Tigris.org Open Source Software Engineering Tools von Daniel Jettka 18.11.2008 Inhaltsverzeichnis 1.Einführung...1 2.Das Projektarchivs...3 2.1.Anlegen des Projektarchivs...3 2.2.Organisation
MehrKURZANLEITUNG CLOUD OBJECT STORAGE
KURZANLEITUNG CLOUD OBJECT STORAGE Version 1.12 01.07.2014 SEITE _ 2 INHALTSVERZEICHNIS 1. Einleitung... Seite 03 2. Anmelden am Cloud&Heat Dashboard... Seite 04 3. Anlegen eines Containers... Seite 05
MehrEJB Beispiel. JEE Vorlesung 10. Ralf Gitzel ralf_gitzel@hotmail.de
EJB Beispiel JEE Vorlesung 10 Ralf Gitzel ralf_gitzel@hotmail.de 1 Stundenkonzept Gemeinsame Übung Stoff der letzten Stunde wird gemeinsam in einem Beispiel umgesetzt Details werden nochmals erklärt bzw.
MehrFTP-Leitfaden RZ. Benutzerleitfaden
FTP-Leitfaden RZ Benutzerleitfaden Version 1.4 Stand 08.03.2012 Inhaltsverzeichnis 1 Einleitung... 3 1.1 Zeitaufwand... 3 2 Beschaffung der Software... 3 3 Installation... 3 4 Auswahl des Verbindungstyps...
Mehrzwanzignull8 DIE MODULARE VERTRIEBS SOFTWARE im Einsatz für die Sto SE & Co KGaA info@1a-p.com www.1a-p.com +49 (0) 7728 645 0
DIE MODULARE VERTRIEBS SOFTWARE im Einsatz für die Sto SE & Co KGaA info@1a-p.com www.1a-p.com +49 (0) 7728 645 0 ZWANZIGNULL8 AM PULS DER ZEIT Die Präsentationssoftware zwanzignull8 erfreut sich zunehmender
MehrAnleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung
Anleitung zur Daten zur Datensicherung und Datenrücksicherung Datensicherung Es gibt drei Möglichkeiten der Datensicherung. Zwei davon sind in Ges eingebaut, die dritte ist eine manuelle Möglichkeit. In
MehrAutorisierung von ArcGIS 10.3 for Server ohne Internetverbindung
Autorisierung von ArcGIS 10.3 for Server ohne Internetverbindung (Februar 2015) Copyright 2015 Esri Deutschland GmbH Inhalt 1 Einleitung... 3 2 Voraussetzungen... 3 3 Aktualisierungsprozess... 3 4 Überprüfung
MehrVodafone Conferencing Meeting erstellen
Vodafone User Guide Vodafone Conferencing Meeting erstellen Ihre Schritt-für-Schritt Anleitung für das Erstellen von Meetings Kurzübersicht Sofort verfügbare Telefon- und Webkonferenzen mit Vodafone Der
Mehriphone app - Anwesenheit
iphone app - Anwesenheit Anwesenheit - iphone App Diese Paxton-App ist im Apple App Store erhältlich. Die App läuft auf allen iphones mit ios 5.1 oder höher und enthält hochauflösende Bilder für Geräte
MehrAnwendungshinweis Nr. 12. Wie konfiguriere ich redundante Serververbindungen
Anwendungshinweis Nr. 12 Produkt: Schlüsselworte: Problem: Softing OPC Easy Connect OPC Server, Redundanz Wie konfiguriere ich redundante Lösung: Ausgangssituation: Eine OPC Client-Anwendung ist mit mehreren
MehrMicrosoft Update Windows Update
Microsoft bietet mehrere Möglichkeit, Updates durchzuführen, dies reicht von vollkommen automatisch bis zu gar nicht. Auf Rechnern unserer Kunden stellen wir seit September 2006 grundsätzlich die Option
MehrInhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER
AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER Inhalt 1 Einleitung... 1 2 Einrichtung der Aufgabe für die automatische Sicherung... 2 2.1 Die Aufgabenplanung... 2 2.2 Der erste Testlauf... 9 3 Problembehebung...
MehrWas meinen die Leute eigentlich mit: Grexit?
Was meinen die Leute eigentlich mit: Grexit? Grexit sind eigentlich 2 Wörter. 1. Griechenland 2. Exit Exit ist ein englisches Wort. Es bedeutet: Ausgang. Aber was haben diese 2 Sachen mit-einander zu tun?
Mehrtentoinfinity Apps 1.0 EINFÜHRUNG
tentoinfinity Apps Una Hilfe Inhalt Copyright 2013-2015 von tentoinfinity Apps. Alle Rechte vorbehalten. Inhalt der online-hilfe wurde zuletzt aktualisiert am August 6, 2015. Zusätzlicher Support Ressourcen
MehrCar-Net über WLAN Aufbau einer Internet-Verbindung über WLAN zur Nutzung von Car-Net
Aufbau einer Internet-Verbindung über WLAN zur Nutzung von Car-Net Liebe Fahrerin, lieber Fahrer, Hier erfahren Sie, wie und unter welchen Voraussetzungen eine WLAN-InternetVerbindung mit Ihrem Infotainmentsystem
MehrTeilnahme am Apple ios Developer Program
Teilnahme am Apple ios Developer Program D-U-N-S-Nummer Für die Anmeldung als Firma brauchen Sie zunächst eine so genannte D-U-N-S-Nummer. Mehr Informationen zu dieser Nummer finden Sie unter http://de.wikipedia.org/wiki/d-u-n-s.
MehrLizenzen auschecken. Was ist zu tun?
Use case Lizenzen auschecken Ihr Unternehmen hat eine Netzwerk-Commuterlizenz mit beispielsweise 4 Lizenzen. Am Freitag wollen Sie Ihren Laptop mit nach Hause nehmen, um dort am Wochenende weiter zu arbeiten.
MehrAutorisierung von ArcGIS 10.3 for Server mit Internetverbindung
Autorisierung von ArcGIS 10.3 for Server mit Internetverbindung (Februar 2015) Copyright 2015 Esri Deutschland GmbH Inhalt 1 Einleitung... 3 2 Voraussetzungen... 3 3 Aktualisierungsprozess... 3 4 Überprüfung
MehrAdami CRM - Outlook Replikation User Dokumentation
Adami CRM - Outlook Replikation User Dokumentation Die neue Eigenschaft der Adami CRM Applikation macht den Information Austausch mit Microsoft Outlook auf vier Ebenen möglich: Kontakte, Aufgaben, Termine
MehrAlle gehören dazu. Vorwort
Alle gehören dazu Alle sollen zusammen Sport machen können. In diesem Text steht: Wie wir dafür sorgen wollen. Wir sind: Der Deutsche Olympische Sport-Bund und die Deutsche Sport-Jugend. Zu uns gehören
Mehr8. Bintec Router Redundancy Protocol (BRRP) 8.1 Einleitung
8. Bintec Router Redundancy Protocol (BRRP) 8.1 Einleitung Im Folgenden wird die Konfiguration von BRRP gezeigt. Beide Router sind jeweils über Ihr Ethernet 1 Interface am LAN angeschlossen. Das Ethernet
MehrDie Wasser App. www.wasserapp.com
Die Wasser App Die Wasser App ist ein innovatives Service für Ihre Bürger, welches Ihnen die hohen Kosten für die Wasserzählerstands-Erfassung um bis zu 70 % 1 reduzieren kann. Der Weg für Ihre Gemeinde
MehrUrlaubsregel in David
Urlaubsregel in David Inhaltsverzeichnis KlickDown Beitrag von Tobit...3 Präambel...3 Benachrichtigung externer Absender...3 Erstellen oder Anpassen des Anworttextes...3 Erstellen oder Anpassen der Auto-Reply-Regel...5
MehrAXIGEN Mail Server. E-Mails per Smarthost versenden E-Mails per Pop3 empfangen. Produkt Version: 6.1.1 Dokument Version: 1.2
AXIGEN Mail Server E-Mails per Smarthost versenden E-Mails per Pop3 empfangen Produkt Version: 6.1.1 Dokument Version: 1.2 Letztes Update: 23.September 2008 Kapitel 1: Instruktionen Willkommen Was zeigt
MehrTess TeSign nutzen mit App's"! iphone und Bria Informationen zur Nutzung
Tess TeSign nutzen mit App's"! iphone und Bria Informationen zur Nutzung Der Begriff App ist die Kurzform für Applikation und bedeutet Anwendungssoftware. Mit dem Herunterladen von App s kann man sich
Mehrhttps://portal.microsoftonline.com
Sie haben nun Office über Office365 bezogen. Ihr Account wird in Kürze in dem Office365 Portal angelegt. Anschließend können Sie, wie unten beschrieben, die Software beziehen. Congratulations, you have
MehrUpdatebeschreibung JAVA Version 3.6 und Internet Version 1.2
Updatebeschreibung JAVA Version 3.6 und Internet Version 1.2 Hier finden Sie die Beschreibung der letzten Änderungen und Aktualisierungen. Bei Fragen und Anregungen steht das EDI-Real-Team unter +43 732
MehrEasyWk DAS Schwimmwettkampfprogramm
EasyWk DAS Schwimmwettkampfprogramm Arbeiten mit OMEGA ARES 21 EasyWk - DAS Schwimmwettkampfprogramm 1 Einleitung Diese Präsentation dient zur Darstellung der Zusammenarbeit zwischen EasyWk und der Zeitmessanlage
MehrAn integrated total solution for automatic job scheduling without user interaction
An integrated total solution for automatic job scheduling without user interaction Multifunktional Der Job-Scheduler ist ein multifunktionaler Taskplaner welcher die Steuerzentrale zur regelmässigen Ausführung
MehrRT Request Tracker. Benutzerhandbuch V2.0. Inhalte
RT Request Tracker V2.0 Inhalte 1 Was ist der RT Request Tracker und wo finde ich ihn?...2 2 Was möchten wir damit erreichen?...2 3 Wie erstelle ich ein Ticket?...2 4 Wie wird das Ticket abgearbeitet?...4
MehrInhaltsverzeichnis 1) Datenfeed abonnieren
Inhaltsverzeichnis 1) Datenfeed abonnieren...1 2) Konto/Datenfeed-Verbindung in FXCM einstellen...3 3) Konto/Datenfeed-Verbindung in AgenaTrader einrichten...5 4) Instrument-Definitionen...8 5) Instrument-Mappings...9
MehrInformationen zum neuen Studmail häufige Fragen
1 Stand: 15.01.2013 Informationen zum neuen Studmail häufige Fragen (Dokument wird bei Bedarf laufend erweitert) Problem: Einloggen funktioniert, aber der Browser lädt dann ewig und zeigt nichts an Lösung:
MehrWas ist Sozial-Raum-Orientierung?
Was ist Sozial-Raum-Orientierung? Dr. Wolfgang Hinte Universität Duisburg-Essen Institut für Stadt-Entwicklung und Sozial-Raum-Orientierte Arbeit Das ist eine Zusammen-Fassung des Vortrages: Sozialräume
MehrEinführung in die Programmierung
Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In
MehrKonfiguration VLAN's. Konfiguration VLAN's IACBOX.COM. Version 2.0.1 Deutsch 01.07.2014
Konfiguration VLAN's Version 2.0.1 Deutsch 01.07.2014 In diesem HOWTO wird die Konfiguration der VLAN's für das Surf-LAN der IAC-BOX beschrieben. Konfiguration VLAN's TITEL Inhaltsverzeichnis Inhaltsverzeichnis...
MehrInfrastruktur: Vertrauen herstellen, Zertifikate finden
TeleTrusT Bundesverband IT-Sicherheit e.v. Infrastruktur: Vertrauen herstellen, Zertifikate finden Allgemeines zur TeleTrusT EBCA Seit 2001 Zusammenschluss einzelner, gleichberechtigter n zu -Verbund einfacher,
MehrPsi unter Mac OS X benutzen
Psi unter Mac OS X benutzen Andreas Stöcker Juni 2008 Installation Auf der Webseite http://psi-im.org/ kann das Programm für Mac OS X heruntergeladen werden. Um das Programm zu erhalten, muss die heruntergeladene
MehrWindows Server 2012 R2 Essentials & Hyper-V
erklärt: Windows Server 2012 R2 Essentials & Hyper-V Windows Server 2012 R2 Essentials bietet gegenüber der Vorgängerversion die Möglichkeit, mit den Boardmitteln den Windows Server 2012 R2 Essentials
MehrIVE-W530BT. Bluetooth Software Update Manual mit Android Telefonen 09.03.2015
Bluetooth Software Update Manual mit Android Telefonen IVE-W530BT 1 Einleitung In der Anleitung wird die Vorgehensweise zum aktualisieren der Radio Bluetooth Firmware beschrieben. Bitte beachten Sie alle
MehrCar-Net über WLAN Aufbau einer Internet-Verbindung über WLAN zur Nutzung von Car-Net
Aufbau einer Internet-Verbindung über WLAN zur Nutzung von Car-Net Liebe Fahrerin, lieber Fahrer, Hier erfahren Sie, wie und unter welchen Voraussetzungen eine WLAN-InternetVerbindung mit Ihrem Infotainmentsystem
MehrTechnical Note 32. 2 ewon über DSL & VPN mit einander verbinden
Technical Note 32 2 ewon über DSL & VPN mit einander verbinden TN_032_2_eWON_über_VPN_verbinden_DSL Angaben ohne Gewähr Irrtümer und Änderungen vorbehalten. 1 1 Inhaltsverzeichnis 1 Inhaltsverzeichnis...
MehrSuche schlecht beschriftete Bilder mit Eigenen Abfragen
Suche schlecht beschriftete Bilder mit Eigenen Abfragen Ist die Bilderdatenbank über einen längeren Zeitraum in Benutzung, so steigt die Wahrscheinlichkeit für schlecht beschriftete Bilder 1. Insbesondere
MehrEinrichtung des Cisco VPN Clients (IPSEC) in Windows7
Einrichtung des Cisco VPN Clients (IPSEC) in Windows7 Diese Verbindung muss einmalig eingerichtet werden und wird benötigt, um den Zugriff vom privaten Rechner oder der Workstation im Home Office über
Mehr1. Einführung. 2. Archivierung alter Datensätze
1. Einführung Mit wachsender Datenmenge und je nach Konfiguration, kann orgamax mit der Zeit langsamer werden. Es gibt aber diverse Möglichkeiten, die Software wieder so zu beschleunigen, als würden Sie
Mehr