Raspberry PI Project Setup [2024]

Flashing Raspberry

Der Raspberry PI Imager ist die einfachste Möglichkeit, eine SD-Karte für einen Raspberry vorzubereiten.

Headless Setup

Für ein Headless Setup sollten während des Flash-Vorgangs die wichtigsten Informationen vor-eingestellt werden. Hierzu gehören die WiFi-Verbindung (falls benötigt), das Passwort und die Aktivierung von SSH.

Updates durchführen

sudo apt-get dist-upgrade
sudo apt-get update
sudo apt-get upgrade

Allgemeine Packages

Folgende Pakete werden meistens benötigt und werden bei Bedarf OS-weit installiert:

sudo apt-get install build-essential
sudo apt-get install python3-full
sudo apt-get install python3-dev
sudo apt-get install python3-setuptools
sudo apt-get install python3-pil
sudo apt-get install git
sudo apt-get install swig
sudo apt-get install i2c-tools

Virtual Environment Setup

Gerade bei neueren Versionen des Raspberry PI muss zuerst eine virtuelle Umgebung erstellt werden.

Als erstes wird dazu eine virtuelle Umgebung definiert und erstellt:

python3 -m venv --system-site-packages VENVNAME

Die Option --system-site-packages gibt an, dass Module, die auf System-Ebene installiert sind, ebenfalls in der VENV erreichbar sind. Der Name für die virtuelle Umgebung kann frei gewählt werden. Als Beispiel wird hier venvtp verwendet. Die Installation der virtuellen Umgebung kann im User-Verzeichnis /home/pi/ durchgeführt werden.

Danach wird die virtuelle Umgebung "aktiviert":

source /home/pi/venvtp/bin/activate

Damit nicht bei jedem Start einer Applikation der gesamte Befehl sudo /home/pi/venvtp/bin/python3 script.py eingegeben werden muss, kann ein Alias erstellt werden, welcher das abkürzt:

alias supy='sudo /home/pi/venvtp/bin/python3'

Danach können Scripts ganz einfach über den Befehl supy start.py aufgerufen werden. Allerdings muss dieser Alias zusätzlich in die Datei .bashrc gespeichert werden, damit er dauerhaft bestehen bleibt. Ausserdem wird ein Eintrag für die Aktivierung der VENV hinzugefügt. Dazu wird die Datei ~/.bashrc mittels nano geöffnet und am Ende der Datei folgende Zeilen eingesetzt:

  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

alias supy='sudo /home/pi/venvtp/bin/python3'
alias venv='source /home/pi/venvtp/bin/activate'

Webserver Setup

Apache deinstallieren

Zuerst soll die Apache-Installation deaktiviert und deinstalliert werden, falls vorhanden und aktiv:

sudo systemctl stop apache2
sudo systemctl disable apache2
sudo apt remove apache2
sudo apt autoremove
sudo apt clean all && sudo apt update && sudo apt dist-upgrade
sudo apt purge apache2

NGINX installieren

NGINX ist eine Webserver-Applikation, welche die Grundfunktionalitäten für den Webserver bereitstellt. Diese wird über folgende Befehle installiert und dann gestartet.

sudo apt-get install nginx

Nach der Installation von nginx sollte die IP-Adresse des Raspberry pi über einen Webserver aufrufbar sein und die nginx Welcome-Seite dargestellt werden.

PHP installieren

Um PHP zu installieren wird folgender Befehl ausgeführt:

sudo apt-get install php-fpm

Die fpm-Version wird benötigt, falls der Webserver auf NGINX und nicht Apache2 basiert.

MySQL Server installieren

MySQL (mariadb) wird mit folgendem Befehl installiert:

sudo apt-get install default-mysql-server

NGINX Konfiguration

Als erstes wird die Konfigurations-Datei aufgerufen:

sudo nano /etc/nginx/sites-enabled/default

Hier werden einige Konfigurationen benötigt. Das folgende Beispiel zeigt eine Möglichkeit, den Server zu konfigurieren. Hierbei werden folgende Einstellungen vorgenommen:

  • Das Root-Verzeichnis der Website (/home/pi/..../web)
  • Das reagieren auf die index.php als Eingangspunkt
  • Der Server-Name xyz.pi
  • Das Reagieren und Auslesen auf URL-Argumente wie z.B. index.php?page=settings
  • Zugriff auf .htaccess verhindern

