using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Maser.Feanor.Model; using System.Net; using Maser.Feanor.Biz; namespace Maser.Feanor.Server { public class Yun020208 : Server { public const ServerType SERVERTYPE = ServerType.Yun020208; public Yun020208(Chamber Chamber) : base(Chamber) { _chamber = Chamber; } // Return a list of standard defined sensors for Yun020208 public override List StandardSensors() { List sensors = new List(); sensors.Add(new Sensor(-1, 0, _chamber.PK, "Pt100", SensorType.Pt100, true, false)); sensors.Add(new Sensor(-1, 1, _chamber.PK, "Pt100", SensorType.Pt100, false, false)); sensors.Add(new Sensor(-1, 2, _chamber.PK, "Thermocouple K", SensorType.ThermocoupleK, false, false)); sensors.Add(new Sensor(-1, 3, _chamber.PK, "Thermocouple K", SensorType.ThermocoupleK, false, false)); for (int i = 4; i < 12; i++) sensors.Add(new Sensor(-1, i, _chamber.PK, String.Format("Voltage #{0:00}", i), SensorType.Voltage,false , false)); sensors.Add(new Sensor(-1, 12, _chamber.PK, "RH psychrometer", SensorType.PsychrometerRH, false, false)); sensors.Add(new Sensor(-1, 13, _chamber.PK, "RH pressurecooker", SensorType.PressurecookerRH, false, false)); return sensors; } public override bool Read() { _Results = new List(); string url = URL + "ContentToClient"; string data; try { using (WebClient client = new WebClient()) { data = client.DownloadString(url); String[] objects = data.Split(';'); foreach (String obj in objects) { try { // Create Results from data-string if (obj.Trim().StartsWith("") && obj.Trim().EndsWith("")) { string s = obj.Replace("", "").Replace("", "").Trim(); string[] vars = s.Split(','); int ID = int.Parse(vars[0]); DateTime dt = Time.UnixToDatetime(int.Parse(vars[1])); float fValue = float.Parse(vars[2]); int calibrationPK = int.Parse(vars[3]); Int32 sensorPK = _Sensors.Find(delegate (Sensor sensor) { return (sensor.ID == ID); }).PK; _Results.Add(new Result(-1, sensorPK, fValue, dt, calibrationPK)); } } catch { // Continue with next object, ignoring exception } } } } catch { return false; } return true; } public override bool WriteDatetime(DateTime dt) { // Format: string http = ""; return HTTP_POST(http); } public override Boolean WriteInterval(Int32 Interval) { // Format: ,[interval], string http = ","; http += string.Format("{0},", Interval); http += ""; return HTTP_POST(http); } public override bool WriteSensors() { bool result = true; foreach (Sensor sensor in _Sensors) { Calibration cal = _Calibrations.Find(delegate (Calibration c) { return (c.SensorPK == sensor.PK); }); if (cal == null) cal = new Calibration(-1, sensor.PK, DateTime.Now, DateTime.Now, DateTime.Now, new double[2] { 0, 1 }, 0, new double[4] { 0, 0, 1, 1 }); if (!ModifySensor(sensor, cal)) result = false; } return result; } public override bool ModifySensor(Sensor sensor, Calibration calibration) { // Format: ,ID,[Enabled:1/0],[ApplyCalibration:1/0],Description,CalibrationPK,c0,c1,...cn string sensorHTTP = ""; sensorHTTP += ","; sensorHTTP += sensor.ID.ToString() + ","; sensorHTTP += (sensor.Enabled) ? "1," : "0,"; sensorHTTP += (sensor.ApplyCalibration) ? "1," : "0,"; sensorHTTP += sensor.Description + ","; sensorHTTP += calibration.PK.ToString() + ","; sensorHTTP += String.Join(",", calibration.Coefficients); sensorHTTP += ""; return HTTP_POST(sensorHTTP); } private bool HTTP_POST(string http) { /* var reqparm = new System.Collections.Specialized.NameValueCollection(); reqparm.Add("param1", " kinds & of = ? strings"); reqparm.Add("param2", "escaping is already handled"); byte[] responsebytes = client.UploadValues("http://localhost", "POST", reqparm); string responsebody = Encoding.UTF8.GetString(responsebytes); */ try { using (WebClient wc = new WebClient()) { wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; string HtmlResult = wc.UploadString(URL, http); if (HtmlResult != "OK") return false; } } catch (Exception ex) { throw ex; } return true; } } }