| @@ -167,8 +167,8 @@ class Eagle(object) : | |||
| print "debug : = ", self.debug | |||
| if self.addr is None : | |||
| raise AssertionError("no hostname or IP given") | |||
| if self.addr is None : | |||
| raise AssertionError("no hostname or IP given") | |||
| # preload | |||
| if self.mac is None : | |||
| @@ -183,13 +183,13 @@ class Eagle(object) : | |||
| print "Init DeviceMacId = ", self.macid | |||
| if self.checkfw : | |||
| mysetting = self.get_setting_data() | |||
| dev_fw_ver = mysetting['device_fw_version'] | |||
| if ( LooseVersion(dev_fw_ver) < LooseVersion(min_fw_ver) ) : | |||
| warn_message = "Warning : device firmware " \ | |||
| + "{0} < {1} please concideer " \ | |||
| + "updating ".format(dev_fw_ver, min_fw_ver) | |||
| warn( warn_message, RuntimeWarning, stacklevel=3) | |||
| mysetting = self.get_setting_data() | |||
| dev_fw_ver = mysetting['device_fw_version'] | |||
| if ( LooseVersion(dev_fw_ver) < LooseVersion(min_fw_ver) ) : | |||
| warn_message = "Warning : device firmware " \ | |||
| + "{0} < {1} please concideer " \ | |||
| + "updating ".format(dev_fw_ver, min_fw_ver) | |||
| warn( warn_message, RuntimeWarning, stacklevel=3) | |||
| @@ -197,8 +197,8 @@ class Eagle(object) : | |||
| def list_devices(self, macid=None): | |||
| """ | |||
| Send the LIST_DEVICES command | |||
| returns information about the EAGLE device | |||
| Send the LIST_DEVICES command | |||
| returns information about the EAGLE device | |||
| """ | |||
| comm_responce = self._send_soc_comm("list_devices", MacId=macid) | |||
| @@ -221,7 +221,7 @@ class Eagle(object) : | |||
| if comm_responce is None: | |||
| raise RainEagleResponseError("get_device_data : Null reply") | |||
| if self.debug : | |||
| print comm_responce | |||
| print comm_responce | |||
| etree = ET.fromstring('<S>' + comm_responce + '</S>') | |||
| rv = _et2d(etree) | |||
| return rv | |||
| @@ -331,6 +331,7 @@ class Eagle(object) : | |||
| return rv | |||
| # 17 | |||
| # needs to be rewritten to stream the data via iter | |||
| def 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 | |||
| @@ -361,8 +362,8 @@ class Eagle(object) : | |||
| def get_device_list(self, macid=None) : | |||
| """ | |||
| Send the LIST_DEVICES command | |||
| returns information about the EAGLE device | |||
| Send the LIST_DEVICES command | |||
| returns information about the EAGLE device | |||
| """ | |||
| comm_responce = self._send_http_comm("get_device_list", MacId=macid) | |||
| @@ -419,7 +420,7 @@ class Eagle(object) : | |||
| """ | |||
| id = _tohex(id) | |||
| comm_responce = self._send_http_comm("confirm_message", | |||
| MacId=macid, Id=id) | |||
| MacId=macid, Id=id) | |||
| return json.loads(comm_responce) | |||
| def get_message(self, macid=None) : | |||
| @@ -595,7 +596,7 @@ class Eagle(object) : | |||
| if status not in ['on', 'off'] : | |||
| raise ValueError("set_remote_management status must be 'on' or 'off'") | |||
| comm_responce = self._send_http_comm("set_remote_management", | |||
| MacId=macid, Status=status) | |||
| MacId=macid, Status=status) | |||
| return json.loads(comm_responce) | |||
| @@ -615,7 +616,7 @@ class Eagle(object) : | |||
| if source not in ['meter', 'internet'] : | |||
| raise ValueError("set_time_source Source must be 'meter' or 'internet'") | |||
| comm_responce = self._send_http_comm("set_time_source", | |||
| MacId=macid, Source=source) | |||
| MacId=macid, Source=source) | |||
| return json.loads(comm_responce) | |||
| def get_price(self, macid=None) : | |||
| @@ -674,7 +675,7 @@ class Eagle(object) : | |||
| 'set_price_status': 'success' | |||
| """ | |||
| comm_responce = self._send_http_comm("set_price", | |||
| MacId=macid, | |||
| MacId=macid, | |||
| Price="0xFFFFFFFF", | |||
| TrailingDigits="0x00") | |||
| return json.loads(comm_responce) | |||
| @@ -724,7 +725,7 @@ class Eagle(object) : | |||
| See also get_uploader() to retrieve current uploader cloud config | |||
| """ | |||
| if url is None : | |||
| if url is None : | |||
| raise ValueError("invalid url.\n") | |||
| if url.__len__() > 200 : | |||
| @@ -781,8 +782,8 @@ class Eagle(object) : | |||
| def _send_http_comm(self, cmd, **kwargs): | |||
| if self.debug : | |||
| print "\n\n_send_http_comm : ", cmd | |||
| if self.debug : | |||
| print "\n\n_send_http_comm : ", cmd | |||
| commstr = "<LocalCommand>\n" | |||
| commstr += "<Name>{0!s}</Name>\n".format(cmd) | |||
| @@ -791,8 +792,12 @@ class Eagle(object) : | |||
| commstr += "<{0}>{1!s}</{0}>\n".format(k, v) | |||
| commstr += "</LocalCommand>\n" | |||
| if self.debug : | |||
| print(commstr) | |||
| if cmd == "set_cloud" : | |||
| print(commstr) | |||
| return dict() | |||
| if self.debug : | |||
| print(commstr) | |||
| url = "http://{0}/cgi-bin/cgi_manager".format(self.addr) | |||
| @@ -50,9 +50,8 @@ def main() : | |||
| parser = create_parser() | |||
| args, unknown = parser.parse_known_args() | |||
| print "Args = ", args, vars(args) | |||
| print "unknown = ", unknown | |||
| exit(0) | |||
| # print "Args = ", args, vars(args) | |||
| # print "unknown = ", unknown | |||
| eg = Eagle(**vars(args)) | |||
| # timeout=45, | |||
| @@ -94,9 +93,9 @@ def print_currentsummation(cs) : | |||
| if 'TimeStamp' in cs : | |||
| time_stamp = to_epoch_1970(cs['TimeStamp']) | |||
| print "{0:s} : ".format(time.asctime(time.localtime(time_stamp))) | |||
| print "\tReceived = {0:{width}.3f} Kw".format(reading_received, width=10) | |||
| print "\tDelivered = {0:{width}.3f} Kw".format(reading_delivered, width=10) | |||
| print "\t\t{0:{width}.3f} Kw".format( (reading_delivered - reading_received), width=14) | |||
| print "\tReceived = {0:10.3f} Kw".format(reading_received) | |||
| print "\tDelivered = {0:10.3f} Kw".format(reading_delivered) | |||
| print "\tMeter = {0:10.3f} Kw".format( (reading_delivered - reading_received)) | |||
| def print_instantdemand(idemand) : | |||
| @@ -124,8 +123,8 @@ def print_instantdemand(idemand) : | |||
| time_stamp = to_epoch_1970(idemand['TimeStamp']) | |||
| print "{0:s} : ".format(time.asctime(time.localtime(time_stamp))) | |||
| print "\tDemand = {0:{width}.3f} Kw".format(reading, width=10) | |||
| print "\tAmps = {0:{width}.3f}".format( ((reading * 1000) / 240), width=10) | |||
| print "\tDemand = {0:10.3f} Kw".format(reading) | |||
| print "\tAmps = {0:10.3f}".format( ((reading * 1000) / 240)) | |||
| # | |||
| @@ -31,6 +31,10 @@ def main(eg) : | |||
| def print_data(eg) : | |||
| rh = eg.get_history_data() | |||
| #+ # endtime=None, frequency=None) : | |||
| global curr_day | |||
| curr_day = time.gmtime(1); | |||
| for dat in rh['HistoryData']['CurrentSummation'] : | |||
| print_currentsummation(dat) | |||
| @@ -83,11 +87,13 @@ def print_currentsummation(cs) : | |||
| #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}".format(day_delta_received) \ | |||
| + "\tday_delta_delivered={0:0.4f}".format(day_delta_delivered) \ | |||
| + " : {0:0.4f}".format((day_delta_delivered - day_delta_received)) | |||
| if curr_day.tm_mday != time_struct.tm_mday : | |||
| curr_day = time_struct | |||
| print "# {0} day_delta_received={1:0.4f}".format( \ | |||
| time.strftime("%a %Y-%m-%d", curr_day), | |||
| day_delta_received) \ | |||
| + "\tday_delta_delivered={0:0.4f}".format(day_delta_delivered) \ | |||
| + " : {0:0.4f}".format((day_delta_delivered - day_delta_received)) | |||
| day_delta_received = 0 | |||
| day_delta_delivered = 0 | |||
| @@ -10,38 +10,27 @@ 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) | |||
| install_scripts.run(self) | |||
| # Replicate symlinks if they don't exist | |||
| for script in self.distribution.scripts: | |||
| if os.path.islink(script): | |||
| newlink = os.path.join(self.install_dir, os.path.basename(script)) | |||
| setup( | |||
| name='RainEagle', | |||
| version='0.1.7', | |||
| version='0.1.7a', | |||
| author='Peter Shipley', | |||
| author_email='Peter.Shipley@gmail.com', | |||
| packages=find_packages(), | |||
| scripts=[ 'bin/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']) ], | |||
| data_files=[ | |||
| ('examples', ['bin/plot_power.py', 'bin/gnup_poweruse.txt']), | |||
| ('bin', ['bin/meter_status.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(), | |||
| long_description=open('README.txt').read(), | |||
| cmdclass = { 'install_scripts': install_scripts_and_symlinks } | |||
| ) | |||