{"id":485,"date":"2017-07-09T19:21:28","date_gmt":"2017-07-09T17:21:28","guid":{"rendered":"https:\/\/www.pingu-mobil.de\/iot\/?p=485"},"modified":"2021-05-14T10:07:48","modified_gmt":"2021-05-14T08:07:48","slug":"dingdong-8-blockeintrag-finale-version-der-grundkonfiguration","status":"publish","type":"post","link":"https:\/\/www.iot-embedded.de\/iot-2017\/tuersteuerung\/dingdong-8-blockeintrag-finale-version-der-grundkonfiguration\/","title":{"rendered":"DingDong 8. Blockeintrag: Finale Version der Grundkonfiguration"},"content":{"rendered":"<p>In diesem Eintrag m\u00f6chte ich euch die Finale Version meines Aufgabenteils vorstellen. Es geht um die initiale Konfiguration des Raspberry Pis.<\/p>\n<p>Wenn der Nutzer das Ger\u00e4t auspackt, muss er es zun\u00e4chst nur an den Strom anschlie\u00dfen.<br \/>\nDanach sollte das folgende <strong>startup.sh<\/strong> Skript starten (der automatische Start funktioniert noch nicht, momentan muss es manuell gestartet werden).<\/p>\n<p><strong>startup.sh<\/strong><br \/>\n<code><br \/>\n#!\/bin\/bash<br \/>\n#<\/code><\/p>\n<p>killall php<br \/>\necho &#8222;Starte WLAN&#8220;<br \/>\nsource \/opt\/wlan-setup.sh<\/p>\n<p>#ueberpruefe ob erfolgreich mit WLAN verbunden wurde<br \/>\nwlan=$(iwconfig wlan0|grep &#8222;ESSID:off\/any&#8220;)<br \/>\nsubstring=ESSID:off\/any<\/p>\n<p>if [ &#8222;${wlan\/$substring}&#8220; = &#8222;$my_string&#8220; ] ; then<br \/>\necho &#8222;WLAN verbunden&#8220;<br \/>\n#passende index.php laden<br \/>\ncp \/srv\/www\/tuer\/index.php \/srv\/www\/index.php<br \/>\nnohup php -t \/srv\/www\/ -S 0.0.0.0:80 &amp;<br \/>\npython submqtt.py<\/p>\n<p>else<br \/>\necho &#8222;WLAN nicht verbunden&#8220;<br \/>\necho &#8222;Starte WLAN Scan&#8220;<br \/>\n#erster WLAN Scan schl\u00e4gt meistens fehl<br \/>\niwlist wlan0 scan | grep &#8218;ESSID\\|Encryption key&#8216; &gt; \/opt\/wifis<br \/>\niwlist wlan0 scan | grep &#8218;ESSID\\|Encryption key&#8216; &gt; \/opt\/wifis<br \/>\n#loesche Leerzeichen am Anfang der WLAN Datei<br \/>\nsed -i &#8217;s\/^ *\/\/&#8216; \/opt\/wifis<br \/>\n#arbeite Wifis f\u00fcr den Webserver auf<br \/>\nsed s\/&#8220;Encryption key:on&#8220;\/&#8220;<\/p>\n<p>Verschluesselt<br \/>\n&#8222;\/g \/opt\/wifis &gt; tmpwifis &amp;&amp; mv tmpwifis wifis<br \/>\nsed s\/&#8220;Encryption key:off&#8220;\/&#8220;<\/p>\n<p>Nicht verschluesselt<br \/>\n&#8222;\/g \/opt\/wifis &gt; tmpwifis &amp;&amp; mv tmpwifis wifis<br \/>\n#starte AP Modus<br \/>\nsource \/opt\/ap-setup.sh<br \/>\necho &#8222;starte Webserver&#8220;<br \/>\nsource \/opt\/wlanphp.sh<br \/>\ncp \/srv\/www\/wlan\/index.php \/srv\/www\/index.php<br \/>\nphp -t \/srv\/www -S 0.0.0.0:80<br \/>\nfi<\/p>\n<p>Das Script ist gut kommentiert und beschrieben. Hauptaufgabe ist die Steuerung aller Komponenten. Zun\u00e4chst versucht es eine Verbindung mit dem WLAN aufzubauen. Bei einem ersten Start ist jedoch noch keine WLAN-Konfiguration in der Datei <strong>wlan-config<\/strong> hinterlegt. Aus diesem Grund kann das Skript <strong>wlan-setup.sh<\/strong> keine Verbindung zum WLAN aufbauen. Das <strong>startup.sh<\/strong> Skript pr\u00fcft, ob eine WLAN-Verbindung aufgebaut werden konnte. In diesem Fall ist dies negativ. Das <strong>startup.sh<\/strong> Skript scannt danach alle verf\u00fcgbaren WLANs und schreibt diese in die Datei <strong>wlan-config<\/strong>. Anschlie\u00dfend wird ein Webserver mit der passenden Konfiguration (index.php) gestartet und mithilfe des Skripts <strong>ap-setup.sh<\/strong> der AP-Modus gestartet. Der User kann sich dann mit WLAN &#8222;DingDong&#8220; Verbinden und \u00fcber die IP- Adresse &#8222;10.0.0.1&#8220; das WLAN konfigurieren. Diese IP-Adresse ist auf dem Raspberry Pi abgedruckt.<\/p>\n<p><a href=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/WLAN.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-492 size-full\" src=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/WLAN.jpg\" alt=\"\" width=\"680\" height=\"943\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/WLAN.jpg 680w, https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/WLAN-216x300.jpg 216w\" sizes=\"(max-width: 680px) 100vw, 680px\" \/><\/a><\/p>\n<p>Nachfolgend werden die Skripte <strong>wlan-setup.sh<\/strong> und<strong> ap-setup.sh<\/strong> dargestellt.<\/p>\n<p><strong>wlan-setup.sh<\/strong><br \/>\n<code><br \/>\n#!\/bin\/bash<br \/>\n#<\/code><\/p>\n<p>#Stoppe WLAN<br \/>\necho &#8222;Debug: Stoppe WLAN&#8220;<br \/>\nifdown wlan0<br \/>\nkillall dnsmasq<br \/>\nkillall wpa_supplicant<\/p>\n<p>sleep 2<\/p>\n<p>#wpa_supplicant wird konfiguriert<br \/>\necho &#8222;Debug: \/etc\/wpa_supplicant.conf wird konfiguriert&#8220;<\/p>\n<p>#WLAN konfiguration einbinden<br \/>\nsource wlan-config<\/p>\n<p>cat &gt; \/etc\/wpa_supplicant.conf &lt; \/etc\/network\/interfaces &lt;&lt;EOF<br \/>\n#WLAN Konfiguration<br \/>\n# Loopback Device<br \/>\nauto lo<br \/>\niface lo inet loopback<\/p>\n<p># Dynamische IP via DHCP<br \/>\nauto eth0<br \/>\niface eth0 inet dhcp<br \/>\npost-up sleep 5; \/sbin\/ntpd -p pool.ntp.org<br \/>\npost-down killall ntpd<\/p>\n<p># WLAN<br \/>\n# Zugangsdaten stehen in der Datei \/etc\/wpa_supplicant.conf<br \/>\niface wlan0 inet dhcp<br \/>\nwpa-conf \/etc\/wpa_supplicant.conf<br \/>\nEOF<\/p>\n<p>#starte WLAN<br \/>\necho &#8222;Debug: Starte WLAN&#8220;<br \/>\nwpa_supplicant -B -i wlan0 -c \/etc\/wpa_supplicant.conf<br \/>\nifup wlan0<\/p>\n<p><strong>ap-setup.sh<\/strong><br \/>\n<code><br \/>\n#!\/bin\/bash<br \/>\n#<br \/>\necho \"Starte AP Modus\"<br \/>\n#Stoppe WLAN<br \/>\necho \"Debug: Stoppe WLAN\"<br \/>\nifdown wlan0<br \/>\nkillall dnsmasq<br \/>\nkillall wpa_supplicant<br \/>\nkillall udhcpc<\/code><\/p>\n<p>wpastatus=$(ps -e | grep wpa_supplicant)<br \/>\nif [ &#8222;$wpastatus&#8220; == &#8222;root&#8220; ]<br \/>\nthen<br \/>\necho &#8222;ERROR: wpa_supplicant nocht nicht beendet!&#8220;<br \/>\nfi<\/p>\n<p>sleep 2<\/p>\n<p>#interfaces werden konfiguriert<br \/>\necho &#8222;Debug: \/etc\/network\/interfaces wird konfiguriert&#8220;<br \/>\ncat &gt; \/etc\/network\/interfaces &lt; \/etc\/wpa_supplicant.conf &lt;&lt;EOF<br \/>\n#AP Konfiguration<br \/>\ncountry=DE<br \/>\nctrl_interface=DIR=\/var\/run\/wpa_supplicant GROUP=netdev<br \/>\nupdate_config=1<\/p>\n<p>network={<br \/>\nssid=&#8220;DingDong&#8220;<br \/>\nmode=2<br \/>\npsk=&#8220;Seriennummer&#8220;<br \/>\nkey_mgmt=WPA-PSK<br \/>\n}<br \/>\nEOF<\/p>\n<p>echo &#8222;debug: ifup wlan0&#8220;<br \/>\nifup wlan0<\/p>\n<p>echo &#8222;Debug: Starte DHCP&#8220;<br \/>\n#debug: dnsmasq -d<br \/>\ndnsmasq<\/p>\n<p>echo &#8222;Debug: Starte AP&#8220;<br \/>\nwpa_supplicant -B -i wlan0 -c \/etc\/wpa_supplicant.conf<\/p>\n<p>echo &#8222;neue IP fuer eth0&#8220;<br \/>\nudhcpc eth0<br \/>\n<code><\/code><\/p>\n<p>Nachdem der Nutzer das WLAN konfiguriert hat, startet der Raspberry Pi neu. Hier sollte nun wieder das <strong>startup.sh<\/strong> Skript automatisch starten (was es noch nicht tut). Danach wird wieder versucht eine WLAN-Verbindung aufzubauen. Da nun eine passende WLAN-Konfiguration vorhanden ist, gelingt dies auch. Anschlie\u00dfend l\u00e4dt das <strong>startup.sh<\/strong> Skript eine passende Webserver-Konfiguration, damit der Benutzer die Zugangsdaten zum MQTT Server eintragen kann. Anschlie\u00dfend wird der Webserver gestartet. Danach startet das Python-Skript <strong>submqtt.py<\/strong> , welches f\u00fcr die MQTT-Kommunikation verantwortlich ist, jedoch aufgrund der mangelnden Konfiguration noch keine Verbindung zum Server aufbauen kann.<\/p>\n<p><a href=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/mqtt-konfig.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-489 size-full\" src=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/mqtt-konfig.jpg\" alt=\"\" width=\"504\" height=\"278\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/mqtt-konfig.jpg 504w, https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/07\/mqtt-konfig-300x165.jpg 300w\" sizes=\"(max-width: 504px) 100vw, 504px\" \/><\/a><\/p>\n<p>Nachdem der Benutzer die MQTT-Konfiguration eingetragen hat, wird diese in der Datei <strong>tuer-config<\/strong> gespeichert. Anschlie\u00dfend startet der Raspberry Pi neu. Da nun alles Konfiguriert ist, kann \u00fcber das Python-Skript <strong>submqtt.py<\/strong> die T\u00fcr gesteuert werden. (Das <strong>startup.sh<\/strong> Skript muss trotzdem manuell gestartet werden, da das automatische starten beim Booten nicht funktioniert)<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Eintrag m\u00f6chte ich euch die Finale Version meines Aufgabenteils vorstellen. Es geht um die initiale Konfiguration des Raspberry Pis. Wenn der Nutzer das Ger\u00e4t auspackt, muss er es zun\u00e4chst nur an den Strom anschlie\u00dfen. Danach sollte das folgende<\/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\/485"}],"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=485"}],"version-history":[{"count":1,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts\/485\/revisions"}],"predecessor-version":[{"id":553,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts\/485\/revisions\/553"}],"wp:attachment":[{"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/media?parent=485"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/categories?post=485"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/tags?post=485"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}