Intel Edison Intel IoT Analytics Cloud: Senden von SMS und RESTful Client unter ASP.NET

Intel IoT Analytics
Der letzte Teil der Arbeit mit der Intel IoT Analytics Cloud . Hinzufügen des Sendens von SMS-Benachrichtigungen über HTTP-Gateways und Erstellen eines einfachen RESTful-Clients unter ASP.NET. Zusammenfassen.

Senden von SMS-Benachrichtigungen über ein HTTP-Gateway
In einer früheren Arbeit von Intel Edison. Arbeiten mit der Intel IoT Analytics-Cloud: Erstellen von Regeln und Senden von Benachrichtigungen Es wurden Regeln erstellt, mit denen Sie Folgendes senden können: eine E-Mail-Benachrichtigung und die Verwaltung der Relaisleistung. Fügen Sie beim Senden von SMS-Nachrichten diese beiden erstellten Regeln hinzu.
Regeln:
  • Higth_temp_PowerOnRelay_and_send_to_web@devdotnet.org
  • Low_temp_PowerOffRelay_and_send_to_web@devdotnet.org

Wir werden das SMS-Gateway smsc.ru verwenden . Die API finden Sie hier .

SMS GET :

smsc.ru/sys/send.php?login=&psw=&phones=&mes=, :
login —
psw — MD5- .
phones — "+"
mes — .
Head , .

:
smsc.ru/sys/send.php?login=tele****&psw=d46d70eb6******&phones=79232******&mes=Relay_power_ON
smsc.ru/sys/send.php?login=tele****&psw=d46d70eb6******&phones=79232******&mes=Relay_power_OFF
Rules, Higth_temp_PowerOnRelay_and_send_to_web@devdotnet.org.

Fügen Sie den Benachrichtigungstyp - HTTP-Endpunkt hinzu und geben Sie die URL ein .
Intel IoT Analytics

Außerdem werden wir Low_temp_PowerOffRelay_and_send_to_web@devdotnet.org für die zweite Regel erstellen .

SMS am Telefon empfangen
Intel IoT Analytics

Ausgehend vom Minus der Funktion zum Senden von SMS-Nachrichten ist zu beachten, dass keine dynamischen Daten gesendet werden können. Beispielsweise können Sie den aktuellen Sensorwert nicht senden.

Einfacher RESTful-Client auf ASP.NET Razor Wir erstellen
eine Seite mit den aktuellen Sensorwerten: Temperatur und Druck. Wir werden den Steuerteil auf der Seite platzieren: Einschalten des Relais und der LED. Die Cloud-API finden Sie hier . Implementierung unter ASP.NET Razor netf 4.5. Für die Arbeit mit JSON wird die Bibliothek Newtonsoft.Json verwendet. Die Datei Web.config enthält die Anmeldung und das Kennwort für den Zugriff auf die Cloud. Das Beispiel ist keine vollständige Lösung, sondern eine einfache Demonstration der Verwendung der API.

Wie immer erhalten wir das Token, einen Abschnitt im Wiki Authorization :
Der Code
string GetNewToken()
            {
                // login  pass
                string strLogin, strPass;
                strLogin = System.Configuration.ConfigurationManager.AppSettings["Login"];
                strPass = System.Configuration.ConfigurationManager.AppSettings["Pass"];
                //,  .
                //https://github.com/enableiot/iotkit-api/wiki/Authorization
                // JSON
                var obj = new
                {
                    username = strLogin,
                    password = strPass
                };
                string postData = JsonConvert.SerializeObject(obj, Formatting.Indented);
                //HttpWebRequest
                HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create("https://dashboard.us.enableiot.com/v1/api/auth/token");
                httpWebRequest.Method = "POST";
                httpWebRequest.ContentType = "application/json";
                //
                byte[] byte1 = System.Text.Encoding.UTF8.GetBytes(postData);
                httpWebRequest.ContentLength = byte1.Length;
                httpWebRequest.GetRequestStream().Write(byte1, 0, byte1.Length);
                httpWebRequest.GetRequestStream().Close();
                //
                StreamReader reader = new StreamReader(httpWebRequest.GetResponse().GetResponseStream());
                JObject objResponse = JObject.Parse(reader.ReadToEnd());
                return (string)objResponse["token"];
            }


