photron Geschrieben April 22, 2013 at 14:11 Geschrieben April 22, 2013 at 14:11 Da das doch recht schnell von der Hand ging hier mal ein erster Prototyp der Shell Bindings. Sie basieren auf den Python Bindings und die Kommandozeilenbehandlung ist mit argparse gemacht. Dadurch wird mindestens Python 2.7 benötigt. Enumerate Ein Enumerate mit Standardausgabe: $ ./tinkerforge enumerate uid=68aT1f connected-uid=0 position=b'0' hardware-version=1,0,0 firmware-version=2,0,6 device-identifier=13 uid=SCT31 connected-uid=68aT1f position=b'a' hardware-version=1,1,0 firmware-version=2,0,0 device-identifier=216 Ein Enumerate mit --execute. Alle Parameter des Enumerate Callbacks werden durch Leerzeichen getrennt an die --execute Befehlszeile angehängt und dann das Ergebnis ausgeführt: $ ./tinkerforge enumerate --execute echo 68aT1f 0 0 1,0,0 2,0,6 13 0 SCT31 68aT1f a 1,1,0 2,0,0 216 0 Ein Enumerate mit --execute und --replace. Das --replace Flag sorgt dafür, dass auf die --execute Befehlszeile die format Funktion aus Python angewandt wird: $ ./tinkerforge enumerate --execute "echo {uid} {device-identifier}" --replace 68aT1f 13 SCT31 216 Funktionen Temperaturabfrage eines Temperature Bricklets mit UID SCT31: $ ./tinkerforge call temperature-bricklet --uid SCT31 get-temperature temperature=2325 Auch hier funktionieren --execute und --replace: $ ./tinkerforge call temperature-bricklet --uid SCT31 get-temperature --execute 'echo "scale=2; {temperature} / 100" | bc | xargs printf "Die Temperatur beträgt: %s °C\n" ' --replace Die Temperatur beträgt: 23.18 °C Callbacks Aufruf der set-temperature-callback-period Funktion des Temperature Bricklets mit UID SCT31: $ ./tinkerforge call temperature-bricklet --uid SCT31 set-temperature-callback-period 500 Auf Callbacks warten: $ python3 ./tinkerforge dispatch temperature-bricklet --uid SCT31 temperature temperature=2418 temperature=2431 Auch hier funktionieren --execute und --replace: ./tinkerforge dispatch temperature-bricklet --uid SCT31 temperature --execute 'echo "scale=2; {temperature} / 100" | bc | xargs printf "Die Temperatur beträgt: %s °C\n" ' --replace Die Temperatur beträgt: 23.18 °C Die Temperatur beträgt: 23.25 °C Was haltet ihr davon?tinkerforge Zitieren
FabianB Geschrieben April 22, 2013 at 16:37 Geschrieben April 22, 2013 at 16:37 Sehr cool, nach so etwas hatte ich vor Ewigkeiten schonmal gefragt. Sieht auf den ersten Blick sehr gut aus. Ich habe leider gerade keine Zeit, das mal genauer zu betrachten und auszuprobieren. Das werde ich aber bald nachholen. Bis dahin: Weiter so. Zitieren
Loetkolben Geschrieben April 23, 2013 at 15:44 Geschrieben April 23, 2013 at 15:44 Hallo photron, das sieht ja interessant aus und es funktioniert sogar. Herzlichen Glueckwunsch! # ./tinkerforge_shell_bindings.20130422.sh --host 192.168.1.40 --port 4223 call temperature-bricklet --uid abc get-temperature temperature=2231 Das ist ja Python. :staun: Das muss ja installiert sein. Da wird es wohl kein Binary geben. Dadurch wird mindestens Python 2.7 benötigt. Das ist zumindest bei Debian sqeeze nicht richtig. An anderer Stelle habe ich schonmal gehakt. Es reicht hier Python 2.6: # dpkg -l | grep python ii libapache2-mod-python 3.3.1-9+b1 Python-embedding module for Apache 2 ii libpython2.6 2.6.6-8+b1 Shared Python runtime library (version 2.6) ii python 2.6.6-3+squeeze7 interactive high-level object-oriented language (default version) ii python-argparse 1.1-1 optparse-inspired command-line parsing library ii python-central 0.6.16+nmu1 register and build utility for Python packages ii python-minimal 2.6.6-3+squeeze7 minimal subset of the Python language (default version) ii python-psyco 1.6-2 Python specializing compiler ii python-support 1.0.10 automated rebuilding support for Python modules ii python2.6 2.6.6-8+b1 An interactive high-level object-oriented language (version 2.6) ii python2.6-minimal 2.6.6-8+b1 A minimal subset of the Python language (version 2.6) Ein Enumerate mit Standardausgabe: Das sind also quasi Variablen die man mit "--execute" und "--replace" weiterverarbeiten kann!? Das --replace Flag sorgt dafür, dass auf die --execute Befehlszeile die format Funktion aus Python angewandt wird: Warum muss das sein und was ist "format Funktion aus Python"? Callbacks habe ich nicht probiert, da ich sie nicht benoetige. Mal sehen was ich damit mache(n kann). Viele Gruesse Der Loetkolben Zitieren
mchott Geschrieben April 24, 2013 at 06:13 Geschrieben April 24, 2013 at 06:13 Allein um mal lowlevel zu testen ist das eine gute Sache...sicher auch für die ShellPowerUser interessant. Zitieren
photron Geschrieben April 24, 2013 at 08:41 Autor Geschrieben April 24, 2013 at 08:41 Das ist ja Python. :staun: Das muss ja installiert sein. Da wird es wohl kein Binary geben. Der Vorteil an daran, dass in Python zu machen ist, dass es überall da funktioniert wo Python und argparse vorhanden sind. Wir müssen also nicht für n verschiedene Plattformen n verschiedene Binaries erstellen. Der Nachteil daran ist, dass Python benötigt wird, ja. Dadurch wird mindestens Python 2.7 benötigt. Das ist zumindest bei Debian sqeeze nicht richtig. An anderer Stelle habe ich schonmal gehakt. Es reicht hier Python 2.6: Okay. Laut Python Dokumentation ist es seit 2.7 in der Standard Library. Das hindert Debian natürlich nicht daran das auch für Python 2.6 bereitzustellen Ein Enumerate mit Standardausgabe: Das sind also quasi Variablen die man mit "--execute" und "--replace" weiterverarbeiten kann!? Das --replace Flag sorgt dafür, dass auf die --execute Befehlszeile die format Funktion aus Python angewandt wird: Warum muss das sein und was ist "format Funktion aus Python"? Ohne --execute werden die Ausgaben von Gettern und Enumerate als <key>=<value> per Zeile auf stdout ausgegeben. Das kannst du dann mit xargs, awk, etc weiterverarbeiten. --execute ist einfach eine andere optionale Variante die Ausgabe zu verarbeiten/formatieren. Die ist z.B. mit Hinblick auf Windows gedacht, wo Sachen wie xargs und awk nicht so einfach zur Hand sind. --execute nimmt einen Shell Befehl entgegen und hängt dann einfach alle Ausgabewerte an. tinkerforge call temperature-bricklet --uid SCT31 get-temperature --execute "echo" Hier wird dann "echo 2258" ausgeführt. Mit --replace können im Shell Befehl Platzhalter verwendet werden. In diesem Fall {temperature}: tinkerforge call temperature-bricklet --uid SCT31 get-temperature --execute "echo `date +%s` {temperature} >> t.log" --replace Hier wird dann "echo `date +%s` 2258 >> t.log" ausgeführt. Für diese Platzhalter wird einfach die Python format Funktion verwendet: http://docs.python.org/2/library/string.html#format-examples Zitieren
photron Geschrieben April 24, 2013 at 13:58 Autor Geschrieben April 24, 2013 at 13:58 Und jetzt auch mit dem ersten Versuch für bash Completion. Dafür muss sich tinkerforge im PATH befinden, tinkerforge.bash_completion muss nach /etc/bash_completion.d/ und in tinkerforge umbenannt werden.tinkerforgetinkerforge.bash_completion Zitieren
photron Geschrieben August 14, 2013 at 12:58 Autor Geschrieben August 14, 2013 at 12:58 Die Shell Bindings sind nun veröffentlicht. Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.