def poll(sensor, results):

        """
        Polls a RuuviTag using BT

        Returns:
            True
        """

        tag_instance = RuuviTag(sensor.mac)

        # update state from the device
        state = tag_instance.update()

        if state:

            # populate the sensor results
            if state.get('temperature'):
                results.set_result(sensor, 'temperature', state['temperature'])

            if state.get('humidity'):
                results.set_result(sensor, 'humidity', state['humidity'])

            if state.get('pressure'):
                results.set_result(sensor, 'pressure', state['pressure'])

            if state.get('identifier'):
                # This is NOT the configured NAME
                results.set_result(sensor, 'identifier', state['identifier'])

        else:
            results.inactive_sensors.append(sensor)

        return True
示例#2
0
    def read_tag(tag_mac, device):
        """Read data from the RuuviTag with the provided MAC address.
        Returns a dictionary containing the data."""
        sensor = RuuviTag(tag_mac, bt_device=device)
        sensor.update()

        # get latest state (does not get it from the device)
        return sensor.state
示例#3
0
def ruuviScan():
    sensor = RuuviTag(sensor_mac)
    state = sensor.update()
    json_str = '{"uid": "' + str(sensor_mac) + '", "payload": ' + json.dumps(
        state) + '}'
    print(json_str)
    sender.send_message(json_str)
    time.sleep(2)
    def test_tag_update_is_valid(self):
        tag = RuuviTag('48:2C:6A:1E:59:3D')

        state = tag.state
        self.assertEqual(state, {})

        state = tag.update()
        self.assertEqual(state['temperature'], 24)
        self.assertEqual(state['pressure'], 995)
        self.assertEqual(state['humidity'], 30)
def read_data():
    global cachedData
    allData = []
    try:
        for mac in configuredTags.keys():
            sensor = RuuviTag(mac)
            sensor.update()
            tagData = sensor.state
            tagData['name'] = configuredTags[mac]
            allData.append(tagData)
    except:
        sys.exit(1)
    cachedData.clear()
    return allData
示例#6
0
    def _setup(self):
        from ruuvitag_sensor.ruuvitag import RuuviTag

        _LOGGER.info("Adding %d %s devices", len(self.devices), repr(self))
        for name, mac in self.devices.items():
            _LOGGER.debug("Adding %s device '%s' (%s)", repr(self), name, mac)
            self.devices[name] = RuuviTag(mac)
    def test_tag_correct_properties(self):
        org_mac = 'AA:2C:6A:1E:59:3D'
        tag = RuuviTag(org_mac)

        mac = tag.mac
        state = tag.state
        self.assertEqual(mac, org_mac)
        self.assertEqual(state, {})
示例#8
0
def log_reading(mac, logfile=None):
    """Reads the state of a Ruubitag and writes it into a logfile if provided.
    The logfile is created if it doesn't already exist.

    # Arguments
        mac: str. MAC-address of the ruuvitag
        logfile: str or None (default None). Path to the logfile. If `None`,
            the reading is just returned and nothing gets logged.
    """
    sensor = RuuviTag(mac)
    sensor.update()
    reading = sensor.state
    reading['time'] = str(datetime.datetime.now())
    if logfile:
        maybe_create_log(logfile)
        with open(logfile, 'a', newline='\n') as f:
            dw = csv.DictWriter(f, fieldnames=_fields, extrasaction='ignore')
            dw.writerow(reading)
    return reading
示例#9
0
 def __init__(self):
     self.ruuviSensors.insert(0, RuuviTag('FB:9C:C6:4D:2C:46'))
     self.ruuviSensors.insert(1, RuuviTag('D1:82:DB:D5:46:1D'))
     self.ruuviSensors.insert(2, RuuviTag('C6:BD:CC:FA:58:1C'))
     self.ruuviSensors.insert(3, RuuviTag('DC:1F:FE:DA:57:36'))
     self.ruuviSensors.insert(4, RuuviTag('EC:E0:88:7D:3B:66'))
     self.ruuviSensors.insert(5, RuuviTag('EC:D4:41:5A:82:BC'))
示例#10
0
from ruuvitag_sensor.ruuvitag import RuuviTag

sensor = RuuviTag('E0:7F:A8:07:C2:36')

# update state from the device
state = sensor.update()
print(state)
# get latest state (does not get it from the device)
state = sensor.state

