Пример #1
0
        public ActionResult LoadBackup([FromQuery] string begin, [FromQuery] string end, [FromQuery] string tablefilter)
        {
            if (!TimeSeriesSpanParser.TryParse(begin, end, 1.ToString(), out TimeSeriesSpan span))
            {
                return(StatusCode((int)HttpStatusCode.NotFound));
            }

            var tableFilterList = ((string.IsNullOrWhiteSpace(tablefilter) ? null : tablefilter)?.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(name => name.Trim()).ToList()) ?? new List <string>();

            return(Json(new { tables = _backupService.CreateBackup(span.Begin.Date, span.End.Date, tableFilterList) }));
        }
Пример #2
0
        public async Task <ActionResult> PollSonnenManually([FromQuery] string begin, [FromQuery] string end)
        {
            if (!TimeSeriesSpanParser.TryParse(begin, end, 1.ToString(), out TimeSeriesSpan span))
            {
                return(StatusCode((int)HttpStatusCode.NotFound));
            }

            foreach (var day in span.IncludedDates())
            {
                await _sonnenPollingService.PollSensorValues(day, day.AddDays(1));
            }

            return(StatusCode((int)HttpStatusCode.OK));
        }
Пример #3
0
        public ActionResult ComputeHeatingLowResFromMidRes([FromQuery] string begin, [FromQuery] string end)
        {
            if (_heatingPollingService == null)
            {
                return(StatusCode((int)HttpStatusCode.BadRequest));
            }

            if (!TimeSeriesSpanParser.TryParse(begin, end, 1.ToString(), out TimeSeriesSpan span))
            {
                return(StatusCode((int)HttpStatusCode.NotFound));
            }

            _heatingPollingService.GenerateLowResHeatingSeries(span.Begin, span.End);

            return(StatusCode((int)HttpStatusCode.OK));
        }
Пример #4
0
        public void TestTimeSeriesSpanTryParse(string countIn, int expectedCount, bool expectedParsingResult)
        {
            var millisecPrecision = TimeSpan.FromMilliseconds(1);
            var beginTime         = DateTime.UtcNow;
            var endTime           = beginTime.AddDays(1);

            var begin = new DateTimeOffset(beginTime).ToUnixTimeMilliseconds().ToString();
            var end   = new DateTimeOffset(endTime).ToUnixTimeMilliseconds().ToString();

            Assert.Equal(expectedParsingResult, TimeSeriesSpanParser.TryParse(begin, end, countIn, out TimeSeriesSpan span));

            if (!expectedParsingResult)
            {
                return;
            }

            Assert.Equal(beginTime, span.Begin, millisecPrecision);
            Assert.Equal(endTime, span.End, millisecPrecision);
            Assert.Equal(expectedCount, span.Count);
            Assert.Equal((endTime - beginTime) / expectedCount, span.Duration);
        }
Пример #5
0
        public async Task <ActionResult> PollNetatmoManually([FromQuery] string begin, [FromQuery] string end)
        {
            if (!TimeSeriesSpanParser.TryParse(begin, end, 1.ToString(), out TimeSeriesSpan span))
            {
                return(StatusCode((int)HttpStatusCode.NotFound));
            }

            ActionResult Error(int statusCode, string message)
            {
                var result = Json(new { ok = false, error = message });

                result.StatusCode = statusCode;
                return(result);
            }

            try
            {
                foreach (var day in span.IncludedDates())
                {
                    await _netatmoPollingService.PollSensorValues(day, day.AddDays(1));
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("rate limit", StringComparison.InvariantCultureIgnoreCase))
                {
                    return(Error(429, "rate limit reached at netatmo api!"));
                }
                else if (ex.Message.Contains("authenticate", StringComparison.InvariantCultureIgnoreCase))
                {
                    return(Error(502, "could not authenticate at netatmo api!"));
                }
                else
                {
                    return(Error(500, "unknown reason"));
                }
            }

            return(StatusCode((int)HttpStatusCode.OK));
        }