Daten lesen, Abschnitt in der Wiki-Daten-API :
Der Code
void GetStateSensors(string strToken, Dictionary<string, string> dicSensors)
            {
                // 
                //https://github.com/enableiot/iotkit-api/wiki/Data-API
                // JSON
                var obj = new
                {
                    from = -20,
                    targetFilter = new { deviceList = new[] { "9e-8d-22-0c-50-7b" } },
                    metrics = new[] { new {
						id="99fb5b73-a9e2-4ae0-8a0d-45e6a7cc0541",
						op="none"
					},
                    new {
						id="b3731f8a-4f31-414d-a072-b364b1792b5b",
						op="none"
					}
				}
                };
                string postData = JsonConvert.SerializeObject(obj, Formatting.Indented);
                //HttpWebRequest
                HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create("https://dashboard.us.enableiot.com/v1/api/accounts/4c8c6b2e-c54f-4df5-8bbb-a5e59df85aaa/data/search");
                httpWebRequest.Method = "POST";
                httpWebRequest.ContentType = "application/json";
                //Headers
                httpWebRequest.Headers.Add("Authorization", "Bearer " + strToken);
                httpWebRequest.Headers.Add("accountId", "4c8c6b2e-c54f-4df5-8bbb-a5e59df85aaa");
                //
                byte[] byte1 = System.Text.Encoding.UTF8.GetBytes(postData);
                httpWebRequest.ContentLength = byte1.Length;
                httpWebRequest.GetRequestStream().Write(byte1, 0, byte1.Length);
                httpWebRequest.GetRequestStream().Close();
                //
                StreamReader reader = new StreamReader(httpWebRequest.GetResponse().GetResponseStream());
                JObject objResponse = JObject.Parse(reader.ReadToEnd());
                //add Dic
                string strValueSensor = (string)objResponse["series"][0]["points"][0]["value"];
                dicSensors.Add("pressure", strValueSensor);
                strValueSensor = (string)objResponse["series"][1]["points"][0]["value"];
                strValueSensor = Math.Round(decimal.Parse(strValueSensor, System.Globalization.CultureInfo.CreateSpecificCulture("en")), 2).ToString();
                dicSensors.Add("temperature", strValueSensor);
            }


Schnittstelle
Intel IoT Analytics

Zusammenfassung
Die Cloud für die Datenerfassung befreit Sie vom Aufbau Ihrer Infrastruktur, wodurch die Kosten für den Kauf von Hardware und Software gesenkt werden. Das Konfigurieren von Geräten und Sensoren ist sehr einfach. Die entwickelte API ermöglicht nicht nur das Empfangen von Daten und das Verwalten des Geräts, sondern auch das Erstellen eines eigenen Administrationsbereichs. Daten werden ohne nennenswerte Verzögerungen übertragen, Anfragen gehen nicht verloren. Es stehen zwei Rollen zur Verfügung: Administrator und Benutzer. Um einen Benutzer hinzuzufügen, muss der Administrator eine neue E-Mail angeben, und ein Einladungsschreiben wird an diese Adresse gesendet. Bei der Registrierung eines neuen Benutzers wird der Benutzer gefragt, ob er eine Einladung zum Zugriff (Einladung) annehmen möchte. Somit ist der Benutzer mit der Verwaltung seines Kontos beschäftigt, einschließlich Kennwortänderungen. Von den MängelnEs ist unmöglich, Sensorwerte in die SMS-Nachricht aufzunehmen, sondern nur eine vorbereitete Vorlage. Für E-Mails gibt es keine Vorlagen, nur eine Standardansicht mit einer Sensorleseplatte. Ein weiteres Merkmal wurde entdeckt, das in der Reihenfolge der Verarbeitungsregeln besteht. Manchmal wurde eine Situation beobachtet, bei der das Relais unmittelbar nach dem Einschalten ausgeschaltet war. Darüber hinaus sollte es nach der Logik des Relais erst ausgeschaltet werden, nachdem die Temperatur unter 28 ° C gefallen war. Die Bedingungen der Logik der Regeln und des Codes auf dem Gerät enthielten keine Fehler. Die Situation wurde durch Anzeigen des Warnprotokolls behoben. Neue Warnungen werden am Ende der Liste hinzugefügt.Manchmal wurde eine Situation beobachtet, bei der das Relais unmittelbar nach dem Einschalten ausgeschaltet war. Darüber hinaus sollte es nach der Logik des Relais erst ausgeschaltet werden, nachdem die Temperatur unter 28 ° C gefallen war. Die Bedingungen der Logik der Regeln und des Codes auf dem Gerät enthielten keine Fehler. Die Situation wurde durch Anzeigen des Warnprotokolls behoben. Neue Warnungen werden am Ende der Liste hinzugefügt.Manchmal wurde eine Situation beobachtet, bei der das Relais unmittelbar nach dem Einschalten ausgeschaltet war. Darüber hinaus sollte es nach der Logik des Relais erst ausgeschaltet werden, nachdem die Temperatur unter 28 ° C gefallen war. Die Bedingungen der Logik der Regeln und des Codes auf dem Gerät enthielten keine Fehler. Die Situation wurde durch Anzeigen des Warnprotokolls behoben. Neue Warnungen werden am Ende der Liste hinzugefügt.
Intel IoT Analytics
Ereignis 39 war das letzte, das funktionierte, obwohl es Ereignis 38 rechtzeitig vorausging. Das Relais schaltete sich für eine Sekunde ein und aus, trotz eines weiteren Temperaturanstiegs. Möglicherweise liegt dies daran, dass der Dienst noch nicht abgeschlossen ist. Derzeit befindet sich die Intel IoT Analytics-Cloud in der Entwicklung (BETA-Status).

