private async Task <ImportDeviceData> ImportDataForDevice(int refID, DeviceData deviceData)
        {
            ImportDeviceData importDeviceData = deviceData.Data;

            //start as task to fetch data
            double?deviceValue = null;

            try
            {
                var queryData = await InfluxDBHelper.GetSingleValueForQuery(importDeviceData.Sql, dbLoginInformation).ConfigureAwait(false);

                deviceValue = Convert.ToDouble(queryData, CultureInfo.InvariantCulture);
            }
            catch (Exception ex)
            {
                Trace.TraceWarning(Invariant($"Failed to get value from Db for {importDeviceData.Name} with {ex.GetFullMessage()}"));
            }

            try
            {
                Trace.WriteLine(Invariant($"Updating {importDeviceData.Name} with {deviceValue}"));
                deviceData.Update(HS, refID, deviceValue);
            }
            catch (Exception ex)
            {
                Trace.TraceWarning(Invariant($"Failed to write value to HS for {importDeviceData.Name} with {ex.GetFullMessage()}"));
            }

            return(importDeviceData);
        }
        private async Task ImportDataForDeviceInLoop(int refID, DeviceData deviceData)
        {
            while (!combinedToken.Token.IsCancellationRequested)
            {
                ImportDeviceData importDeviceData = await ImportDataForDevice(refID, deviceData).ConfigureAwait(false);

                await Task.Delay((int)Math.Min(importDeviceData.Interval.TotalMilliseconds, TimeSpan.FromDays(1).TotalMilliseconds),
                                 combinedToken.Token).ConfigureAwait(false);
            }
        }
        private string BuildAddNewDeviceImportWebPageBody([AllowNull] ImportDeviceData data)
        {
            HSHelper hsHelper = new HSHelper(HS);

            string name            = data?.Name ?? string.Empty;
            string sql             = data?.Sql ?? string.Empty;
            string unit            = data?.Unit ?? string.Empty;
            int    intervalSeconds = data != null ? (int)data.Interval.TotalSeconds : 60;
            string id          = data != null ? data.Id : string.Empty;
            string buttonLabel = data != null ? "Save" : "Add";
            string header      = data != null ? "Edit Device Import" : "Add New Device Import";

            StringBuilder stb = new StringBuilder();

            stb.Append(PageBuilderAndMenu.clsPageBuilder.FormStart("ftmDeviceImportChange", "IdChange", "Post"));

            stb.Append(@"<div>");
            stb.Append(@"<table class='full_width_table'>");
            stb.Append("<tr height='5'><td></td><td></td></tr>");
            stb.Append(Invariant($"<tr><td class='tableheader' colspan=2>{header}</td></tr>"));
            stb.Append("</td></tr>");
            stb.Append(Invariant($"<tr><td class='tablecell'>Name:</td><td class='tablecell'>"));
            stb.Append(HtmlTextBox(NameId, name, @readonly: data != null));
            stb.Append("</td></tr>");
            stb.Append(Invariant($"<tr><td class='tablecell'>Sql:</td><td class='tablecell'>"));
            stb.Append(TextArea(SqlId, sql, 6, 65));
            stb.Append("</td></tr>");
            stb.Append(Invariant($"<tr><td class='tablecell'>Refresh Intervals(seconds):</td><td class='tablecell'>"));
            stb.Append(HtmlTextBox(IntervalId, Invariant($"{intervalSeconds}")));
            stb.Append("</td></tr>");
            stb.Append("</td></tr>");
            stb.Append(Invariant($"<tr><td class='tablecell'>Unit:</td><td class='tablecell'>"));
            stb.Append(HtmlTextBox(UnitId, unit, @readonly: data != null));
            stb.Append("</td></tr>");

            stb.Append(Invariant($"<tr><td colspan=2>{HtmlTextBox(RecordId, id, type: "hidden")}<div id='{SaveErrorDivId}' style='color:Red'></div></td><td></td></tr>"));
            stb.Append(Invariant($"<tr><td colspan=2>{FormPageButton(SaveDeviceImport, buttonLabel)}"));

            if (data != null)
            {
                stb.Append(FormPageButton(DeleteDeviceImport, "Delete"));
            }

            stb.Append(FormPageButton(CancelDeviceImport, "Cancel"));
            stb.Append(Invariant($"</td></tr>"));
            stb.Append("<tr height='5'><td colspan=2></td></tr>");
            stb.Append(@"</table>");
            stb.Append(@"</div>");
            stb.Append(PageBuilderAndMenu.clsPageBuilder.FormEnd());

            return(stb.ToString());
        }
        private void HandleSavingDeviceImportPostBack(NameValueCollection parts, string form)
        {
            if (form == NameToIdWithPrefix(DeleteDeviceImport))
            {
                this.pluginConfig.RemoveImportDeviceData(parts[RecordId]);
                this.pluginConfig.FireConfigChanged();
                this.divToUpdate.Add(SaveErrorDivId, RedirectPage(Invariant($"/{pageUrl}?{TabId}=2")));
            }
            else if (form == NameToIdWithPrefix(CancelDeviceImport))
            {
                this.divToUpdate.Add(SaveErrorDivId, RedirectPage(Invariant($"/{pageUrl}?{TabId}=2")));
            }
            else if (form == NameToIdWithPrefix(SaveDeviceImport))
            {
                StringBuilder results = new StringBuilder();

                string name = parts[NameId];
                if (string.IsNullOrWhiteSpace(name))
                {
                    results.AppendLine("Name is empty.<br>");
                }

                string sql = parts[SqlId];
                if (string.IsNullOrWhiteSpace(sql))
                {
                    results.AppendLine("Sql is empty.<br>");
                }

                string intervalString = parts[IntervalId];
                if (!int.TryParse(intervalString, out int intervalSeconds))
                {
                    results.AppendLine("Interval is not valid.<br>");
                }

                if (results.Length > 0)
                {
                    this.divToUpdate.Add(SaveErrorDivId, results.ToString());
                }
                else
                {
                    try
                    {
                        GetData(sql);
                    }
                    catch (Exception ex)
                    {
                        results.Append(Invariant($"Query Failed with {ex.GetFullMessage()}"));
                    }

                    if (results.Length > 0)
                    {
                        this.divToUpdate.Add(SaveErrorDivId, results.ToString());
                    }
                    else
                    {
                        string id = parts[RecordId];

                        if (string.IsNullOrWhiteSpace(id))
                        {
                            id = System.Guid.NewGuid().ToString();
                        }

                        var data = new ImportDeviceData(id, name, sql, TimeSpan.FromSeconds(intervalSeconds), parts[UnitId]);
                        this.pluginConfig.AddImportDeviceData(data);
                        this.pluginConfig.FireConfigChanged();
                        this.divToUpdate.Add(SaveErrorDivId, RedirectPage(Invariant($"/{pageUrl}?{TabId}=2")));
                    }
                }
            }
        }
Exemplo n.º 5
0
 public DeviceData(ImportDeviceData data)
 {
     Data = data;
 }
 public NumberDeviceData(ImportDeviceData data) : base(data)
 {
 }