Am Ende sollte die Config-Datei ungefähr wie folgt aussehen:

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        
        # define the website root
        root /home/pi/wClock/web;
        
        #define to listen to index.php first
        index index.php index.html index.htm index.nginx-debian.html;

        # define the server name
        server_name puzzle.pi;
        
        # define to process arguments within the urls
        location / {
                try_files $uri $uri/ /index.php?q=$uri&$args;
        }

        # pass PHP scripts to FastCGI server
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }
}

Berechtigungen für das Web-Verzeichnis setzen. Der gesamte Pfad benötigt read und execute Permissions:

# sudo chown -R www-data:www-data /home/pi/testipi/web
# sudo chown -R www-data:www-data /home /home/pi /home/pi/testipi/ /home/pi/testipi/web
# sudo chmod 755 /home/pi/testipi/web

sudo chmod +rx /home /home/pi /home/pi/testipi/ /home/pi/testipi/web/

Nach diesen Anpassungen muss der NGINX-Service neu gestartet werden:

sudo systemctl reload nginx

Nun sollte der Webserver und eine index.php im Verzeichnis /web per Browser aufrufbar sein.

PHP Error Reporting & Display

Wenn beim Aufruf einer PHP-Seite Fehler passieren, werden Sie aktuell noch nicht im Browser sondern nur im Error-Log von nginx ausgegeben. Um das zu ändern, müssen noch ein paar Schritte unternommen werden. Zuerst wird die entsprechende php.ini geöffnet.

sudo nano /etc/php/8.2/fpm/php.ini

Der Wert display_errors (relativ weit unten im File) wird von Off zu On geändert und die Datei gespeichert.

PHP Short Tags

Ausserdem können in der PHP.ini die PHP Shorttags (also <? anstatt <?php) aktiviert werden:

short_open_tag = On

Nach dem Update der Datei, wird der PHP service neu gestartet:

sudo /etc/init.d/php8.2-fpm restart

Nun werden die Errors sowohl im nginx Log gespeichert wie auch im Browser direkt ausgegeben.

MySQL Konfiguration

Nach der Installation von MySQL (MariaDB) wird die Konfiguration gestartet. Das Basis-Setup ist durch folgenden Befehl zu erreichen:

sudo mysql_secure_installation

Die Passwort-Abfrage kann mit Enter bestätigt werden, da noch keines gesetzt wurde. Dann soll mit Y zur unix_socket_authentification gewechselt werden. Abermals Y führt zur neuen Passwort-Vergabe für den root user. Danach wird für anonymous_users, disalow_rootlogin, remove_testdatabase und reload_configuration ebenfalls jeweils mit Y geantwortet. Damit ist das Setup grundsätzlich abgeschlossen und mittels folgendem Befehl kann auf mysql zugegriffen werden:

sudo mysql -uroot -p

Danach wird das root Passwort abgefragt, welches vorher gesetzt wurde. Die Installation kann zum Beispiel mittels SHOW DATABASES; getestet werden, welches die bereits vorhandenen Datenbanken ausgeben sollte.

Datenbank und User definieren

Mittels folgender Befehle wird eine neue Datenbank und ein dazugehöriger User erstellt, ihm alle Rechte gegeben und die Konfiguration reloaded:

CREATE DATABASE db_test;

CREATE OR REPLACE USER 'usr_test'@'%' IDENTIFIED BY 'test77';
GRANT ALL PRIVILEGES ON db_test.* TO 'usr_test'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Um diesen Schritt zu testen, kann eine Verbindung mit dem neuen User zu MySQL hergestellt werden:

sudo mysql -u usr_test -p

Nach Eingabe des vorher vergebenen Passwortes, gelangt man wieder in die MySQL-Umgebung, diesmal mit dem neuen User.

Damit die Datenbank auch von extern zu erreichen ist, muss in der Konfiguration noch ein sogenanntes Bind eingetragen werden:

sudo nano /etc/mysql/my.cnf

Folgende beiden Zeilen werden am Ende der Konfiguration eingetragen:

[mysqld]
bind-address = 0.0.0.0

Danach wird der Server über folgenden Befehl neu gestartet. Danach sollte eine Verbindung von ausserhalb (z.B. PyCharm, etc.) möglich sein.

sudo systemctl restart mysql.service

MySQL für PHP installieren

sudo apt-get install php-mysql

MySQL für Python installieren

pip3 install pymysql

