def test_FroniusInverter_Historical_test_only_inverter_data(self): get_channels = ["Current_AC_Phase_1"] fi = FroniusInverter(inverter_ip) from_date = date_with_data to_date = date_with_data + datetime.timedelta(hours=12) data_1_day = fi.get_historical_data(from_date, to_date, get_channels) # should have datamager and inverter data self.assertTrue(data_1_day is not None) if data_1_day is not None: self.assertEqual(len(data_1_day.keys()), 1) self.check_devices(data_1_day, [ "inverter/"]) self.check_channels(data_1_day, get_channels) self.check_date(data_1_day, from_date, to_date, "ts")
def test_FroniusInverter_Historical_test_only_datamanager_data(self): get_channels = ["Digital_PowerManagementRelay_Out_1"] fi = FroniusInverter(inverter_ip) from_date = date_with_data to_date = date_with_data + datetime.timedelta(hours=48) data_1_day = fi.get_historical_data(from_date, to_date, get_channels) # should have datamager and inverter data self.assertTrue(data_1_day is not None) if data_1_day is not None: self.assertEqual(len(data_1_day.keys()), 1) self.check_devices(data_1_day, ["datamanager:/"]) self.check_channels(data_1_day, get_channels) self.check_date(data_1_day, from_date, to_date, "ts")
def test_FroniusInverter_Historical_test_UTC_8_datetimes(self): """ the fronius server does not respond well to UTC+8 for some reason """ t1_utc_8 = datetime.datetime(year=2017, month=11, day=1, hour=4) - datetime.timedelta(hours=8) t1_utc_8 = pytz.timezone('Etc/GMT+8').localize(t1_utc_8, is_dst=None) f = t1_utc_8 t = t1_utc_8 + datetime.timedelta(hours=16) fi = FroniusInverter(inverter_ip) get_channels = ["Digital_PowerManagementRelay_Out_1", "Current_AC_Phase_1"] data_liberal = fi.get_historical_data(f, t, get_channels, strict=False) self.assertTrue(data_liberal is not None) if data_liberal is not None: self.assertEqual(len(data_liberal.keys()), 2) self.check_devices(data_liberal, ["datamanager:/", "inverter/"]) self.check_channels(data_liberal, get_channels) self.check_date(data_liberal, f, t, "ts", strict=False)
def test_FroniusInverter_Historical_test_strict_vs_liberal_datetimes(self): """ test - liberal vs strict fetch 16 hours of data in liberal mode fetch D 04:00 UTC - D 20:00 UTC - should yield data at most 24 hours of data fetch the same measurements using strict mode pick 1 measurement. fetch that single measurement using strict mode """ channels = ["Current_AC_Phase_1"] t1_utc = datetime.datetime(year=2017, month=11, day=1, hour=4) t1_utc = pytz.timezone('UCT').localize(t1_utc, is_dst=None) fi = FroniusInverter(inverter_ip) key = 'inverter/1' ts = 'ts' f = t1_utc t = t1_utc + datetime.timedelta(hours=16) data_liberal = fi.get_historical_data(f, t, channels, strict=False) if data_liberal is not None: self.check_date(data_liberal, f, t, "ts", strict=False) timestamps_liberal = data_liberal[key][ts] earliest_liberal_utc = min(timestamps_liberal) latest_liberal_utc = max(timestamps_liberal) count_liberal_utc = len(timestamps_liberal) data_strict = fi.get_historical_data(earliest_liberal_utc, latest_liberal_utc + datetime.timedelta(seconds=1), channels, strict=True) if data_liberal is not None: self.check_date(data_strict, earliest_liberal_utc, latest_liberal_utc + datetime.timedelta(seconds=1), "ts") timestamps_strict = data_strict[key][ts] earliest_strict_utc = min(timestamps_strict) latest_strict_utc = max(timestamps_strict) count_strict_utc = len(timestamps_strict) self.assertEqual(latest_liberal_utc - earliest_liberal_utc, latest_strict_utc - earliest_strict_utc) self.assertEqual(count_liberal_utc, count_strict_utc) data_strict = fi.get_historical_data(earliest_liberal_utc, earliest_liberal_utc + datetime.timedelta(seconds=1), channels, strict=True) if data_liberal is not None: self.check_date(data_strict, earliest_liberal_utc, earliest_liberal_utc + datetime.timedelta(seconds=1), "ts") timestamps_strict = data_strict[key][ts] earliest_strict_utc = min(timestamps_strict) latest_strict_utc = max(timestamps_strict) count_strict_utc = len(timestamps_strict) self.assertEqual(datetime.timedelta(seconds=0), latest_strict_utc - earliest_strict_utc) self.assertEqual(1, count_strict_utc)