Esempio n. 1
0
        public async Task <object> Enable(string name)
        {
            var rule = db.rules.FirstOrDefault(r => r.name == name);

            if (rule == null)
            {
                return("error");
            }
            rule.enabled = 1;
            await db.SaveChangesAsync();

            return("ok");
        }
Esempio n. 2
0
        private async Task SenseDeviceCount()
        {
            using (SensorCloudContext db = new SensorCloudContext(configuration))
            {
                var deviceCount = (JObject)(await session.getApi("api/system/device_count"));
                int max         = 0;
                db.sensordata.Add(new SensorData()
                {
                    stamp  = DateTime.Now,
                    nodeid = 0,
                    type   = "NetworkClients",
                    value  = (int)deviceCount["ActiveDeviceNumbers"]
                });
                db.sensordata.Add(new SensorData()
                {
                    stamp  = DateTime.Now,
                    nodeid = 0,
                    type   = "NetworkWired",
                    value  = (int)deviceCount["LanActiveNumber"]
                });
                var wifiWizard = (JArray)(await session.getApi("api/system/wizard_wifi"));
                if (wifiWizard.Count > 0)
                {
                    max = wifiWizard.Max(w => (int)w["Numbers"]);
                    db.sensordata.Add(new SensorData()
                    {
                        stamp  = DateTime.Now,
                        nodeid = 0,
                        type   = "NetworkWifi",
                        value  = max
                    });
                }
                await db.SaveChangesAsync();

                if (mqtt != null)
                {
                    await mqtt.Publish("network/clients", (int)deviceCount["ActiveDeviceNumbers"] + "");

                    await mqtt.Publish("network/clients/wired", (int)deviceCount["LanActiveNumber"] + "");

                    await mqtt.Publish("network/clients/wifi", max + "");
                }
            }//using
        }
Esempio n. 3
0
        async Task update()
        {
            while (true)
            {
                Log("Running a new update cycle");
                foreach (var item in db.dashboardItems.ToList())
                {
                    switch (item.type)
                    {
                    case "ping": handlePing(item); break;

                    case "pingtime": handlePingTime(item); break;

                    case "get": await handleGetAsync(item); break;

                    case "mqtt": HandleMqtt(item); break;

                    case "http": await handleHttpAsync(item); break;

                    case "sshcommand": handleSshCommand(item); break;

                    case "socket":
                    case "sensor":

                    case "image":
                    case "":
                        break;

                    default:
                        Log($"Unknown item type: {item.type}");
                        continue;
                    }
                    item.time = DateTime.Now;
                    await Task.Delay(100);
                }
                await db.SaveChangesAsync();

                await Task.Delay(10000);
            }
        }
Esempio n. 4
0
        private async Task CheckNewHosts()
        {
            List <Host> currentHosts = await GetHosts();

            using (SensorCloudContext db = new SensorCloudContext(configuration))
            {
                var dbHosts = db.HG569_hosts.ToList();
                foreach (var host in currentHosts)
                {
                    if (dbHosts.Any(h => h.hostname == host.HostName && h.ip == host.IPAddress && h.mac == host.MACAddress))
                    {
                        continue;
                    }
                    var dbHost = dbHosts.FirstOrDefault(h => h.mac == host.MACAddress);

                    if (dbHost == null)
                    {
                        await db.HG569_hosts.AddAsync(dbHost = new HG659_host()
                        {
                            mac      = host.MACAddress,
                            hostname = host.HostName,
                            ip       = host.IPAddress
                        });

                        if (mqtt != null)
                        {
                            await mqtt.Publish("network/newhost", JObject.FromObject(dbHost).ToString());
                        }
                    }
                    else
                    {
                        if (dbHost.hostname != host.HostName)
                        {
                            Console.WriteLine($"hostname changed for mac {host.MACAddress}, host {host.HostName}");
                            if (mqtt != null)
                            {
                                await mqtt.Publish("network/hostchange", JObject.FromObject(new {
                                    ip = dbHost.ip,
                                    mac = dbHost.mac,
                                    oldHost = dbHost.hostname,
                                    newHost = host.HostName
                                }).ToString());
                            }
                        }
                        if (dbHost.ip != host.IPAddress)
                        {
                            Console.WriteLine($"IP address changed for mac {host.MACAddress}, host {host.HostName}");
                            if (mqtt != null)
                            {
                                await mqtt.Publish("network/ipchange", JObject.FromObject(new
                                {
                                    oldIp = dbHost.ip,
                                    newIp = host.IPAddress,
                                    mac = dbHost.mac,
                                    host = dbHost.hostname
                                }).ToString());
                            }
                        }
                        dbHost.ip       = host.IPAddress;
                        dbHost.hostname = host.HostName;
                    }
                }
                await db.SaveChangesAsync();
            }
        }
