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

Postfix: Reprozessieren der Queue erzwingen

Postflix ist ein MTA. Manchmal ist es aus veschiedenen Gründen notwendig die Mailqueue zu reprozessieren.

Die Mailqueue kann man einfach mit “mailq” oder “postqueue -p” abfragen.

Um die Mailqueue zu reprozessieren einfach folgenden Befehl ausführen:

postqueue -f

In den Logs könnt Ihr den Fortschritt verfolgen:

tail -f /var/log/mail.log

Proxmox LXC Root Disk verkleinern

Wo es bei Proxmox einfach möglich ist, eine disc zu vergößern ist es schwieriger eine “große” Disc wieder zu verklenern. Im prinzip besteht die Prozedur aus folgenden Schritten:

  1. Container stoppen
  2. Backup Erstellen
  3. Container löschen
  4. Backup wiederherstellen mit verkleinerter Disk
pct stop 106
pct destroy 106
vzdump 106 -storage local -compress lzo
pct restore 106 /var/lib/vz/dump/vzdump-lxc-106-*.tar.zst --rootfs local:10

Im Beispiel oben gibt die local:10 die Größe der neuen Disk in GB an.

Docker OpenVPN Client Container für jDownloader, Torrent usw.

Um Dockercontainer über einen VPN Container zu routen muss man nicht viel konfigurieren. Am Beispiel von NordVPN erkläre ich wie ihr andere Container, beispielsweise jDownloader über ein VPN Netzwerk routen könnt.

docker run -ti --cap-add=NET_ADMIN --device /dev/net/tun --name vpn -e RECREATE_VPN_CRON="5 */3 * * *" -e RANDOM_TOP=10 -e USER=<username> -e PASS=<password> -d azinchen/nordvpn

Bei dem obigen aufruf ist es wichtig den Name des Containers zu setzen. In meinem Beispiel “vpn”.

Im Anschluss kann man nun jeden belibigen Container and den VPN Client binden. Im folgenden Beispiel verknüpfe ich einen Debian Container mit dem VPN Client. Hier ist es wichtig –net=container:vpn anzugeben.

docker run -it --net=container:vpn -d debian

Startet man ein traceroute im Debian Container sieht man nun, dass Pakete über den VPN tunnel geroutet werden. Jeder Container kann so über den Tunnel geroutet werden.

MySQL/MariaDB – Tabellen von MyISAM nach InnoDB konvertieren

Manchmal ist es notwendig Datenbank/Tabellen zu konvertieren. Kürzlich stand ich vor dem Problem eine Datenbank reparieren zu müssen.

Table 'tablename' is marked as crashed and should be repaired 

Hier die Queries, welche die notwendigen ALTER statements generieren.

InnoDB nach MyISAM


SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' engine=MyISAM;') 
FROM information_schema.TABLES WHERE ENGINE = 'InnoDB';

MyISAM nach InnoDB

SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' engine=InnoDB;') 
FROM information_schema.TABLES WHERE ENGINE = 'MyISAM';

MotionEye oder Synology Survilance Station

Kürzlich stand ich vor dem Problem mehr als zwei Kameras in einer Überwachungssoftware zu betreiben. Synology bietet mit der Survilance Stattion ein sehr gutes und einfach zu administrierendes Tool an. Leider schlagen die Lizenzen deutlich zu Buche. Aus diesem Grund habe ich mich entschieden eine OpenSouce zu nutzen.

Auf der suche stieß ich auf MotionEye. Ebenso gibt es docker als auch native Versionen. Ich entschied mich, die Last von meinen Server zu “off-loaden” und nahm eine Raspberry Pi 3, die sowieso im Schrank rum lag.

Zum Einsatz kam nun das fertige Image von Github und dre ganze Prozess, vom Download, Image-Schreiben bis zum booten dauert nur wenige Minuten.

Nun noch die Initiale Konfiguration durchführen und schon ist die kostenlose Survilance Station mit MotionEye online.

Free and Public Filter DNS [NO ADS]

Hallo, Werbung nervt immer! Aus diesem Grund haben sich einige Entwickler zusammen getan, und einen DNS Ad-Blocker etabliert.

Primärer Adguard/DNS Server

IPv4: 137.74.155.255

Web-Statistiken: https://dns1.tschoerner.eu

Datacenter: Roubaix, Frankreich

Sekundärer Adguard/DNS Server

IPv4: 173.249.20.137

Web-Statistiken: https://dns2.tschoerner.eu

Datacenter: Nürnberg, Deutschland

Generelles

Ich benutze diese Adlist: http://git.tschoerner.eu/felix/piholeadlist

Beide Server unterstützen RPL Query’s, und leiten Anfragen an OpenDNS, cloudflar und Google weiter und sind NUR aus Deutschland erreichbar.

Disclaimer

Ich betreibe den Dienst. Daten werden nicht weitergegeben. Für mich sind Netz Neutralität, Privatsphäre und Internet Sicherheit  sehr wichtig, weshalb ich diesen Dienst betreibe.

Da man im Internet typischerweise nichts umsonst bekommt, möchte ich hier ganz besonders noch ein mal betonen, dass keine Daten weitergegeben werden und DU nicht “das Produkt” bist!

Nichtsdestotrotz betreibe ich diesen Dienst ohne jegliche Granite und unter Ausschluss sämtlicher Haftung.

Um zu starten, kannst Du hier schauen: Setup Pihole

Routing für PrivateInternetAccess/Socks, aber ohne VPN

Hi, heute möchte ich Euch ein kurzes HowTo zusammen stellen, wie Ihr ohne OpenVPN oder l2tp einen Router mittels eines anonymen Socksservers aufsetzt. Ich werde das am Beispiel von Private Internet Access machen, aber es funktioniert natürlich ebenso mit jedem anderen Dienst.