Install Adafruit Blinka

Adafruit Blinka ist ein Framework, welches es erleichtert, auf Hardware-Komponenten des Raspberry PI zuzugreifen. Es kann ganz einfach mittels folgendem Script installiert werden, nachdem eine virtuelle Umgebung erstellt und aktiviert wurde:

cd ~
pip3 install --upgrade adafruit-python-shell
wget https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/raspi-blinka.py
sudo -E env PATH=$PATH python3 raspi-blinka.py

Das Script aktiviert die benötigten Hardware-Schnittstellen (I2C, SPI, etc.) installiert blinka und die Dependencies. Der Prozess wird durch einen Neustart beendet.

Adafruit SPI Display Setup

Zuerst wird die entsprechende Library via pip in die venv installiert:

pip3 install adafruit-circuitpython-rgb-display

Danach wird die Font "Dejavu" installiert, falls sie nicht bereits im System vorhanden ist:

sudo apt-get install fonts-dejavu

asdf

I2C Port Expander (MCP23017)

Um einen (oder mehrere) I2C Port-Expander zu verwenden, muss das entsprechende Package installiert werden:

pip3 install adafruit-circuitpython-mcp230xx

Adafruit 16x2 LCD Display (I2C)

Um die benötigten Daten zu installieren wird folgender Befehl innerhalb der venv ausgeführt:

pip3 install adafruit-circuitpython-charlcd

Danach kann das Display bereits über die I2C-Schnittstelle angesprochen werden.

1.3" OLED (I2C) Display

Das Display hat die fixe I2C Adresse 0x3C, es können somit nicht mehrere desselben Displays gleichzeitig angesteuert werden. Für die Ansteuerung des Displays wird das folgende Modul über die venv installiert:

pip3 install luma.oled

text

1.3* LCD SPI Display

pip3 install numpy

Servo Hat Setup

Um den Waveshare Servo Hat zu installieren, wird zuerst das Modul smbus installiert:

pip3 install smbus

Da

LUX Sensor (I2C) – Adafruit TSL2561

Der LUX-Sensor hat standardmässig die Adresse 0x39. Das dazugehörige Modul wird mittels folgendem Befehl installiert:

pip3 install adafruit-circuitpython-tsl2561

Rotary Knobs Breakout – Adafruit NeoRotary 4

Das Breakout Board hat standardmässig die Adresse 0x49. Das dazugehörige Modul wird mittels folgendem Befehl installiert:

pip3 install adafruit-circuitpython-seesaw

Sparkfun Audio Hat (MAX38957a)

In raspi-config wird zuerst das entsprechende Gerät als Audio-Gerät ausgewählt. Danach muss folgendes Script aus der venv ausgeführt werden. Die Installation wird mit einem Reboot abgeschlossen.

sudo apt install -y wget
wget https://github.com/adafruit/Raspberry-Pi-Installer-Scripts/raw/main/i2samp.py
sudo -E env PATH=$PATH python3 i2samp.py

Das selbe Script wird danach nochmal ausgeführt und erneut mit einem Reboot beendet. Danach sollte der alsamixer verfügbar sein.

Um die Sound-Ausgabe zu testen, kann folgender Befehl ausgeführt werden, welcher ein Test-File ausgibt:

speaker-test -c2 --test=wav -w /usr/share/sounds/alsa/Front_Center.wav

Neopixel (rpi_ws281x) Setup

Um die Neopixel Library zu installieren wird folgender Befehl innerhalb der venv ausgeführt:

pip3 install rpi_ws281x

asdf


Current PC Specs

Mainboard

Modell: ASUS Prime X570-P
SSD Slots: 2x

Prozessor

Modell: AMD Ryzen 7 3700X
Cores: 8-Core
Frequenz: 4050 MHz

Speicher

Modell: Corsair Vengeance RGB Pro
Anzahl: 4x
Speicher: 8GB (Total: 32GB)
Modell-Nr: CMW16GX4M2Z3600C18
Type: DDR4
Pins: 288-Pin
Speed: 3600 MHz CL18

Harddrives

SLOT 1

Modell: Samsung 970 EVO Plus
Storage: 1TB
Add. Specs: PCIe 3.0 NVMe M.2 SSD
Verwendung: Games

SLOT 2

Modell: ?
Storage: 500GB
Add. Specs: ?
Verwendung: System

SLOT X (NEW)