Esempio n. 5
0
        private async void OnData(object sender, DataPacket data)
        {
            measurements.Add(new Measurement()
            {
                data = data, time = DateTime.Now
            });
            while (measurements.Count > 0 && measurements[0].time.AddMinutes(60 * 24) < DateTime.Now)
            {
                measurements.RemoveAt(0);
            }
            status["p1meter"] = $"Valid: {data.IsValid}";
            using (db = new SensorCloudContext(configuration))
            {
                db.sensordata.Add(new SensorData()
                {
                    stamp  = DateTime.Now,
                    nodeid = 0,
                    type   = "power1",
                    value  = (double)data.PowerConsumptionTariff1
                });
                db.sensordata.Add(new SensorData()
                {
                    stamp  = DateTime.Now,
                    nodeid = 0,
                    type   = "power2",
                    value  = (double)data.PowerConsumptionTariff2
                });
                db.sensordata.Add(new SensorData()
                {
                    stamp  = DateTime.Now,
                    nodeid = 0,
                    type   = "gas",
                    value  = (double)data.GasUsage
                });
                await db.SaveChangesAsync();
            }

            if (mqtt != null)
            {
                var values = new Dictionary <String, int>
                {
                    { "1m", 1 },
                    { "10m", 10 },
                    { "1h", 60 },
                    { "24h", 60 * 24 },
                };
                if (measurements.Count > 0)
                {
                    foreach (var v in values)
                    {
                        DataPacket firstValue = measurements.AsEnumerable().Reverse().TakeWhile(m => m.time.AddMinutes(v.Value) >= DateTime.Now).Last().data;
                        decimal    power      = (data.PowerConsumptionTariff1 - firstValue.PowerConsumptionTariff1) + (data.PowerConsumptionTariff2 - firstValue.PowerConsumptionTariff2);
                        decimal    gas        = data.GasUsage - firstValue.GasUsage;
                        await mqtt.Publish($"p1/use/{v.Key}/power", power + "");

                        await mqtt.Publish($"p1/use/{v.Key}/gas", gas + "");
                    }
                }


                await mqtt.Publish("p1/power1", data.PowerConsumptionTariff1 + "");

                await mqtt.Publish("p1/power2", data.PowerConsumptionTariff2 + "");

                await mqtt.Publish("p1/power", data.PowerConsumptionTariff1 + data.PowerConsumptionTariff2 + "");

                await mqtt.Publish("p1/gas", data.GasUsage + "");
            }
        }
Esempio n. 6
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            try
            {
                while (true)
                {
                    Spotnet spotnet = new Spotnet(config.host, config.port, config.user, config.pass);
                    await spotnet.Connect();

                    spotnet.OnSpot += async(s, spot) =>
                    {
                        using (SensorCloudContext db = new SensorCloudContext(configuration))
                        {
                            Log($"Saving {spot.article}");
                            datamodel.Spot dbSpot = new datamodel.Spot()
                            {
                                article   = spot.article,
                                articleid = spot.articleid,
                                cat       = spot.cat,
                                desc      = spot.desc,
                                posted    = spot.posted,
                                size      = spot.size,
                                subcat    = spot.subcat,
                                title     = spot.title,
                                nzbs      = spot.segments.Select(seg => new datamodel.SpotNzb()
                                {
                                    article   = spot.article,
                                    articleid = spot.articleid,
                                    segment   = seg
                                }).ToList()
                            };
                            db.spots.Add(dbSpot);
                            db.spotNzbs.AddRange(dbSpot.nzbs);
                            await db.SaveChangesAsync();

                            if (mqtt != null)
                            {
                                await mqtt.Publish("spotnet", JObject.FromObject(new { id = spot.articleid, title = spot.title }).ToString());
                            }
                        }
                    };
                    long min = spotnet.GroupInfo.low;
                    using (SensorCloudContext db = new SensorCloudContext(configuration))
                    {
                        try
                        {
                            min = db.spots.Max(e => e.article) + 1;
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e);
                        }
                    }
                    await spotnet.Update(min);

                    spotnet.Disconnect();
                    await Task.Delay(60000 * 5);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception thrown in spotnet");
                Console.WriteLine(e);
            }
        }