SchlagwortRaspberry PI

Gosund EP2, Teckin 22, Tuya Geräte ohne China Cloud und ohne flashen

Nachdem man leider die “flashbaren” Wlan-Steckdosen von Gosund SP111 nicht mehr bei Amazon bekommt ist es schwierig diese in Home Assistant zu integrieren. Schließlich bin ich auf die Component “localtuya” gestoßen. Zwar braucht man trotzdem einmalig die Tuya-App für die Einrichtung, dannach ist man aber von der China-Cloud befreit. In meiner Firewall habe ich auch den Zugriff für die Tuya Geräte auf der Internet geblockt.

Um nun die notwendigen Device-Ids und Keys zu bekommen muss man zunächst einen Account auf https://iot.tuya.com anlegen.

Im Anschluss erzeugt man unter “Cloud Develoment” eine neue App.

Im Anschluss daran müsst ihr eine App unter “App Services –> App SDK” anlegen.

Zum Abschluss müsst ihr noch die App aus dem AppSDK in der App in Cloud Development hinzufügen. Eine detailierte Beschreibung gibt es hier.

Nachdem das soweit erledigt ist, und Ihr nun Access ID/Client ID und Access Secret habt, braucht ihr ein Linux System (beispielsweise eine Raspberry).

Aus dem System installiert ihr nun npm mit folgendem Befehl:

apt install -y npm

Sobald alles durch ist, müsst ihr die tuya-cli installieren. Dies macht ihr mit folgendem Command:

npm i @tuyapi/cli -g

Beachtet bitte Schritte 1-4 von Github.

Nun solltet ihr erfolgreich die Device-Id’s eurer Geräte ausgelesen haben.

Zum Schluss muss noch der Ordner custom_components/localtuya aus disem Git nach custom_components/localtuya in euer Home Assistant Konfiguration kopiert werden.

Mit dieser Konfiguration für Home Assistent kann man nun aus HA ohne die Tuya Cloud auf die Geräte zugreifen.

localtuya:
  - host: 192.168.1.x
    device_id: xxxxx
    local_key: xxxxx
    friendly_name: Tuya Device
    protocol_version: "3.3"
    entities:
      - platform: binary_sensor
        friendly_name: Plug Status
        id: 1
        device_class: power
        state_on: "true" # Optional
        state_off: "false" # Optional

      - platform: cover
        friendly_name: Device Cover
        id: 2
        open_close_cmds: ["on_off","open_close"] # Optional, default: "on_off"
        positioning_mode: ["none","position","fake"] # Optional, default: "none"
        currpos_dps: 3 # Optional, required only for "position" mode
        setpos_dps: 4  # Optional, required only for "position" mode
        span_time: 25  # Full movement time: Optional, required only for "fake" mode
        
      - platform: fan
        friendly_name: Device Fan
        id: 3

      - platform: light
        friendly_name: Device Light
        id: 4 # Usually 1 or 20
        color_mode: 21 # Optional, usually 2 or 21, default: "none"
        brightness: 22 # Optional, usually 3 or 22, default: "none"
        color_temp: 23 # Optional, usually 4 or 23, default: "none"
        color: 24 # Optional, usually 5 (RGB_HSV) or 24(HSV), default: "none"
        brightness_lower: 29 # Optional, usually 0 or 29, default: 29
        brightness_upper: 1000 # Optional, usually 255 or 1000, default: 1000
        color_temp_min_kelvin: 2700 # Optional, default: 2700
        color_temp_max_kelvin: 6500 # Optional, default: 6500


      - platform: sensor
        friendly_name: Plug Voltage
        id: 20
        scaling: 0.1 # Optional
        device_class: voltage # Optional
        unit_of_measurement: "V" # Optional

      - platform: switch
        friendly_name: Plug
        id: 1
        current: 18 # Optional
        current_consumption: 19 # Optional
        voltage: 20 # Optional

Apache für LOW Memory VPS/Raspberry Pi optimieren

Apache und LOW Memory vertragen sich ja nicht so wirklich, deshalb eines Vorweg, man sollte wenn man nich unbedingt Apache braucht, auf Alternative wie nginx oder Lighttpd setzen. Ich betreibe eigentlich nur auf allen meinen kleineren Systemen (<2GB Ram) nur nginx und (<256MB Ram) lighttpd. Hier haben ich auch einen Link zu einer Low Memory LLMP Konfiguration.

Nichts desto trotz benötigt man manchmal unbedingt einen Indianer, und so kann man ihn auch auf einem Low Mem Server betreiben.