Modell: Samsung 990 PRO
Storage: 2TB
Add. Specs: PCIe 4.0 NVMe M.2 SSD
Verwendung: Games

Graphics

Modell: NVIDIA GeForce RTX 2080 Ti
Hersteller: Gainward Phoenix GS
Speicher: 11GB

Modell: GeForce RTX 4080 GAMING OC
Hersteller: Gigabyte
Speicher: 16GB

Netzteil

Modell: Seasonic Focus

Modell: Seasonic Focus GX-1000
Leistung: 1000W


Flugsimulation A-Z

  • Online Flug Plan erstellen
    • http://onlineflightplanner.org/
    • Departure Airport (LSZH)
    • Arrival Airport (EDDF)
    • Min. Altitude (FL280)
    • Max. Altitude (FL300)
    • Aircraft (737-800)
    • Create Plan
    • Download Files (FMS / PDF)
  • X-Plane Flugplan
    • Dieses Teil da, Bordcomputer
    • FPLN
    • ORIGIN: LSZH
    • DEST: EDDF
    • FLT NO: TET33
    • TO: ZUE (1. Eintrag des Airways nach LSZH)
    • NEXT PAGE (Button)
    • VIA: T163 (1. Airway nach 1. Eintrag)
    • TO: EMPAX
    • VIA: "Airway"
    • TO: "Intersection"
    • Flugplan aktivieren (EXEC (MOD FPLN wird zu ACT FPLN))
  • SID / STAR
    • http://www.vacc-sag.org

Erste Schritte in CraftCMS

Nachdem die Installation von Craft vorgenommen wurde und sowohl das Front- wie auch das Backend erreichbar ist, benötigt es ein paar erste Schritte, damit mindestens mal irgend ein Inhalt im Frontend angezeigt wird. Für den einfacheren Einstieg sind diese ersten Punkte hier beschrieben.

Installation von Redactor

Um einen Wysiwyg-Editor für den Inhalt zu bekommen, wird das Plugin "Redactor" installiert. Dieses bietet einen einfachen und schlichten Editor. Das Plugin kann über den Plugin-Store kostenlos heruntergeladen und direkt installiert werden. Ein weiteres Setup ist hierbei vorerst nicht nötig.

Erste Felder erstellen

Um irgendwas im Frontend angezeigt zu bekommen, müssen zuerst ein paar Felder im Backen erstellt werden, die dann auch gefüllt werden können. Es bietet sich an, hier erstmal mit einem PageTitle und einem PageContent zu beginnen.

Page Title

Das Feld "Page Title" wird als reines Textfeld erfasst.

Page Content

Das Feld "Page Content" wird als Redactor Feld erfasst.

Erstellung einer Sektion

Für die Hauptseiten wird als erstes eine Sektion erstellt. Der Name kann hierbei z.B. Main Pages heissen. Dies generiert den Slug mainPages. Als Sektions-Typ wird "Struktur" gewählt, damit die Seiten in mehreren Ebenen erstellt werden können.

Website-Einstellungen

Die Einstellungen der Sektion sind sehr wichtig. Das Eintrags-URI-Format lautet:

{parent.uri}/{slug}

Bei der Vorlage wird der folgende Pfad eingetragen:

pages/_entry

Eintragstyp bearbeiten

Zurück auf der Sektionen-Übersicht, wird der Eintragstyp "MainPages" bearbeitet.

  • Titelfeld anzeigen -> deaktivieren
  • Titelformat -> {{pageTitle}}
  • Feld-Layout -> Content-Tab hinzufügen (inkl. PageContent und PageTitle)

Damit sind die Vorbereitungen abgeschlossen und es kann der erste Eintrag (die erste Seite) erstellt werden.

Erstellung der Startseite

Um die Startseite der Website zu erstellen, wird ein neuer Eintrag in der Sektion "Main Pages" erstellt. wichtig ist hierbei der Slug. Hier muss zwingend folgender Slug eingetragen werden, damit die Seite als Startpunkt fungiert:

__home__

Wird das Frontend nun aufgerufen, wird versucht, die gerade erstellte Seite mit dem Slug __home__ aufzurufen. Das klappt allerdings nicht, da das entsprechende Template noch nicht vorhanden ist. Um dieses Problem zu lösen, brauchen wir endlich einen Code-Editor. ;)

Basic Template-Setup

Als Basis wird im Ordner /templates folgende Dateistruktur angelegt:

