dash ruft smartHome

Wednesday, March 7. 2018

Und wie ?

das Teil hat eine recht kleine Batterie und Amazon hat die Button deshalb so ausgelegt, dass sie nur nach dem Knopfdruck kurz booten, ins WLAN gehen, ihre Message abgeben und sich dann wieder runterfahren.
Bei der Ersteinrichtung lernt das dash die SSID und das Passwort für das Wlan, aber die IP holt es sich jedesmal vom dhcpd.
Und dabei kann man den Button erwischen.

Im Prinzip konfigurierst du dir den dash erst mal so, wie Amazon vorgibt. (Wähle dir einen dash, der Bestellungen ~5€ von Produkten erlaubt, die du gebrauchen kannst. Du bekommst nicht 4,99 erstattet sondern auf die erste Bestellung bis zu 4,99€ Rabatt. Zu billig darf das Produkt also nicht sein) 
Und ja, einmal bestellen, um den Rabatt zu kassieren. (Persönlich finde ich, dass A. da ausreichend 'Ne-doch-nich'-Schwellen und Kindersicherungen eingebaut hat. )
Dann setzt du den Dash zurück und gehst den Weg noch einmal, aber den letzten Schritt: Produktwahl, lässt du aus. Schon hast du einen Dash, der funktioniert, aber nicht richtig bestellen kann. An sich genau, was wir wollen. A. will das nicht und schickt pro Klick auf den dash eine Mail...

Jetzt ist es an der Zeit, in /var/log/daemon.log (oder wo bei dir der dhcpd seine logs ablegt) nachzuschauen, welche MAC der dash benutzt. Und für die MAC legt du eine feste IP an. 
Mit WireShark kannst du nun zuschauen, was der dash mit A. so zu besprechen hat. Und dann machst du in der firewall genau diese Verbindung zu. Aus ist's mit den Mails.

So, jetzt fehlt eigentlich nur noch die Hauptsache. Etwas muss im WLAN die Fühler hochhalten und die dhcp-requests des Dash erschnüffeln. python mit scapy können sowas. Wie genau, tja, da gibt es einen Rüstungswettlauf zwischen A. und Technikforschern. Also googeln und durchprobieren. (siehe unten)

Letztlich hast du etwas, das nach ~3 sec einen event auf deinem smarthome*-Bus auslösen kann, dann ~10 Sekunden Unerreichbarkeit (der dash versucht verzweifelt, A. zu erreichen und schmollt anschliessend noch etwas.)

Alles in allem ein konkurrenzlos günstiger Wifi-Switch mit heftiger Latenz.

 Bei mir tut dies:

#!/usr/bin/python
#############################################
from scapy.all import *
import sys, os

def arp_display(pkt):
    if pkt.haslayer(DHCP):

        if pkt[Ether].src == "fc:65:de:bb:xx:yy": 
            os.system('/usr/bin/curl --silent --header "Content-Type: text/plain" --request POST --data "ON" http://192.168.55.44:8080/rest/items/dashConnect_01')

        if pkt[Ether].src == "fc:a6:67:cc:xx:yy": 
            os.system('/usr/bin/curl --silent --header "Content-Type: text/plain" --request POST --data "ON" http://192.168.55.44:8080/rest/items/dashConnect_02')

print sniff(prn=arp_display, store=0,count=0)


und damit das als daemon läuft und auch nach einem Neustart des raspi wieder läuft, habe ich es als einen service bei systemd angelegt:
/lib/systemd/system/dashsniffer.service 



[Unit]                                                                                                                                                                                            
Description=dash dhcp Paket Sniffer                                                                                                                                                              
After=multi-user.target                                                                                                                                                                           
                                                                                                                                                                                                  
[Service]                                                                                                                                                                                         
Type=simple                                                                                                                                                                                       
ExecStart=/usr/bin/python /var/local/scripts/dash/dashSniffer.py                                                                                                                                               
Restart=on-abort                                                                                                                                                                                  

 
[Install]
WantedBy=multi-user.target


Xmind to object

Monday, November 19. 2012

Eine Powerpoint-Folie als Vorlage um dann mit dem Editor ein mehrfach verschachteltes object in javascript-Notation zusammenzuschreiben, und trotz aller Umsicht ist bei copy&paste-Aktionen dann doch irgendwo ein Komma oder eine Klammer verloren gegangen - eine Aufgabe, die mich recht schnell zu der Überlegung führt, dass da ja wohl etwas nicht stimmt, wenn ich als Mensch versuche, was die Maschine doch wirklich besser kann: 
stur und unablenkbar genau eine langweilige, umfangreiche Routine abzuarbeiten.

