Anet AM8 – Anet A8 mit Aluminium-Rahmen

Alu statt Acryl

Der Wechsel des Acrylrahmens gegen einen aus Aluminium soll einige Vorteile mit sich bringen, dies ist bekannt als Anet AM8. Eine günstige und stabile Variante möchte ich ihn diesem Beitrag vorstellen, außerdem von Problemen bei der Beschaffung und dem Zusammenbau berichten und wie ich diese lösen konnte.

Wieso eigentlich?

Seit einiger Zeit bin ich Besitzer eines 3D-Druckers. Es handelt sich um das Modell Anet A8 welches ich günstig bei Gearbest erstehen konnte. Mittlerweile habe ich einige Modifikationen vorgenommen, manche erfolgreich, manche weniger. Ein Problem konnte ich bisher nicht in Griff bekommen: Der ganze Drucker wackelt beim drucken ziemlich hin und her. Dies ist dem Acrylrahmen geschuldet. Außerdem ist es schwierig die Teile auszurichten – ich kann immer nur grob schätzen ob sich alles „im Lot“ befindet.

Ich beziehe mich hauptsächlich auf beide folgenden Projekte:

Das Original: https://www.thingiverse.com/thing:2263216

Ein paar Modifikationen: https://www.thingiverse.com/thing:2657605

Es gibt doch schon eine Anleitung?

Zum ersten Projekt wird eine wirklich schöne, übersichtliche und bebilderte Schritt-für-Schritt-Anleitung geliefert. Ich hatte allerdings Probleme die passenden Teile zu besorgen, außerdem habe ich mich daran gestört den neuen Rahmen teilweise mit gedruckten Teilen zu stützen.

Einkaufsliste im Detail

Aluprofile AM8

https://www.dold-mechatronik.de/AM8-Aluprofile-und-12-Winkel-20×20

Das Problem dabei:

Die Winkel sind nicht dafür geeignet gedreht montiert zu werden. Trotzdem konnte ich 10 Stück davon gut gebrauchen.

Schrauben und Muttern

Schrauben

Das Problem: Leider zu kurz, ich habe mich beim Kauf vertan. Damit alles trotzdem passt habe ich die Teile leicht modifiziert und die Löcher 2mm vertieft. Links zu den Teilen folgen.

Schrauben II

Da ich bereits zu kurze gekauft und verwendet habe sind diese ungetestet sollten aber passen.

Muttern

Das Problem: Zieht man die Schrauben zu feste an oder hat einfach nur Pech verkannten die Muttern im Profil. Funktioniert aber.

Muttern II (bessere Variante)

Funktioniert sehr gut.

Werkzeug / Sonstiges

Kombinationswinkel

Sehr hilfreich um alles im rechten Winkel zu montieren

6x Stuhl-Winkel + 4x Eckwinkel

Im Baumarkt vor Ort gekauft, beide Links nur Beispiele.

Das Problem: Die Löcher musste ich aufbohren. Die Bleche zu dünn, dafür noch ein paar Unterlegscheiben gedruckt (der Baumarkt hatte schon geschlossen).

Teileliste AM8 – Kurzfassung

MengeBezeichnungHinweisLink
1Aluprofilhttps://www.dold-mechatronik.de/AM8-Aluprofile-und-12-Winkel-20x20
2SchraubenLänge 8 statt 10, daher müssen die Druckteile angepasst werden, Alternative untenhttps://amzn.to/2Hvm30g
1SchraubenAlternative, ungetestet, wahrscheinlich passende Schraubenhttps://amzn.to/2G5Ix22
2Mutternhttps://amzn.to/2I2oCE0
6StuhlwinkelAbstand Seite -> Lochmitte 1cmhttps://www.globus-baumarkt.de/vormann-stuhlwinkel-25-x-15-mm
4Eckwinkelhttps://www.globus-baumarkt.de/detail/index/sArticle/60218
Werkzeug
1Kombinationswinkelhttps://amzn.to/2HZfDDn

Den Fernseher per CEC überwachen