Also wie gesagt ist das größte Problem der Speicher den der Apache braucht. In der Konfigurationsdatei
/etc/apache2/apache2.conf kann man die Einstellungen tunen.

nano /etc/apache2/apache2.conf

In der Konfigurationsdatei dann folgende Konfiguration vornehmen:

<IfModule mpm_prefork_module>
    StartServers          1
    MinSpareServers       1
    MaxSpareServers       3
    MaxClients           10
    MaxRequestsPerChild 3000
</IfModule>
 
<IfModule mpm_worker_module>
    StartServers          1
    MinSpareThreads       5
    MaxSpareThreads      15 
    ThreadLimit          25
    ThreadsPerChild       5
    MaxClients           25
    MaxRequestsPerChild 200
</IfModule>

Des weiteren empfiehlt sich das Timeout zu reduzieren. KeepAliveTimeout sollte nicht mehr als 15 (Sekunden) betragen.

Nach diesen Einstellungen ist Apache schon wesentlich genügsamen. Jetzt sollte man noch nicht benötigte Module deaktivieren. Mit diesem Befehl seht Ihr alle Apache Module.

apache2ctl -M

Bildschirmfoto 2015-11-15 um 12.21.51

Um beispielsweise einen WordPress Blog zu hosten brauch man folgende Module (wie gesagt, WordPress läuft auch unter nginx & Lighttpd).

LoadModule dir_module modules/mod_dir.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule alias_module modules/mod_alias.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule rewrite_module modules/mod_rewrite.so

Um ein Modul zu deaktivieren kann man entweder die Konfigurationsdatei oder aber folgenden Befehl ausführen:

# Modul aktivieren
a2enmod module_name
#Modul deaktivieren
a2dismod module_name

Anschließend noch den Apache neu starten und Spaß haben.

Raspberry Pi Images auf SD brennen unter Linux/OSX

Aktuell liegen der Einfachheit halber die Raspberry Distributionen als Image vor. Häufig stellt man sich nun die Frage, wie bekomme ich das Image nun auf die SD-Karte. Unter Windows kann man einfach das Tool Win32-DiskImager nutzen, welches sich zu schreiben von Images als auch zu lesen eignet.

Unter OS X oder Linux findet man deutlich weniger Information zu diesem Thema, aber eigentlich geht es hier noch viel eifacher. Hat man das Image heruntergeladen, liegt es typischerweise als “.img” Datei vor. Jetzt kann man das Image einfach mid dd auf die SD Karte schreiben. dd ist bereits bei OS X und auch bei Linux im minimal Umfang enthalten.

sudo dd bs=1M if=/home/felix/Downloads/2014-12-24-wheezy-raspbian.img of=/dev/mmcblk0

 

Samba4 ActiveDirectory auf einem Raspberry PI

Ohne jetzt viel Zeit auf die Vor- & Nachteile eines Active Directorys (AD) eingehen zu wollen, möchte ich Euch kurz zeigen wie man ein Samba4 aus dem Git zieht und kompiliert.

Los gehts mit der Vorbereitung. Zuerst einmal müssen wir alle Pakete, welche zum Build benötigt werden installieren.

apt-get install python-dev git-core libacl1-dev libblkid-dev libgnutls-dev build-essential libacl1-dev libattr1-dev libreadline-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev dnsutils libbsd-dev attr krb5-user docbook-xsl libcups2-dev cups cups-pdf

Nachdem jetzt unser System vorbereitet ist, müssen wir uns eine Kopie herunterladen. Da ich immer gerne eine aktuelle Version habe, empfehle ich diese direkt aus dem stable branch zu laden.

cd ~
mkdir samba
cd samba
git clone -b v4-3-stable git://git.samba.org/samba.git samba-v4-3-stable

Soweit so gut,  jetzt müssen die Automakescripte erzeugt werden

cd samba-v4-0-stable/ && ./configure

Dieser Schritt dauert bereits 15 Minuten auf der PI … und es wird nicht besser 🙁 Im Anschluss bauen wir nun unser Samba. Hier empfiehlt es sich, das bauen vor der Arbeit oder über Nacht anzustarten.

make

Ist der Build nun nach gut 4 Stunden erfolgreich durchgelaufen (Warnings ignorieren wir mal :D) installieren wird noch unser Samba.

make install

 

 

 

 

 

 

 

 

 

Fritzbox, Linux clients und statische IPs