Die erste Idee - ein script, dass aus einer .pptx direkt  das gewünschte javascript-Object erzeugt - lasse ich schnell wieder fallen, zu gross die Variabilität des Inputs und noch dazu ist das XML der .pptx ist ein wenig abschreckend geraten...

Stattdessen entscheide ich mich für ein freundliches Zwischenformat, und das ist für mich eine Xmind - mindmap. Ein besonders freundlicher Zug dieses Formates ist die Tatsache, dass es dank MEKK mit python (2.x) sehr einfach ist, mindmaps zu generieren oder zu parsen. 

Wie man MEKK unter debian installiert, habe ich in einem vorigen Artikel schon aufgeschrieben, diesmal unter cygwin auf win7 war es nicht so sehr anders: mercurial und gcc mit setup installieren, hg clone https://bitbucket.org/Mekk/mekk.xmind, im ersten Durchlauf beklagt hg noch dass fehlen einiger Pakete (libxml und libxslt in dev-Version) und dann steht das MEKK-Modul bereit. 

Die Umwandlung der powerpoint-Folien in Xmind-Maps habe ich mir als zweiten Schritt aufgehoben, hier erstmal das Script mon der Map zum Objekt. Als frühe alpha ist es ein wenig beschränkt, was die Verschachtelungstiefe anbelangt, weil es mein Anwendungsfall so wollte, geht das Script von einer Struktur aus, wo unter dem Wurzelknoten zwei Hierarchiebenen vorgesehen sind, die optional noch childNodes haben  können, während für die dritte Ebene diese Möglichkeit nicht mehr erwartet wird.   Das kann man sich aber gegebenenfalls anpassen.

Mit dem Aufruf    python x2o.py test.xmind   gestartet erzeugt das Script ein HTML-Dokument, dessen Name teils von dem geparsten .xmind bestimmt wird. Im beiliegenden Beispiel lautet der Text des Wurzelknotens "project" und die erzeugte Datei heisst test_project.html.

