Arduino Playground is read-only starting December 31st, 2018. For more info please look at this Forum Post

Haustechnik (Eisebaer)



Seite in Arbeit

Hallo,

Als Windows-User hatte ich meine Probleme mit Linux, wollte aber aus weiter unten genannten Gründen auf einem Raspberry Pi einen node-Server aufsetzen.

Schwer für einen nicht-Linux-Kundigen, da weiterzukommen. Man findet viel im Netz, aber es fehlen immer die Grundkenntnisse, es wird zuviel vorausgesetzt.

Deshalb schreibe ich diese Doku. Mick von Mikrocontroller.net, der mir Verzweifelndem die benötigte Hilfe in Form einer kurzen Anleitung und zweier Beispieldateien zukommen ließ (es war genau das, was ich gebraucht habe, danke nochmal), hab' ich das versprochen.

Und natürlich für alle Freunde hier im Arduino-Forum...

Was alles erkläre ich hier?

Mehr als wirklich notwendig. Und gerade genug, um komfortabel arbeiten zu können, und zwar, ohne Maus, Tastatur und Bildschirm an den Raspberry anschließen zu müssen. Man kann also gemütlich vor seinem Windows-PC sitzen und schließt an den Raspberry nur Stromversorgung und Netzwerkkabel an.

Warum node-Server?

Seit einigen Jahren habe ich auf einem Arduino mit Ethernetshield ein Webserver-Programm laufen, das meine Wohnzimmerbeleuchtung schaltet. 26 LED-Lampen in der Decke, die ich einzeln ein- und ausschalten kann. Logischerweise im Programm verknüpft, z.B. Alles, Schreibtisch, Fernsehen usw..

Dann bin ich auf die Idee gekommen, das ganze dimmbar zu machen, mit einem Slider auf der Webseite, und da hat's gehakt.

Wenn man den Slider zieht, baut das Tablet/Handy für jeden Wert, über den man zieht, eine neue Verbindung auf, sendet, und trennt die Verbindung wieder. Flüssig ist was anderes, außerdem verschluckt sich der Arduino dann gerne.

Also nachgeforscht und auf den node-Server gestoßen. Da ist es so, daß die Verbindung bestehen bleibt, solange die Webseite offen ist.

Auf den zweiten, für mich noch wichtigeren, Vorteil bin ich erst später gekommen:

Der Server kann von sich aus senden, ohne daß Daten vom Tablet/Handy angefordert werden.

Ich habe auf meiner Seite z.b. neun Buttons und einen Schieber. wenn ich jetzt auf einem Gerät (sagen wir mal PC) die Seite aufrufe, stellt er mir gleich den momentanen Zustand dar (welcher Button ist aktiv, welche Stellung hat der Slider). Das ist ja noch nichts Besonderes.

Rufe ich die Seite jetzt parallel auf einem zweiten Gerät auf, und ich verändere den Zustand, wird das annähernd verzögerungsfrei auf dem ersten Gerät wiedergegeben (der Button ändert die Farbe, der Slider bewegt sich mit). natürlich genauso umgekehrt vom zweiten auf das erste, dritte usw. Gerät.

für eine Haussteuerung optimal. Was nützt mir das Tablet an der Wand, wenn es nicht den momentanen Zustand anzeigt? Dauerndes Pollen ist unlustig und verzögert.

Wer also Lust und Laune hat: Tobt Euch aus, und vor allem, probiert es mit mehreren Geräten, Euch zu verbinden, und beobachtet, was passiert, wenn auf einem Gerät etwas verändert wird.

Bei der Beispiel-Datei hier sind nur vier Buttons und der Slider aktiv, das werd' ich noch ändern.

Bei mir wird die Kommunikation mit dem Arduino über die GPIOs des Raspberry mittels RS485 hergestellt, aber das ist zum Testen des node-Servers nicht notwendig und wird von mir dann in einem zweiten Schritt behandelt.

Konfiguration des Raspberry:

