| @@ -7,6 +7,8 @@ Sav/* | |||
| Bak/* | |||
| *bak | |||
| WWW/* | |||
| # C extensions | |||
| *.so | |||
| @@ -18,18 +18,35 @@ API Call list : | |||
| ```python | |||
| # Socket API based commands | |||
| list_devices() | |||
| get_demand_values(macid=None, interval='hour', frequency=None) | |||
| get_device_data(macid=None) | |||
| get_fast_poll_status(macid=None) | |||
| get_history_data(macid=None, starttime='0x00000000', endtime=None, frequency=None) | |||
| get_instantaneous_demand(macid=None) | |||
| get_summation_values(macid=None, interval='day') | |||
| get_fast_poll_status(macid=None) | |||
| set_fast_poll(macid=None, frequency='0x04', duration='0xFF') | |||
| # Web API based calls | |||
| def get_setting_data(macid=None) | |||
| def get_device_config(macid=None) | |||
| def get_timezone(macid=None) | |||
| def get_time_source(macid=None) | |||
| def set_remote_management(macid=None, status="Yes") | |||
| def set_time_source(macid=None, source="internet") | |||
| def get_price(macid=None) | |||
| def set_price(macid=None, price) | |||
| def set_price_auto(macid=None) | |||
| def factory_reset(macid=None) | |||
| def cloud_reset(macid=None) | |||
| def set_cloud(macid=None, url) | |||
| ``` | |||
| Calls return dictionarys containing data results | |||
| API Calls return dictionarys containing data results, | |||
| raises exception or returns None if error | |||
| ## External Documentation | |||
| @@ -10,14 +10,15 @@ if sys.hexversion < 0x20703f0 : | |||
| __revision__ = "$Id: 20140301 $" | |||
| __version__ = '0.1.20140301' | |||
| __author__ = 'Peter Shipley <peter.shipley@gmail.com>' | |||
| __copyright__ = "Copyright (C) 2014 Peter Shipley" | |||
| __copyright__ = "Copyright (C) 2014 Peter Shipley" | |||
| __license__ = "BSD" | |||
| from EagleClass import Eagle | |||
| import EagleClass | |||
| from EagleClass import Eagle, RainEagleResponseError, to_epoch_1970, to_epoch_2000 | |||
| #from RainEagle.EagleClass import Eagle | |||
| __all__ = ['Eagle'] | |||
| __all__ = ['Eagle', 'RainEagleResponseError', 'to_epoch_1970', 'to_epoch_2000'] | |||
| @@ -0,0 +1,125 @@ | |||
| #!/usr/bin/env python | |||
| """ | |||
| based on TalkToEagle.py | |||
| """ | |||
| import socket | |||
| import sys | |||
| import time | |||
| import xml.etree.ElementTree as ET | |||
| my_macid = "0xd8d5b90000001296" | |||
| # Enter your Eagle's IP below | |||
| Eagle_IP = "10.1.1.39" | |||
| def print_summ(cs) : | |||
| # global last_delivered | |||
| # time_stamp = eg.to_epoch_1970(cs['TimeStamp']) | |||
| _delivered = cs.find('SummationDelivered').text | |||
| _received = cs.find('SummationReceived').text | |||
| _multiplier = cs.find('Multiplier').text | |||
| _divisor = cs.find('Divisor').text | |||
| # print "Multiplier=", _multiplier, "Divisor=", _divisor, "Delivered=", _delivered, "Received=", _received | |||
| multiplier=int(_multiplier, 16) | |||
| divisor=int(_divisor, 16) | |||
| delivered=int(_delivered, 16) | |||
| received=int(_received, 16) | |||
| time_stamp = 946684800 + int(cs.find('TimeStamp').text, 16) | |||
| # print "Multiplier=", multiplier, "Divisor=", divisor, "Delivered=", delivered, "Received=", received, "TimeStamp", time_stamp | |||
| if multiplier == 0 : | |||
| multiplier=1 | |||
| if divisor == 0 : | |||
| divisor=1 | |||
| reading_received = received * multiplier / float (divisor ) | |||
| reading_delivered = delivered * multiplier / float (divisor ) | |||
| #reading_delta = (reading_delivered - last_delivered) | |||
| #last_delivered = reading_delivered | |||
| print time.asctime(time.localtime(time_stamp)), " : ", reading_received, "\t", reading_delivered | |||
| def print_reading(eg, rd) : | |||
| for dat in rd['Reading'] : | |||
| time_stamp = time.asctime(time.localtime( to_epoch_1970(dat['TimeStamp']) ) ) | |||
| ## list_devices | |||
| s = socket.create_connection( (Eagle_IP, 5002), 10) | |||
| print s | |||
| time.sleep(1) | |||
| sendstr = "<LocalCommand>\n<Name>list_devices</Name>\n</LocalCommand>\n" | |||
| s.sendall(sendstr) | |||
| print "sending to Eagle: \n\r" | |||
| print sendstr | |||
| time.sleep(1) | |||
| print "Eagle response: \n\r" | |||
| while 1: | |||
| buf = s.recv(1000) | |||
| if not buf: | |||
| break | |||
| sys.stdout.write(buf) | |||
| s.close() | |||
| ## get_history_data | |||
| s = socket.create_connection( (Eagle_IP, 5002), 10) | |||
| print s | |||
| time.sleep(1) | |||
| sendstr = "<LocalCommand>\n<Name>get_history_data</Name>\n<MacId>{0}</MacId>\n<StartTime>0x00000000</StartTime>\n</LocalCommand>\n".format(my_macid) | |||
| s.sendall(sendstr) | |||
| print "sending to Eagle: \n\r" | |||
| print sendstr | |||
| time.sleep(1) | |||
| print "Eagle response: \n\r" | |||
| j=0 | |||
| buf_list = [] | |||
| while 1: | |||
| buf = s.recv(1000) | |||
| if not buf: | |||
| break | |||
| buf_list.append(buf) | |||
| #sys.stdout.write(buf) | |||
| j = j + 1 | |||
| result_xml = ''.join(buf_list) | |||
| print result_xml | |||
| etree = ET.fromstring(result_xml) | |||
| for cs in etree.iter('CurrentSummation'): | |||
| print_summ(cs) | |||
| print "j =", j | |||
| s.close() | |||
| #main() | |||
| exit(0) | |||
| @@ -0,0 +1,124 @@ | |||
| #!/usr/local/bin/python2.7 | |||
| """ | |||
| A simple script get current meter values | |||
| """ | |||
| __author__ = "Peter Shipley" | |||
| import sys | |||
| sys.path.append('/usr/home/shipley/Projects/Eagle') # temp | |||
| # import RainEagle | |||
| from RainEagle import Eagle, to_epoch_1970 | |||
| import time | |||
| from pprint import pprint | |||
| import json | |||
| last_delivered = 0 | |||
| debug = 0 | |||
| def main() : | |||
| eg = Eagle( debug=debug , addr="10.1.1.39") | |||
| # timeout=45, | |||
| # print "\nlist_devices :" | |||
| # r = eg.list_devices() | |||
| # print "pprint 2" | |||
| # pprint(r) | |||
| print "\nget_device_data :" | |||
| r = eg.get_device_data() | |||
| # pprint(r['InstantaneousDemand']) | |||
| print_instantdemand( r['InstantaneousDemand']) | |||
| # pprint(r['CurrentSummation']) | |||
| print_currentsummation(r['CurrentSummation']) | |||
| exit(0) | |||
| def twos_comp(val, bits=32): | |||
| """compute the 2's compliment of int value val""" | |||
| if( (val&(1<<(bits-1))) != 0 ): | |||
| val = val - (1<<bits) | |||
| return val | |||
| def print_currentsummation(cs) : | |||
| multiplier=int(cs['Multiplier'], 16) | |||
| divisor=int(cs['Divisor'], 16) | |||
| delivered=int(cs['SummationDelivered'], 16) | |||
| received=int(cs['SummationReceived'], 16) | |||
| if multiplier == 0 : | |||
| multiplier=1 | |||
| if divisor == 0 : | |||
| divisor=1 | |||
| reading_received = received * multiplier / float (divisor ) | |||
| reading_delivered = delivered * multiplier / float (divisor ) | |||
| time_stamp = to_epoch_1970(cs['TimeStamp']) | |||
| print time.asctime(time.localtime(time_stamp)), " : " | |||
| print "\tReceived =", reading_received, "Kw" | |||
| print "\tDelivered=", reading_delivered, "Kw" | |||
| print "\t\t\t", (reading_delivered - reading_received) | |||
| # print "{0}\t{1:.4f}\t{2:0.4f}\t{3:.4f}".format( | |||
| # time.strftime("%Y-%m-%d %H:%M:%S", time_struct), | |||
| # reading_received, | |||
| # reading_delivered, | |||
| # (reading_delivered - reading_received) ) | |||
| def print_instantdemand(idemand) : | |||
| time_stamp = to_epoch_1970(idemand['TimeStamp']) | |||
| multiplier=int(idemand['Multiplier'], 16) | |||
| divisor=int(idemand['Divisor'], 16) | |||
| # demand = twos_comp(int(idemand['Demand'], 16)) | |||
| demand=int(idemand['Demand'], 16) | |||
| if demand > 0x7FFFFFFF: | |||
| demand -= 0x100000000 | |||
| # print "Multiplier=", multiplier, "Divisor=", divisor, "Demand=", demand | |||
| if multiplier == 0 : | |||
| multiplier=1 | |||
| if divisor == 0 : | |||
| divisor=1 | |||
| reading = (demand * multiplier) / float (divisor ) | |||
| print time.asctime(time.localtime(time_stamp)), " : " | |||
| print "\tDemand=", reading, "Kw" | |||
| print "\tAmps = {:.3f}".format( ((reading * 1000) / 240) ) | |||
| def print_reading(eg, rd) : | |||
| for dat in rd['Reading'] : | |||
| the_time = time.asctime(time.localtime( to_epoch_1970(dat['TimeStamp']) ) ) | |||
| print the_time, "Type=", dat['Type'], "Value=", dat['Value'] | |||
| # | |||
| if __name__ == "__main__": | |||
| # import __main__ | |||
| # print(__main__.__file__) | |||
| # print("syntax ok") | |||
| main() | |||
| exit(0) | |||
| @@ -0,0 +1,136 @@ | |||
| #!/usr/local/bin/python2.7 | |||
| """ | |||
| A simple script to generate guuplot data from meter history | |||
| """ | |||
| __author__ = "Peter Shipley" | |||
| import sys | |||
| sys.path.append('/usr/home/shipley/Projects/Eagle') # temp | |||
| import RainEagle | |||
| import time | |||
| from pprint import pprint | |||
| from RainEagle import Eagle, to_epoch_1970 | |||
| import json | |||
| last_delivered = 0 | |||
| last_received = 0 | |||
| max_delta_received = 0 | |||
| max_delta_delivered = 0 | |||
| day_delta_received = 0 | |||
| day_delta_delivered = 0 | |||
| curr_day=-1 | |||
| def main(eg) : | |||
| # print_header() | |||
| print_data(eg) | |||
| # print_footer() | |||
| exit(0) | |||
| def print_header() : | |||
| print """ | |||
| set terminal png size 2600,500 | |||
| set datafile separator "\t" | |||
| set xlabel "time" | |||
| set ylabel "power" | |||
| set grid | |||
| set key off | |||
| set pointsize 0.5 | |||
| set xtics 3600 | |||
| set xdata time | |||
| set timefmt "%Y-%m-%d %H:%M:%S" | |||
| set format x "%a %b %d %H:%M" | |||
| #set xrange [ "2014-03-04 00:00:00" : ] | |||
| # set xrange [ "2014-03-04 00:00:00" : "2014-03-09 17:20:00" ] | |||
| set style data lines | |||
| set autoscale y | |||
| set title "Power Use" | |||
| set output "poweruse.png" | |||
| plot "-" using 1:3 t "inbound" w lines, "-" using 1:5 t "outbound" | |||
| """ | |||
| def print_footer() : | |||
| pass | |||
| def print_data(eg) : | |||
| rh = eg.get_history_data() | |||
| #+ # endtime=None, frequency=None ) : | |||
| for dat in rh['HistoryData']['CurrentSummation'] : | |||
| print_currentsummation(dat) | |||
| print "# day_delta_received={0:0.4f}\tday_delta_delivered={1:0.4f} : {2:0.4f}".format(day_delta_received, day_delta_delivered, ( day_delta_delivered - day_delta_received ) ) | |||
| print "# max_delta_received={0:0.4f}\tmax_delta_delivered={1:0.4f}".format(max_delta_received, max_delta_delivered) | |||
| def print_currentsummation(cs) : | |||
| global last_delivered | |||
| global last_received | |||
| global max_delta_received | |||
| global max_delta_delivered | |||
| global day_delta_received | |||
| global day_delta_delivered | |||
| global curr_day | |||
| time_stamp = to_epoch_1970(cs['TimeStamp']) | |||
| multiplier=int(cs['Multiplier'], 16) | |||
| divisor=int(cs['Divisor'], 16) | |||
| delivered=int(cs['SummationDelivered'], 16) | |||
| received=int(cs['SummationReceived'], 16) | |||
| # print "Multiplier=", multiplier, "Divisor=", divisor, "Demand=", demand | |||
| if multiplier == 0 : | |||
| multiplier=1 | |||
| if divisor == 0 : | |||
| divisor=1 | |||
| reading_received = received * multiplier / float (divisor ) | |||
| delta_received = (reading_received - last_received) | |||
| last_received = reading_received | |||
| if ( delta_received > max_delta_received and delta_received < 1000) : | |||
| max_delta_received = delta_received | |||
| #print "new max_delta_received :", max_delta_received | |||
| reading_delivered = delivered * multiplier / float (divisor ) | |||
| delta_delivered = (reading_delivered - last_delivered) | |||
| last_delivered = reading_delivered | |||
| if ( delta_delivered > max_delta_delivered and delta_delivered < 1000) : | |||
| max_delta_delivered = delta_delivered | |||
| #print "\t\tnew max_delta_delivered :", max_delta_delivered | |||
| time_struct = time.localtime(time_stamp) | |||
| if curr_day != time_struct.tm_mday : | |||
| curr_day = time_struct.tm_mday | |||
| print "# day_delta_received={0:0.4f}\tday_delta_delivered={1:0.4f} : {2:0.4f}".format(day_delta_received, day_delta_delivered, ( day_delta_delivered - day_delta_received ) ) | |||
| day_delta_received = 0 | |||
| day_delta_delivered = 0 | |||
| day_delta_received += delta_received | |||
| day_delta_delivered += delta_delivered | |||
| print "{0}\t{1:.4f}\t{2:0.4f}\t{3:.4f}\t{4:0.4f}".format( | |||
| time.strftime("%Y-%m-%d %H:%M:%S", time_struct), | |||
| reading_received, | |||
| delta_received, | |||
| reading_delivered, | |||
| delta_delivered) | |||
| if __name__ == "__main__": | |||
| # import __main__ | |||
| # print(__main__.__file__) | |||
| # print("syntax ok") | |||
| reagle = RainEagle.Eagle( debug=0 , addr="10.1.1.39") | |||
| main(reagle) | |||
| exit(0) | |||
| @@ -0,0 +1,364 @@ | |||
| Help on module EagleClass: | |||
| NAME | |||
| EagleClass | |||
| FILE | |||
| RainEagle/EagleClass.py | |||
| CLASSES | |||
| __builtin__.object | |||
| Eagle | |||
| exceptions.RuntimeError(exceptions.StandardError) | |||
| RainEagleResponseError | |||
| class Eagle(__builtin__.object) | |||
| | Class for talking to Rainforest Automation EAGLE (RFA-Z109) | |||
| | | |||
| | args: | |||
| | debug print debug messages if true | |||
| | addr address of device | |||
| | port port on device (default 5002) | |||
| | getmac connect to device at start up and get macid (default true) | |||
| | | |||
| | Currently there is very little error handling ( if any at all ) | |||
| | | |||
| | Methods defined here: | |||
| | | |||
| | __init__(self, **kwargs) | |||
| | | |||
| | cloud_reset(self) | |||
| | cloud_reset : Clear Cloud Configuration | |||
| | | |||
| | confirm_message(self, id) | |||
| | | |||
| | factory_reset(self) | |||
| | Factory Reset | |||
| | | |||
| | get_demand_values(self, macid=None, interval='hour', frequency=None) | |||
| | Send the GET_DEMAND_VALUES command | |||
| | get a series of instantaneous demand values | |||
| | | |||
| | args: | |||
| | MacId 16 hex digits, MAC addr of EAGLE ZigBee radio | |||
| | Interval hour | day | week | |||
| | [Frequency] int seconds between samples | |||
| | | |||
| | get_device_config(self) | |||
| | get remote management status | |||
| | | |||
| | On Success returns dict with value 'Y' or 'N' : | |||
| | 'config_ssh_enabled': 'Y' | |||
| | 'config_vpn_enabled': 'Y' | |||
| | | |||
| | get_device_data(self, macid=None) | |||
| | Send the GET_DEVICE_DATA command to get a data dump | |||
| | | |||
| | get_fast_poll_status(self, macid=None) | |||
| | Send the GET_FAST_POLL_STATUS command | |||
| | get the current status of fast poll mode. | |||
| | | |||
| | args: | |||
| | MacId 16 hex digits, MAC addr of EAGLE ZigBee radio | |||
| | | |||
| | get_gateway_info(self) | |||
| | gets network status | |||
| | | |||
| | On Success returns dict with the values (example): | |||
| | 'gateway_cloud_id': '00:09:69' | |||
| | 'gateway_internet_status': 'connected' | |||
| | 'gateway_ip_addr': '10.11.12.13' | |||
| | 'gateway_mac_id': 'D8:D5:B9:00:90:24' | |||
| | | |||
| | get_historical_data_alt(self, period='day') | |||
| | get a series of summation values over an interval of time | |||
| | ( http command api ) | |||
| | | |||
| | args: | |||
| | period day|week|month|year | |||
| | | |||
| | On Success returns dict with the values (example): | |||
| | 'data_period' 'day', | |||
| | 'data_size' '14', | |||
| | 'timestamp[0]' '1394422200', | |||
| | 'timestamp[1]' '1394425800', | |||
| | 'timestamp[2]' '1394429400', | |||
| | 'timestamp[3]' '1394433000', | |||
| | 'timestamp[4]' '1394436600', | |||
| | 'timestamp[5]' '1394440200', | |||
| | 'timestamp[6]' '1394443800', | |||
| | 'timestamp[7]' '1394447400', | |||
| | 'timestamp[8]' '1394451000', | |||
| | 'timestamp[9]' '1394454600', | |||
| | 'timestamp[10]' '1394458200', | |||
| | 'timestamp[11]' '1394461800', | |||
| | 'timestamp[12]' '1394465400', | |||
| | 'timestamp[13]' '1394469000', | |||
| | 'value[0]' '0.429', | |||
| | 'value[1]' '0.426', | |||
| | 'value[2]' '0.422', | |||
| | 'value[3]' '0.627', | |||
| | 'value[4]' '0.735', | |||
| | 'value[5]' '0.193', | |||
| | 'value[6]' '0.026', | |||
| | 'value[7]' '-0.985', | |||
| | 'value[8]' '-1.491', | |||
| | 'value[9]' '-2.196'} | |||
| | 'value[11]' '-1.868', | |||
| | 'value[12]' '-1.330', | |||
| | 'value[13]' '-0.870', | |||
| | | |||
| | get_history_data(self, macid=None, starttime='0x00000000', endtime=None, frequency=None) | |||
| | Send the GET_HISTORY_DATA command | |||
| | get a series of summation values over an interval of time | |||
| | ( socket command api ) | |||
| | | |||
| | args: | |||
| | MacId 16 hex digits, MAC addr of EAGLE ZigBee radio | |||
| | StartTime the start of the history interval (default oldest sample) | |||
| | EndTime the end of the history interval (default current time) | |||
| | Frequency Requested number of seconds between samples. | |||
| | | |||
| | get_instantaneous_demand(self, macid=None) | |||
| | Send the GET_INSTANTANEOUS_DEMAND command | |||
| | get the real time demand from the meter | |||
| | | |||
| | args: | |||
| | MacId 16 hex digits, MAC addr of EAGLE ZigBee radio | |||
| | | |||
| | get_message(self) | |||
| | On Success returns dict with the values (example): | |||
| | "meter_status" : "Connected" | |||
| | "message_timestamp" : "946684800" | |||
| | "message_text" : "" | |||
| | "message_confirmed" : "N" | |||
| | "message_confirm_required" : "N" | |||
| | "message_id" : "0" | |||
| | "message_queue" : "active" | |||
| | "message_priority" : "" | |||
| | "message_read" : "Y" | |||
| | | |||
| | get_price(self) | |||
| | get price for kWh | |||
| | | |||
| | On Success returns (example): | |||
| | price': '0.1300', | |||
| | price_label': 'Set by User' or '--' | |||
| | price_timestamp': '1394524458', | |||
| | price_units': '$'} | |||
| | | |||
| | returns empty dict on Error | |||
| | | |||
| | get_remote_management(self) | |||
| | | |||
| | get_setting_data(self) | |||
| | get settings data | |||
| | | |||
| | returns empty dict on Error | |||
| | | |||
| | get_summation_values(self, macid=None, interval='day') | |||
| | Send the GET_SUMMATION_VALUES command | |||
| | get a series of net summation values | |||
| | | |||
| | args: | |||
| | MacId 16 hex digits, MAC addr of EAGLE ZigBee radio | |||
| | Interval day | week | month | year | |||
| | | |||
| | get_time_source(self, macid=None) | |||
| | get time source for device | |||
| | | |||
| | On Success returns dict with value 'internet' or 'meter' : | |||
| | 'time_source': 'internet'} | |||
| | | |||
| | get_timezone(self) | |||
| | get current timezone configuration | |||
| | | |||
| | On Success returns dict with the value : | |||
| | 'timezone_localTime': '1394527011' | |||
| | 'timezone_olsonName': 'UTC/GMT', | |||
| | 'timezone_status': '2' | |||
| | 'timezone_utcOffset': 'UTC' | |||
| | 'timezone_utcTime': '1394527011' | |||
| | 'timezone_status': 'success' | |||
| | | |||
| | get_uploader() | |||
| | gets current uploaders config | |||
| | | |||
| | On Success returns dict with the values (example): | |||
| | "uploader_timestamp" : "1394503703" | |||
| | "uploader_provider" : "bidgely" | |||
| | "uploader_protocol" : "https" | |||
| | "uploader_hostname" : "api.bidgely.com" | |||
| | "uploader_url" : "/v1/users/44441b47-1b9a-4a65-8e8c-0efefe05bb88/homes/1/gateways/1" | |||
| | "uploader_port" : "0" | |||
| | "uploader_auth_code" : "44441b47-1b9a-4a65-8e8c-0efefe05bb88" | |||
| | "uploader_email" : "" | |||
| | "uploader_user_id" : "" | |||
| | "uploader_password" : "" | |||
| | "uploader_enabled" : "Y" | |||
| | | |||
| | See also set_cloud() to set current uploader cloud config | |||
| | | |||
| | get_uploaders(self) | |||
| | gets list of uploaders for Web UI | |||
| | | |||
| | On Success returns dict with the values (example): | |||
| | 'uploader[0]': 'none' | |||
| | 'uploader[1]': 'bidgely' | |||
| | 'uploader_name[0]': 'None' | |||
| | 'uploader_name[1]': 'Bidgely Inc.' | |||
| | | |||
| | get_usage_data(self) | |||
| | | |||
| | list_devices(self) | |||
| | | |||
| | set_cloud(self, url, authcode='', email='') | |||
| | set cloud Url | |||
| | | |||
| | args: | |||
| | url Url for uploader | |||
| | authcode | |||
| | | |||
| | See also get_uploader() to retrieve current uploader cloud config | |||
| | | |||
| | set_fast_poll(self, macid=None, frequency='0x04', duration='0xFF') | |||
| | Send the SET_FAST_POLL command | |||
| | set the fast poll mode on the meter | |||
| | | |||
| | args: | |||
| | MacId 16 hex digits, MAC addr of EAGLE ZigBee radio | |||
| | Frequency 0x01 - 0xFF Freq to poll meter, in seconds | |||
| | Duration 0x00 - 0x0F Duration of fast poll mode, in minutes (max 15) | |||
| | | |||
| | set_message_read(self) | |||
| | On Success returns dict with the values : | |||
| | 'remote_management_status' : 'success' | |||
| | | |||
| | set_price(self, price) | |||
| | Set price manualy | |||
| | | |||
| | args: | |||
| | price Price/kWh | |||
| | | |||
| | On Success returns dict with value : | |||
| | 'set_price_status': 'success' | |||
| | | |||
| | set_price_auto(self) | |||
| | Set Price from Meter | |||
| | | |||
| | On Success returns dict with value : | |||
| | 'set_price_status': 'success' | |||
| | | |||
| | set_remote_management(self, macid=None, status='on') | |||
| | set_remote_management | |||
| | enabling ssh & vpn | |||
| | | |||
| | args: | |||
| | status on|off | |||
| | | |||
| | On Success returns dict with value : | |||
| | 'remote_management_status': 'success' | |||
| | | |||
| | set_time_source(self, macid=None, source=None) | |||
| | set_time_source | |||
| | set time source | |||
| | | |||
| | args: | |||
| | source meter|internet | |||
| | | |||
| | On Success returns dict with value : | |||
| | 'set_time_source_status': u'success' | |||
| | | |||
| | On Error returns dict with value : | |||
| | 'set_time_source_status': 'invalid source name' | |||
| | | |||
| | ---------------------------------------------------------------------- | |||
| | Data descriptors defined here: | |||
| | | |||
| | __dict__ | |||
| | dictionary for instance variables (if defined) | |||
| | | |||
| | __weakref__ | |||
| | list of weak references to the object (if defined) | |||
| class RainEagleResponseError(exceptions.RuntimeError) | |||
| | General exception for responce errors | |||
| | from Rainforest Automation EAGLE (RFA-Z109) | |||
| | | |||
| | Method resolution order: | |||
| | RainEagleResponseError | |||
| | exceptions.RuntimeError | |||
| | exceptions.StandardError | |||
| | exceptions.Exception | |||
| | exceptions.BaseException | |||
| | __builtin__.object | |||
| | | |||
| | Data descriptors defined here: | |||
| | | |||
| | __weakref__ | |||
| | list of weak references to the object (if defined) | |||
| | | |||
| | ---------------------------------------------------------------------- | |||
| | Methods inherited from exceptions.RuntimeError: | |||
| | | |||
| | __init__(...) | |||
| | x.__init__(...) initializes x; see help(type(x)) for signature | |||
| | | |||
| | ---------------------------------------------------------------------- | |||
| | Data and other attributes inherited from exceptions.RuntimeError: | |||
| | | |||
| | __new__ = <built-in method __new__ of type object> | |||
| | T.__new__(S, ...) -> a new object with type S, a subtype of T | |||
| | | |||
| | ---------------------------------------------------------------------- | |||
| | Methods inherited from exceptions.BaseException: | |||
| | | |||
| | __delattr__(...) | |||
| | x.__delattr__('name') <==> del x.name | |||
| | | |||
| | __getattribute__(...) | |||
| | x.__getattribute__('name') <==> x.name | |||
| | | |||
| | __getitem__(...) | |||
| | x.__getitem__(y) <==> x[y] | |||
| | | |||
| | __getslice__(...) | |||
| | x.__getslice__(i, j) <==> x[i:j] | |||
| | | |||
| | Use of negative indices is not supported. | |||
| | | |||
| | __reduce__(...) | |||
| | | |||
| | __repr__(...) | |||
| | x.__repr__() <==> repr(x) | |||
| | | |||
| | __setattr__(...) | |||
| | x.__setattr__('name', value) <==> x.name = value | |||
| | | |||
| | __setstate__(...) | |||
| | | |||
| | __str__(...) | |||
| | x.__str__() <==> str(x) | |||
| | | |||
| | __unicode__(...) | |||
| | | |||
| | ---------------------------------------------------------------------- | |||
| | Data descriptors inherited from exceptions.BaseException: | |||
| | | |||
| | __dict__ | |||
| | | |||
| | args | |||
| | | |||
| | message | |||
| DATA | |||
| __all__ = ['Eagle', 'RainEagleResponseError', 'to_epoch_1970, to_epoch... | |||
| __author__ = 'Peter Shipley <peter.shipley@gmail.com>' | |||
| __copyright__ = 'Copyright (C) 2014 Peter Shipley' | |||
| __license__ = 'BSD' | |||
| AUTHOR | |||
| Peter Shipley <peter.shipley@gmail.com> | |||
| @@ -0,0 +1,50 @@ | |||
| # python setup.py --dry-run --verbose install | |||
| import os.path | |||
| from setuptools import setup, find_packages | |||
| from distutils.command.install_scripts import install_scripts | |||
| from distutils.core import setup | |||
| class install_scripts_and_symlinks(install_scripts): | |||
| '''Like install_scripts, but also replicating nonexistent symlinks''' | |||
| def run(self): | |||
| print "=============install_scripts_and_symlinks run" | |||
| install_scripts.run(self) | |||
| # Replicate symlinks if they don't exist | |||
| print self | |||
| print "data_files = ", dir( self.distribution.data_files) | |||
| print type(self.distribution.data_files) | |||
| print self.distribution.data_files | |||
| for script in self.distribution.scripts: | |||
| print "\n---script = ",script | |||
| if os.path.islink(script): | |||
| target = os.readlink(script) | |||
| newlink = os.path.join(self.install_dir, os.path.basename(script)) | |||
| if not os.path.exists(newlink): | |||
| print "++++++++++", target, " -> ", newlink | |||
| # os.symlink(target, newlink) | |||
| setup( | |||
| name='RainEagle', | |||
| version='0.1.6', | |||
| author='Peter Shipley', | |||
| author_email='Peter.Shipley@gmail.com', | |||
| packages=find_packages(), | |||
| scripts=[ 'binbin/get_meter_status.py', 'bin/plot_power.py' ] | |||
| data_files=[ | |||
| # ('examples', ['bin/isy_find.py', 'bin/isy_progs.py', | |||
| # 'bin/isy_log.py', 'bin/isy_net_wol.py']), | |||
| ('bin', ['bin/isy_nodes.py', 'bin/isy_var.py']) ], | |||
| url='https://github.com/evilpete/RainEagle', | |||
| license='BSD', | |||
| description='Python Class for utilizing the Rainforest Automation Eagle ( RFA-Z109 ) socket API.', | |||
| long_description=open('README.md').read(), | |||
| cmdclass = { 'install_scripts': install_scripts_and_symlinks } | |||
| ) | |||