Anwendungstest
Arbeitsversion von web.devdotnet.org .
Das Projekt finden Sie hier .
Quelle
web.config
<configuration>
  <appSettings>
    <add key="Login" value="***"/>
    <add key="Pass" value="***"/>
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5">
      <assemblies>
        <add assembly="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
      </assemblies>
    </compilation>
    <httpRuntime targetFramework="4.5"/>
  </system.web>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>


index.cshtml
@using System.Net.Http
@using Newtonsoft.Json
@using Newtonsoft.Json.Linq

@{
    //   Session
    string strToken;
    strToken = (string)Session["Token"];
    if (strToken == null)
    {
        strToken = GetNewToken();
        Session["Token"] = strToken;
    }
    //Action
    if (Request["command"] != null)
    {
        string strCommand = (string)Request["command"];
        SetSateActuation(strToken,strCommand);
    }
    //  Sensors
    Dictionary<string, string> dicSensors = new Dictionary<string, string>();
    GetStateSensors(strToken, dicSensors);
    //  Actuation
    bool boolValueLED, boolValueRelay;
    GetStateActuations(strToken, out boolValueLED, out boolValueRelay);
}
        @functions {
            // Pass a user name to this method.
            string GetNewToken()
            {
                // login  pass
                string strLogin, strPass;
                strLogin = System.Configuration.ConfigurationManager.AppSettings["Login"];
                strPass = System.Configuration.ConfigurationManager.AppSettings["Pass"];
                //,  .
                //https://github.com/enableiot/iotkit-api/wiki/Authorization
                // JSON
                var obj = new
                {
                    username = strLogin,
                    password = strPass
                };
                string postData = JsonConvert.SerializeObject(obj, Formatting.Indented);
                //HttpWebRequest
                HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create("https://dashboard.us.enableiot.com/v1/api/auth/token");
                httpWebRequest.Method = "POST";
                httpWebRequest.ContentType = "application/json";
                //
                byte[] byte1 = System.Text.Encoding.UTF8.GetBytes(postData);
                httpWebRequest.ContentLength = byte1.Length;
                httpWebRequest.GetRequestStream().Write(byte1, 0, byte1.Length);
                httpWebRequest.GetRequestStream().Close();
                //
                StreamReader reader = new StreamReader(httpWebRequest.GetResponse().GetResponseStream());
                JObject objResponse = JObject.Parse(reader.ReadToEnd());
                return (string)objResponse["token"];
            }
            void GetStateSensors(string strToken, Dictionary<string, string> dicSensors)
            {
                // 
                //https://github.com/enableiot/iotkit-api/wiki/Data-API
                // JSON
                var obj = new
                {
                    from = -20,
                    targetFilter = new { deviceList = new[] { "9e-8d-22-0c-50-7b" } },
                    metrics = new[] { new {
						id="99fb5b73-a9e2-4ae0-8a0d-45e6a7cc0541",
						op="none"
					},
                    new {
						id="b3731f8a-4f31-414d-a072-b364b1792b5b",
						op="none"
					}
				}
                };
                string postData = JsonConvert.SerializeObject(obj, Formatting.Indented);
                //HttpWebRequest
                HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create("https://dashboard.us.enableiot.com/v1/api/accounts/4c8c6b2e-c54f-4df5-8bbb-a5e59df85aaa/data/search");
                httpWebRequest.Method = "POST";
                httpWebRequest.ContentType = "application/json";
                //Headers
                httpWebRequest.Headers.Add("Authorization", "Bearer " + strToken);
                httpWebRequest.Headers.Add("accountId", "4c8c6b2e-c54f-4df5-8bbb-a5e59df85aaa");
                //
                byte[] byte1 = System.Text.Encoding.UTF8.GetBytes(postData);
                httpWebRequest.ContentLength = byte1.Length;
                httpWebRequest.GetRequestStream().Write(byte1, 0, byte1.Length);
                httpWebRequest.GetRequestStream().Close();
                //
                StreamReader reader = new StreamReader(httpWebRequest.GetResponse().GetResponseStream());
                JObject objResponse = JObject.Parse(reader.ReadToEnd());
                //add Dic
                string strValueSensor = (string)objResponse["series"][0]["points"][0]["value"];
                dicSensors.Add("pressure", strValueSensor);
                strValueSensor = (string)objResponse["series"][1]["points"][0]["value"];
                strValueSensor = Math.Round(decimal.Parse(strValueSensor, System.Globalization.CultureInfo.CreateSpecificCulture("en")), 2).ToString();
                dicSensors.Add("temperature", strValueSensor);
            }

            void GetStateActuations(string strToken, out bool boolValueLED, out bool boolValueRelay)
            {
                //  Actuation
                //https://github.com/enableiot/iotkit-api/wiki/Control-Device-API
                //HttpWebRequest
                HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create("https://dashboard.us.enableiot.com/v1/api/accounts/4c8c6b2e-c54f-4df5-8bbb-a5e59df85aaa/control/devices/9e-8d-22-0c-50-7b?from=-60000");
                httpWebRequest.Method = "GET";
                //Headers
                httpWebRequest.Headers.Add("Authorization", "Bearer " + strToken);
                httpWebRequest.Headers.Add("accountId", "4c8c6b2e-c54f-4df5-8bbb-a5e59df85aaa");
                //
                StreamReader reader = new StreamReader(httpWebRequest.GetResponse().GetResponseStream());
                JArray jArr = (JArray)JsonConvert.DeserializeObject(reader.ReadToEnd());
                //Parse data
                Dictionary<long, string> dicSensorLED = new Dictionary<long, string>();
                Dictionary<long, string> dicSensorRelay = new Dictionary<long, string>();
                long longTicks;
                foreach (JObject item in jArr)
                {
                    longTicks = DateTime.Parse((string)item["created"]).Ticks;
                    if ((string)item["command"] == "LED.v1.0")
                    {
                        if (!dicSensorLED.ContainsKey(longTicks)) dicSensorLED.Add(longTicks, (string)item["params"][0]["value"]);
                    }
                    else
                    {
                        if (!dicSensorRelay.ContainsKey(longTicks)) dicSensorRelay.Add(longTicks, (string)item["params"][0]["value"]);
                    }
                }
                //find last value
                string strValueLED = dicSensorLED[dicSensorLED.Max(x => x.Key)];
                string strValueRelay = dicSensorRelay[dicSensorRelay.Max(x => x.Key)];
                //
                if (strValueLED == "0") boolValueLED = false; else boolValueLED = true;
                if (strValueRelay == "0") boolValueRelay = false; else boolValueRelay = true;
                }

            void SetSateActuation(string strToken, string strCommand)
            {
                //  Actuation
                //https://github.com/enableiot/iotkit-api/wiki/Control-Device-API
                // 
                string strComponentId, strName, strValue, strComplexCommands;
                switch (strCommand)
                {
                    case "led_on":
                        {
                            strComponentId="64dbdbee-e181-403f-8b51-0872e11a289e";
                            strName="LED";
                            strValue = "1";
                            strComplexCommands = "led1_ON";
                            break;
                        }
                    case "led_off":
                        {
                            strComponentId = "64dbdbee-e181-403f-8b51-0872e11a289e";
                            strName = "LED";
                            strValue = "0";
                            strComplexCommands = "led1_OFF";
                            break;
                        }
                    case "relay_on":
                        {
                            strComponentId = "5f72e39a-463a-4e57-bac7-9b32debfd865";
                            strName = "RELAY";
                            strValue = "1";
                            strComplexCommands = "relay1_ON";
                            break;
                        }
                    case "relay_off":
                        {
                            strComponentId = "5f72e39a-463a-4e57-bac7-9b32debfd865";
                            strName = "RELAY";
                            strValue = "0";
                            strComplexCommands = "relay1_OFF";
                            break;
                        }
                    default:
                        // You can use the default case.
                        return;
                }
                // JSON
                var obj = new
                {
                    commands = new[] { new {
                    componentId = strComponentId,
                    parameters= new[] { new
                                        {
                                            name=strName,
                                            value=strValue
                                        }
                    },
                    transport="ws"
                }
                },
                    complexCommands = new[] { strComplexCommands }
                };
                string postData = JsonConvert.SerializeObject(obj, Formatting.Indented);
                //HttpWebRequest
                HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create("https://dashboard.us.enableiot.com/v1/api/accounts/4c8c6b2e-c54f-4df5-8bbb-a5e59df85aaa/control");
                httpWebRequest.Method = "POST";
                httpWebRequest.ContentType = "application/json";
                //Headers
                httpWebRequest.Headers.Add("Authorization", "Bearer " + strToken);
                httpWebRequest.Headers.Add("accountId", "4c8c6b2e-c54f-4df5-8bbb-a5e59df85aaa");
                //
                byte[] byte1 = System.Text.Encoding.UTF8.GetBytes(postData);
                httpWebRequest.ContentLength = byte1.Length;
                httpWebRequest.GetRequestStream().Write(byte1, 0, byte1.Length);
                httpWebRequest.GetRequestStream().Close();
                //
                httpWebRequest.GetResponse();
                }
            }
        }

        <html>
        <head>
            <title> RESTful   Intel IoT Analytics  ASP.NET Razor</title>
        </head>
        <body>
            <h1> RESTful   Intel IoT Analytics  ASP.NET Razor</h1>
