MuliWiki · Aktualisiert am 2017-03-20 21:17 · Edit · History · Recent changes

Willkommen bei meinem kleinen Wiki (#)

Hier sammel ich diverse Code-Schnippsel für meine privaten Zwecke und sonstigen Technik-Kram. Aus diesem Grund sind die meisten Einträge hier unvollständig oder recht spezifisch, da ich hier nur Inhalte ablege, wenn ich sie mal für etwas brauche oder benötigte, manchmal dienen sie auch nur als schnelle Copy & Past Vorlagen. Zugleich begründet sich darin auch das nicht vorhandene Layout des Wikis - ich denke, es zählen die Inhalte und nicht so sehr das visuelle Auftreten, deswegen siehst Du hier nur die Standard-Browser-Formatierungen, aber ich denke, das ist gar nicht so unangenehm. Beachte übrigens auch, dass ich die meisten Codes auf einem Rasperry Pi ohne direkte WWW-Anbindung nutze, deswegen wird auf umfangreiche Absicherung der Codes sowie Fehlerabfragen verzichtet.


Projekt-Schnippsel (#)


Raspberry Pi - WLAN Stick einbinden (#)

  • WLAN-Stick Edimax
  • Wird automatisch erkannt

Installation

  • Einstecken und den Rasperry Pi starten
  • Mit dmesg prüfen, ob er der Stick prinzipiell erkannt wurde
  • Mit ifconfig abfragen, ob das neue Netzwerk wlan0 in der Liste auftaucht
  • Wenn ja, hat alles geklappt

Stromsparmodus deaktivieren

  • Folgende Datei erstellen:
    sudo nano /etc/modprobe.d/8192cu.conf
  • Folgenden Inhalt einfügen:
    options 8192cu rtw_power_mgnt=0 rtw_enusbss=0
  • Speichern

WLAN einrichten

  • Die Datei bearbeiten:
    sudo nano /etc/network/interfaces
  • Folgenden Inhalt einfügen:
    auto lo
    iface lo inet loopback
    iface eth0 inet dhcp
    auto wlan0
    allow-hotplug wlan0
    iface wlan0 inet dhcp
    wpa-ap-scan 1
    wpa-scan-ssid 1
    wpa-ssid "DEIN-WLAN-NAME"
    wpa-psk "DEIN-WLAN-SCHLÜSSEL"


Raspberry Pi - Temperatur aufzeichnen (#)

Schlichter Aufbau um die Daten von zwei Sensoren in Textdateien zu speichern. Allerdings werden hier keine Fehler abgefangen, Code ist gerade in Bearbeitung, nicht einfach so übernehmen!

#!/bin/bash

# Variablen definieren
datum=$(date "+%Y-%m-%d")
uhrzeit=$(date "+%H:%M:%S")
aktuell=/media/usb/fotos/aktuell.txt
aufzeichnung=/media/usb/fotos/aufzeichnung.txt
long=/media/usb/fotos/long.txt

# Temperatur auslesen
sensor_aussen=$(echo "scale=1; $(grep 't=' /sys/bus/w1/devices/28-0416b381aeff/w1_slave | awk -F 't=' '{print }') / 1000" | bc -l)
sensor_innen=$(echo "scale=1; $(grep 't=' /sys/bus/w1/devices/28-0316b38075ff/w1_slave | awk -F 't=' '{print }') / 1000" | bc -l)

# Daten ausgeben und in Textdateien ablegen
echo "$uhrzeit,$sensor_aussen,$sensor_innen" > "$aktuell"
echo "$uhrzeit,$sensor_aussen,$sensor_innen" >> "$aufzeichnung"
echo "$datum,$uhrzeit,$sensor_aussen,$sensor_innen" >> "$long"

# Erste Zeile bei der Aufzeichnung wieder entfernen
echo "$(tail -n +2 $aufzeichnung)" > "$aufzeichnung"

# Foto erstellen
cd /media/usb/fotos
SHOT=$(date +"%Y-%m-%d_%H%M%S")
raspistill -w 640 -h 480 -q 90 -rot 180 -o $SHOT.jpg

# Foto und Temperatur-Dateien hochladen
xxxxxx


PHPlot - Grafiken zeichnen (#)

  • Mit PHPlot kann man sogenannte Charts erstellen - also zum Beispiel tabellarische Werte in Grafiken visualisieren.
  • Einfach die Bibliothek phplot.php in den Code einbinden.
  • Download: http://www.phplot.com/

Ergebnis

Code

<?php
require_once 'phplot.php';
$plot = new PHPlot(800,300);

$example_data = array(
     array('09:10',3,5),
     array('09:20',5,5),
     array('09:30',17.6,24.3),
     array('09:40',8,16),
     array('09:50',26.3,24.6),
     array('10:00',6,2),
);

$plot->SetDataValues($example_data);
$plot->SetTitle("Temperatur aussen");
$plot->SetXTitle('Uhrzeit');
$plot->SetYTitle('Temperatur');
$plot->SetXTickLabelPos('none');
$plot->SetXTickPos('none');

$plot->SetDataColors(array('red', 'blue'));
$plot->SetGridColor('gray');
$plot->SetLegend(array('Innen', 'Aussen'));

$plot->DrawGraph();
?>


Beispiel: Temperatur auslesen und anzeigen (#)

Hier ein simples Beispiel, um beispielsweise Temperatur-Daten aus einer Textdatei, erstellt mit einem Raspberry Pi, in PHPlot einzulesen und auszugeben.

Datei log.txt

Aufbau: Uhrzeit, Temperatur 1, Temperatur 2, Temperatur 3

10:00,17.83,18.79,13.4
10:10,10.74,17.76,15.6
10:20,18.54,18.62,18.3
10:30,25.17,18.88,18,7
10:40,17.98,18.31,22.4

Code

<?php
define('DATAFILE', 'log.txt');
require_once 'phplot.php';

function temperatur($filename)
{
    $f = fopen($filename, 'r');
    if (!$f) {
        fwrite(STDERR, "Failed to open data file: $filename\n");
        return FALSE;
    }

    while ($r = fgetcsv($f)) {
        $d[$r[0]] = array($r[1], $r[2], $r[3]);
    }
    fclose($f);

    foreach ($d as $date => $r) {
        $data[] = array($date, $r[0], $r[1], $r[2]);
    }
    return $data;
}

$plot = new PHPlot(800, 300);

$plot->SetDataValues(temperatur(DATAFILE));
$plot->SetTitle("Intervall 10 Minuten");
$plot->SetXTitle('Uhrzeit');
$plot->SetXLabelAngle(90);
$plot->SetYTitle('Temperatur');
$plot->SetLineWidths(1);
$plot->SetLineStyles('solid');
$plot->SetPointShapes('rect');
$plot->SetDataColors(array('red', 'blue', 'black'));
$plot->SetGridColor('gray');
$plot->SetLegend(array('Innen', 'Aussen', 'Rasperry'));
$plot->DrawGraph();
?>


Crontab-Syntax (#)

Crontab bearbeiten

sudo crontab -e

Aufbau der Zeiten

Minuten 0...59 | * für jede Minute 
Stunden 0...23 | * für jede Stunde 
Tage 1...31 | * für jeden Tag 
Monate 1...12 | * für jeden Monat 
Wochentage 0...7 | * für jeden Wochentag ( 0 und 7 adressieren den Sonntag )


Beispiele (#)

Jeden Tag um zehn Minuten nach Mitternacht:

10 0 * * * /pfad/zum/programm

Jeden Mittwoch um zehn Minuten nach Mitternacht:

10 0 * * 3 /pfad/zum/programm

Jeden Wochentag um zehn Minuten 13,14 und 15Uhr:

10 13-15 * * 1-5 /pfad/zum/programm

Alle 15 Minuten zwischen 4 und 16 Uhr aber nur Samstags und Sonntags:

*/15 4-16 * * 6,7 /pfad/zum/programm


Raspberry Pi - Server einrichten (#)

sudo apt-get update
sudo apt-get install nginx
sudo mkdir /var/www

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

server {
        listen 80;
        server_name $domain_name;
        root /var/www;
        index index.html index.htm;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
}

sudo service nginx restart

Testen.

sudo apt-get install php5-fpm php-apc

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

server {
        listen 80;
        server_name $domain_name;
        root /var/www;
        index index.html index.htm;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        location ~\.php$ {
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_split_path_info (.+\.php)(/.*)$;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param HTTPS off;
                try_files $uri =404;
                include fastcgi_params;
        }
}

Testen.

sudo apt-get install mysql-server mysql-client php5-mysql phpmyadmin

Beim Einrichten Server-Feld leer lassen (nginx).

sudo ln -s /usr/share/phpmyadmin /var/www/phpmyadmin

root / passwort


Bash für den Alltag (#)

Bash - Generelles (#)

  • Datei ausführbar machen
    chmod +x /pfad/zu/mein_Skript
  • Datei ausführen
    bash daten.sh
  • Erste Zeile im Skript
    #!/bin/bash
  • Kommentare einfügen
    # Dies ist ein Kommentar
  • Variable erstellen
    datensatz="Guten Tag"
  • Variable ausgeben
    echo "$datensatz"
  • Variable löschen
    unset datensatz
  • Variable ausgeben und erweitern
    echo "${message}lolo"
  • Anführungszeichen maskieren
    echo "Sie sprach: \"Hallo, Welt\""
  • Datei auslesen
    #!/bin/bash
    
    for file in ./*/*.png ; do 
    	echo "Diese Datei: $file"
    	fname=$(basename "$file")
    	echo "hat den Namen: $fname"
    	fdir=$(dirname "$file")
    	echo "und steht im Verzeichnis: $fdir"
    done
  • Array auslesen
    echo ${array[2]} 
  • Array löschen
    unset array
  • If und else
    if [ Test-Bedingung ]
      then
        echo "Ok, alles in Ordnung."
      else
        echo "Ahrg...Fehler."
    fi
  • Prüfen, ob Datei vorhanden ist
    #!/bin/bash
    #Dateitest
    
    if [ -f /home/Pingu/test.txt ]
      then
        echo "Die Datei test.txt in Pingus Home ist da."
      else
        echo "Die Datei test.txt in Pingus Home fehlt."
    fi
  • Schleife durchlaufen
    #!/bin/bash
    
    inputdir="/home/foo/Bilder/ZuBearbeiten"
    outputdir="/home/foo/Bilder/Bearbeitet"
    
    for pic in "$inputdir"/*.png ; do 
        picname=$(basename "$pic")
        echo "Bearbeite Bild:    $picname"
        convert "$pic" -colorspace Gray "$outputdir/$picname"
    done


Bash - Diverses (#)

Erste Zeile in Datei löschen

echo "$(tail -n +2 file.txt)" > file.txt

Muss ich erst mal ausprobieren

IFS=$' =' read -a var <<< $(sort -t= -nr -k3 inputfile | head -1)
$ echo ${var[1]}
3.0
$ echo ${var[3]}
89.5039


PHP für den Alltag (#)


PHP if-Anweisungen (#)

<?php
$eintrag = "A";

if($user == "A") 
   {
   echo "Richtig";
   } 
else 
   {
   echo "Falsch";
   }

?>


PHP Vergleichsoperatoren (#)

$a == $b | Gleich

$a === $b | Identisch

$a != $b | Ungleich

$a !== $b | Identisch

$a < $b | Kleiner

$a <= $b | Kleiner Gleich

$a > $b | Größer

$a >= $b | Größer Gleich


PHP Variablen (#)

Variable anhängen

Folgender Code ergibt: Lorem Ipsum

<?php
$name = "Lorem ";
$name .= "Ipsum";
echo $name;
?>


PHP Arrays (#)

?php
$werte = array("223", "816", "452");

echo "Daten per Komma trennen: <br>";
$namenStr = implode(", ", $werte);
echo $namenStr; 
?>

?php
$werte = array("223", "816", "452");

echo "Ein Wert pro Zeile: <br>";
echo implode("<br>", $namen);
?>


PHP Datum (#)

Tag, Monat und Jahr

d	Tag des Monats, zweistellig
j	Tag des Monats, einstellig
m	Nummer des Monats, zweistellig
n	Nummer des Monats, einstellig
y	Jahr, zweistellig
Y	Jahr, vierstellig

Stunden, Minuten und Sekunden

H	Stunden im 24-Stunden-Format, zweistellig
G	Stunden im 24-Stunden-Format, einstellig
i	Minuten, zweistellig
s	Sekunden, zweistellig


Beispiele (#)

Ergebnis: 05.03.2017 - 20:35

<?php
$datum = date("d.m.Y - H:i");
echo $datum;
?>

Wenn man Text in die Ausgabe einfügen möchte, dann nutzt man \, beispielsweise 05.03.2017 um 20:35 Uhr.

<?php
echo date('d.m.Y \u\m H:i') . ' Uhr';
?>


PHP Schnippsel (#)


Minimum, Maximum und Durchschnittswerte aus einer Textdatei auslesen (#)

$file="test.txt";

$temperatures = file($file, FILE_IGNORE_NEW_LINES);

$min = min($temperatures);
$max = max($temperatures);
$average = array_sum($temperatures) / count($temperatures); 

$average_short = round($average, 1);

echo $min . "<br>";
echo $max . "<br>";
echo $average_short;