_layouts
  base.twig
  site.twig
pages
  _entry.twig

Die Dateien base.twig und site.twig kümmern sich um das Basis-Layout aller Seiten. Die Datei _entry.twig beinhaltet das eigentliche Template, bzw. den eigentlichen Hauptinhalt der angezeigten Frontend-Seite.

Das Frontend ist da!

Nachdem diese Dateien erstellt wurden, sollte das Frontend angezeigt werden. Das ist ein guter Startpunkt für das nächste Projekt.


Lokales CraftCMS Setup

Lokale Installation via Composer

Im ersten Schritt wird Craft heruntergeladen und direkt an der schlussendlichen Stelle installiert. Der Pfad am Ende des folgenden Scripts muss daher je nach Projekt angepasst werden.

composer create-project craftcms/craft ~/Dropbox/Websites/projectname

Setup von MAMP Pro

In MAMP Pro wird ein neuer Host eingerichtet. Das Document Root zeigt dabei auf das /web Unterverzeichnis des gerade installierten CraftCMS. In oben stehendem Beispiel wäre das somit:

markus/Dropbox/Websites/projectname/web

Dabei soll gleichzeitig eine Datenbank erstellt werden, also wird die entsprechende Checkbox angewählt. Im folgenden Schritt werden die gewünschten Datenbank-Credentials eingetragen.

Der Name des Hosts in MAMP Pro kann so gewählt werden, dass eine Endung verwendet wird. Hier bietet sich beispielsweise projekt.loc an. Ausserdem kann der Port manuell auf 80 geändert werden, das vereinfacht die lokale Test-URL ein wenig, da sonst die Seite mit dem Port :8888 aufgerufen werden muss.

Nach diesem Schritt wird der neue Host in MAMP Pro gespeichert und sollte danach direkt erreichbar sein. Beim Aufruf der entsprechenden Seite wird allerdings noch ein Fehler angezeigt, da das Setup von Craft noch nicht stattgefunden hat.

Basic Setup von CraftCMS

Um das Setup von Craft vorzunehmen, wird die URL mit dem Zusatz /admin erweitert um auf das Control Panel zu gelangen.

1. Datenbankverbindung

Für die Datenbankverbindung wird der Datenbank-Name, der Benutzername und das Passwort eingetragen.

2. Benutzer-Account

Der Benutzeraccount wird entsprechend den Vorstellungen erstellt.

3. System-Name

Der Systemname ist der Name der Website, welche gerade erstellt wird. Die Basis-URL kann unverändert bleiben.

CraftCMS ist installiert

Herzlichen Glückwunsch, CraftCMS ist somit bereits installiert.


Basic Raspberry Setup

Inhalt

In diesem Artikel wird beschrieben, wie ein Basic Setup für den Raspberry Pi vorzunehmen ist um eine Basis für die meisten Projekte zu schaffen. Von der Vorbereitung der SD-Karte bis zum Betreiben des NGINX Webservers oder der Neopixel-Library.

Basic Raspberry Setup

1. Raspbian Stretch

Raspbian Stretch herunterladen: Raspberry.org

2. SD-Karte flashen

SD-Karte mit der aktuellen Version von Raspbian Stretch flashen

3. Headless Setup

Die folgende Datei herunterladen und dessen Inhalte in das Root-Verzeichnis der Speicherkarte legen:
Datei Download (raspberry-headless.zip)

country=CH
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="Zeltfunk"
psk="D8317iegbTfuz!"
id_str="home"
}

4. SSH Connection

SD-Karte in Raspberry einlegen und booten. IP-Adresse ausfindig machen und per SSH auf den Raspberry connecten.

ssh pi@10.0.0.xxx

5. Raspi Config

Raspi-Config aufrufen und Einstellungen für Dateisystem, Hostname, Passwort, Netzwerk, Update vornehmen.

  • Enlarge Filesystem
  • Reboot
  • Hostname setzen
  • Passwort ändern
  • "Wait for Network at boot"
  • Update raspi-config
  • Reboot

6. Allgemeine Updates

Um das System vorzubereiten sollten ein paar allgemeine Updates durchgeführt werden um alle Pakete auf den aktuellsten Stand zu bringen und nachfolgende Probleme zu vermeiden.

sudo apt-get dist-upgrade
sudo apt-get update
sudo apt-get upgrade

7. Allgemeine Paket-Installation

