{"id":501,"date":"2017-07-09T22:32:58","date_gmt":"2017-07-09T20:32:58","guid":{"rendered":"https:\/\/www.pingu-mobil.de\/iot\/?p=501"},"modified":"2021-05-14T10:07:47","modified_gmt":"2021-05-14T08:07:47","slug":"dingdong-9-blockeintrag-die-phonegap-applikation","status":"publish","type":"post","link":"https:\/\/www.iot-embedded.de\/iot-2017\/tuersteuerung\/dingdong-9-blockeintrag-die-phonegap-applikation\/","title":{"rendered":"DingDong 9. Blockeintrag: Die PhoneGap Applikation"},"content":{"rendered":"<p>Zu guter letzt kommt in diesem Artikel noch die Applikation beschrieben, welche mit unserem RapsberryPi \u00fcber das MQTT-Protokoll kommuniziert.<\/p>\n<p>Hierf\u00fcr installieren wir Phonegap \u00fcber die Herstellerwebseite: http:\/\/docs.phonegap.com\/getting-started\/1-install-phonegap\/cli\/<\/p>\n<p>\u00dcber NPM l\u00e4sst dies sich \u00fcber folgenden Befehl bewerkstelligen:<\/p>\n<p class=\"highlight\"><code class=\"hljs sh\">$ npm install -g phonegap@latest<\/code><\/p>\n<p>F\u00fcr unsere Applikation nutzen wir das Phonegap-Barcode-Plugin, welches nach der Erstellung einer Applikation \u00fcber die PhoneGap GUI hinzugef\u00fcgt werden kann.<br \/>\nWir m\u00fcssen lediglich in der Kommandozeile in das Projektverzeichnis wechseln und dann folgenden Befehl ausf\u00fchren:<\/p>\n<p><code>$ phonegap plugin add phonegap-plugin-barcodescanner<\/code><\/p>\n<p>Wurde dieser Teil erledigt, k\u00f6nnen wir mit der Entwicklung beginnen. Im ersten Schritt wird unsere Hauptseite erstellt. Hierf\u00fcr modifizieren wir die index.html und f\u00fcgen den Body-Tag neue Elemente hinzu.<br \/>\nDas Ergebnis sieht folgenderma\u00dfen aus:<br \/>\n<a href=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/Home-1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-507\" src=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/Home-1.png\" alt=\"\" width=\"331\" height=\"438\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/Home-1.png 526w, https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/Home-1-226x300.png 226w\" sizes=\"(max-width: 331px) 100vw, 331px\" \/><\/a><\/p>\n<p>Es werden unter dem Header System alle Elemte angezeigt, die in den System-Einstellungen hinzugef\u00fcgt wurden. Da dies im Moment noch nicht gemacht wurde, gibt es auch noch keinen Eintrag. Auf der Seite System-Einstellungen kann also ein neuer Raspberry-Pi als T\u00fcrsteuerung hinzugef\u00fcgt werden.<\/p>\n<p><a href=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/Einstellungen.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-508\" src=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/Einstellungen.png\" alt=\"\" width=\"326\" height=\"432\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/Einstellungen.png 526w, https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/Einstellungen-226x300.png 226w\" sizes=\"(max-width: 326px) 100vw, 326px\" \/><\/a><\/p>\n<p>Normalerweise werden in dieser Liste alle Elemte angezeigt, welche durch einen QR-Code hinzugef\u00fcgt wurden. Daf\u00fcr benutzen wir das PhoneGap-Barcode-Plugin. Gescannt wird ein QR-Code der auf der T\u00fcrsteuerung angebracht werden soll und die MAC-Adresse des RaspberryPi enth\u00e4lt. Nachdem ein Eintrag hinzugef\u00fcgt wurde, kann er durch den Button auf der rechten Seite entfernt werden:<\/p>\n<p><a href=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/NachScan.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-510\" src=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/NachScan.png\" alt=\"\" width=\"321\" height=\"425\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/NachScan.png 526w, https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/NachScan-226x300.png 226w\" sizes=\"(max-width: 321px) 100vw, 321px\" \/><\/a><\/p>\n<p>Da wir nun einen Eintrag hinzugef\u00fcgt haben, k\u00f6nnen wir \u00fcber den Zur\u00fcck-Button auf die Hauptseite wechseln und eine T\u00fcr \u00f6ffnen.<\/p>\n<p><a href=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/NachSpeichern.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-511\" src=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/NachSpeichern.png\" alt=\"\" width=\"319\" height=\"444\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/NachSpeichern.png 547w, https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/NachSpeichern-216x300.png 216w\" sizes=\"(max-width: 319px) 100vw, 319px\" \/><\/a><\/p>\n<p>Unter der Header System wird uns nun das korrekte Ger\u00e4t angezeigt und wenn wir wollen k\u00f6nnen wir \u00fcber das Selektionsmen\u00fc andere Eintr\u00e4ge ausw\u00e4hlen.<\/p>\n<p>Durch das bet\u00e4tigen des Button Open, wird die T\u00fcr ge\u00f6ffnet. Dies wird uns durch eine Popup-Nachricht best\u00e4tigt.<\/p>\n<p><a href=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/Geoeffnet.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-512\" src=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/Geoeffnet.png\" alt=\"\" width=\"328\" height=\"434\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/Geoeffnet.png 526w, https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/Geoeffnet-226x300.png 226w\" sizes=\"(max-width: 328px) 100vw, 328px\" \/><\/a><\/p>\n<p>Wird hingegen die Klingel an der Haust\u00fcre bet\u00e4tigt und wir haben Ger\u00e4te in unserer App hinzugef\u00fcgt, dann bekommen wir auch das mit:<\/p>\n<p><a href=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/Klingeln.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-513\" src=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/Klingeln.png\" alt=\"\" width=\"325\" height=\"431\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/Klingeln.png 526w, https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/Klingeln-226x300.png 226w\" sizes=\"(max-width: 325px) 100vw, 325px\" \/><\/a><\/p>\n<p>Die komplette Kommunikation mit dem RaspberryPi wurde mittels MQTT-Protokoll gel\u00f6st. Wir kommunizieren \u00fcber einen Topic, welcher durch die MAC-Adresse des jeweiligen RaspberryPi dargestellt wird. F\u00fcr die Applikation haben wir die JavaScript-Bibliothek Paho genutzt. Diese stellt uns ein Interface f\u00fcr verschiedene Funktionen bereit. Hier ein Beispiel f\u00fcr die genutzte Verbindung mittels Benuter\/Passwort:<\/p>\n<p>var mqttClient = {<\/p>\n<p>connect: function(){<br \/>\n\/\/ Create a client instance<br \/>\nclient = new Paho.MQTT.Client(&#8218;62.75.166.253&#8216;, Number(8000), &#8222;clientId-z4g4ouhoF12sd&#8220;);<\/p>\n<p>\/\/ set callback handlers<br \/>\nclient.onConnectionLost = mqttClient.onConnectionLost;<br \/>\nclient.onMessageArrived = mqttClient.onMessageArrived;<\/p>\n<p>\/\/ connect the client<br \/>\nclient.connect({<br \/>\nonSuccess: mqttClient.onConnect,<br \/>\nuserName : &#8222;nutzer&#8220;,<br \/>\npassword : &#8222;geheim&#8220;});<br \/>\n},<\/p>\n<p>sendMessage: function(message, destination){<br \/>\nmqttMessage = new Paho.MQTT.Message(message);<br \/>\nmqttMessage.destinationName = destination;<br \/>\nclient.send(mqttMessage);<br \/>\n},<\/p>\n<p>\/\/ called when the client connects<br \/>\nonConnect: function(topic) {<br \/>\n\/\/ Once a connection has been made, make a subscription and send a message.<br \/>\nconsole.log(&#8222;onConnect&#8220;);<br \/>\nclient.subscribe(topic);<br \/>\nmessage = new Paho.MQTT.Message(&#8222;connected&#8220;);<br \/>\nmessage.destinationName = topic;<br \/>\nclient.send(message);<br \/>\n},<\/p>\n<p>\/\/ called when the client loses its connection<br \/>\nonConnectionLost: function(responseObject) {<br \/>\nif (responseObject.errorCode !== 0) {<br \/>\nconsole.log(&#8222;onConnectionLost:&#8220;+responseObject.errorMessage);<br \/>\n}<br \/>\n},<\/p>\n<p>\/\/ called when a message arrives<br \/>\nonMessageArrived: function(message) {<br \/>\nconsole.log(&#8222;onMessageArrived:&#8220;+message.payloadString);<br \/>\n\/\/alert(message.payloadString);<br \/>\nif(message.payloadString == &#8222;isOpen&#8220;){<br \/>\nalert(&#8222;T\u00fcr wurde ge\u00f6ffnet!&#8220;);<br \/>\n}<br \/>\nif(message.payloadString == &#8222;isRinged&#8220;){<br \/>\nalert(&#8222;Es wurde geklingelt!&#8220;)<br \/>\n}<br \/>\n},<br \/>\n};<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zu guter letzt kommt in diesem Artikel noch die Applikation beschrieben, welche mit unserem RapsberryPi \u00fcber das MQTT-Protokoll kommuniziert. Hierf\u00fcr installieren wir Phonegap \u00fcber die Herstellerwebseite: http:\/\/docs.phonegap.com\/getting-started\/1-install-phonegap\/cli\/ \u00dcber NPM l\u00e4sst dies sich \u00fcber folgenden Befehl bewerkstelligen: $ npm install -g<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[],"_links":{"self":[{"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts\/501"}],"collection":[{"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/comments?post=501"}],"version-history":[{"count":1,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts\/501\/revisions"}],"predecessor-version":[{"id":551,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts\/501\/revisions\/551"}],"wp:attachment":[{"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/media?parent=501"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/categories?post=501"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/tags?post=501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}