<p>: @DateTime.Now.ToString()</p>
    <p>   <a href="https://github.com/enableiot/iotkit-api/wiki/Api-Home">api  intel iot analytics.</a></p>
    <p>  API :</p>
    <ol>
        <li>,  </li>
        <li>   (sensor)</li>
        <li>   (Actuation)</li>
    </ol>
    <h3> </h3>
    <p>: @dicSensors["temperature"] *</p>
    <p>: @dicSensors["pressure"] </p>
     @if (boolValueLED==false)
        {
            <p>LED: OFF</p>
        }
     else
     {
        <p>LED: ON</p>
     }

    @if (boolValueRelay == false)
    {
        <p>: OFF</p>
    }
    else
    {
        <p>: ON</p>
    }
    <form name="formaction" action="~/index.cshtml" method="get">
        <h3> Actuation</h3>
        <p> LED: 
            <button name="command" type="submit" value="led_on"> ON </button>
            <button name="command" type="submit" value="led_off"> OFF </button>
        </p>
        <p> : 
            <button name="command" type="submit" value="relay_on"> ON </button>
            <button name="command" type="submit" value="relay_off"> OFF </button>
        </p>
        <p></p>
        <p>
            <button name="update" type="submit">   </button>
        </p>
    </form>
</body>
</html>


Inhaltsverzeichnis
  1. Intel Edison Erster Start
  2. Intel Edison Arbeiten mit der Intel IoT Analytics Cloud: Protokollieren und Senden von Daten
  3. Intel Edison Arbeiten Sie mit der Intel IoT Analytics Cloud: Erstellen Sie Regeln und senden Sie Benachrichtigungen
  4. Intel Edison Intel IoT Analytics Cloud: Senden von SMS und RESTful Client unter ASP.NET

Source: https://habr.com/ru/post/de384929/


All Articles