Das Stichwort lautet hier “badvpn-tun2socks”.

Viele von Euch werden das Problem kennen. Ich möchte “anonymer” im Internet unterwegs sein. Typischerweise wird im gleichen Satz das Wort VPN-Provider mit genannt. Diese Provider nutzen meist OpenVPN als Technologie. Leider müssen somit alle Pakete, sofern AES-NI nicht hardwareseitig unterstützt, von der CPU verarbeitet werden. Dieses ver-/entpacken der Pakete geschieht zudem auch nicht multi-threaded, was dazu führt, dass der Router alles mittels eines CPU-Kerns erledigen muss. Da gerade in bei solchen vorhaben eher auf “alte” Hardware gesetzt wird, denn diese liegt sowieso im Schrank herum, habe ich dieses Tutorial erarbeitet. Hierbei möchte ich noch 2 Punkte erwähnen. Zu einem ist ein Socks-Tunnel kein 100%iger Schutz. Pakete können dechiffriert werden. Zum anderen bietet die Kombination mit nur einem VPN-Provider weniger Schutz als die Kombination von verschiedenen Diensten.

Nun zum entgeltlichen Tutorial. Ich habe mein Socks-Gateway mit Ubuntu 16.04 realisiert. Der Grund hierfür war einfach, denn das Paket badvpn-tun2socks war direkt verfügbar. Los geht es mit der Installation:

add-apt-repository ppa:hda-me/badvpn-tun2socks
apt-get update
apt install badvpn-tun2socks

Im Anschluss bereite wir das System für das Routing vor. Dazu wird die Datei /etc/sysctl.conf bearbeitet. Hier muss das “#” vor net.ipv4.ip_forward=1 entfernt werden. Und anschließend die Konfiguration mit sysctl -p übernommen werden.

nano /etc/sysctl.conf

####
net.ipv4.ip_forward=1
####

sysctl -p

Jetzt haben wir schon einen Großteil geschafft. Das System ist vorbereitet. Als nächstes legen wir uns ein Script an, welches das “Fake”-tun Device erzeugt und die Verbindung zum Socks Server herstellt. Hierzu legen wir die Datei /root/restart_socks_Route.sh an.

nano /root/restart_socks_Route.sh

#/bin/bash
/usr/bin/killall badvpn-tun2socks
#Remove default gateway
/sbin/route del -net 0.0.0.0
#Only allow the connection thru my router to dns & Socks-Server
/sbin/route add 46.166.190.150 gw 192.168.178.1 metric 5
/sbin/route add 84.200.69.80 gw 192.168.178.1 metric 5
/sbin/route add 84.200.70.40 gw 192.168.178.1 metric 5
#Announce the DNS-Server
echo "nameserver 84.200.69.80" > /etc/resolv.conf
echo "nameserver 84.200.70.40" > /etc/resolv.conf
#Start the connection to the Socks-Server
/usr/bin/badvpn-tun2socks --loglevel none --tundev tun0 --netif-ipaddr 10.0.0.2 --netif-netmask 255.255.255.0 --socks-server-addr 46.166.190.150:1080 --username XXX --password geheim &
#Ugly but secure ;)
/bin/sleep 1
#Bring up the tun Device
/sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0
#Announce the default Gateway
/sbin/route add default gw 10.0.0.2 metric 6
#Do the Routing stuff
/sbin/sysctl -w net.ipv4.ip_forward=1
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Im Script sind folgende Parameter anzupassen. Die IP des Gateways, also eures Routers müsst Ihr ändern. Mein Default Gateway ist 192.168.178.1. Als weiteren Punkt müsst Ihr natürlich die socks-server-addr anpassen. In meinem Beispiel habe ich den Socksserver von PrivateInternetAccess eingetragen (46.166.190.150). Als letztes müsst ihr die Authentifizierung anpassen, für XXX den Usernamen eintragen und euer Passwort.

Als letztes nun das Script ausführbar machen und anstarten.

chmod a+x /root/restart_socks_Route.sh

#Starten des tunnels
/root/restart_socks_Route.sh

Ab jetzt seit ihr sicher … sicherer online im Netz unterwegs. Leider funktionieren traceroute und ping nicht durch diesen Tunnel, aber ihr könnt mit dieser Abfrage eure public Ip bestimmen. Diese sollte nun der IP eures Socks Providers gehören. Ggf. müsst Ihr noch curl installieren.

/usr/bin/curl -t 10 -s http://server4.tschoerner.eu/ip.php

Das Ergebnis könnte so aussehen:

Hier noch ein Script, welches prüft ob ihr sicher unterwegs seit

#!/bin/bash

localip=$(/usr/bin/dig <Your public DDNS> +short)
remoteip=$(/usr/bin/curl -t 10 -s http://server4.tschoerner.eu/ip.php)

#echo "Local IP:" $localip
#echo "Remote IP:"$remoteip"XXX"

if [[ $localip == $remoteip ]] || [ -z $remoteip ];
then
        echo "not secure"
        echo $localip
        echo $remoteip
else
        echo $localip
        echo "Public IP: "$remoteip
        echo "secure"
fi

Viel Spaß damit! Und bis bald!

Es geht wieder los …

Nach nun einer längeren Pause habe ich wieder Zeit gefunden, meinen Blog weiter zu führen. In nächster Zeit werde ich über einige Themen wie “Privacy beim Surfen”, Virtualisierung, Netzwerktechniken und verschiedene Linux Topics wieder bloggen.

Ein großes Thema meiner Abstinenzzeit war auch das Thema – Hausautomatisierung. Hier habe ich mich speziell mit HomeAssistant, verschiedenen Arduino’s auseinander gesetzt.

Es gibt also viel zu berichten.