Wer kennt das Problem nicht, man hat eine Linux Box im Heimnetz. Ob visualisierte test Maschinen, Raspberries oder ähnliches. Bei mir haben alle “stationären” Systeme feste IPs. Jetzt beginnt das Problem, da diese Systeme meist nicht hinausposaunen. Die Fritzbox muss sich nun überlegen, wie sie an den Namen kommt. 2 Wege funktionieren typischerweise. Zu einen kann die Fritzbox den Namen via Netbios bestimmen oder aber via Bonjour.

Hier die Anleitung wie Ihr Bonjour auf Debian, Raspbian, Raspbmc nachinstallieren könnt (der Name kommt dann aus /etc/hostname)

apt-get install avahi-daemon

 

TvHeadEnd meets SatIP

Heute bin ich durch Zufall auf den Thread aufmerksam geworden.

Der User”Perexg” hat heute viel Code in den Master Branch des TvHeadEnd Branch gepushed. Hier gehts zum GIT Repository.

Hier noch ganz schnell ein How To, wie Ihr den TvHeadEnd auf Debian selbst baut. Leider ist mein Build auf dem PI mid den Sourcen des Users gefailed.

apt-get update
apt-get install unzip git-core pkg-config dvb-apps     
apt-get install g++-4.7 build-essential
apt-get install libcurl4-openssl-dev libavahi-client-dev zlib1g-dev libavcodec-dev libavutil-dev libavformat-dev libswscale-dev liburiparser-dev
export CC=gcc-4.7
export GCC=gcc-4.7
mkdir ~/tvheadend
cd ~/tvheadend

Option A. den Original Thread laden

git clone "https://github.com/tvheadend/tvheadend.git"
cd tvheadend

Option B, direkt das Zip herunterladen

wget https://github.com/tvheadend/tvheadend/archive/master.zip
unzip master.zip
cd tvheadend-satip/

Jetzt noch schnell bauen

./configure && make && make install
groupadd tvheadend
useradd -g tvheadend -G video -m tvheadend
usermod -G audio -a tvheadend

Wenn Ihr Probleme mit der libiconv habt, dann schaut doch mal hier rein.

Oder aber Eure ffmpeg libraries sind zu alt, da gibt es hier ein kleinen Guide.

Zum Schluss noch das Startup Script erzeugen

nano /etc/init.d/tvheadend

#!/bin/bash
### BEGIN INIT INFO
# Provides:          tvheadend
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Should-Start:      $syslog
# Should-Stop:       $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1
# Short-Description: start/stop tvheadend Server
### END INIT INFO

TVHNAME="tvheadend"
TVHBIN="/usr/local/bin/tvheadend"
TVHUSER="tvheadend"
TVHGROUP="tvheadend"
PIDFILE=/var/run/$TVHNAME.pid

start() {
    if [ -e $PIDFILE ]; then
        PID=$(ps ax | grep -v grep | grep -w $(cat $PIDFILE) | awk '{print $1}')
        if [ -n "$PID" ]; then
            echo "$TVHNAME already running (pid $PID)."
            exit 1
        fi
    fi
    echo -n "Starting tvheadend: "
    start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user ${TVHUSER} --exec ${TVHBIN} -- \
        -u ${TVHUSER} -g ${TVHGROUP} -f -C
    echo "Done."
}

stop() {
    if [ -e $PIDFILE ]; then
        PID=$(ps ax | grep -v grep | grep -w $(cat $PIDFILE) | awk '{print $1}')
        if [ -n "$PID" ]; then
            echo -n "Stopping $TVHNAME: "
            start-stop-daemon --stop --quiet --pidfile $PIDFILE --name ${TVHNAME}
            echo "Done."
        else
            echo "$TVHNAME is not running."
        fi
    else
        echo "$TVHNAME is not running."
    fi
}

status() {
    if [ -e $PIDFILE ]; then
        PID=$(ps ax | grep -v grep | grep -w $(cat $PIDFILE) | awk '{print $1}')
        if [ -n "$PID" ]; then
            echo "$TVHNAME is running (pid $PID)."
        else
            echo "$TVHNAME is not running."
            [ -e $PIDFILE ] && exit 1 || exit 3
        fi
    fi
}

case "$1" in
 start) start ;;
 stop) stop ;;
 status) status ;;
 restart) stop && sleep 2 && start ;;
 *) echo "Usage: $0 [start|stop|restart|status]" && exit 1 ;;
esac

exit 0

Wollt Ihr, dass der TvHeadEnd automatisch startet, dann müsst Ihr noch folgendes ausführen:

chmod +x /etc/init.d/tvheadend
update-rc.d tvheadend defaults
/etc/init.d/tvheadend start