Als nächstes werden ein paar Pakete installiert, welche immer von Nutzen sein werden und in den meisten Projekten benötigt werden:

sudo apt-get install build-essential python-dev python-setuptools git swig i2c-tools

8. Python Version 3.x

Damit mit aktuellsten Voraussetzungen entwickelt wird, sollte der Default der Python-Version auf 3.x geändert werden. Hierzu müssen lediglich die beiden folgenden Befehle ausgeführt werden:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2

9. NGINX Installation

NGINX ist eine Webserver-Applikation, welche die Grundfunktionalitäten für den Webserver bereitstellt. Diese wird über folgende Befehle installiert und dann gestartet.

sudo apt-get install nginx
sudo /etc/init.de/nginx start

10. PHP 7 installieren

Um PHP (in Version 7.x) zu installieren wird folgender Befehl ausgeführt:

sudo apt-get install php-fpm

11. MySQL (Server) installieren

MySQL ist für die Datenbanken zuständig. MySQL Datenbanken können erst angelegt und verwendet werden, wenn der MySQL Server installiert ist. Dies wird über folgenden Befehl erreicht:

sudo apt-get install mysql-server

12. MySQL Konfiguration

Für MySQL wird als erstes eine dem Projekt entsprechende Datenbank erstellt, welche danach vom Web-Interface und von der Python-Applikation angesteuert wird. Hierfür wird MySQl im Terminal gestartet:

sudo mysql -u root

Um eine neue Datenbank zu erstellen, wird folgender Befehl genutzt. Als Datenbank-Name wird der Projektname in lowercase verwendet:

CREATE DATABASE aquapi;

Für die gerade erstellte Datenbank wird ein Benutzer mit Passwort erstellt und entsprechende Zugangsberechtigungen vergeben. Hierbei werden username, dbname und password entsprechend ersetzt.

CREATE OR REPLACE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON dbname.* TO 'username'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Zuletzt muss in der Config noch die bind-address eingetragen werden:

sudo nano /etc/mysql/my.cnf

Hier werden dann am Ende der Datei die folgenden zwei Zeilen eingetragen:

[mysqld]
bind-address = 0.0.0.0

Danach: Neustarten des MySQL service via:

sudo systemctl restart mysql.service

13. Github-Projekt klonen

Als nächstes kann das Beispiel-Projekt von Github geklont werden um die wichtigsten und initialen Files für ein Projekt auf dem Raspberry zur Verfügung zu haben. Hierbei wird target durch das entsprechende Ziel-Verzeichnis ersetzt.

git clone https://github.com/Tetrikus/BasePi /home/pi/target

Da das Projekt auf Github als "privat" gelistet ist, wird für den Klon-Vorgang ein Benutzername und ein Passwort benötigt.

14. NGINX Konfiguration

Die NGINX-Config ist im Applikations-Verzeichnis des Base-Projekts enthalten (/web/nginx.conf). Dieses muss allerdings zuerst noch angepasst werden:

  • Zeile 7: Korrekten Pfad zum /web Verzeichnis einfügen
  • Zeile 11: Sinnvollen Servernamen verwenden

Im NGINX-Verzeichnis (/etc/nginx/sites-enabled/) gibt es bereits eine Default-Config, welche mit folgendem Befehl überschrieben wird – hierbei muss projectpath mit dem korrekten Namen des Verzeichnisses überschrieben werden:

sudo cp -r /home/pi/projectpath/web/nginx.conf /etc/nginx/sites-enabled/default

Die Ursprungsdatei im /web Verzeichnis sollte gelöscht werden, wenn sie nicht mehr weiter benötigt wird. Folgendes ist ein Backup der Default-Konfiguration:

# Default NGINX server configuration
#
server {
	listen 80 default_server;
	listen [::]:80 default_server;

	root /home/pi/projectpath/web;

	index index.php index.html index.htm index.nginx-debian.html;

	server_name aqua.pi;

	location / {
		try_files $uri $uri/ /index.php?$args;
	}

	# pass PHP scripts to FastCGI server
	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
	}

	location ~ /\.ht {
		deny all;
	}
}

Nachdem die Konfiguration entsprechend überschrieben wurde, muss diese neu geladen werden, damit nginx mitbekommt, dass sich die Config geändert hat:

sudo /etc/init.d/nginx reload

15. MySQL für PHP (php-mysql)

