from ant.core import event from ant.core import message from ant.core.constants import * from config import * NETKEY = '\xB9\xA5\x21\xFB\xBD\x72\xC3\x45' # A run-the-mill event listener class HRMListener(event.EventCallback): def process(self, msg, _channel): if isinstance(msg, message.ChannelBroadcastDataMessage): print 'Heart Rate:', ord(msg.payload[-1]) # Initialize stick = driver.USB1Driver(SERIAL, log=LOG, debug=DEBUG) antnode = node.Node(stick) antnode.start() # Setup channel net = node.Network(name='N:ANT+', key=NETKEY) antnode.setNetworkKey(0, net) channel = antnode.getFreeChannel() channel.name = 'C:HRM' channel.assign(net, CHANNEL_TYPE_TWOWAY_RECEIVE) channel.setID(120, 0, 0) channel.searchTimeout = TIMEOUT_NEVER channel.period = 8070 channel.frequency = 57 channel.open()
def open(self): #Setup the logger: self.logger = LogWriter(filename=self.outfile, runName=self.runName) # Initialize driver self.stick = driver.USB1Driver(self.serial, log=self.logger, debug=True, baud_rate=4800) self.stick.open() # Initialize event machine self.evm = event.EventMachine(self.stick) self.evm.registerCallback(MyCallback()) self.evm.start() # Reset logging.debug("\n\n-------------------------------\n:") logging.debug("Setting UP") logging.debug("\n\n-------------------------------\n") msg = SystemResetMessage() self.stick.write(msg.encode()) time.sleep(1) # Set network key msg = NetworkKeyMessage(key=NETKEY) self.stick.write(msg.encode()) sleep(1) # if self.evm.waitForAck(msg) != RESPONSE_NO_ERROR: # logging.debug( 'ERROR SETTING UP: SETTING NETWORK KEY') # sys.exit() # Initialize it as a receiving channel using our network key msg = ChannelAssignMessage() self.stick.write(msg.encode()) sleep(1) # if self.evm.waitForAck(msg) != RESPONSE_NO_ERROR: # logging.debug( 'ERROR SETTING UP: INITIALISING AS RECEIVING CHANNEL') # sys.exit() # Now set the channel id for pairing with an ANT+ bike cadence/speed sensor msg = ChannelIDMessage(device_type=121) self.stick.write(msg.encode()) sleep(1) # if self.evm.waitForAck(msg) != RESPONSE_NO_ERROR: # logging.debug( 'ERROR SETTING UP: SETTING CHANNEL ID ') # sys.exit() # Listen forever and ever (not really, but for a long time) msg = ChannelSearchTimeoutMessage(timeout=255) self.stick.write(msg.encode()) sleep(1) # if self.evm.waitForAck(msg) != RESPONSE_NO_ERROR: # logging.debug( 'ERROR SETTING UPL LISTENING TIMEOUT') # sys.exit() # We want a ~4.05 Hz transmission period msg = ChannelPeriodMessage(period=8085) self.stick.write(msg.encode()) sleep(1) # if self.evm.waitForAck(msg) != RESPONSE_NO_ERROR: # logging.debug( 'ERROR SETTING UP: TRANSMISSION FREQUENCY') # sys.exit() # And ANT frequency 57, of course msg = ChannelFrequencyMessage(frequency=57) self.stick.write(msg.encode()) sleep(1) # if self.evm.waitForAck(msg) != RESPONSE_NO_ERROR: # logging.debug( 'ERROR SETTING UP: SETTING FREQUENCY') # sys.exit() # Time to go live msg = ChannelOpenMessage() self.stick.write(msg.encode()) sleep(1) # if self.evm.waitForAck(msg) != RESPONSE_NO_ERROR: # logging.debug( 'ERROR SETTING UP: GOING LIVE') # sys.exit() logging.debug("\n\n-------------------------------\n:") logging.debug("Listening for ANT events: Press CTRL+C to Exit.") logging.debug("\n\n-------------------------------\n")
from ant.core import driver from ant.core import node from PowerMeterTx import PowerMeterTx from SpeedTx import SpeedTx from iConst import * power_meter = None POWER_SENSOR_ID = int( int(hashlib.md5(getserial()).hexdigest(), 16) & 0xFFFFfffe) + 1 speed = None SPEED_SENSOR_ID = int( int(hashlib.md5(getserial()).hexdigest(), 16) & 0xFFFFfffe) + 2 if __name__ == '__main__': NETKEY = unhexlify(sys.argv[1]) stick = driver.USB1Driver(device="/dev/ttyANT", log=None, debug=True) antnode = node.Node(stick) print("Starting ANT node on network %s" % sys.argv[1]) antnode.start() key = node.NetworkKey('N:ANT+', NETKEY) antnode.setNetworkKey(0, key) print("Starting power meter with ANT+ ID " + repr(POWER_SENSOR_ID)) try: # Create the power meter object and open it power_meter = PowerMeterTx(antnode, POWER_SENSOR_ID) power_meter.open() except Exception as e: print("power_meter error: " + e.message) power_meter = None
got = send_ack(READ, plen=21) if len(got) == 21: ic = IConsole(got) power_meter.update(power=ic.power, cadence=ic.rpm) speed.update(ic.speed) win.addstr( 0, 0, "%s - %s - %s - %s - %s - %s - %s - %s" % (ic.time_str, ic.speed_str, ic.rpm_str, ic.distance_str, ic.calories_str, ic.hf_str, ic.power_str, ic.lvl_str)) win.clrtoeol() win.refresh() if __name__ == '__main__': NETKEY = unhexlify(sys.argv[1]) stick = driver.USB1Driver(device="/dev/ttyANT", log=LOG, debug=DEBUG) antnode = node.Node(stick) print("Starting ANT node on network %s" % sys.argv[1]) antnode.start() key = node.NetworkKey('N:ANT+', NETKEY) antnode.setNetworkKey(0, key) print("Starting power meter with ANT+ ID " + repr(POWER_SENSOR_ID)) try: # Create the power meter object and open it power_meter = PowerMeterTx(antnode, POWER_SENSOR_ID) power_meter.open() except Exception as e: print("power_meter error: " + e.message) power_meter = None
def _start_antnode(self): stick = driver.USB1Driver(self.serial, log=None, debug=False) self.antnode = node.Node(stick) self.antnode.start()
def start(self): print 'Initializing' # Initialize stick = driver.USB1Driver(SERIAL, debug=DEBUG) self.antnode = node.Node(stick) self.antnode.start()
from ant.core.constants import * from ant.core.message import * from config import * NETKEY = '\xB9\xA5\x21\xFB\xBD\x72\xC3\x45' # Event callback class MyCallback(event.EventCallback): def process(self, msg): print msg # Initialize driver stick = driver.USB1Driver(SERIAL, log=LOG, debug=DEBUG, baud_rate=4800) stick.open() # Initialize event machine evm = event.EventMachine(stick) evm.registerCallback(MyCallback()) evm.start() # Reset msg = SystemResetMessage() stick.write(msg.encode()) time.sleep(1) # Set network key msg = NetworkKeyMessage(key=NETKEY) stick.write(msg.encode())
from ant.core.message import * from config import * NETKEY = '\xB9\xA5\x21\xFB\xBD\x72\xC3\x45' # Event callback class MyCallback(event.EventCallback): def process(self, msg): print msg if isinstance(msg, ChannelBroadcastDataMessage): print 'Beat Count:', ord(msg.getPayload()[7]) print 'Heart Rate:', ord(msg.getPayload()[8]) # Initialize driver stick = driver.USB1Driver(SERIAL, log=LOG) # No debug, too much data stick.open() # Initialize event machine evm = event.EventMachine(stick) evm.registerCallback(MyCallback()) evm.start() # Reset msg = SystemResetMessage() stick.write(msg.encode()) time.sleep(1) # Set network key msg = NetworkKeyMessage(key=NETKEY) stick.write(msg.encode())