Jump to content

[Python] ein paar Helferlein


Recommended Posts

Guten Abend,

 

hab bei meinen ersten Hardware- und Python-Basteleien mit dem schönen Spielzeug von Tinkerforge ein paar Dinge gebaut, die vielleicht auch für andere Leute von Interesse sind.

 

1. Ein kleines Programm namens "lstf". Das listet einfach die mit dem angegebenen Host verbundenen Bricks/Bricklets auf, und zwar in Form des Namens der Python-Klasse, die mit dem jeweiligen Brick(let) etwas anfangen kann, sowie die UID des Elements.

 

2. Einen Datenlogger für die Kommandozeile. Kann im Augenblick Daten als schlichten Text und im CSV-Format ausgeben.

 

Beispielnutzung:

 

tflogger BrickletAmbientLight:illuminance BrickletBarometer:air_pressure,altitude BrickletHumidity:humidity BrickletTemperature:temperature -o test.csv text:-

 

liest die Daten der Bricklets AmbientLight, Barometer, Humidity, Temperature aus und schreibt sie in die Daten test.csv und gibt sie außerdem auf der Konsole aus.

 

Die ersten Parameter sind also die Python-Klassennamen, wobei hinter einem ':' noch die Namen von einem oder mehrere Messwerten folgen. Die Messwert-Namen entsprechen den get_.*-Methoden der brick(let)-Klassen, d.h., "BrickletAmbientLight:illuminance" funktioniert deshalb, weil die Klasse BrickletAmbientLight eine Methode namens get_illuminance() hat.

 

Der obige Aufruf funktioniert nur dann, wenn genau _ein_ Bricklet des angegebenen Typs vorhanden ist. (Dürfte in vielen Anwendungsfällen zutreffen, denke ich.)

 

Wenn kein passendes Brick(let) vorhanden ist, gibt's eine Fehlermeldung, ebenso, wenn mehr als eines vom gewünschten Typ vorhanden ist.

 

In letzterem Fall kann man aber die UID mit angeben, z.B. so:

 

tflogger BrickletAmbientLight(i9K):illuminance -o ...

 

Der Parameter -o muss _immer_ angegeben werden, und er muss, weil er mehrere Werte haben kann, als _letztes_ angegeben werden. (Zu weiteren Details an Parametern probieren Sie "tflogger -h" (leider noch etwas unvollständig...), lesen Sie die Dokumentation des Python-library "getargs" oder den Quelltext von tflogger (inbesondere die unit tests), oder schicken Ihren Arzt zum Apotheker. Oder frag in diesem Forum.

 

3. Mir ist es auf die Nerven gegangen, dass ich immer den UID eines Brick(let) raussuchen muss, bevor ich es verwenden kann -- auch wenn nur ein Brick(let) des jeweiligen Typs vorhanden ist. Deshalb hab ich eine Klasse BrickFactory geschrieben, die für eine oder mehrere IPConnections Infos über alle angeschlossenen Brick(let) einsammelt; anschließend kann man die Methode make_brick() aufrufen, die für eine übergebene Bríck/Brícklet-Klasse das passende Brlick(let) raussucht und eine Instanz der Klasse zurückgibt. Funktioniert natürlich nur, wenn genau ein Brick(let) des jeweiligen Typs vorhanden ist.

 

4. Das VoltageCurrent-Bricklet ist wirklich prima -- hat aber nicht so ganz meine Wünsche erfüllt. Der Strom-Messbereich von 20A ist mir in manchen Fällen einfach zu groß. Ich hab es deshalb so umgebaut, dass sich der Shunt auswählen lässt. Zur Zeit mit einer sehr schlchten Verdrahtung: Eine Seite jedes Shunt hat ihre eigene Mess-Klemme; mittels Jumper lässt sich wählen, welcher Shunt mit dem Bricklet verbunden wird.

 

Software-seitig ergibt dieser Aufbau das Problem, dass jeder Shunt seine eigenen Kalibrierdaten braucht, was mit der normalen Firmware nicht so schlicht zu lösen ist. Ein Patchen der Firmware war mir bisher zu aufwendig -- als schlichte Lösung hab ich eine Klasse BrickletVoltageCurrentVariableShunt von der normalen BrickletVoltageCurrent abgeleitet, die die Kalibrierdaten aus einer INI-Datei holt.

 

Den ganzen Kram gibt's für Interessierte im Anhang; ansonsten gibt es auch einen Bazaar branch: https://code.launchpad.net/~adeuring/+junk/tftools

 

(das "+junk" bedeutet nur, dass ich für das Paket bisher kein Launchpad-Projekt angelegt habe -- dann muss ich das Pfad-Element "+junk" verwenden ;))

 

Installation: Python-üblich mit "./setup.py install"

 

tftools benötigt das eine oder andere library, das nicht Teil der Standard-libraries von Pyhton ist. Welche das genau sind, muss ich noch dokumentieren. Bis dahin: trial & error ;)

tftools-0.1.tar.gz

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...