print(state["pressure"])
示例#11
0
# -*- coding: utf-8 -*-
"""
Created on Thu Dec 10 09:33:37 2020

@author: jorge
"""
from ruuvitag_sensor.ruuvitag import RuuviTag

#sensor = RuuviTag('AA:2C:6A:1E:59:3D')
sensor = RuuviTag('C4:4F:33:65:D2:4B')

# update state from the device
state = sensor.update()

# get latest state (does not get it from the device)
state = sensor.state

print(state)
 def test_false_mac_raise_error(self):
     with self.assertRaises(ValueError):
         RuuviTag('48:2C:6A:1E')
示例#13
0
    con.close()
    print('insert ruuvitagdata database')


# Change here your own device's mac-address
tagList = [
    'F6:DB:7F:5E:C8:62', 'F1:15:2E:FC:0C:3A', 'EF:28:0A:7D:E1:1D',
    'E9:7A:A6:0B:51:1E', 'F0:DE:F8:93:AF:A2'
]
print('Starting')
tz = pytz.timezone('Europe/Helsinki')

while True:

    for tag in tagList:
        sensor = RuuviTag(tag)
        data = sensor.update()

        insertRuuvitagData(data['temperature'], data['pressure'],
                           data['humidity'], tag,
                           datetime.now(tz=tz).strftime('%Y-%m-%d %H:%M'))
        print(tag)

# Wait for 60 seconds and start over again
    try:
        time.sleep(300)
    except KeyboardInterrupt:
        # When Ctrl+C is pressed execution of the while loop is stopped
        print('Exit')
        break
示例#14
0
from ruuvitag_sensor.ruuvitag import RuuviTag
import os
import datetime
import time

sensor = RuuviTag('D7:05:12:28:73:D9')
i = 0
while 1:
    print(i)
    i = i + 1
    # update state from the device
    state = sensor.update()

    # get latest state (does not get it from the device)
    state = sensor.state

    for var in state:
        print(var + " : " + str(state[var]))

    date = datetime.datetime.now()
    print("Ano : " + str(date.year))
    print("Mês : " + str(date.month))
    print("dia : " + str(date.day))
    print("hora : " + str(date.hour))
    print("minuto : " + str(date.minute))
    print("segundo : " + str(date.second))
    print("\n\n--------------------------\n\n")
示例#15
0
                        help='Stream broadcasts from all RuuviTags')
    parser.add_argument('--version',
                        action='version',
                        version='%(prog)s {}'.format(
                            ruuvitag_sensor.__version__))
    parser.add_argument('--debug',
                        action='store_true',
                        dest='debug_action',
                        help='Enable debug logging')
    args = parser.parse_args()

    if args.debug_action:
        log.setLevel(logging.DEBUG)
        for handler in log.handlers:
            handler.setLevel(logging.DEBUG)

    if args.mac_address:
        sensor = RuuviTag(args.mac_address, args.bt_device)
        state = sensor.update()
        log.info(state)
    elif args.find_action:
        RuuviTagSensor.find_ruuvitags(args.bt_device)
    elif args.latest_action:
        datas = RuuviTagSensor.get_data_for_sensors(bt_device=args.bt_device)
        log.info(datas)
    elif args.stream_action:
        RuuviTagSensor.get_datas(lambda x: log.info('%s - %s', x[0], x[1]),
                                 bt_device=args.bt_device)
    else:
        parser.print_usage()
示例#16
0
from ruuvitag_sensor.ruuvitag import RuuviTag
import time
import argparse

parser = argparse.ArgumentParser(description='Check for infinite loop.')
parser.add_argument("is_inifinte", nargs='?', default="")
input = parser.parse_args()

mac_addr = 'DE:E5:EA:C5:9C:3E'
count = 0
sensor = RuuviTag(mac_addr)

while count < 2:
    if input.is_inifinte == "":
        count = count + 1
    state = sensor.update()
    myoutput = sensor.state
    
    myoutput["MAC"] = mac_addr
    myoutput["count"] = count
    myoutput["timestamp"] = time.time()
    myoutput["ctime"] = time.ctime()
    
    f = open("broadcast.log", "a")
    f.write(str(myoutput))
    f.write("\n")
    f.close()
    
    print(str(myoutput))
    
    time.sleep(60)
示例#17
0
from ruuvitag_sensor.ruuvitag import RuuviTag
import threading
from time import gmtime, strftime
#D31FACAA0C9E
sensor = RuuviTag('D1:98:7E:8C:B4:5B')

