Paso 2: Preparar el sistema para trabajar con Python
El archivo ifkit.py es una versión modificada del archivo InterfaceKit-simple.py incluido en los ejemplos publicados por Phidgets, luego descargar la librería y ejemplos de Phidgets.
Descargar las librerías de Python:
wget http://www.phidgets.com/downloads/libraries/PhidgetsPython.zip
Porque las bibliotecas vienen como un archivo comprimido, probablemente tendremos que instalar el soporte de zip
apt-get install zip unzip
unzip PhidgetsPython.zip
cd PhidgetsPython/
Ahora podemos instalar las librerías de Python:
python setup.py install
Y descargar los ejemplos:
wget http://www.phidgets.com/downloads/examples/Python.zip
unzip Python.zip
cd Python/
cp InterfaceKit-simple.py /yowsup/src/ifkit.py
Editar el archivo que tendrá este contenido
#!/usr/bin/env python """Copyright 2010 Phidgets Inc. This work is licensed under the Creative Commons Attribution 2.5 Canada License. To view a copy of this license, visit http://creativecommons.org/licenses/by/2.5/ca/ """ __author__ = 'Adam Stelmack' __version__ = '2.1.8' __date__ = 'May 17 2010' #Basic imports from ctypes import * import sys import random import os #Phidget specific imports from Phidgets.PhidgetException import PhidgetErrorCodes, PhidgetException from Phidgets.Events.Events import AttachEventArgs, DetachEventArgs, ErrorEventArgs, InputChangeEventArgs, OutputChangeEventArgs, SensorChangeEventArgs from Phidgets.Devices.InterfaceKit import InterfaceKit #Create an interfacekit object try: interfaceKit = InterfaceKit() except RuntimeError as e: print("Runtime Exception: %s" % e.details) print("Exiting....") exit(1) #Information Display Function def displayDeviceInfo(): print("|------------|----------------------------------|--------------|------------|") print("|- Attached -|- Type -|- Serial No. -|- Version -|") print("|------------|----------------------------------|--------------|------------|") print("|- %8s -|- %30s -|- %10d -|- %8d -|" % (interfaceKit.isAttached(), interfaceKit.getDeviceName(), interfaceKit.getSerialNum(), interfaceKit.getDeviceVersion())) print("|------------|----------------------------------|--------------|------------|") print("Number of Digital Inputs: %i" % (interfaceKit.getInputCount())) print("Number of Digital Outputs: %i" % (interfaceKit.getOutputCount())) print("Number of Sensor Inputs: %i" % (interfaceKit.getSensorCount())) #Event Handler Callback Functions def interfaceKitAttached(e): attached = e.device print("InterfaceKit %i Attached!" % (attached.getSerialNum())) def interfaceKitDetached(e): detached = e.device print("InterfaceKit %i Detached!" % (detached.getSerialNum())) def interfaceKitError(e): try: source = e.device print("InterfaceKit %i: Phidget Error %i: %s" % (source.getSerialNum(), e.eCode, e.description)) except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) def interfaceKitInputChanged(e): source = e.device # print("InterfaceKit %i: Input %i: %s" % (source.getSerialNum(), e.index, e.state)) def interfaceKitSensorChanged(e): source = e.device # print("InterfaceKit %i: Sensor %i: %i" % (source.getSerialNum(), e.index, e.value)) def interfaceKitOutputChanged(e): source = e.device # print("InterfaceKit %i: Output %i: %s" % (source.getSerialNum(), e.index, e.state)) #Main Program Code try: interfaceKit.setOnAttachHandler(interfaceKitAttached) interfaceKit.setOnDetachHandler(interfaceKitDetached) interfaceKit.setOnErrorhandler(interfaceKitError) interfaceKit.setOnInputChangeHandler(interfaceKitInputChanged) interfaceKit.setOnOutputChangeHandler(interfaceKitOutputChanged) interfaceKit.setOnSensorChangeHandler(interfaceKitSensorChanged) except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) print("Exiting....") exit(1) print("Opening phidget object....") try: interfaceKit.openPhidget() except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) print("Exiting....") exit(1) print("Waiting for attach....") try: interfaceKit.waitForAttach(10000) except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) try: interfaceKit.closePhidget() except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) print("Exiting....") exit(1) print("Exiting....") exit(1) else: # displayDeviceInfo() temperature=(interfaceKit.getSensorValue(0)*0.22222)-61.11 humidity=(interfaceKit.getSensorValue(1)*0.1906)-40.2 print("Closing...") try: interfaceKit.closePhidget() except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) print("Exiting....") exit(1) print("Done.") os.system('sh ./send.sh '+str(temperature)+ ' ' +str(humidity)) exit(0)
Algunos de los cambios realizados en el código original, son la lectura de las entradas analógicas de 0 y 1 en relación con la temperatura y la humedad. Las fórmulas de conversión son proporcionadas por Phidgets para cada tipo de sensor. La última línea llamada la send.sh de archivo que maneja whatsapp.
Crear un nuevo /yowsup/src/send.sh archivo con este contenido
#!/bin/bash echo "Current temperature is $1 °C" echo "Current humidity is $2 %" python yowsup-cli -c config.example -w -s 39xxxxxxxxxx "Current temperature is $1 and current humidity is $2" python yowsup-cli -c config.example -k -a -l exit 0
Reemplazar xxxxxxxx con su número de receptores.
Este archivo es responsable de enviar las variables temperatura y humedad a través de WhatsApp, entonces pone el sistema en la escucha de nuevos mensajes.