Exemple #1
0
        public async Task PollChargerValues()
        {
            if (string.IsNullOrEmpty(_chargerId))
            {
                var siteId = (await _sonnenClient.GetUserSites()).DefaultSiteId;
                _chargerId = (await _sonnenClient.GetSiteChargers(siteId)).FirstOrDefault().Id;
                if (string.IsNullOrEmpty(_chargerId))
                {
                    return;
                }
            }

            var chargerState = await _sonnenClient.GetChargerLiveState(_chargerId);

            var time = chargerState.MeasuredAt?.ToUniversalTime() ?? DateTime.UtcNow;

            var chargedEnergyTotal = chargerState.TotalChargedEnergy;
            var activePower        = chargerState.ActivePower;
            var current            = chargerState.Current;
            var connected          = chargerState.Car.Equals("CONNECTED", StringComparison.InvariantCultureIgnoreCase);
            var charging           = chargerState.Status.Equals("CHARGING", StringComparison.InvariantCultureIgnoreCase);
            var smartMode          = chargerState.Smartmode;

            SaveChargerValues(_dbContext, time, chargedEnergyTotal, activePower, current, connected, charging, smartMode);
        }
Exemple #2
0
        public async Task PollSensorValues(DateTime start, DateTime end)
        {
            if (string.IsNullOrEmpty(_siteId))
            {
                _siteId = (await _sonnenClient.GetUserSites()).DefaultSiteId;
                if (string.IsNullOrEmpty(_siteId))
                {
                    return;
                }
            }

            var energyValues = await _sonnenClient.GetEnergyMeasurements(_siteId, start, end);

            if (energyValues.Start == DateTime.MinValue || energyValues.End == DateTime.MinValue)
            {
                return;
            }

            var span               = new TimeSeriesSpan(energyValues.Start.ToUniversalTime(), energyValues.End.ToUniversalTime(), energyValues.Resolution);
            var productionPower    = new TimeSeries <int>(span);
            var consumptionPower   = new TimeSeries <int>(span);
            var directUsagePower   = new TimeSeries <int>(span);
            var batteryCharging    = new TimeSeries <int>(span);
            var batteryDischarging = new TimeSeries <int>(span);
            var gridFeedin         = new TimeSeries <int>(span);
            var gridPurchase       = new TimeSeries <int>(span);
            var batteryUsoc        = new TimeSeries <double>(span);

            for (int i = 0; i < Math.Min(span.Count, energyValues.ProductionPower.Count); i++)
            {
                productionPower[i]    = energyValues.ProductionPower[i];
                consumptionPower[i]   = energyValues.ConsumptionPower[i];
                directUsagePower[i]   = energyValues.DirectUsagePower[i];
                batteryCharging[i]    = energyValues.BatteryCharging[i];
                batteryDischarging[i] = energyValues.BatteryDischarging[i];
                gridFeedin[i]         = energyValues.GridFeedin[i];
                gridPurchase[i]       = energyValues.GridPurchase[i];
                batteryUsoc[i]        = energyValues.BatteryUsoc[i];
            }

            foreach (var day in span.IncludedDates())
            {
                SaveEnergyMidResValues(day, productionPower, consumptionPower, directUsagePower,
                                       batteryCharging, batteryDischarging, gridFeedin, gridPurchase, batteryUsoc);

                SaveEnergyLowResValues(day, productionPower, consumptionPower, directUsagePower,
                                       batteryCharging, batteryDischarging, gridFeedin, gridPurchase, batteryUsoc);
            }

            _dbContext.SaveChanges();
        }
        public async Task PollSensorValues(DateTime start, DateTime end)
        {
            if (string.IsNullOrEmpty(_siteId))
            {
                _siteId = (await _sonnenClient.GetUserSites()).DefaultSiteId;
                if (string.IsNullOrEmpty(_siteId))
                {
                    return;
                }
            }

            var energyValues = await _sonnenClient.GetEnergyMeasurements(_siteId, start, end);

            if (energyValues.Start == DateTime.MinValue || energyValues.End == DateTime.MinValue)
            {
                return;
            }
        public async Task TestGetUserSites()
        {
            var mockHttp = new MockHttpMessageHandler();

            mockHttp.When($"{MockSonnenConnection.BaseUri}users/me")
            .Respond("application/json",
                     @"{
                        ""data"":
                        {
                            ""id"": ""01da887a-4898-46e1-ab49-f45fc7dce4c2"",
                            ""type"": ""users"",
                            ""attributes"":
                            {
                                ""academic_title"": null,
                                ""customer_number"": ""US11122233"",
                                ""first_name"": ""John"",
                                ""last_name"": ""Doe"",
                                ""description"": null,
                                ""email"": ""*****@*****.**"",
                                ""phone"": null,
                                ""mobile"": null,
                                ""street"": ""Long test street"",
                                ""postal_code"": ""12345"",
                                ""city"": ""Unittest Town"",
                                ""state"": """",
                                ""country_code"": ""US"",
                                ""latitude"": 37.377166,
                                ""longitude"": -122.086966,
                                ""language"": ""en"",
                                ""newsletter"": true,
                                ""time_zone"": ""America/New_York"",
                                ""privacy_policy"": ""EN-us-4.0"",
                                ""terms_of_service"": ""EN-us-1.0"",
                                ""service_partners_data_access"": true,
                                ""salesforce_user_id"": ""0012340000ABAABBAB"",
                                ""salesforce_contact_id"": ""00123400012ABABAAB"",
                                ""roles"": []
                            },
                            ""relationships"":
                            {
                                ""sites"":
                                {
                                    ""data"":
                                    [
                                        {
                                            ""type"": ""sites"",
                                            ""id"": """ + MockSonnenConnection.SiteId + @"""
                                        }
                                    ]
                                },
                                ""default-site"":
                                {
                                    ""data"":
                                    {
                                        ""type"": ""sites"",
                                        ""id"": """ + MockSonnenConnection.SiteId + @"""
                                    }
                                }
                            }
                        }
                    }");

            using var sonnenClient = new SonnenPortalClient(mockHttp.AddAuthMock().ToMockProvider());

            var result = await sonnenClient.GetUserSites();

            Assert.Single(result.SiteIds);
            Assert.Equal(MockSonnenConnection.SiteId, result.SiteIds.First());
            Assert.Equal(MockSonnenConnection.SiteId, result.DefaultSiteId);

            Assert.Null(result.User.AcademicTitle);
            Assert.Equal("US11122233", result.User.CustomerNumber);
            Assert.Equal("John", result.User.FirstName);
            Assert.Equal("Doe", result.User.LastName);
            Assert.Null(result.User.Description);
            Assert.Equal("*****@*****.**", result.User.Email);
            Assert.Null(result.User.Phone);
            Assert.Null(result.User.Mobile);
            Assert.Equal("Long test street", result.User.Street);
            Assert.Equal("12345", result.User.PostalCode);
            Assert.Equal("Unittest Town", result.User.City);
            Assert.Equal("", result.User.State);
            Assert.Equal("US", result.User.CountryCode);
            Assert.Equal(37.377166, result.User.Latitude);
            Assert.Equal(-122.086966, result.User.Longitude);
            Assert.Equal("en", result.User.Language);
            Assert.True(result.User.Newsletter);
            Assert.Equal("America/New_York", result.User.TimeZone);
            Assert.Equal("EN-us-4.0", result.User.PrivacyPolicy);
            Assert.Equal("EN-us-1.0", result.User.TermsOfService);
            Assert.True(result.User.ServicePartnersDataAccess);
            Assert.Equal("0012340000ABAABBAB", result.User.SalesforceUserId);
            Assert.Equal("00123400012ABABAAB", result.User.SalesforceContactId);
        }