Mein Ziel: Den Fernseher per CEC überwachen. Derzeit wird nur der Schaltzustand protokolliert. Bisher recht stabil und zuverlässig. Benötigt wird ein CEC-fähiges Gerät, wie z.B. einen Raspberry Pi oder einen Pulse Eight CEC-Adapter. Das funktioniert bei mir sogar obwohl mein Raspberry Pi an einem HDMI-Receiver (Onkyo TX-NR626) angeschlossen ist, zusammen mit erwähntem Fernseher.

Wie kann man den Fernseher per CEC überwachen?

Dazu habe ich ein Script geschrieben welches cec-lib nutzt. Die Befehle sind recht übersichtlich und in der Hilfe (cec-client -h) aufgelistet.

Das Script

Neue Version! https://github.com/PacGyver/ha-scripts/blob/master/tv_power.sh

#!/bin/bash
#/usr/bin/screen -dmS tvpower_cec /opt/scripts/cec/tv_power.sh
OUTPUT="/var/state/tvpower"
SLEEP=5
DEVICE=0
STATE=""

(while true; do sleep $SLEEP ; echo "pow $DEVICE"; done) | cec-client -d 8 -p 1 -b 5 -t p | grep power --line-buffered | while read x ; do 
 STATE=`echo $x | awk '{split($0,a,":");print a[2]}' | sed 's/ //'`
 if [ $STATE == "on" -o $STATE == "standby" ] && [ ! "$STATE" == "$PREV_STATE" ]
 then
 echo $STATE | tee $OUTPUT
 PREV_STATE=$STATE
 fi
done

Mit dem Befehl „pow 0“ wird der Zustand des ersten Gerätes abgefragt. Welches Gerät welche ID hat kann man mit cec-client prüfen.

Das Scrip läuft derzeit in einer Screen-Session

/usr/bin/screen -dmS tvpower_cec /opt/scripts/cec/tv_power.sh

OpenRemote

Command

or-command - Fernseher per CEC überwachen

Command Konfiguration in OpenRemote

Sensor

or-sensor - Fernseher per CEC überwachen

Sensor-Konfiguration in OpenRemote

 

JDownloader Headless installieren (ohne X!)

Diese Anleitung bezieht sich auf Debian (Ubuntu / Raspbian / …) Systeme. Nachfolgend ein kleines HowTo wie JDownloader headless installiert werden kann. In meinem Fall geschieht die Installation unter Raspbian als root (sudo -s). JDownloader funktioniert auch ohne grafische Oberfläche! Dazu wird der Dienst My.JDownloader genutzt. Für diesen Dienst ist ein vorhandenes Konto zwingend notwendig.

Die Installation (JDownloader Headless)

cd /opt
mkdir jdownloader

