196 lines
8.3 KiB
C#
196 lines
8.3 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using System.Windows.Forms;
|
|||
|
using System.Net.Http;
|
|||
|
using System.Xml;
|
|||
|
using System.Net.Http.Headers;
|
|||
|
using Newtonsoft.Json;
|
|||
|
using Newtonsoft.Json.Linq;
|
|||
|
using System.Net;
|
|||
|
using System.IO;
|
|||
|
using tpDomeWinAPP.Models;
|
|||
|
using System.Linq;
|
|||
|
|
|||
|
namespace tpDomeWinAPP.Service
|
|||
|
{
|
|||
|
public class getObixSvc
|
|||
|
{
|
|||
|
//List<_device> _deviceList;//= new List<_device>();
|
|||
|
public async Task<List<device_obix_value>> GetIotData(string urlString, List<device_obix_value> deviceList, string deviceID)
|
|||
|
{
|
|||
|
//string[] ss = urlString.Split('/');
|
|||
|
//string deviceID = ss[ss.Length - 2];
|
|||
|
string result = string.Empty;
|
|||
|
|
|||
|
HttpClient client = new HttpClient();
|
|||
|
|
|||
|
var byteArray = Encoding.ASCII.GetBytes("stanGG:St12345678");
|
|||
|
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
|
|||
|
try
|
|||
|
{
|
|||
|
HttpResponseMessage response = await client.GetAsync(urlString);
|
|||
|
HttpContent content = response.Content;
|
|||
|
// ... Check Status Code
|
|||
|
Console.WriteLine("Response StatusCode: " + (int)response.StatusCode);
|
|||
|
// ... Read the string.
|
|||
|
result = await content.ReadAsStringAsync();
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
throw ex;
|
|||
|
}
|
|||
|
|
|||
|
XmlDocument doc = new XmlDocument();
|
|||
|
doc.LoadXml(result);
|
|||
|
XmlElement xmlRoot = doc.DocumentElement;
|
|||
|
//string jsonText = JsonConvert.SerializeXmlNode(doc);
|
|||
|
//JObject resultVal = (JObject)JsonConvert.DeserializeObject(jsonText);
|
|||
|
if (xmlRoot.ChildNodes.Count > 0)
|
|||
|
{
|
|||
|
foreach (XmlNode OneNode in xmlRoot.ChildNodes)
|
|||
|
{
|
|||
|
String StrNodeName = OneNode.Name.ToString();
|
|||
|
if (StrNodeName == "ref")
|
|||
|
{
|
|||
|
string v0 = OneNode.Attributes[0].Value;
|
|||
|
|
|||
|
// if (v0 == "RH") MessageBox.Show("RH");
|
|||
|
|
|||
|
// 維修 開機狀態 報警 保養
|
|||
|
//if (new[] { "Maintain", "Status", "Alarm", "Maintenance", "Temp", "RH", "AlarmState" }.Contains(v0))
|
|||
|
//{
|
|||
|
// switch (v0)
|
|||
|
// {
|
|||
|
// case "Maintain": v0 = v0 + " 維修 "; break;
|
|||
|
// case "Status": v0 = v0 + " 開1 關0 "; break;
|
|||
|
// case "Alarm": v0 = v0 + " 報警1 無0 "; break;
|
|||
|
// case "Maintenance": v0 = v0 + " 保養1 無0 "; break;
|
|||
|
// case "Temp": v0 = v0 + " 溫度 "; break;
|
|||
|
// case "RH": v0 = v0 + " 濕 "; break;
|
|||
|
// case "AlarmState": v0 = v0 + " 電力異常 "; break;
|
|||
|
// }
|
|||
|
device_obix_value device = new device_obix_value();
|
|||
|
device.id = deviceID;
|
|||
|
device.Name = v0;
|
|||
|
if (OneNode.Attributes[3].Name == "display")
|
|||
|
{
|
|||
|
device.display = OneNode.Attributes[3].Value;
|
|||
|
device.result_value = device.display.Split(' ')[0];
|
|||
|
}
|
|||
|
deviceList.Add(device);
|
|||
|
// }
|
|||
|
}
|
|||
|
else if (StrNodeName == "bool")
|
|||
|
{
|
|||
|
string v0 = OneNode.Attributes[0].Value;
|
|||
|
// 維修 開機狀態 報警 保養
|
|||
|
//if (new[] { "Maintain", "Status", "Alarm", "Maintenance", "out" }.Contains(v0))
|
|||
|
//{
|
|||
|
device_obix_value device = new device_obix_value();
|
|||
|
device.id = deviceID;
|
|||
|
device.Name = v0;
|
|||
|
if (OneNode.Attributes[4].Name == "display")
|
|||
|
{
|
|||
|
device.display = OneNode.Attributes[4].Value;
|
|||
|
device.result_value = device.display.Split(' ')[0];
|
|||
|
}
|
|||
|
deviceList.Add(device);
|
|||
|
//}
|
|||
|
}
|
|||
|
else if (StrNodeName == "obj")
|
|||
|
{
|
|||
|
string v0 = OneNode.Attributes[0].Value;
|
|||
|
// 維修 開機狀態 報警 保養
|
|||
|
//if (new[] { "Maintain", "Status", "Alarm", "Maintenance", "out" }.Contains(v0))
|
|||
|
//{
|
|||
|
device_obix_value device = new device_obix_value();
|
|||
|
device.id = deviceID;
|
|||
|
device.Name = v0;
|
|||
|
if (OneNode.Attributes[4].Name == "display")
|
|||
|
{
|
|||
|
device.display = OneNode.Attributes[4].Value;
|
|||
|
device.result_value = device.display.Split(' ')[0];
|
|||
|
}
|
|||
|
deviceList.Add(device);
|
|||
|
//}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (xmlRoot.Name == "bool")
|
|||
|
{
|
|||
|
// xmlRoot.Attributes[0].Value
|
|||
|
var item = xmlRoot.Attributes.GetNamedItem("display");
|
|||
|
var times = xmlRoot.Attributes.GetNamedItem("href").Value.ToString().Split('/');
|
|||
|
device_obix_value device = new device_obix_value();
|
|||
|
device.id = deviceID;
|
|||
|
device.Name = times[times.Length - 3];
|
|||
|
device.display = item.Value;
|
|||
|
device.result_value = device.display.Split(' ')[0];
|
|||
|
deviceList.Add(device);
|
|||
|
}
|
|||
|
string data = xmlRoot.Name;
|
|||
|
|
|||
|
}
|
|||
|
return deviceList;
|
|||
|
}
|
|||
|
|
|||
|
public async Task<bool> PostIotControl(string urlString, string deviceID, bool value_OnOff)
|
|||
|
{
|
|||
|
bool result = true;
|
|||
|
String username = "stanGG";
|
|||
|
String password = "St12345678";
|
|||
|
String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
|
|||
|
String API_Url = urlString;
|
|||
|
|
|||
|
HttpWebRequest Postrequest = (HttpWebRequest)WebRequest.Create(API_Url);
|
|||
|
Postrequest.Method = "POST";
|
|||
|
Postrequest.Headers.Add("Authorization", "Basic " + encoded);
|
|||
|
Postrequest.PreAuthenticate = true;
|
|||
|
|
|||
|
using (var streamWriter = new StreamWriter(Postrequest.GetRequestStream()))
|
|||
|
{
|
|||
|
string json = "<real val='" + value_OnOff.ToString().ToLower() + "'/>";
|
|||
|
|
|||
|
streamWriter.Write(json);
|
|||
|
}
|
|||
|
|
|||
|
HttpWebResponse response = (HttpWebResponse)Postrequest.GetResponse();
|
|||
|
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
|
|||
|
|
|||
|
XmlDocument xmlDoc = new XmlDocument();
|
|||
|
xmlDoc.LoadXml(responseString);
|
|||
|
|
|||
|
string jsonText = JsonConvert.SerializeXmlNode(xmlDoc);
|
|||
|
JObject resultVal = (JObject)JsonConvert.DeserializeObject(jsonText);
|
|||
|
|
|||
|
var actualVal = "";
|
|||
|
var responseStatus = "";
|
|||
|
|
|||
|
if (resultVal.ContainsKey("bool"))
|
|||
|
{
|
|||
|
responseStatus = resultVal["bool"]["@display"].ToString().Split(' ')[1];
|
|||
|
actualVal = resultVal["bool"]["@display"].ToString().Split(' ')[0];
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
result = false;
|
|||
|
throw new Exception("API節點發生錯誤");
|
|||
|
}
|
|||
|
|
|||
|
if (responseStatus == "{ok}")
|
|||
|
{
|
|||
|
result = true;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
throw new Exception("API節點發生錯誤");
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|