temp = []
pres = []
acc = []
time = []

##def requestRuuvi():
##    threading.Timer(3,requestRuuvi).start()

for i in range(0, 10):
    # update state from the device
    state = sensor.update()

    # get latest state (does not get it from the device)
    state = sensor.state
    time.append(strftime("%Y-%m-%d %H:%M:%S", gmtime()))
    temp.append(state['temperature'])
    pres.append(state['pressure'])
    acc.append(state['acceleration'])

    print(strftime("%Y-%m-%d %H:%M:%S", gmtime()))
    print(state['temperature'])
    print(state['pressure'])
    print(state['acceleration'])

    i = i + 1
示例#18
0
results = {}

date_time = now_date_time()
weather_url = 'https://api.openweathermap.org/data/2.5/weather?zip={},us&appid={}'.format(
    cfg.zip_code, cfg.weather_api_key)
r = requests.get(weather_url)
try:
    outside_temp = convCel(r.json()['main']['temp'])
    outside_hum = r.json()['main']['humidity']
except:
    print(r.json())

results.update({'outside': {'temp': outside_temp, 'humidity': outside_hum}})

for name, mac in sensors.items():
    sensor = RuuviTag(mac)
    state = sensor.update()
    temp = convCel(sensor.state['temperature'])
    humidity = sensor.state['humidity']
    #print(sensor.state)
    results.update({name: {'temp': temp, 'humidity': humidity}})

temp_diff = results['ac_return']['temp'] - results['ac_vent']['temp']

print('Date Read: ', date_time)

for sensor, data in results.items():
    temp = data['temp']
    hum = data['humidity']

    print(sensor, ' Temp:', temp, 'Humidity:', humidity)
示例#19
0
url = "https://api.thingspeak.com/update?api_key=%s" % writeAPIkey
messageBuffer = []
fields = ''
_temperature = 19.0

lastConnectionTime = time.time()  # Track the last connection time
lastUpdateTime = time.time()  # Track the last update time
postingInterval = 60  # Post data once every 1 minutes
updateInterval = 15  # Update once every 15 seconds

# Change here your own device's mac-address ruuvitag
mac = 'F4:9D:33:83:30:29'

print('Starting')

sensor = RuuviTag(mac)


def httpRequest():
    '''Function to send the POST request to
    ThingSpeak channel for bulk update.'''

    # global messageBuffer
    global url
    global fields
    global _temperature

    # data = json.dumps({'write_api_key':writeAPIkey,'updates':messageBuffer}) # Format the json data buffer
    url_req = url + fields
    # print(url_req)
    req = urllib.request.Request(url=url_req)
示例#20
0
 def __init__(self, mac_addr='E8:C7:D7:F2:4B:47', bt_device=''):
     self._sensor = RuuviTag(mac_addr, bt_device)
     self._data_count = 0
示例#21
0
class MyRuuvi():

    def __init__(self, mac_addr='E8:C7:D7:F2:4B:47', bt_device=''):
        self._sensor = RuuviTag(mac_addr, bt_device)
        self._data_count = 0

    ### Properties ###
    @property
    def mac(self):
        return self._sensor.mac

    @property
    def state(self):
        return self._sensor.state

    @property
    def temp(self):
        return self.state['temperature']

    @property
    def humid(self):
        return self.state['humidity']

    @property
    def press(self):
        return self.state['pressure']

    @property
    def acc(self):
        return self.state['acceleration'] / 1000

    @property
    def acc_x(self):
        return self.state['acceleration_x'] / 1000

    @property
    def acc_y(self):
        return self.state['acceleration_y'] / 1000

    @property
    def acc_z(self):
        return self.state['acceleration_z'] / 1000

    @property
    def bat(self):
        return self.state['battery']

    @property
    def dataformat(self):
        return self.state['data_format']

    @property
    def elev_x(self):
        return math.acos(self.acc_x / self.acc) * 180 / math.pi

    @property
    def elev_y(self):
        return math.acos(self.acc_y / self.acc) * 180 / math.pi

    @property
    def elev_z(self):
        return math.acos(self.acc_z / self.acc) * 180 / math.pi

    @property
    def rssi(self):
        return self.state['rssi']

    @property
    def data_count(self):
        return self._data_count

    ### Methods ###
    def update(self):
        self._sensor.update()
        self._data_count += 1

    def print_to_shell(self):
        ''' Printing collected data from saved state to shell '''

        os.system('clear')
        print('\n\r')
        print(str(datetime.now()))
        print('Sensor:\t{}'.format(self.mac))
        print('-'*30)
        print('Temperature:\t{:.2f}\t°C'.format(self.temp))
        print('Humidity:\t{:.2f}\t%'.format(self.humid))
        print('Pressure:\t{:.2f}\thPa'.format(self.press))
        print('-'*30)
        print('Acceleration:\t{:.3f}\tG'.format(self.acc))
        print('X:\t\t{:.3f}\tG'.format(self.acc_x))
        print('Y:\t\t{:.3f}\tG'.format(self.acc_y))
        print('Z:\t\t{:.3f}\tG'.format(self.acc_z))
        print('-'*30)
        print('Elevation X:\t{:.0f}\t°'.format(self.elev_x))
        print('Elevation Y:\t{:.0f}\t°'.format(self.elev_y))
        print('Elevation Z:\t{:.0f}\t°'.format(self.elev_z))
        print('-' * 30)
        print('RSSI:\t\t{}\tdBm'.format(self.rssi))
        print('Battery:\t{:.0f}\tmV'.format(self.bat))
        print('Data Count:\t{}'.format(self.data_count))