Man lädt ein Image von der Raspberry-Seite. Ich nehme dazu Raspbian Jessie von der Raspberry Pi Homepage, sozusagen das derzeitige Standard-Image. Es gibt (zur Zeit) eine "große" und eine "light" Version. Ich verwende die light, weil ich auf einem node-Server keine Büro-, Lern- oder Wissenschafts-Software brauche. Die Version ist in meinem Fall vom 27.9.2016. Allerdings nehme ich an, dass der Vorgang auch bei neueren Images im Großen und Ganzen etwa gleich bleibt. Das Image muß vor der Installation aus der ZIP-Datei entpackt werden!

Um das Image auf die SD-Karte (zur Zeit mind. 8GB) zu bekommen, braucht man das Programm win32diskimager, das man sich auch auf der Raspberry-Seite herunterladen kann.



Starten, das Image aussuchen und „Write“. Es gibt von derselben Quelle auch das Programm SDFormatter, das man unter Umständen zuvor ausführen muß. Bei mir war das nie nötig.

Wichtig: Es gibt eine Neuigkeit bei der Raspian-Version vom 25.11.2016!

ssh ( = secure shell), und das brauchen wir, ist standardmäßig deaktiviert. Um es zu aktivieren, muß man unmittelbar nach dem aufspielen des Images eine leere Datei namens ssh auf der micro-SD-Karte anlegen. Nachdem es ja garnicht so einfach ist, eine Datei ohne Datei-Endung unter Windows zu erstellen, habe ich eine solche Datei ins ZIP-Archiv mit meinen node-Dateien gepackt:

http://forum.arduino.cc/index.php?action=dlattach;topic=378219.0;attach=189416

Von diesem Archiv die Datei ssh einfach in das Laufwerk BOOT (Eure SSD-Karte) kopieren. Danach die Karte in den Raspberry und Strom und Netzwerkkabel drauf.

Seht auf Eurem Router nach, welche IP-Adresse der Raspberry zugewiesen bekommen hat. Diese Adresse sollte man dem Raspberry gleich fix zuweisen (Wie das geht, ist von Gerät zu Gerät verschieden und kann hier nicht erklärt werden > Google).

Ladet Euch einen SSH-Client wie zum Beispiel Putty gratis aus dem Internet und startet ihn. Bei IP-Adresse gebt Ihr die Adresse ein, Connection Type SSH und Button "Open" drücken.



Jetzt geht ein schwarzes Fensterchen auf, das nach dem Usernamen fragt (=pi) und dann nach dem Kennwort (=raspberry). Schon seid Ihr auf Eurem Winzling. Was Ihr da seht, ist so etwas wie das DOS-Fenster des Raspberry.



Eine schöne Sache: Ihr müßt die Befehle, die ich hier hinschreibe, nicht mühsam abtippen, sondern einfach kopieren und mit einem rechtsklick ins schwarze fenster werden sie dort automatisch eingefügt.

Zuallererst ändern wir die Standardpasswörter auf dem Raspi:

sudo passwd pi

Zweimal Euer Wunschkennwort eingeben. Dann nochmal für root:

sudo passwd root

Man kann für beide User das gleiche Kennwort verwenden, so mach' ich es.
Jetzt kanns losgehen mit:

sudo raspi-config



„Expand Filesystem“ ausführen, sonst wird bald der Platz auf der Karte zu eng, da der Raspberry nur einen Teil der Karte nutzt.

Hier könnt Ihr auch gleich bei „Internationalisation Options“ den Raspberry an Euer Land anpassen (zum Navigieren in der Config Pfeiltasten und Tab-Taste verwenden):

->Change Locale: de_AT@euro oder de_DE@euro mit der Leertaste auswählen. Danach als Default auch dasselbe wählen.
->Change Timezone: Europe und (bei mir) Vienna.

->Change Keyboard Layout aufrufen und durchlaufen lassen

Dann Finish (Tab-Taste). Der Raspberry rebootet. Jetzt kommt eine Meldung, daß Euer schwarzes Fenster die Verbindung verloren hat. Klar. Schwarzes Fenster einfach schließen.

