Bash : Video aus Webcam Bildern erstellen

Da ich es einfacher finde für die Archivierung von Webcam Bildern Videos zu verwenden habe ich diese Script geschrieben. Die Webcam erstellt ein Bild wenn Sie Bewegung wahrnimmt. Diese werden von diesem Skript zu einen einzelnen Video vereint.
Ihr müsst nur die Variablen euren Gegebenheiten anpassen.
Variablen :
{FTP-USER} = der FTP Benutzer
{FTP-GROUP} = die FTP Gruppe
{QUELL-PFAD} = quelle der Snapshots
{ZIEL-PFAD} = wo soll das Video abgelegt werden ?
Script :
#!/bin/bash
#
# Konvertiert Einzelbilder zu Video mit ffmpeg
_src_folder={QUELL-PFAD}
_src_file_format=jpg
_tar_folder={ZIEL-PFAD}
_tar_file_format=mpg
_tar_file_name="video_$(date +%Y-%m-%d_%R)"
_temp_folder=$(mktemp -d)
_length=5
_cnt_files_in_src=$(ls -l ${_src_folder}/*.${_src_file_format} 2>/dev/null | wc -l)
_ftp_user={FTP-USER}
_ftp_group={FTP-GROUP}
_bin_ffmpeg=$(which ffmpeg)
_bin_chown=$(which chown)
_bin_rm=$(which rm)
_bin_find=$(which find)
# Bilder nach konvertieren löschen ?
DELFILESAFTERVIDEO=TRUE # TRUE OR FALSE
# setze symlinks in tempfolder
cnt=1
if [ ${_cnt_files_in_src} != "0" ]; then
        if [[ -d  "${_temp_folder}" && -d "${_src_folder}" ]]; then
                for i in ${_src_folder}/*.${_src_file_format};
                do
                        ln -s "${i}" "${_temp_folder}/$(printf %0${_length}d $cnt).jpg"
                        ((cnt++))
                done
                ${_bin_ffmpeg} -f image2 -i "${_temp_folder}/%0${_length}d.jpg" -r 25 -vcodec libx264 "${_tar_folder}/${_tar_file_name}.${_tar_file_format}" > /dev/null 2>&1
                ${_bin_rm} -rf "${_temp_folder}"
                ${_bin_chown} ${_ftp_user}:${_ftp_group} "${_tar_folder}/${_tar_file_name}.${_tar_file_format}"
                # löscht alle vorhanden bilder
                if [ ${DELFILESAFTERVIDEO} == "TRUE" ]; then
                ${_bin_find} ${_src_folder}/ -name "*.${_src_file_format}" -exec ${_bin_rm} {} \;
                fi
        else
                echo "ERROR : TEMP FOLDER OR SOURCE FOLDER DO NOT EXISTS"
                exit 99
        fi
else
                echo "found no files in source exit"
                exit 99
fi

RaspberryPI : DHT22 Sensor - Temperatur & Luftfeuchtigkeit monitoren

Wenn man zuhause Temperatur & Luftfeuchtigkeit monitoren will bietet sich der DHT22 an. Ich habe mich für diesen hier entschieden.
Um den Sensor in Betreib zu nehmen benötigen wir erst noch einiges an Software auf dem kleinen.
Dazu werden wir erstmal Admin auf dem Raspberry
sudo -s
dann installieren wir die benötigten Packete mit
apt install build-essential python-dev python-openssl git-core vim
wir benötigen jetzt noch die python module für den sensor das können wir mit dem folgenden Befehl erledigen.
cd ~ && git clone https://github.com/adafruit/Adafruit_Python_DHT.git && cd Adafruit_Python_DHT && python setup.py install
jetzt sollte alles installiert sein was wir benötigen.

Jetzt schließen wir noch den Sensor nach dem unten aufgeführten Schema an.

DHT22 an Raspberry PI 3
DHT22 an Raspberry PI 3

DHT22 an Raspberry PI 3 Schema
Adafruit liefert hier ein kleines example mit zum testen.
~/Adafruit_Python_DHT/example/Adafruit.py 22 4
Wenn alles richtig gemacht wurde erhällt man jetzt einen Output der so oder so ähnlich aussieht.
~/Adafruit_Python_DHT/examples/AdafruitDHT.py 22 4
Temp=22.7*  Humidity=44.5%
22 = der Sensor DHT22
4 = der gpio Pin an dem die Sensor Leitung hängt

Jetzt bekommen wir Werte vom Sensor um diese aber zu Monitoren brauchen wir noch eine Software die das erledigt. Da ich hier bereits eine fertige Grafana Installation habe verwende ich natürlich diese. Die Werte erhält Grafana bereits über den collectd Agent, deswegen habe ich mich dazu entschieden auch die Temperaturen über diesen Weg zu reporten.

Ich habe bei meinem Skript schon darauf geachtet das der Sensor justiert werden kann (ADJUST SETTINGS DHT22)

Hier mein Skript für collectd, das legt ihr unter dem Namen dht22.py im Pfad /usr/lib/collectd/python ab
import collectd
import Adafruit_DHT
from decimal import Decimal

SENSOR = Adafruit_DHT.DHT22
PIN = 4

# ADJUST SETTINGS DHT22

# mögliche werte + / - / NULL
ADJ_TEMP_DO = "-"
ADJ_TEMP_VAR = "1.2"

# mögliche werte + / - / NULL
ADJ_HUM_DO = ""
ADJ_HUM_VAR = "0"

def config_func(config):
    pin_set = False
    for node in config.children:
        key = node.key.lower()
        val = node.values[0]
        if key == 'gpio_pin':
            global PIN
            PIN = val
            pin_set = True
        else:
            collectd.info('DHT22 Plugin: Unknown config key "%s"' % key)
    if pin_set:
        collectd.info('DHT22 Plugin : Using override PIN %s' % PIN)
    else:
        collectd.info('DHT22 Plugin : Using default PIN  %s' % PIN)
def read_measurements():
    humidity, temperature = Adafruit_DHT.read_retry(SENSOR, PIN)
    if humidity is not None and temperature is not None:
        if ADJ_TEMP_DO == "-":
            _temp = round(Decimal(temperature),2) - round(Decimal(ADJ_TEMP_VAR),2)
        elif ADJ_TEMP_DO == "+":
            _temp = round(Decimal(temperature),2) + round(Decimal(ADJ_TEMP_VAR),2)
        else:
            _temp = round(Decimal(temperature),2)
        if ADJ_HUM_DO == "-":
            _hum =  round(Decimal(humidity),2) - round(Decimal(ADJ_HUM_VAR),2)
        elif ADJ_HUM_DO == "+":
            _hum =  round(Decimal(humidity),2) + round(Decimal(ADJ_HUM_VAR),2)
        else:
            _hum =  round(Decimal(humidity),2)
    val = collectd.Values(type='temperature')
    val.plugin = 'DHT22_SENSOR'
    val.dispatch(values=[_temp])
    val = collectd.Values(type='humidity')
    val.plugin = 'DHT22_SENSOR'
    val.dispatch(values=[_hum])
collectd.register_config(config_func)
collectd.register_read(read_measurements)

Damit collectd das Skript auch verwendet muss es natürlich erstmal konfiguriert sein.
Auszug aus collectd.conf
.....
.....
LoadPlugin python
.....
.....
<Plugin python>
    ModulePath "/usr/lib/collectd/python"
    Import dht22
    <Module dht22>
        gpio_pin "4"
    </Module>
</python>
dann noch einen Restart von collectd
systemctl restart collectd
wenn ihr alles richtig gemacht habt könnt ihr jetzt dieses Panel in Grafana anlegen.

DHT22 in Grafana
DHT22 in Grafana

PI-HOLE anzeigen geblocketer Webseiten auf Sense Hat

Ich hatte mal wieder Lust etwas mit dem Raspberry Pi zu basteln. Also hab ich mir ein Sense Hat besorgt und mein erstes Projekt war die geblockten Seiten von pi-hole auf der LED Matrix anzuzeigen. Grün heißt die Seite ist ok, rot sie ist geblockt.

Raus gekommen ist das hier :


Hier das Skript dazu :
#!/usr/bin/python

import tailer
from sense_hat import SenseHat
sense = SenseHat()
sense.set_rotation(180)
sense.clear()
sense.low_light = True

logfile = '/var/log/pihole.log'
searchs = '/etc/pihole/gravity.list'
pix_h = 0
pix_v = 0

def sense_pixel(pixcol):
        global pix_h
        global pix_v
        sense.set_pixel(pix_h, pix_v, pixcol)
        pix_h +=1
        if pix_h > 7:
                pix_h = 0
                pix_v +=1
        if pix_v > 7:
                pix_h = 0
                pix_v = 0

def main():
        for line in tailer.follow(open(logfile)):
                if line.find(searchs) == -1:
                        # NOT BLOCKED
                        sense_pixel([5,58,0])
                else:
                        # BLOCKED
                        sense_pixel([255,0,0])

main()


Installation Sense Hat

sudo apt-get update
sudo apt-get install sense-hat
danach einen Neustart machen

Installation tailer für python 2.X

sudo apt-get install python-setuptools
sudo easy_install pip
sudo pip install tailer


Installation tailer für python 3.X

sudo apt-get install python3-setuptools
sudo easy_install3 pip
sudo pip install tailer



Quelle : https://pythonhosted.org/sense-hat/

Raspberry Pi3 & OMD - Open Monitoring Distribution

Servermonitorring wird immer wichtiger je größer die zu überwachende Umgebung wird. Es gibt verschiedene Ansätze um dies zu realisieren. Die Jungs von Check_MK haben eine freie Alternative zu ihrem Produkt (CEE) geschaffen das für kleinere Umgebungen durchaus genügt.
Allerdings ist in der freien Version CRE oder OMD etwas mehr Handarbeit nötig, vor allem bei den Agents.

Da ich einen Raspberry Pi3 verwende habe ich mich für OMD entschieden da es hier schon fertige Packete für armv8 gibt.

Erstmal besorgt man sich ein aktuelles raspbian-lite und schreibt das Image auf eine Micro-SD, ich würde hier mind. 8 GB empfehlen.
Da dieser Schritt zu genüge im Internet erklärt ist gehe ich hier nicht weiter darauf ein.

Sobald das System läuft kann man sich über die IP anmelden. Ich habe dafür einfach auf meinem DHCP Server nachgeschaut.

1.) Anmelden über SSH auf dem RaspBerry Pi3
ssh pi@IP-Adresse
oder, für die Windows Benutzer, über Putty / Kitty. Default Zugangsdaten sind Benutzer : pi Passwort : raspberry

2.) Ändern der Passwörter
Bleibt nicht auf den Defaults das ist ein unnötiges Risiko.

Einmal das user Passwort ändern mit passwd und dann das root Passwort mit sudo passwd

3.) Mit root anmelden
su - root
man könnte auch alle Schritte mit sudo erledigen aber gerade für die Grundkonfiguration geht mir pers. das auf die Nerven

4.) Nachdem man mit root angemeldet ist das System auf den aktuellsten Stand bringen
apt-get update && apt-get -y upgrade


5.) ändern des Computernamen
raspi-config

Hostname Konfiguration raspbianHostname Konfiguration raspbian

6.) Einstellen der Länderspezifischen Sachen & Expand Filesystem

Für Deutschland empfehle ich diese Einstellungen
I1 = de_DE.UTF-8 UTF-8
I2 = Europe/Berlin
I4 = DE Germany

5 Internationalisation Options
Expand Filesystem

7.) System neu starten
Müsste von raspi-config sowieso verlangt werden, sollte dies nicht der Fall
reboot
oder
shutdown -r now


8.) Erneut am System via SSH anmelden (siehe 1. und 3.)

9.) Einbinden des OMD Repository & Cache erneuern

Erstmal installieren wir uns den GPG Key für das Repo
cd ~
wget -q "https://labs.consol.de/repo/stable/RPM-GPG-KEY" -O - | sudo apt-key add -

Jetzt fügen wir das Repository hinzu
echo "deb http://labs.consol.de/repo/stable/debian $(lsb_release -cs) main" > /etc/apt/sources.list.d/labs-consol-stable.list

Dann müssen wir den Packet Cache erneuern
apt-get update


10.) Jetzt können wir omd installieren
Das META Packet installiert die aktuellste Version incl. der Abhängigkeiten
apt-get install omd-labs-edition


11.) Während der Installation muss ein MySQL Passwort für den Benutzer root vergeben werden.

12.) Sicherstellen das das System für OMD vorbereitet ist.
omd setup

13.) eine Seite für die Überwachung in OMD anlegen
omd create demo
wobei demo euer Sitename ist

14.) Konfigurieren der Seite
omd config demo
ich zeige euch meine Konfiguration es gibt aber viele andere Möglichkeiten OMD zu konfigurieren !

CONFIG OMD

solltet ihr meine Konfiguration übernehmen müsst ihr noch eine Datei editieren. Es kann vorkommen das dieser Schritt nach jedem Update gemacht werden muss jedoch hatte ich noch keine Probleme damit.
nano /omd/sites/demo/etc/apache/conf.d/auth.conf
dort kommentiert ihr Auth* und require valid-user aus.
#  AuthName "OMD Monitoring Site demo"
#  AuthType Basic
#  AuthUserFile /omd/sites/demo/etc/htpasswd
#  require valid-user

wenn ihr das nicht macht bekommt ihr immer 2 Anmeldemasken , die 1. ist von Thruk die 2. von Check_MK/OMD

15.) Starten der OMD Seite
omd start demo


16.) Server selbst überwachen - OPTIONAL
Wenn ihr den Server selbst überwachen möchtet müsst ihr euch noch den passenden Agent installieren.
dpkg -i /omd/sites/demo/share/check_mk/agents/check-mk-agent_1.2.6p12-1_all.deb 
auch das überwachen auf neue Updates würde ich gleich mit auf dem lokalen Server nach dieser Anleitung einrichten


Weiterführende Links :
Raspberry - Temperatur in Prompt
SSH Login ohne Passwort
OMD/CHECK_MK Plugin - Quotas überwachen Windows 2008 R2
OMD/CHECK_MK Plugin - Aufgaben überwachen (inzw. incl.)
OMD/CHECK_MK Plugin - Debian auf Updates überwachen
Viele weitere Plugins für OMD/CHECK_MK

Quellen :
https://labs.consol.de/repo/stable/
http://omdistro.org/start
https://www.raspberrypi.org/downloads/raspbian/

Temperatur auf der Admin Seite von Pihole anzeigen

Wie ihr hier auf dem Screenshot sehen könnt wird bei mir die Temperatur direkt in der Admin Webseite mit angezeigt.
Es liegt hier eine Farbskala zugrunde.

Alles bis 60 °C = grün
Zwischen 61 °C und 79 °C = gelb
Alles über 80 °C = rot



Ich wurde schon mehrmals deswegen angeschrieben wie ich das realisiert habe, ist ganz einfach ;-)

1.) Anmelden über ssh auf dem Pihole System
2.) folgenden Befehl ausführen
nano /var/www/html/admin/header.html

3.) Dort sucht ihr nach diesem Block
 "0") {
            echo ' Active
'; } else { echo ' Offline
'; }

4.) Darunter fügt ihr die Temperatur ein indem ihr diesem Block direkt darunter kopiert (bei mir Zeile 114)
// Temperatur auslesen und darstellen
$datei = "/sys/class/thermal/thermal_zone0/temp";
// Datei zeilenweise auslesen
$zeile = file($datei);
$temp = $zeile[0];
$temp0 = substr($temp,0,2);
$temp1 = number_format($temp / 1000,2, '.', '');
// bis 60 Grad ok
if ($temp0 <= 60) {
echo '  ' . $temp1 . ' C';
}
// ab 61 Grad warning
if ($temp0 >= 61 AND $temp <= 79) {
echo '  ' . $temp1 . ' C';
}
// ab 80 Grad Critical
if ($temp0 >= 80) {
echo '  ' . $temp1 . ' C';
}

Prompt für Raspberry

Wer die Temperatur des System immer im Auge behalten möchte und viel in der Shell arbeitet kann dies direkt mit der Prompt erledigen.

Öffnen der Datei ~/.bashrc dies kann man mit diesem Befehl erledigen
nano ~/.bashrc

Anlegen einer speziellen Prompt für den Benutzer, indem man den folgenden Text ganz unten in die Datei ~/.bashrc kopiert.
# Prompt
export PS1='\[\033[1;33m\]\u\[\033[1;30m\]@\[\033[1;31m\]\H \[\033[1;30m\]- \A - $(vcgencmd measure_temp) \[\033[0m\] #> '



“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)