In diesen Ordner die heruntergeladene jar-Datei kopieren (http://jdownloader.org/download/index / „Other“), z.B. unter Windows per WinSCP.

Anschließend folgende Befehle ausführen:

apt-get update
apt-get install oracle-java8-jdk
cd /opt/jdownloader
java -jar JDownloader.jar -norestart
java -jar JDownloader.jar -norestart

Mit My.Jdownloader verknüpfen

Nach dem zweiten Start sollte JDownloader nach den Zugangsdaten für My.JDownloader fragen.

|---------------------------Headless Information-------------------------------
| MyJDownloader Setup
| Deine Anmeldedaten von "My.JDownloader" sind nicht korrekt.
| Bitte überprüfe den Nutzernamen bzw. die E-Mail-Adresse sowie das Passwort!
| Enter y -> Enter Logins
| Enter n -> Exit JDownloader

„Y“, gefolgt von Enter und die Daten eingeben

Zum Schluss JDownloader mit „Strg+C“ beenden.

Den Dienst installieren:

cd /etc/systemd/system
nano jdownloader.service

Die Datei „jdownloader.service“ bearbeiten:

[Unit]
Description=JDownloader
Wants=network.target
After=network.target

[Service]
Type=simple

ExecStart=/usr/bin/java -jar /opt/jdownloader/JDownloader.jar

[Install]
WantedBy=multi-user.target

Nun die Dienste neu laden, starten und den Autostart aktivieren

systemctl daemon-reload
systemctl start jdownloader.service
systemctl enable jdownloader.service

Fertig! JDownloader kann jetzt über https://my.jdownloader.org gesteuert werden. Sogar Click’n’Load ist über das Chrome-Plugin möglich.

Tellstick: Intertechno (und andere) Funkschalter abfragen [tdstatus]

Der Tellstick

An meinem Raspberrypi ist per USB ein „Tellstick Duo“ angeschlossen. Dieser steuert einige Intertechno (ITLR-3500) und Brennenstuhl  Zwischenstecker. Zusätzlich verfüge ich über drei Temperatursensoren der Firma Oregon.

Ich nutze dieses Script um den Status  auszulesen. Genutzt habe ich dazu eine Vorlage welche im Quelltext verlinkt ist. Notwendig war ein eigenes Script aus zwei Gründen:

  • Das Hersteller-Tool „tdtool“ reagiert teilweise empfindlich wenn der Status zu oft abgefragt wird und der ganze Dienst stürzt ab. Das führt dazu, dass sich auch nichts mehr schalten lässt. Daher lese ich für die Funkschalter die Datei „/var/state/telldus-core.conf“ aus und parse diese.
  • Die Ausgabereihenfolge der Temperatursensoren scheint willkürlich zu sein. Ggf. hängt es davon ab welcher Sensor zuerst erkannt wird. Das bereitet mir Schwierigkeiten bei der weiteren Verwendung der Werte.

Abgesehen wollte ich eine einfache Möglichkeit haben die Werte in Openremote weiter zu verarbeiten. Da ich damals noch große Schwierigkeiten mit regulären Ausdrücken hatte ist das Ausgabeformat dafür optimiert.

Verwendung

Aufgerufen wird es entweder ohne Parameter (Status der Zwischenstecker) oder mit dem Parameter „-s“ für die Temperatursensoren. Das Script ist nicht schön und beinhaltet noch einige auskommentierte Zeilen die inzwischen überflüssig sind.

Ausgabe

Ausgabe von „tdstatus“. Der Status der einzelnen Schalter einfach hintereinander geschrieben.

off off off off off off off

Ausgabe von „tdstatus -s“. Jede Zeile beinhaltet einen Sensor, Sensor-ID=Wert.

11=6.3° 
145=6.5° 
163=24.2° 
227=19.6° 

Einbindung in OpenRemote

Zwischenstecker

Es wird ein Command angelegt, in meinem Fall „Tellstick Status“. Typ „Shell Execution Protocoll“.

Path: Pfad zur Datei

Polling interval: ich habe 1s gewählt

RegularExpression:

.*(on|off)\s(on|off)\s(on|off)\s(on|off)\s(on|off)\s(on|off)\s(on|off).*

Diese Zeile muss natürlich angepasst werden. Sie beginnt und endet jeweils mit „.*“ und die einzelnen „(on|off)“ werden jeweils durch ein „\s“ getrennt.

Bedeutet: Egal was vorher steht (.*) oder folgt (.*), es wird nach einem „on“ oder „off“ gesucht, die einzelnen Werte sind jeweils durch ein Leerzeichen getrennt. In meinem Beispiel erhält man sieben Werte.

Sensor names:

Ecke;Deckenfluter;Balkon;LSchlafzimmer1;LSchlafzimmer2;LWohnzimmer-Fenster;Z2PowerSupply

In dieser Reihenfolge werden die Sensoren gefüllt.

Anschließend muss man natürlich noch Sensoren mit den gleichen Namen wie den „Sensor names“ anlegen. Als command wählt man jeweils das gleiche Command, bei mir „Tellstick Status“.

Das hat einen Vorteil: Mit nur einer Abfrage werden alle Sensoren gefüllt. Die Sache hat einen Haken: sollte sich die Reihenfolge oder Anzahl ändern stimmt das Ergebnis nicht mehr oder kann nicht geparst werden.

 

Temperatursensoren

Man geht bei der Anlage analog zu den Zwischensteckern vor. Lediglich der „command parameter“ muss um „-s“ (ohne Anführungszeichen) ergänzt werden. Als „polling intervall“ reicht mir „5m“ (= 5 Minuten, auch ohne Anführungszeichen).

RegularExpression:

(?i)(?s).*145=(\d*.\d*).*163=(\d*.\d*).*227=(\d*.\d*).*

145, 163 und 227 sind die Werte die mir „tdstatus -s“ ausgibt. Hintergrund: Ein Nachbar scheint einen ähnlichen Sensor zu haben der manchmal dazwischen auftaucht. Da die IDs absteigend sortiert werden und die regular expression Werte dazwischen ignoriert funktioniert das so ziemlich gut. Nachteil: fällt ein Sensor aus (Batterie leer) wird kein Wert gefüllt. Dann muss man sich auf die Suche nach dem fehlenden Sensor machen.

Sensor names:

Balkon;Wohnzimmer;Schlafzimmer

Auch hier in der Reihenfolge wie die IDs in der regular expression aufgeführt sind.

Das Script

#!/bin/bash
#http://www.pro-linux.de/t_system/basescript.html
# Skript: skript.sh
# Zweck: Basis für eigene Skripte, enthaelt bereits
# einige Skript-Standardelemente (usage-Funktion,
# Optionen parsen mittels getopts, vordefinierte
# Variablen...)

# Globale Variablen
SCRIPTNAME=$(basename $0 .sh)

EXIT_SUCCESS=0
EXIT_FAILURE=1
EXIT_ERROR=2
EXIT_BUG=10

# Variablen für Optionsschalter hier mit Default-Werten vorbelegen
VERBOSE=n
OPTFILE=""

# Funktionen
function usage {
 echo "Usage: $SCRIPTNAME [-s] device" >&2
 [[ $# -eq 1 ]] && exit $1 || exit $EXIT_FAILURE
}

# Die Option -h für Hilfe sollte immer vorhanden sein, die Optionen
# -v und -o sind als Beispiele gedacht. -o hat ein Optionsargument;
# man beachte das auf "o" folgende ":".
while getopts ':o:vhs' OPTION ; do
 case $OPTION in
 s) SENSOR=y
 ;;
 v) VERBOSE=y
 ;;
 h) usage $EXIT_SUCCESS
 ;;
 \?) echo "Unbekannte Option \"-$OPTARG\"." >&2
 usage $EXIT_ERROR
 ;;
 *) echo "Dies kann eigentlich gar nicht passiert sein...">&2
 usage $EXIT_BUG
 ;;
 esac
