Förnuftig ist der neue Luftreiniger von Ikea und als solcher hat er mein Interesse geweckt. Aber scheinbar anders als viele Andere finde ich das Gerät nicht interessant um Viren aus der Luft zu filtern, dazu eignet er sich wohl auch nicht. Mir geht es eher um größere Verunreinigungen wie Pollen, Staub o.ä. das sich in der Luft tummelt.
So weit so gut, der Haken: Förnuftig lässt sich von Hause aus so gar nicht ins Smart Home integrieren. Das Gerät hat als Interface lediglich einen Drehschalter mit den Stuffen „Aus“, 1, 2 und 3. That’s all.
Für mich ist hier die Challenge dies zu ändern, denn natürlich möchte ich den Filter am liebsten laufen lassen wenn mich der „Krach“ nicht stört. Und natürlich auch nicht dauerhaft sondern vielleicht in Intervallen. Oder z.B. dann wenn der Staubsauger fährt und Staub aufwirbelt. Und wer weiß was mir sonst noch so einfällt.
Es muss also eine digitale Steuerung ans Gerät.
Der erste Gedanke in Richtung smarte Steuerung war schon da vor dem Gerät:
Entsprechend simpel ist er: Eine schaltbare Steckdose.
Dank des analogen Drehschalters “merkt” sich der Luftfilter seinen Zustand auch ohne Strom. Mit einer schaltbaren Steckdose lässt sich also sehr einfach zwischen “Aus” und der am Gerät eingestellten Stufe umschalten.
Ich hab hier einfach zu einer Steckdose mit Tasmota Firmware gegriffen,
zum einen weil ich sie da hatte, zum anderen da diese sich super ohne Cloudanbindung nutzen lässt.
Die Umsetzung ist einfach, Zwischenstecker rein, fertig, aber die Möglichkeiten sind es leider auch. Die schaltbare Steckdose kann also nur ein erster Schritt sein. Deshalb hab ich mir als nächstes das Innenleben angesehen.
Wenn man die Stoffbespannung und den Filter aus dem Gerät entfernt, offenbart sich der Förnuftig als schlichter, in meinem Fall schwarzer Kasten.
Dabei wirkt das Plastik aus einem Guss, abgesehen von einem Streifen an der Oberseite, der sich auf der Unterseite zum Drehknopf befindet und in dem sich der kleine rote Knopf befindet.
Interessanterweise ist dieser Plastikstreifen mit “normalen” Philipps Schrauben befestigt, wohin gegen die restlichen Schrauben ein Dreiecks-Profil aufweisen.
Nach dem Lösen der beiden Schrauben kann der Plastikstreifen nach oben abgehoben werden. Darunter offenbart sich ein Teil der Elektronik.
Zum Vorschein kommt eine kleine Platine. Netterweise ist sie nicht überkomplex, hat nur einen Layer und der ist auch schön beschriftet. Ohne wirklich geschaut zu haben was passiert vermute ich dass diese Platine einefach eine Art PWM Signal für den Lüftermotor erzeugt. Aber so tief will ich gar nicht einsteigen, mir reicht es den Drehschalter zu “automatisieren”.
Selbiger sitzt über den zwei 5er Kontaktreien auf dem “leer” scheindenden Platz der Platine.
Ausgebaut und von oben sieht die Platine aus wie obriges Foto, geprägt vor allem durch den großen Drehschalter. Die Beschriftungen auf der Platinen unterseite weisen darauf hin, dass die Logik mit einem 5V Pegel arbeitet. Um das zu bestätigen habe ich flux das Multimeter verwendet und gemessen was beim Einstellen der verschiedenen Stufen geschieht. Dabei kam herraus, dass der Drehschalter 4 der von oben betrachteten rechten Pins schaltet. Für jeden Status (Aus, I, II und III) wird ein ander Pin auf GND gezogen. Für Aus der Erste, für I der Zweite etc. Es ist je nur der eine Pin geschaltet, die anderen Pins sind durch die Pull-Ups auf der Platine auf High (5V) gezogen [also bei aus 2, 3 und 4 auf 5V, bei I 1, 3 und 4 etc].
Nach dieser Erkenntnis kann der Schalter ab, und durch einen ESP ersetzt werden.
Aufgrund der 5V Logik reicht leider der ESP alleine nicht, sonder es ist auch ein Pegelwandler nötig der die 3,3V des ESP auf 5V umsetzt. Außerdem braucht der ESP durchaus etwas Strom. Deshalb ist noch einen DC-DC Wandler nötig, der aus den 24V des Netzteils 3,3V für den ESP erzeugen kann.
Das wars mit der Hardware, jetzt noch Software auf den ESP. Am einfachsten Tasmota und zack lässt sich der Luftfilter via MQTT schalten
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
as in Maverics. With the same old bug (??) mentioned here, where adding -o VerifyHostKeyDNS=yes
leads to
DNS lookup error: general failure
No matching host key fingerprint found in DNS.
That’s not nice. I do want to use SSHFP, partly because i think its a nice feature, partly because i hardly ever check the fingerprints of my hosts.
Key is building a new version of openssh. The easiest way to do so is using Homebrew. So install brew, if you havent allready.
After wards we need to add the ‘brew recipes’ for software thats already on a mac by default. This is done by
brew tap homebrew/dupes
.
Half way there, secound step is to build openssh. We’ll build it with a few extra options. Worth to be mentioned is --with-ldns
. As Jan-Piet Mens explains in his intresting post VerifyHostKeyDNS=yessssss using ldns is mainly about openssh being able to make sure valid dnssec is used for the record, and therefor not bothering you if there is a valid key as a SSHFP record secured by dnssec.
Openssh is build by
brew install openssh --with-brewed-openssl --with-keychain-support --with-ldns
Afterwards just follow the instructions given by brew:
For complete functionality, please modify:
/System/Library/LaunchAgents/org.openbsd.ssh-agent.plist
and change ProgramArguments from
/usr/bin/ssh-agent
to
#{HOMEBREW_PREFIX}/bin/ssh-agent
Finally, add these lines somewhere to your ~/.bash_profile:
eval $(ssh-agent)
function cleanup {
echo "Killing SSH-Agent"
kill -9 $SSH_AGENT_PID
}
trap cleanup EXIT
\o/ We are done, ssh with -o VerifyHostKeyDNS=yes
will work smoothly and hardly ever confirmed known_host-file hashes should be history.
Danach wurde ich mehrfach angesprochen mit der Frage, wie das den auf Clientseite aussieht bzw. im konkreten wie das den auf Android aussieht. Daher dieser Post der diese Lücke füllen soll, und darlegt was ich derzeit auf Android für die Caldav & Carddav anbindung verwende.
Zur Software, Ich verwende “CardDAV-Sync beta” und “CalDAV-Sync beta” aus dem Android Market. Das sind jeweils Sync-Adapter, also extra Software die nur dazu da ist Sync zu machen und vom Androidsystem passend dazu eingebunden wird.
Ja, diese beiden Stücke Software kosten Geld ( ~ 2 Euro jeweils ) aber funktioniert wirklich gut, und wird zudem weiterentwickelt. Mit anderen Worten das Geld ist gut angelegt.
Wer das ganze im Vorfeld erstmal testen möchte, oder wem der Sync von allen eigenschaften seiner Kontakte nicht so wichtig ist, kann die kostenfreie “CardDAV-Sync free beta” Version probieren.
Ist die Software erst mal installiert ist die Hauptarbeit auch schon getan. Es fehlt nur noch die Config für die Accounts.
Also Menü auf dann Einstellungen und Konten & Synchronisierung. Klick auf Konto hinzufügen und ClaDAV bzw. CardDAV auswählen. Danach einfach dem Einrichtungsassistenten folgen, URL und Nutzername + Passwort eingeben. Und schon ist es quasi fertig. Im letzten Schritt kann man noch entscheiden ob der Sync nur in eine Richtung stattfinden soll, oder bidirektional. (Auch wenn der Author einen Warnhinweis in sachen bidirektionaler Sync eingebaut hat, hatte ich noch keinerlei Probleme damit).
Tada fertig ist der Sync von Kalendern und Kontakten auf dem Android Device,
und das ganz ohne die Daten Google Anzuvertrauen.
Manchmal will man aber spezielle Settings Syncen,
von Addons zum beispiel, hier kann abgeholfen werden:
Im Mozilla Developer Network (hier) steht wies geht.
Einfach unter about:config, rechtsklicken und einen neuen Bool-Wert anlegen.
Den Namen wie folgt festlegen,
services.sync.prefs.sync.<pref>
wollen wir z.B. das Setting keyword.url syncen so müssten wir
services.sync.prefs.sync.keyword.url
anlegen und auf True
setzen.
Soviel abhilfe für den Moment,
langfristig werden hoffentlich mehr und mehr Addons Firefox Sync von Hause aus unterstützen.
#!/bin/bash
# vpnAutoconnect
##
## FILE: 20vpnautoconnect
##
## DESCRIPTION: Script for networkdispatcher.d to autoconnect to VPN
##
## AUTHOR: balu
##
## DATE: 19.02.2012
##
## VERSION: 0.3
##
## INITIALISIERUNG:
#Diese Werte kommen vom NetworkManager
INTERFACE=$1
ACTION=$2
##Name der VPN verbindung im Netzwerkmanager
VPN_CONNECTION_NAME="vpnName"
## Interface bei welchen vpn in frage kommt ( mehrere mit Leerzeichen getrennt )
INTERFACES=(wlan0)
## ESSID der Netzte die kein VPN brauchen
ESSIDS_KEIN_VPN=( Essid1 Essid2 )
##---- do not edit below here ---- ##
# @param $1 mixed Needle
# @param $2 array Haystack
# @return Success (1) if value exists, Failure(0) otherwise
# Usage: in_array "$needle" "${haystack[@]}"
in_array() {
local hay needle=$1
shift
for hay; do
[[ $hay == $needle ]] && return 1
done
return 0
}
#wenn uns das interface überhaupt interessiert
in_array $INTERFACE "${INTERFACES[@]}"
if [ $? -eq 1 ]; then
## ESSID des verbundenen Netzwerks bestimmen
ESSID=$(iwconfig $INTERFACE | grep ESSID | cut -d":" -f2 | sed -e 's/"//g')
in_array $ESSID "${ESSIDS_KEIN_VPN[@]}"
if [ $? -ne 1 ]; then
## Funktionen durchführen, je nach Aktion eine andere
case "${ACTION}" in
up)
nmcli con up id "${VPN_CONNECTION_NAME}"
;;
down)
nmcli con down id "${VPN_CONNECTION_NAME}"
#killall vpnc
;;
pre-up)
;;
post-down)
;;
*)
echo $"Usage: $0 {up|down|pre-up|post-down}"
exit 1
esac
fi
fi
Das Scirpt muss damit es funktioniert in /etc/NetworkManager/dispatcher.d/ abgelegt werden (z.B. al 20vpnautoconnect) dann noch dem Benutzer und der Gruppe root zugeordnet
chown root:root /etc/NetworkManager/dispatcher.d/20vpnautoconnect
und die Rechte angepasst
chmod 700 /etc/NetworkManager/dispatcher.d/20vpnautoconnect
P.S.
Ich hatte anfangs Probleme, dass die Verbindung nicht funktioniert, lag am storage der Passwörter des Networkmanager (vpn passwörter liegen in der Keychain des users,
das Script führt root aus) um das zu beheben kann man den Networkmanager anweisen die passwörter selber zu speichern, dazu in der Datei /etc/NetworkManager/system-connections/$vpnname die pass flags von 1 auf 0 ändern,
und nach dem ändern eevl. im Networkmanager unter der Verbindung die Passwörter nochmal eintragen
Jetzt Android lastig, es geht um Backup und/ oder sync von SMS und Anruflisten des Android devices.
Wobei für mich persönlich der Clou an der Sache ist, dass das Backend ein beliebiges IMAP-Konto ist,
und das Format sogar Menschenlesbar.
All diese schönen Features bring die Software SMS Backup + ( Market link ).
Installation und Configuration sind eigentlich relativ gerade aus, wenn man einige Fallstricke kennt.
Eigenes IMAP-Konto und SSL:
Ich benutze IMAP nur zusammen mit SSL, allerdings mit eigenen Zertifikaten, nach dem Einstellen von SMS Backup + gab es dann das Problem das die Software sich nicht verbinden wollte.
Das Problem lies sich lösen indem unter erweiterte Einstellungen -> IMAP Server Einstellungen -> Sicherheit von SSL (Benötigt) auf SSL (Optional) ändert.
Eigenes IMAP-Konto und Gmail-Label:
mit einem eigenen IMAP Konto hat man normal keine Label, die entsprechenden Einstellungen sind als Pfade in der IMAP-Ordnerstrucktur zu verstehen ( Bsp.: INBOX.Telefon.SMS als Label legt bei mir die SMS in den Ordner Postfach->Telefon->SMS )
Ich wolle also ein Script haben,
das einmal am Tag die eigenen Tweets aus twitter zieht und abspeichert.
Also habe ich das alte Script angepasst.
Ergebnis ist folgendes:
#!/usr/bin/perl
require Encode;
use Net::Twitter;
use strict;
my $nt = Net::Twitter->new(
username => "TWITTERNAME", #Durch Twitternick ersetzten
password => "TWITTERPASSWORT" #Durch Twitterpasswort ersetzen
);
my $pfad = "/pfad/zum/script/verzeichnis"; #Bitte durch eigenens Verzeichnis ersetze
#Ab hier nichts mehr ändern
open(LASTTWEET, "< $pfad/last_own_tweet.id") || die "Datei nicht gefunden\n";
my @IN = ;
my $lastid = $IN[0];
close(LASTTWEET);
eval {
my $statuses = $nt->user_timeline({ count => 150, since_id => $lastid});
#for my $status ( @$statuses ) {
for (my $i=(@$statuses-1);$i >= 0;$i--){
my $status = @$statuses[$i];
print Encode::encode_utf8("$status->{created_at} $status->{time} < $status->{user}{screen_name}> $status->{text}\n");
if( $status->{id} > $lastid)
{
$lastid = $status->{id};
}
}
open(LASTTWEET, ">$pfad/last_own_tweet.id"); # Datei zum Schreiben öffnen
print LASTTWEET "$lastid"; # Datei schreiben
close(LASTTWEET);
};
if ( my $err = $@ ) {
die $@ unless blessed $err && $err->isa('Net::Twitter::Error');
warn "HTTP Response Code: ", $err->code, "\n",
"HTTP Message......: ", $err->message, "\n",
"Twitter error.....: ", $err->error, "\n";
exit;
}
else { exit; }
In dem Script müssen am Anfang die Variablen einmal richtig gesetzten werden (wie Twitternick etc.).
Desweiteren muss die datei “last_own_tweet.id” im Scriptverzeichnis angelegt werden,
und mit der ID des Tweets befüllt, bei dem das ganze Beginnen soll.
Ich habe mir an nach dem Herrunterladen der alten Tweets durch das andere Script die ID des letzten Tweets eingefügt.
Danach das Script am besten per Cronjob einmal täglich ausführen, so z.b.
/pfad/zum/script/twitter.pl >> meinetweets.txt
The post automatisch eigene Tweets speichern first appeared on ohneKontur - der Blog.]]>Mein Text zu Sparkleshare ist hier
Vor einiger Zeit hab ich das Programm Dropbox entdeckt,
Eine sehr schöne Idee zur Synchronisation von Ordnern über mehrere Rechner hinweg.
Für mich hatte das ganze jedoch einen Haken,
meine Daten lägen unverschlüsselt bei einer Firma,
die mir noch nicht mal Geld dafür abnimmt.
Das war für mich keine Lösung also habe ich nach Möglichkeiten gesucht,
das ganze auf eigenem Speicher zu realisieren. Ich wurde auf rsync und unison aufmerksam gemacht, allerdings war das alles nicht das was ich suchte.
Gestern schließlich fand ich die Lösung für mein Problem: Teamdrive,
eine Software die es ermöglicht Ordner zu Syncen, genau wie Dropbox,
jedoch auf beliebigen WebDav Speicherplatz.
Das non-Plus-Ultra, die Daten werden verschlüsselt abgelegt.
Also alles in allem so ziemlich das was ich suchte,
nur 2 Fragen bleiben offen:
Wieso muss man einen Account erstellen um Teamdrive zu Nutzen (wenns mein eigener Space ist kann das denen doch Egal sein)
und Wie funktioniert die Verschlüsselung,
was ist der Key, und komm ich da ran ohne Teamdrive?
Ich will die Tage mal versuchen Antworten auf diese Fragen zu finden,
fürs erste ist das jedoch ein schönes Programm :)