Das HTML-Dokument enthält das generierte js-object, mit einem Editor kann man es sich herauspicken, mit einem Browser auf syntaktische Korrektheit pruefen. Wenn das Objekt funktioniert, gibt das .html abschliessend mit einem alert("Es geht!" Bescheid, wenn man es im fireFox öffnet, zeigt der Alert gleich die source des object an.

Download: x2o.zip

OpenAstro.org auf Precise Pangolin

Thursday, September 6. 2012

 Ein länger schon abgelegter Laptop sollte mit Linux als Surf-Rechner eingerichtet werden, mit der Musiksammlung und als dritte Anforderung ein Astrologie-Programm.

Es wurde Mint Maya mit Cinnamon Desktop, unter der Haube steckt da ein Ubuntu 12.04 Precise Penguin. Die Musiksammlung fügte sich mühelos zu banshee und meine anfängliche Sorge, dass es mit dem vorwiegend benutzten Audioformat .wma Ärger geben könnte war ganz unbegründet, Banshee weiss es locker zu nehmen.

Surfen - zu FireFox noch Chrome und Opera installiert, fertig. Aber nun das Astrologie-Programm...
Synaptics fand gleich gar nichts passendes, eine Google-Suche fand mir einen Artikel zum Thema und wiederum verwies mich auf www.openastro.org
Es handelt sich um Python-Programm, wohl unter Ubuntu entwickelt und es gibt sowohl ein Ubuntu repository als auch Pakete zum Download für Ubuntu Maverick, Natty und Oneiric, die Version ist 1.1.25 vom 28.9.2011. Für Precise ist nichts vorbereitet, man muss selbst Hand anlegen.

Es gibt eine Anleitung zur Installation auf Generic Linux, aber sie funktioniert nicht ganz. Deshalb hier die Schritte, die hier zum Erfolg führten:

mkdir /tmp/openastro
cd  /tmp/openastro
apt-get install python-gtk2 python-dateutil python-rsvg python-cairo imagemagick python-dev
wget https://launchpad.net/~pellesimon/+archive/+files/openastro.org_1.1.25.orig.tar.gz
tar -xzf openastro.org_1.1.25.orig.tar.gz
sudo ./setup.py install

Als Ergebnis liegt nun in /usr/local/bin/openastro.py das eigentlich Programm, dessen Ressourcen stehen unter /usr/local/share/openastro.org
Soweit, so gut, nur dass das Programm selbst seine Ressourcen stattdessen unter /usr/share/openastro.org/ vermutet, also einen Fehler wirft statt zu starten. Man kann nun entweder einen symlink von /usr/local/share/openastro.org nach /usr/share/openastro.org legen oder, wie ich es gemacht habe, dem Programm bei der Pfadkonstruktion etwas nachhelfen.

Dazu öffnet man /usr/local/bin/openastro.py und kommentiert Zeile 52 aus und fügt danach diese Zeile ein:
DATADIR=os.path.join(sys.prefix,'local','share','openastro.org')

Dann geht's.

 

Spurenarm kommunizieren

Tuesday, July 31. 2012

 Die Zeit hat einen "digitalen Briefkasten" für Hinweisgeber entwickelt und online gestellt, auf Neudeutsch nennt man das Whistleblower. Quellenschutz im Zeitalter der Vorratsdatenspeicherung. Programmiert in Python, opensource und zum Download.

Aus dem overview zum Projekt:

briefkasten is a reasonably secure web application for submitting content anonymously. It allows to upload attachments which are then sanitized of a number of meta-data which could compromise the submitters identity. Next, the sanitized files are encrypted via GPG and sent via email to a pre-configured list of recipients. The original (potentially 'dirty') files are then deleted from the file system of the server. Thus, neither should admins with access to the server be able to access any submissions, nor should any of the recipients have access to the unsanitized raw material.

Upon successful upload the submitter receives a unique URL with a token that he or she can use to access any replies the recipients may post. 

 

Die Intention der Redaktion ist natürlich, an gute Info zu kommen und guten Geschichten auf die Spur.  Was mit den gespendeten Daten geschieht
Lesenswert sind aber auch die Verhaltensregeln für Tippgeber:

  • nicht vom Firmenrechner oder zuhause, sondern aus einem Internetcafe oder Bibliothek
  • Daten nicht auf einen eigenen Rechner ziehen sondern via DVD, Stick oder mp3-Player transportieren
  • bei den weitergegebenen Daten darauf achten, dass der Kreis der Eingeweihten nicht zu klein ist (und der Rückschluss auf die Quelle deshalb zu einfach.) Notfalls dafür sorgen, dass der Kreis größer wird 
  • Telefonate allenfalls über anonyme Prepaidkarte in gebraucht gekauftem Handy. (Polen oder Technik-Trödel.)
  • email über fake accounts bei Freemailern, und diesen Account nie in der Firma oder zuhause aufrufen, sondern auch nur im Internetcafe.
  • Mails mit PGP verschlüsseln.
  • Tor allein genügt nicht.
  • Geduld und kaltes Blut.

 Und vorsichtig mit den Gewohnheiten sein, nicht immer in's selbe Cafe gehen und nicht immer zur gleichen Zeit. Denn totz aller Umsicht und dem Entfernen der Metadaten aus bestimmten Dateitypen: die Zeiten der Übermittlung bleiben sichtbar...

python für den Desktop

Tuesday, April 12. 2011

Um einem shell-script eine bequemes grafisches Frontend zu geben habe ich mich in python und wxPython versucht, und sah mich nach einer IDE um. Boa Constructor  sah zunächst, trotz des haesslichen Icons, recht vielversprechend aus, erwies sich aber leider als sehr absturzfreudig und im Ernst: ein IDE, die mir schon bei den kleinen Anfangsschritten immer wieder unter den Fingern verschwindet und keine Vorkehrungen trifft, Editiertes vor dem Abgang noch gespeichert zu bekommen, scheint mir nicht nützlich.

Im zweiten Anlauf habe ich es dann mit einer Combo von Wing IDE und  WxGlade versucht, und war ganz angetan und erstaunlich schnell produktiv. wingware ist ein kommerzielle Produkt und kommt in einer Staffel von Versionen, eine davon ist kostenlos und für den Anfang genügend. ScriptEditor und Interpreter-Prompt, mehr habe ich davon erstmal nicht benutzt.

Und zum Design des gui diente wxGlade, wobei mich die offizielle Seite zum Download gleich auf einen fork verwies. Dies Projekt ist regelmaessig gepflegt und hat sich eigentlich ganz gut bewährt. Sobald man raus hat, dass man für alles immer erst mal einen sizer platzieren muss und was das Feld Proportion anrichtet, geht es doch recht flott. wxGlade kommt mit einem kleinen tutorial, von dem auch das Ende (9. Notes) lesenswert ist.

Besonders gefreut hat mich, dass wxGlade bei der Code-Generierung sehr zurückhaltend zu Werke geht und bei Neugenerierung nur bestimmte, ausdrücklich mit  " begin wxGlade:" bzw. " end wxGlade" getaggte Bereiche überschreibt. So dass meine anfängliche Sorge, andere Bearbeitungen mit jedem Update des Designs wieder zu verlieren, sich als ganz unbegründet erwies. Gut!

(Page 1 of 2, totaling 6 entries) » next page