Damit PHP mit MySQL kommunizieren kann, wird ein weiteres Package benötigt. Dieses kann mittels folgendem Befehl installiert werden:

sudo apt-get install php-mysql

16. MySQL für Python (PyMySQL)

Damit Python ebenfalls mit MySQL kommunizieren kann, wird folgendes Package benötigt:

pip install pymysql

17. Python Requests

Requests Package für Web-Requests von PHP und Python

sudo apt-get install python-requests requests

18. NeoPixel Installation

Die Neopixel Library wird über folgenden Befehl installiert:

sudo pip install rpi_ws281x

19. NeoPixel Konfiguration


Bounce Back Expression

Weitere Informationen und Tutorial auf YouTube

e = .7;
g = 5000;
nMax = 9;

n = 0;
if (numKeys > 0){
  n = nearestKey(time).index;
  if (key(n).time > time) n--;
}
if (n > 0){
  t = time - key(n).time;
  v = -velocityAtTime(key(n).time - .001)*e;
  vl = length(v);
  if (value instanceof Array){
    vu = (vl > 0) ? normalize(v) : [0,0,0];
  }else{
    vu = (v < 0) ? -1 : 1;
  }
  tCur = 0;
  segDur = 2*vl/g;
  tNext = segDur;
  nb = 1; // number of bounces
  while (tNext < t && nb <= nMax){
    vl *= e;
    segDur *= e;
    tCur = tNext;
    tNext += segDur;
    nb++
  }
  if(nb <= nMax){
    delta = t - tCur;
    value +  vu*delta*(vl - g*delta/2);
  }else{
    value
  }
}else
  value


Bounce Expression

Inertial Bounce (Created by Dan Ebberts at motionscript.com)

Zusätzliche Infos und Tutorial auf YouTube

 

n = 0;
if (numKeys > 0){
n = nearestKey(time).index;
if (key(n).time > time){
n--;
}
}
if (n == 0){
t = 0;
}else{
t = time - key(n).time;
}


if (n > 0 && t < 1){
v = velocityAtTime(key(n).time - thisComp.frameDuration/10);
amp = .05;
freq = 4.0;
decay = 8.0;
value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
}else{
value;
}


NAS als Router: NAT

Um das Synology NAS als Router verwenden zu können, muss NAT aktiviert werden. Die Einstellung kann bisher lediglich über die Shell aktiviert werden und geht normalerweise bei einem Reboot des NAS wieder verloren. Mit folgenden Terminal-Commands kann NAT aktiviert werden, sodass - einfach gesagt - die beiden LAN-Interfaces des NAS miteinander kommunizieren können.

ssh -p 2222 admin@10.0.0.5

-p 2222 wählt hierbei den auf dem NAS eingestellten ssh Port aus. Die IP ist die lokale Adresse des NAS.

Das benötigte Passwort entspricht dem normalen admin-Account des NAS. Um die ash Shell zu starten, wird folgender Befehl ausgeführt:

sudo su

Danach kann über den folgenden Befehl NAT aktiviert werden. Die IP-Adresse entspricht hierbei dem lokalen Netzwerk. Hat das NAS z.B. die IP 10.0.0.5, wird die IP 10.0.0.0/24 verwendet.

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE

Direkt danach sollten die internen LAN-Geräte das Internet "sehen".

 


NAS als Router: Settings

Um das Synology NAS als Router zu betreiben, müssen ein paar Einstellungen vorgenommen werden.

LAN Interface #1

Für das LAN Interface #1 an welchem das Modem betrieben wird, werden alle Einstellungen auf automatisch gesetzt. Ausserdem handelt es sich bei diesem Interface um den “Default Gateway”.

LAN Interface #2

Für das LAN Interface #2, an welchem alle lokalen Geräte angeschlossen sind, wird die statische IP des NAS, das Standard-Gateway (dieselbe IP wie für das Interface) und ein DNS definiert. Der DNS von Google lautet 8.8.8.8

DHCP Server: Overview

Der DHCP-Server wird für das Interface #2 aktiviert und ein entsprechendes Subnetz eingerichtet und aktiviert. Die Adress lease time wird in Sekunden eingetragen – 600 bedeutet somit  10 Minuten.

DHCP Server: Detail

Der DHCP-Server wird für das Interface #2 aktiviert und ein entsprechendes Subnetz eingerichtet und aktiviert. Die Adress lease time wird in Sekunden eingetragen – 600 bedeutet somit  10 Minuten.