Es dauert kaum eine halbe Minute, bis der Raspi wieder da ist.

Nach dem Reboot wieder mit Putty zum Raspberry verbinden. Und jetzt gleich ein paar Befehle hintereinander. Damit werden Updates auf dem Pi installiert und danach wird aufgeräumt. Bei Nachfragen einfach mit "J" bestätigen. Eventuell will er auch mal ein "Q" für Quit.

sudo apt-get update

sudo apt-get upgrade

sudo apt-get dist-upgrade

sudo apt-get clean

Jetzt ein Neustart mit:

sudo reboot

Nach dem Reboot wieder mit Putty verbinden. Jetzt kommen einige Eingaben, die Ihr sowenig wie ich verstehen müßt. Wir installieren damit einen Desktop auf dem Raspberry (standardmäßig ist beim light-image nur das schwarze Fenster sichtbar). Den Desktop brauchen wir aber dann später noch.

sudo apt-get install --no-install-recommends xserver-xorg

sudo apt-get install mate-desktop-environment-core

sudo apt-get install lightdm

sudo apt-get install xrdp

sudo apt-get install samba samba-common-bin

sudo apt-get clean

Wir erstellen ein Verzeichnis für unseren Node-Server:

sudo mkdir slidertest

sudo chown -R pi:pi /home/pi/slidertest

sudo smbpasswd -a pi

dann Euer Passwort 2x eingeben.

Das Verzeichnis richten wir jetzt noch als Netzwerkfreigabe ein. Mit:

sudo nano /etc/samba/smb.conf

laden wir die Konfigurationsdatei ins schwarze Fenster, gehen mit der BildAb/PageDown-Taste bis ganz nach unten und fügen folgendes am Ende ein (Auch das könnt Ihr hier einfach kopieren und mit einem Rechstklick wird's automatisch reingeschrieben):

[mynode]
comment = Network Logon Service
path = /home/pi/slidertest
guest ok = no
writeable = yes

Mit Strg > O und Enter Speichern und mit Strg > X beenden.

Jetzt noch ein:

sudo reboot

zum Neustart.

Dann wieder ins Putty-Fenster, wir installieren den Node-Server:

curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -

(Bindestrich am Ende nicht vergessen)

sudo apt-get install --yes nodejs

Dann für meine Anwendung auch noch ein paar Komponenten installieren:

Dazu erstmal ins verzeichnis slidertest wechseln:

cd slidertest

und

npm install serialport

npm install socket.io express

Am Rande: sudo heißt, dass der nachfolgende Befehl mit Admin-Rechten ausgeführt wird,

apt-get ist die Paketverwaltung von Raspbian, npm die Paketverwaltung von node.

Wir haben weiter oben das Verzeichnis slidertest im Netzwerk freigegeben. Jetzt im Windows-Explorer auf Computer gehen und dann oben "Netzlaufwerk verbinden". Dort bei "Ordner" Eingabe:

\\IP_ADRESSE_DES_RASPBERRY\mynode

Am besten auch gleich ein Häkchen bei "Nach Neustart wiederverbinden"

ZIP-Datei von hier downloaden (Falls Ihr das nicht schon zu Anfang wegen ssh gemacht habt):

http://forum.arduino.cc/index.php?action=dlattach;topic=378219.0;attach=189416

Den Inhalt in den verbundenen Ordner kopieren.

Jetzt noch ein:

sudo reboot

Im Putty-Fenster mit

cd slidertest

wieder in dieses Verzeichnis wechseln und mit

node app.js

wird der node-Server gestartet.

Auf einem anderen Rechner einen Browser öffnen, in die Adresszeile:

IP_ADRESSE_DES_RASPBERRY:8090

eingeben und es sollte die Seite geöffnet werden.



Wird fortgesetzt!

Wer Fehler findet: Bitte laßt es mich im zugehörigen Thread im Arduino-Forum wissen:

http://forum.arduino.cc/index.php?topic=378219.0