Xenna Geschrieben March 14, 2012 at 09:10 Geschrieben March 14, 2012 at 09:10 I have three questions/suggestions: 1. You support quite a few languages, but unfortunately my favorites aren't there. Are you planning any support for Perl and PHP? Especially on the Linux platform there are lots of programmers using these two. PHP would be great for web integration. 2. I understand that the API's talk TCP to a brickd daemon. It's easy to do TCP connections in (almost?) any language, so if the brickd TCP protocol is documented we could use that instead of the API. (or write our own API) 3. There are standards for talking to hardware via the filesystem in Linux (/sys/class or /proc). Have you considered using these? That way controlling bricks and bricklets could be as easy as: echo 1 > /sys/class/bricklets/dualrelay1 echo "Hello world" > /sys/class/bricklets/lcd1/line1 Or reading as easy as: cat /sys/class/bricklets/analog1 It's not so easy to do events this way, but for simple polling or controlling this would do very nicely. You would immediately have added support to every language available on the Linux platform. Zitieren
borg Geschrieben March 14, 2012 at 10:12 Geschrieben March 14, 2012 at 10:12 1. You support quite a few languages, but unfortunately my favorites aren't there. Are you planning any support for Perl and PHP? Especially on the Linux platform there are lots of programmers using these two. PHP would be great for web integration. Currently we are working on OS X support and the RS485 Extension, after that we will probably make the firmware for the Encoder Bricklets (they make the driver Bricks a lot more usefull) and then i intend to add more languages. 2. I understand that the API's talk TCP to a brickd daemon. It's easy to do TCP connections in (almost?) any language, so if the brickd TCP protocol is documented we could use that instead of the API. (or write our own API) Yes, it is probably a good idea to document the protocol we are speaking. It is certainly possible to speak the protocol in every language, there is no magic involved. 3. There are standards for talking to hardware via the filesystem in Linux (/sys/class or /proc). Have you considered using these? That way controlling bricks and bricklets could be as easy as: echo 1 > /sys/class/bricklets/dualrelay1 echo "Hello world" > /sys/class/bricklets/lcd1/line1 Or reading as easy as: cat /sys/class/bricklets/analog1 It's not so easy to do events this way, but for simple polling or controlling this would do very nicely. You would immediately have added support to every language available on the Linux platform. One of our very first ideas was that a Brick could anounce itself as a mass storage device to the PC with a filesystem as described by you. But, as you said the events are problamatic and the events are very very important if you want any kind of performance over USB. For example if you have a few sensors in a stack over USB and you want to control a motor at the same time, you will be amazed how little bandwith there is left for the motor controlling if you are polling the sensors with a high frequency. Where as events with e.g a period of 10ms per sensor wouldn't be any problem. However, it would be possible to write another daemon that sits behind the Brick Daemon and generates a /sys like filesystem that can be used from everywhere. It probably would have a lot in common with the generators we use to generate the language bindings. So if there is someone that would be interested in writing something like this, i would certainly help if there are questions or problems. Zitieren
gridrix Geschrieben March 14, 2012 at 14:11 Geschrieben March 14, 2012 at 14:11 Events would be possible with a single "events" file that just blocks until something happens and then allows to read (in some fixed format) which file(s) changed (where the event happened). Zitieren
Xenna Geschrieben March 27, 2012 at 11:33 Autor Geschrieben March 27, 2012 at 11:33 I guess I had been looking for a reason to try Python, so that's what I did in the end. I got a control program running pretty quickly and using twisted I was even able to very easily convert it to a web service. So now I can control and monitor my project with PHP and/or Javascript/Ajax. Unfortunately I'm still waiting for my Analog In bricklets that seem to be stuck in the German mail... Zitieren
borg Geschrieben April 30, 2012 at 18:35 Geschrieben April 30, 2012 at 18:35 A little bit late, but the TCP/IP protocol documentation is now ready: http://www.tinkerforge.com/doc/Software/IPConnection_TCPIP.html#tcp-ip-ip-connection Zitieren
Christian Geschrieben May 5, 2012 at 22:22 Geschrieben May 5, 2012 at 22:22 I got a control program running pretty quickly and using twisted I was even able to very easily convert it to a web service. So now I can control and monitor my project with PHP and/or Javascript/Ajax. Would like to share your your Python script with us? espaecally for those like me which like to play arround with webservices. (but somebody of the admins said, perhaps the php bindings could be released next week.) greets from germany... Chris Zitieren
Xenna Geschrieben May 12, 2012 at 18:41 Autor Geschrieben May 12, 2012 at 18:41 I got a control program running pretty quickly and using twisted I was even able to very easily convert it to a web service. So now I can control and monitor my project with PHP and/or Javascript/Ajax. Would like to share your your Python script with us? espaecally for those like me which like to play arround with webservices. (but somebody of the admins said, perhaps the php bindings could be released next week.) greets from germany... Chris I'm not ready to share my code, probably never will, but I distilled a small sample Q&D web service out of it that's probably more useful to you. This one allows a http request to retrieve the status of a temperature bricklet in XML. The request is in the form http://hostname:8888/temp/status Data returned is: <response> <temperature>20.50</temperature> </response> The Python code: #!/usr/bin/env python BRICKD_HOST = "localhost" BRICKD_PORT = 4223 WEB_SERVER_PORT = 8888 TEST_MODE = False from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_temperature import Temperature from twisted.web import server, resource from twisted.internet import reactor if __name__ == "__main__": ipcon = IPConnection( BRICKD_HOST, BRICKD_PORT ) # Create ip connection to brickd thermo = Temperature("6KG") ipcon.add_device(thermo) print "Listening on port %d" % WEB_SERVER_PORT class Simple(resource.Resource): isLeaf = True def render_GET(self, request): uri = request.uri cat,cmd = uri.lstrip( '/' ).split( '/', 1 ) if cat == 'temp': print "temp cmd='%s'" % cmd arg = cmd.split( '/' ) if arg[0] == 'status': request.setHeader( 'Content-Type', 'text/xml' ) s = "<temperature>%.2f</temperature>\n" % (thermo.get_temperature() / 100.0) return "<response>\n" + s + "</response>\n" # Convert to XML return "<html>Error</html>" site = server.Site(Simple()) reactor.listenTCP( WEB_SERVER_PORT, site) reactor.run() Comments welcome, I'm a Python newbie. 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.