示例#22
0
from ruuvitag_sensor.ruuvi import RuuviTagSensor
from ruuvitag_sensor.ruuvitag import RuuviTag

with open('./config.json') as json_data_file:
    data = json.load(json_data_file)

serverUrl = data['variables']['server-url']
bufferFile = data['variables']['buffer-file']
tableName = data['variables']['table-name']
sensorMac = data['variables']['sensor-mac']
sensorUuid = data['variables']['uuid']

ruuvitag_sensor.log.enable_console()

# Beacon mac address
sensor = RuuviTag(sensorMac)

# Unique identifier generated from mac address
uuid = sensorUuid

# update state from the device
state = sensor.update()

# get latest state (does not get it from the device)
state = sensor.state

# double encode json
double_encode = json.dumps(state)

# generate json
jsonData = {
示例#23
0
def main_page():
	if request.method == "POST":
		selected_report = request.form['selected_report']
		days_data       = request.form['days_data']
	else:
		selected_report = 'temp_over_time'
		days_data       = '1'

	record_count = DBQuery("SELECT COUNT(*) FROM TEMP_HISTORY WHERE DATE_READ > datetime('now','-{} day')".format(days_data),True)

	if record_count==0:
		days_data='30'

	if days_data=='1':
		time_name = '24 Hours'
	elif days_data=='3':
		time_name = '72 Hours'
	elif days_data=='7':
		time_name = '7 Days'
	else:
		time_name = days_data+' Days'


	weather_url  = 'https://api.openweathermap.org/data/2.5/weather?zip={},us&appid={}'.format(cfg.zip_code,cfg.weather_api_key)
	r            = requests.get(weather_url)
	outside_temp = convCel(r.json()['main']['temp'])
	outside_hum  = r.json()['main']['humidity']

	results = {}

	for name, mac in cfg.sensors.items():
		sensor   = RuuviTag(mac)
		state    = sensor.update()
		temp     = convCel(sensor.state['temperature'])
		humidity = sensor.state['humidity']
		results.update({name:{'temp':temp,'humidity':humidity}})

	current_temp_diff = round(results['ac_return']['temp'] - results['ac_vent']['temp'],2)

	ac_is_running = True if current_temp_diff>=10 else False

	print(ac_is_running)

	#SETTING COLOR BASED ON VALUE
	if current_temp_diff>=13 and current_temp_diff<16:
		current_temp_html = '<span style="color:orange;">{}</span>'.format(current_temp_diff)
	elif current_temp_diff>=16:
		current_temp_html = '<span style="color:green;">{}</span>'.format(current_temp_diff)
	else:
		current_temp_html = '<span style="color:red;">{}</span>'.format(current_temp_diff)

	db_sensors = [x[0] for x in DBQuery("SELECT DISTINCT SENSOR_NAME FROM TEMP_HISTORY WHERE DATE_READ > datetime('now','-{} day')".format(days_data))]

	min_max_temps = {}
	for s in db_sensors:
		max_hum  = DBQuery("SELECT MAX(HUMIDITY) FROM TEMP_HISTORY WHERE SENSOR_NAME='{}' AND DATE_READ > datetime('now','-{} day')".format(s,days_data),True)
		min_hum  = DBQuery("SELECT MIN(HUMIDITY) FROM TEMP_HISTORY WHERE SENSOR_NAME='{}' AND DATE_READ > datetime('now','-{} day')".format(s,days_data),True)
		avg_hum  = round(DBQuery("SELECT AVG(HUMIDITY) FROM TEMP_HISTORY WHERE SENSOR_NAME='{}' AND DATE_READ > datetime('now','-{} day')".format(s,days_data),True),2)
		max_temp = DBQuery("SELECT MAX(TEMP) FROM TEMP_HISTORY WHERE SENSOR_NAME='{}' AND DATE_READ > datetime('now','-{} day')".format(s,days_data),True)
		min_temp = DBQuery("SELECT MIN(TEMP) FROM TEMP_HISTORY WHERE SENSOR_NAME='{}' AND DATE_READ > datetime('now','-{} day')".format(s,days_data),True)
		avg_temp = round(DBQuery("SELECT AVG(TEMP) FROM TEMP_HISTORY WHERE SENSOR_NAME='{}' AND DATE_READ > datetime('now','-{} day')".format(s,days_data),True),2)
		min_max_temps.update({s:{
									'max_temp':max_temp,
									'min_temp':min_temp,
									'avg_temp':avg_temp,
									'max_humidity':max_hum,
									'min_humidity':min_hum,
									'avg_humidity':avg_hum
										}
									})

	m_m = ['MAX','MIN','AVG']
	min_max_diff = {}
	for m in m_m:
		q_min_max_diff = """
					SELECT COALESCE({}(t1.TEMP - (
										SELECT 	t2.TEMP 
										FROM 	TEMP_HISTORY AS t2 
										WHERE 	t1.DATE_READ=t2.DATE_READ 
												AND t2.SENSOR_NAME='ac_vent'
												)),0)
					FROM 	TEMP_HISTORY AS t1 
					WHERE 	t1.SENSOR_NAME='ac_return'
							AND DATE_READ > datetime('now','-{} day')
					""".format(m,days_data)
		temp = round(DBQuery(q_min_max_diff,True),2)
		min_max_diff.update({m:temp})

	#DETERMINING LAST TOTAL RUNTIME
	ac_return_ids= [x[0] for x in DBQuery("SELECT ID FROM TEMP_HISTORY WHERE SENSOR_NAME='ac_return' AND DATE_READ > datetime('now','-{} day') ORDER BY DATE_READ DESC".format(days_data))]
	count     = 1
	last_date = ''
	continuous_ids = []
	temp_list = []
	for i in ac_return_ids:
		if count==1:
			last_date = DBQuery('SELECT DATE_READ FROM TEMP_HISTORY WHERE ID = {}'.format(i),True)
			continuous_ids.append(i)
			count+=1
		else:
			cur_date = DBQuery('SELECT DATE_READ FROM TEMP_HISTORY WHERE ID = {}'.format(i),True)
			delta = __datetime(last_date) - __datetime(cur_date)
			delta = delta.total_seconds()
			print(last_date,cur_date)
			temp_list.append(delta-300)
			last_date = cur_date
			continuous_ids.append(i)
			if delta>=310:
				break
	print(temp_list)
	run_start_date = DBQuery("SELECT COALESCE(MAX(DATE_READ),'1970-01-01 13:00:00') FROM TEMP_HISTORY WHERE ID IN ({})".format(','.join([str(x) for x in continuous_ids])),True)
	run_end_date   = DBQuery("SELECT COALESCE(MIN(DATE_READ),'1970-01-01 12:00:00') FROM TEMP_HISTORY WHERE ID IN ({})".format(','.join([str(x) for x in continuous_ids])),True)
	max_ac_return  = DBQuery("SELECT COALESCE(MAX(TEMP),0) FROM TEMP_HISTORY WHERE SENSOR_NAME='ac_return' AND DATE_READ='{}'".format(run_end_date),True)
	min_ac_return  = DBQuery("SELECT COALESCE(MIN(TEMP),0) FROM TEMP_HISTORY WHERE SENSOR_NAME='ac_return' AND DATE_READ='{}'".format(run_start_date),True)

	run_delta  = __datetime(run_start_date) - __datetime(run_end_date)
	run_delta  = run_delta.total_seconds()
	ac_runtime = sec2humanTime(run_delta)

	total_degrees_cooled = max_ac_return - min_ac_return

	degrees_over_time = coolAgainstTime(total_degrees_cooled,run_delta)

	#RENDER SElECTED GRAPH REPORT
	if selected_report=='temp_over_time':
		chart = pygal.Line(style=custom_style,x_label_rotation=20)
		chart.title = 'Tempature Over {}'.format(time_name)

		labels = [x[0] for x in DBQuery("SELECT DISTINCT strftime('%m/%d %Hhrs %Mmins',DATE_READ) FROM TEMP_HISTORY WHERE SENSOR_NAME='attic' AND DATE_READ > datetime('now','-{} day')".format(days_data))]
		chart.x_labels = labels

		for s in db_sensors:
			sensor_name  = s 
			sensor_temps = [x[0] for x in DBQuery("SELECT TEMP FROM TEMP_HISTORY WHERE SENSOR_NAME='{}' AND DATE_READ > datetime('now','-{} day')".format(sensor_name,days_data))]
			chart.add(sensor_name,sensor_temps)
	elif selected_report=='diff_over_time':
		chart = pygal.Line(fill=True, interpolate='cubic', style=custom_style)
		chart.title = 'Tempature Differential Over {}'.format(time_name)
		labels = [x[0] for x in DBQuery("SELECT DISTINCT strftime('%m/%d %Hhrs',DATE_READ) FROM TEMP_HISTORY WHERE SENSOR_NAME='attic' AND DATE_READ > datetime('now','-{} day')".format(days_data))]
		chart.x_labels = labels
		data_query = """
					SELECT t1.TEMP - (
										SELECT 	t2.TEMP 
										FROM 	TEMP_HISTORY AS t2 
										WHERE 	t1.DATE_READ=t2.DATE_READ 
												AND t2.SENSOR_NAME='ac_vent'
												) 
					FROM 	TEMP_HISTORY AS t1 
					WHERE 	t1.SENSOR_NAME='ac_return'
							AND DATE_READ > datetime('now','-{} day')
					""".format(days_data)
		sensor_temps = [x[0] for x in DBQuery(data_query)]
		chart.add('Temp Diff',sensor_temps)


	graph_data = chart.render_data_uri()
	post_url   = url_for('main_page')

	last_update = DBQuery("SELECT DATE_READ FROM TEMP_HISTORY ORDER BY DATE_READ DESC LIMIT 1",True)

	last_update_delta = __datetime(now_date_time()) - __datetime(last_update)
	last_update       = sec2humanTime(last_update_delta.total_seconds()) 

	return render_template('pygal_reports.html',graph_data=graph_data,outside_temp=outside_temp,
							outside_hum=outside_hum,results=results,min_max_temps=min_max_temps,
							current_temp_html=current_temp_html,post_url=post_url,
							selected_report=selected_report,min_max_diff=min_max_diff,
							days_data=days_data,ac_runtime=ac_runtime,degrees_over_time=degrees_over_time,
							ac_is_running=ac_is_running,last_update=last_update)
示例#24
0
#send

POLES = ['192.168.10.1', '192.168.20.1', '192.168.30.1']
POLESUB = '192.168.'
UDP_IP = '192.168.1.50'  ##service IP
UDP_PORT = 9011
MESSAGE = "Fall"

sock = socket.socket(
    socket.AF_INET,  # Internet
    socket.SOCK_DGRAM)  # UDP

sock.bind(('0.0.0.0', UDP_PORT))

sensor = RuuviTag('CF:FC:1D:65:2E:98')
networkNow = 0
startTime = time.time()
fall = 0
while True:
    state = sensor.update()

    state = sensor.state

    print(state['acceleration_x'], state['acceleration_y'],
          state['acceleration_z'])
    if int(state['acceleration_z']) < 500:
        print('--------', state['acceleration_x'], state['acceleration_y'],
              state['acceleration_z'])
        sock.sendto(
            bytes((POLESUB + socket.getfqdn().split('.')[1] +
示例#25
0
    def device_for(self, mac):
        from ruuvitag_sensor.ruuvitag import RuuviTag

        return RuuviTag(mac)
示例#26
0
        nargs=1,
        metavar='ID',
        type=str,
        help=
        'Bluetooth adapter to use (/dev/hci[x], where x is the adapter number)',
        required=True)
    return parser.parse_args()


if __name__ == "__main__":
    parse = argparse.ArgumentParser(
        description="Receive latest measurement from RuuviTag")
    args = parseargs(parse)
    try:
        bt_device = 'hci{}'.format(args.bt_adapter[0])
        sensor = RuuviTag(args.mac_address[0], bt_device=bt_device)
        state = sensor.update()

        if state:
            result = "{temp},{hum},{press},{bat},{accel},{accel_x},{accel_y},{accel_z}".format(
                temp=state['temperature'],
                hum=state['humidity'],
                press=state['pressure'],
                bat=state['battery'],
                accel=state['acceleration'],
                accel_x=state['acceleration_x'],
                accel_y=state['acceleration_y'],
                accel_z=state['acceleration_z'])
            print(result, end='')
    except Exception:
        pass
datas = RuuviTagSensor.get_data_for_sensors(list(datas.keys())[0],
                                            search_duratio_sec=15)
print(datas)

if not datas:
    raise Exception('FAILED')
else:
    print('OK')

#
# RuuviTag.update
#
print_header('RuuviTag.update')

tag = RuuviTag(list(datas.keys())[0])
tag.update()
print(tag.state)

if not tag.state:
    raise Exception('FAILED')
else:
    print('OK')

#
# RuuviTagSensor.get_datas
#
print_header('RuuviTagSensor.get_datas')

flag = RunFlag()
示例#28
0
                        help='Find broadcasting RuuviTags')
    parser.add_argument('-l',
                        '--latest',
                        action='store_true',
                        dest='latest_action',
                        help='Get latest data for found RuuviTags')
    parser.add_argument('-s',
                        '--stream',
                        action='store_true',
                        dest='stream_action',
                        help='Stream broadcasts from all RuuviTags')
    parser.add_argument('--version',
                        action='version',
                        version='%(prog)s {}'.format(
                            ruuvitag_sensor.__version__))
    args = parser.parse_args()

    if args.mac_address:
        sensor = RuuviTag(args.mac_address)
        state = sensor.update()
        log.info(state)
    elif args.find_action:
        RuuviTagSensor.find_ruuvitags()
    elif args.latest_action:
        datas = RuuviTagSensor.get_data_for_sensors()
        log.info(datas)
    elif args.stream_action:
        RuuviTagSensor.get_datas(lambda x: log.info('%s - %s' % (x[0], x[1])))
    else:
        parser.print_usage()
示例#29
0
from ruuvitag_sensor.ruuvitag import RuuviTag
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--tag")
args = parser.parse_args()
# print args.tag

sensor = RuuviTag(args.tag)
state = sensor.update()

# get latest state (does not get it from the device)
state = sensor.state

print(state)
RuuviTag's update-method will always create new bluetooth scanning
process and eventually process creation may fail.
"""

import time
import os
from datetime import datetime

from ruuvitag_sensor.ruuvitag import RuuviTag

# Change here your own device's mac-address
mac = 'F4:A5:74:89:16:57'

print('Starting')

sensor = RuuviTag(mac)

while True:
    data = sensor.update()

    line_sen = str.format('Sensor - {0}', mac)
    line_tem = str.format('Temperature: {0} C', data['temperature'])
    line_hum = str.format('Humidity:    {0}', data['humidity'])
    line_pre = str.format('Pressure:    {0}', data['pressure'])

    # Clear screen and print sensor data
    os.system('clear')
    print('Press Ctrl+C to quit.\n\r\n\r')
    print(str(datetime.now()))
    print(line_sen)
    print(line_tem)
示例#31
0
s3 = boto3.resource('s3',
                    aws_access_key_id=ACCESS_ID,
                    aws_secret_access_key=ACCESS_KEY)

obj = s3.Object(bucket, taglist)

body = obj.get()['Body'].read()

tags = json.loads(body)

print(tags)

measurements = []

for tag in tags:
    sensor = RuuviTag(tags[tag])
    state = sensor.update()
    #print('state: ' + str(state))
    datas = (tag, state['temperature'], round(state['pressure']),
             round(state['humidity']))
    measurements.append(datas)

sql = '''INSERT INTO observations (tagname, date, time, temperature, pressure, relativehumidity, timestamp)
  VALUES(%s, CURRENT_DATE(), CURRENT_TIME(), %s, %s, %s, UNIX_TIMESTAMP())'''

db = pymysql.connect(host="127.0.0.1",
                     user=user,
                     passwd=passwd,
                     db=db,
                     port=port)