done
# Verbrauchte Argumente überspringen
shift $(( OPTIND - 1 ))

# Eventuelle Tests auf min./max. Anzahl Argumente hier
#if (( $# < 1 )) ; then
# echo "Mindestens ein Argument beim Aufruf übergeben." >&2
# usage $EXIT_ERROR
#fi

#Kein Arg angegeben, alle ausgeben
if (( $# < 1 )) ; then
 if [[ $SENSOR = y ]] ; then
# tdtool -l | grep -e "temperaturehumidity" | awk '{printf tolower($4)" "}' | sed -e 's/'°'/''/g' 
# tdtool -l | grep -e "temperaturehumidity" -e "1A2D" | awk '{printf ($3)"="($4)" "}'
 tdtool -l | grep -e "temperaturehumidity" -e "1A2D" | awk '{print ($3)"="($4)" "}'| sort

 else
 #tdtool -l | grep -e "ON" -e "OFF" | awk '{printf tolower($3)" "}'
 cat /var/state/telldus-core.conf | grep "state " | awk '{printf ($3)" "}' | sed -e 's/'2'/'off'/g' -e 's/'1'/'on'/g'
 fi
echo -e
fi

#echo On Off Off
# Schleife über alle Argumente
for ARG ; do
 if [[ $VERBOSE = y ]] ; then
 echo -n "Argument: "
 fi
 tdtool -l | grep -i $ARG | awk '{print tolower($3)}'
#echo off
#echo on
done

exit $EXIT_SUCCESS

© 2018 Hobbykritiker

Theme von Anders Norén↑ ↑