On Dec 21, 2011, at 9:52 PM, bino oetomo wrote:
Dear All ..
A year ago, I need send some defined message to a jabber conference.
The message content will depend on a "button-press".
My trick is to use ttyctrl (http://ttyctrl.sourceforge.net/).
So basicaly my "system" is builded from several parts:
1. TTYCTRL : I made some small python XMLRPC client script, that will
send a msg to my local twisted server
2. Twisted server, contain :
a. an XMLRPC server
b. XMPP Client ... use to send msg to remote jabber conference room
I made a pastebin of that twisted script at : http://pastebin.com/iSRVZNwS
With that script the flow alway one-way only :
serial====>Twisted_XMLRPC--->Twisted_XMPP=====>Jaber
Now I need to do something different, since it's hard to find a Board
with RS232 onboard.
I Need to replace TTYCTRL with Arduino MCU.
Arduino will Send serial data to my PC.
So I'll need my twisted to able to receive data via serial
There will also incoming XMPP msg from Jabber that will need to be
send
to arduino via Serial port.
so the flow will be like :
serial<====>Twisted_Serial<--->Twisted_XMPP<=====>Jaber
My question is, How to make :
1. twisted.internet.serial to send data via an instance of XMPP
client ? and
2. my EchobotProtocol.onMessage (see pastebin), to write data to the
same serial port used by Point#1 above.
This is a relevant FAQ for this situation:
http://twistedmatrix.com/trac/wiki/FrequentlyAskedQuestions#HowdoImakeinputononeconnectionresultinoutputonanother
More specifically:
1. Create a Protocol class for your SerialPort that will communicate
with the Arduino. Instances of this class will have access to the
serial transport and can write out to the serial port. Incoming
messages from the Arduino will be handled by the dataReceived method
of the protocol.
2. Give your EchoBotProtocol a reference to the SerialPort somehow
(e.g. via init), and set a reference to the EchoBotProtocol on the
SerialPort.
Here's a quick sketch:
# Basic line receiver protocol
class ArduinoReceiver(LineReceiver):
def lineReceived(self, line):
print "Line Received from Arduino"
self.echobot.send('some xmpp message for which I do not know the
format')
# Wire up the serial port and protocol...note there are more
parameters to create the SerialPort (baudrate, etc.)
serial = SerialPort(ArduinoReceiver, '/dev/tty.usbserial', reactor)
# EchoBot gets a reference to the serialport
class EchoBotProtocol(MessageProtocol):
def __init__(self, serial, *args, **kwargs):
self.serial = serial
# Set a reference to self on the serial protocol
self.serial.protocol.echobot = self
MessageProtocol.__init__(self, *args, **kwargs)
def onMessage(self, msg):
self.serial.transport.write('some message\n')
echobot = EchoBotProtocol(serial)
...and an update to your pastebin that may be helpful for context:
http://pastebin.com/2EJ22wXa
_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python