/// <summary> /// Allow power transfer and play sound. /// </summary> private void ProcessMinerals() { if (!IsFullyPowered) { // Now that the minerals have been destroyed, generate power from their disintegration. base.PowerOn(); PowerSwitch powerSwitch = GetComponentInChildren <PowerSwitch>(); if (powerSwitch != null) { powerSwitch.UnblockPowerSwitch(); } myAudioSource = GetComponentInChildren <AudioSource>(); if (myAudioSource != null) { myAudioSource.clip = onClip; myAudioSource.Play(); } } // Get this annoying thing out of my face. arrow.SetActive(false); }
public Switch(IConfiguration configuration, PowerSwitch powerSwitch) : base(configuration) { _powerSwitch = powerSwitch; UniqueId = _powerSwitch.Id; Name = GetValue(nameof(Name), _powerSwitch.Name); }
public SwitchPowerSensor(IConfiguration configuration, PowerSwitch powerSwitch) : base(configuration) { _powerSwitch = powerSwitch; UniqueId = $"{_powerSwitch.Id}_power"; Name = GetValue(nameof(Name), $"{_powerSwitch.Name} - Power"); }
private void PublishPowerSwitch(PowerSwitch powerSwitch) { var device = _conversionService.GetStateProvider(powerSwitch); if (device.HasValue) { PublishStateToMqtt(device.Value.Device); PublishStateToMqtt(device.Value.SwitchPowerSensor); } }
private void ConfigurePowerSwitch(PowerSwitch powerSwitch) { var config = _conversionService.GetDevice(powerSwitch); if (config.HasValue) { _mqttService.Register(config.Value.Device.CommandTopic, state => SetState(state, config.Value.Device)); PublishDeviceToMqtt(config.Value.Device); PublishDeviceToMqtt(config.Value.SwitchPowerSensor); } }
public (ISettable Device, SwitchPowerSensor SwitchPowerSensor)? GetDevice(PowerSwitch powerSwitch) { switch (powerSwitch.Type) { case 24: // Wall switch return(Device : new Switch(_configuration, powerSwitch), SwitchPowerSensor : null); case 48: // Power meter switch return(Device : new Switch(_configuration, powerSwitch), SwitchPowerSensor : new SwitchPowerSensor(_configuration, powerSwitch)); case 74: // Light switch return(Device : new Light(_configuration, powerSwitch), SwitchPowerSensor : null); case 57: // Smart Lock return(Device : new Lock(_configuration, powerSwitch), SwitchPowerSensor : null); default: LogIgnoredDevice(powerSwitch); return(null); } }
// Start is called before the first frame update void Start() { instance = this; }
private void LogIgnoredDevice(PowerSwitch powerSwitch) { _logger.LogDebug("Device of Type {type} with name {name} is ignored.", powerSwitch.Type, powerSwitch.Name); }
public async Task OnOff(PowerSwitch powerSwitch) { await SendCommand(Commands.AC_FUN_POWER, powerSwitch.ToString()); }
/// <summary> /// Kollar om strömmen ska slås på eller av och gör det i sådana fall. /// </summary> public void CheckAndAct() { if (_isActing) { Logger.Write(SystemTime.Now, LogType.Debug, LogLevel.Error, "Last CheckAndAct was not finished."); return; } _isActing = true; bool mowerLeftThisTurn = false; if (!HomeFromStart.HasValue) { HomeFromStart = HomeSensor.IsHome; } IterationTime = SystemTime.Now; if (IterationTime.Hour == 0 && IterationTime.Minute == 0) { Logger.Write(IterationTime, LogType.NewDay, LogLevel.Debug, "A new day has begun."); } LogAnalyzer = new LogAnalyzer(Logger, HomeFromStart.Value); if (Config.TimeIntervals == null) { throw new InvalidOperationException(); } // Calculate forecast hours ForecastHours = NextOrCurrentInterval.EndHour - IterationTime.Hour + 2; if (Config.UsingContactHomeSensor) { ForecastHours = Config.MaxMowingHoursWithoutCharge + 1; } try { // Write the hourly report log item if (IterationTime.Minute == 0) { var hourlyReportItem = Logger.LogItems.OrderByDescending(r => r.Time).FirstOrDefault(x => x.Type == LogType.HourlyReport); if (hourlyReportItem == null || hourlyReportItem.Time.ToString("yyyy-MM-dd HH:mm") != IterationTime.ToString("yyyy-MM-dd HH:mm")) { int wetness = RainSensor is SmhiRainSensor ? ((SmhiRainSensor)RainSensor).Wetness : 0; string weatherAheadDescription; WeatherForecast.CheckIfWeatherWillBeGood(12, out weatherAheadDescription); Logger.Write(IterationTime, LogType.HourlyReport, LogLevel.InfoLessInteresting, "Hourly report: " + weatherAheadDescription + " Current wetness: " + wetness); } } // If a report was not made for yesterday, and if mowing started yesterday or before, create a report. var startLogItem = Logger.LogItems.FirstOrDefault(x => x.Type == LogType.MowControllerStarted); var todayStartTime = new DateTime(IterationTime.Year, IterationTime.Month, IterationTime.Day, 0, 0, 0); if (startLogItem.Time < todayStartTime) { var yesterdayStartTime = new DateTime(IterationTime.Year, IterationTime.Month, IterationTime.Day, 0, 0, 0).AddDays(-1); var reportLogItem = Logger.LogItems.FirstOrDefault(x => x.Type == LogType.DailyReport && x.Time >= todayStartTime && x.Time < todayStartTime.AddDays(1)); if (reportLogItem == null) { var mowingLogItems = Logger.LogItems.Where(x => (x.Type == LogType.MowingStarted || x.Type == LogType.MowingEnded) && x.Time >= yesterdayStartTime && x.Time < todayStartTime); var sb = new StringBuilder(); sb.AppendLine("Mowing Summary " + yesterdayStartTime.ToString("yyyy-MM-dd")); sb.AppendLine(); DateTime startTime = DateTime.MinValue; var mowingTime = new TimeSpan(); foreach (LogItem mowingLogItem in mowingLogItems) { sb.Append(mowingLogItem.Time.ToString("HH:mm")); sb.Append(" "); sb.AppendLine(mowingLogItem.Message); if (mowingLogItem.Type == LogType.MowingStarted) { startTime = mowingLogItem.Time; } else { mowingTime += (mowingLogItem.Time - startTime); } } TimeSpan mowingTimeSpan = LogAnalyzer.GetMowingTimeForDay(yesterdayStartTime); sb.AppendLine(); sb.Append("Total mowed: "); sb.Append(mowingTimeSpan.Hours); sb.Append(":"); sb.Append(mowingTimeSpan.Minutes.ToString("00")); sb.AppendLine(" hours."); // If contact sensor, also add detailed mowing summary if (Config.UsingContactHomeSensor) { TimeSpan actualMowingTimeSpan = LogAnalyzer.GetActuallyMowingTimeForDay(yesterdayStartTime); sb.Append("Actual out mowing time: "); sb.Append(actualMowingTimeSpan.Hours); sb.Append(":"); sb.Append(actualMowingTimeSpan.Minutes.ToString("00")); sb.AppendLine(" hours."); TimeSpan exactMowerAwayTimeSpan = LogAnalyzer.GetMowerAwayTimeForDay(yesterdayStartTime); sb.Append("Exact mower away time: "); sb.Append(exactMowerAwayTimeSpan.Hours); sb.Append(":"); sb.Append(exactMowerAwayTimeSpan.Minutes.ToString("00")); sb.AppendLine(" hours."); } Logger.Write(IterationTime, LogType.DailyReport, LogLevel.InfoMoreInteresting, sb.ToString()); } } // Check if mower has entered or exited its home since last time if (_mowerIsHome != HomeSensor.IsHome) { _mowerIsHome = HomeSensor.IsHome; if (_mowerIsHome) { Logger.Write(IterationTime, LogType.MowerCame, LogLevel.Info, "Mower came."); SetMowingStarted(); } else { Logger.Write(IterationTime, LogType.MowerLeft, LogLevel.Info, "Mower left."); mowerLeftThisTurn = true; } } // Check if mower is lost or stuck, but only if contact sensor is used. if (Config.UsingContactHomeSensor && !LogAnalyzer.IsLost) { //int forecastHours = Config.MaxMowingHoursWithoutCharge + 1; if (_mowerIsHome && PowerSwitch.Status == PowerStatus.On && !RainSensor.IsWet && WeatherForecast.CheckIfWeatherWillBeGood(ForecastHours) && LogAnalyzer.IsMowing && !LogAnalyzer.IsStuck) { var lastEssentialLogItem = Logger.LogItems .OrderByDescending(x => x.Time) .FirstOrDefault(x => x.Type == LogType.MowerCame || x.Type == LogType.PowerOn || x.Type == LogType.PowerOff || x.Type == LogType.MowingStarted || x.Type == LogType.MowingEnded); bool mowerHasHadEnoughChargingTime = (lastEssentialLogItem != null && lastEssentialLogItem.Time.AddHours(Config.MaxChargingHours) <= IterationTime); if (mowerHasHadEnoughChargingTime && !BetweenIntervals) { Logger.Write(IterationTime, LogType.MowerStuckInHome, LogLevel.InfoMoreInteresting, $"Mower seems to be stuck at home. It did not leave after {Config.MaxMowingHoursWithoutCharge} hours of charging time."); SetMowingEnded(); } } if (!_mowerIsHome) { var lastMowerLeftLogItem = Logger.LogItems .OrderByDescending(x => x.Time) .FirstOrDefault(x => x.Type == LogType.MowerLeft); var lastLogItem = Logger.LogItems .OrderByDescending(x => x.Time) .FirstOrDefault(x => x.Type == LogType.MowerLost || x.Type == LogType.MowerCame); if (lastMowerLeftLogItem?.Time.AddHours(Config.MaxMowingHoursWithoutCharge) <= IterationTime && lastLogItem?.Type != LogType.MowerLost) { Logger.Write(IterationTime, LogType.MowerLost, LogLevel.InfoMoreInteresting, $"Mower seems to be lost. It did not return home after {Config.MaxMowingHoursWithoutCharge} hours as expected."); if (!BetweenIntervals) { SetMowingEnded(); } } } } // Check if there has ocurred an interval start, and in case it has, write a log message bool atLastMinuteOfInterval = NextOrCurrentInterval.EndHour == IterationTime.Hour && NextOrCurrentInterval.EndMin == IterationTime.Minute; if (!BetweenIntervals && PowerSwitch.Status == PowerStatus.On && !LogAnalyzer.IsMowing && !LogAnalyzer.IsLost && (!LogAnalyzer.IsStuck || mowerLeftThisTurn) && !RainSensor.IsWet && WeatherForecast.CheckIfWeatherWillBeGood(ForecastHours) && !atLastMinuteOfInterval) { SetMowingStarted(); } // Turn on power if (PowerSwitch.Status != PowerStatus.On) { if (!RainSensor.IsWet) { foreach (var interval in Config.TimeIntervals) { // Om ett intervall håller på if (interval.ContainsTime(IterationTime)) { DateTime minutesFromEnd = (new DateTime(IterationTime.Year, IterationTime.Month, IterationTime.Day, interval.EndHour, interval.EndMin, 0).AddMinutes(-10)); // If the interval is not close to end if (IterationTime < minutesFromEnd) { //int forecastHours = interval.EndHour - IterationTime.Hour + 2; //if (Config.UsingContactHomeSensor) //{ // forecastHours = Config.MaxMowingHoursWithoutCharge + 1; //} string weatherAheadDescription; bool weatherWillBeGood = WeatherForecast.CheckIfWeatherWillBeGood(ForecastHours, out weatherAheadDescription); bool mowingNecessary = MowingNecessary(); if (weatherWillBeGood && mowingNecessary) { PowerSwitch.TurnOn(); Logger.Write(IterationTime, LogType.PowerOn, LogLevel.Info, "Power was turned on. " + weatherAheadDescription); SetMowingStarted(); } } } } } if (BetweenIntervals && !RightBeforeIntervalStarts && SafelyAfterIntervalEnd) { PowerSwitch.TurnOn(); Logger.Write(IterationTime, LogType.PowerOn, LogLevel.Info, "Power was turned on. In between intervals."); } } // Turn off power if (PowerSwitch.Status != PowerStatus.Off) { if (HomeSensor.IsHome) // TODO: Fel i TimeBasedHomeSensor när kraften är Unknown... { DateTime nextIntervalExactStartTime = new DateTime(IterationTime.Year, IterationTime.Month, IterationTime.Day, NextInterval.StartHour, NextInterval.StartMin, 0); if (nextIntervalExactStartTime < IterationTime) { nextIntervalExactStartTime = nextIntervalExactStartTime.AddDays(1); } double minutesLeftToIntervalStart = (nextIntervalExactStartTime - IterationTime).TotalMinutes; // If there will be rain, turn off power //int forecastHours = NextInterval.ToTimeSpan().Hours + 2; // If a contact home sensor is used, weather can be checked for much smaller time spans if (Config.UsingContactHomeSensor) { ForecastHours = Config.MaxMowingHoursWithoutCharge + 1; } if (minutesLeftToIntervalStart <= 5 || !BetweenIntervals && HomeSensor.IsHome && (IterationTime - HomeSensor.MowerCameTime).TotalMinutes >= 30 || PowerSwitch.Status == PowerStatus.Unknown) { string logMessage; bool weatherWillBeGood = WeatherForecast.CheckIfWeatherWillBeGood(ForecastHours, out logMessage); if (weatherWillBeGood && RainSensor.IsWet) { logMessage = "Grass is wet."; } if (RainSensor.IsWet || !weatherWillBeGood) { PowerSwitch.TurnOff(); Logger.Write(IterationTime, LogType.PowerOff, LogLevel.Info, "Power was turned off. " + logMessage); if (!BetweenIntervals) { SetMowingEnded(); } } else if (!MowingNecessary()) // If mowing not necessary, turn off power { PowerSwitch.TurnOff(); Logger.Write(IterationTime, LogType.PowerOff, LogLevel.Info, "Power was turned off. Mowing not necessary."); if (!BetweenIntervals) { SetMowingEnded(); } } } } } // Check if we're at an interval end, and in case we are, write a log message if (!BetweenIntervals && PowerSwitch.Status == PowerStatus.On && NextOrCurrentInterval.EndHour == IterationTime.Hour && NextOrCurrentInterval.EndMin == IterationTime.Minute) { SetMowingEnded(); } } catch (Exception ex) { string lastMsg = ""; if (Logger.LogItems.Count > 0) { lastMsg = Logger.LogItems[Logger.LogItems.Count - 1].Message; } if (ex.Message != lastMsg) { Logger.Write(IterationTime, LogType.Failure, LogLevel.Error, ex.Message); } } finally { _isActing = false; } }
// private void _RunAll() { myGlobal.myTesting.StartButtonContent = "STOP"; timer_scrollsystemlog.Start(); Stopwatch st = new Stopwatch(); st.Start(); bool r = false; int idretry = myGlobal.mySetting.GetIDRetry; int comretry = myGlobal.mySetting.CommonRetry; //release device under test if (ProjectTestItem.DUT != null) { ProjectTestItem.DUT = null; } //init control myGlobal.myTesting.initValidating(); //1 - Validate connection vs usb dongle if (myGlobal.myTesting.IsCheckConnection) { myGlobal.myTesting.ValidateConnection = "Waiting..."; //check connection between DUT (module zigbee) vs PC if (ProjectTestItem.DUT == null || ProjectTestItem.DUT.IsConnected == false) { r = ProjectTestItem.Is_DUT_Connected_To_Client_PC <TestingInformation, SettingInformation>(myGlobal.myTesting, myGlobal.mySetting, comretry); if (!r) { myGlobal.myTesting.ValidateConnection = "Failed"; goto END; } } //check connection between DUT (module zigbee) vs usb dongle string id = ""; r = ProjectTestItem.Is_Module_ZigBee_Join_To_Network_D <TestingInformation>(myGlobal.myTesting, comretry, idretry, myGlobal.mySetting.DelayRetry, out id); myGlobal.myTesting.ValidateConnection = r == true ? "Passed" : "Failed"; myGlobal.myTesting.ID = id; if (!r) { goto END; } } //2 - Validate data transmission vs usb dongle if (myGlobal.myTesting.IsCheckTransmission) { myGlobal.myTesting.ValidateTransmission = "Waiting..."; //check connection between DUT (module zigbee) vs PC if (ProjectTestItem.DUT == null || ProjectTestItem.DUT.IsConnected == false) { r = ProjectTestItem.Is_DUT_Connected_To_Client_PC <TestingInformation, SettingInformation>(myGlobal.myTesting, myGlobal.mySetting, comretry); if (!r) { myGlobal.myTesting.ValidateTransmission = "Failed"; goto END; } } //check data transmission between DUT (module zigbee) vs usb dongle string cmd = string.Format("CHECK,{0},SMH_ZIGBEE,RF!", myGlobal.myTesting.ID); r = ProjectTestItem.Is_DUT_Transmitted_To_Node_RF_D <TestingInformation>(myGlobal.myTesting, comretry, myGlobal.mySetting.DelayRetry, cmd); myGlobal.myTesting.ValidateTransmission = r == true ? "Passed" : "Failed"; if (!r) { if (myGlobal.mySetting.StopTest.Equals("Yes")) { goto END; } } } ////3 - Validate LED if (myGlobal.myTesting.IsCheckLED) { myGlobal.myTesting.ValidateLED = "Waiting..."; //check connection between DUT (module zigbee) vs PC if (ProjectTestItem.DUT == null || ProjectTestItem.DUT.IsConnected == false) { r = ProjectTestItem.Is_DUT_Connected_To_Client_PC <TestingInformation, SettingInformation>(myGlobal.myTesting, myGlobal.mySetting, comretry); if (!r) { myGlobal.myTesting.ValidateLED = "Failed"; goto END; } } //check led Dispatcher.Invoke(new Action(() => { this.Opacity = 0.5; myGlobal.myTesting.LogSystem += string.Format("\r\n+++ KIỂM TRA LED +++\r\n"); MultiLED window = new MultiLED(myGlobal.myTesting.ID, DeviceType.SMH_SW3); window.ShowDialog(); r = window.Led1Result && window.Led2Result && window.Led3Result; myGlobal.myTesting.ValidateLED = r ? "Passed" : "Failed"; string msg = string.Format(".........LED1 : {0}\r\n", window.Led1Result); msg += string.Format(".........LED2 : {0}\r\n", window.Led2Result); msg += string.Format(".........LED3 : {0}\r\n", window.Led3Result); myGlobal.myTesting.LogSystem += msg; myGlobal.myTesting.LogSystem += r ? ".........Kết quả: Passed\r\n" : ".........Kết quả: Failed\r\n"; this.Opacity = 1; })); if (!r) { if (myGlobal.mySetting.StopTest.Equals("Yes")) { goto END; } } } //4 - Validate touch button if (myGlobal.myTesting.IsCheckTouchButton) { myGlobal.myTesting.ValidateTouchButton = "Waiting..."; //check connection between DUT (module zigbee) vs PC if (ProjectTestItem.DUT == null || ProjectTestItem.DUT.IsConnected == false) { r = ProjectTestItem.Is_DUT_Connected_To_Client_PC <TestingInformation, SettingInformation>(myGlobal.myTesting, myGlobal.mySetting, comretry); if (!r) { myGlobal.myTesting.ValidateTouchButton = "Failed"; goto END; } } //check touch button Dispatcher.Invoke(new Action(() => { this.Opacity = 0.5; myGlobal.myTesting.LogSystem += string.Format("\r\n+++ KIỂM TRA NÚT CẢM ỨNG +++\r\n"); MultiTouchButton window = new MultiTouchButton(myGlobal.myTesting.ID); window.ShowDialog(); r = window.TouchResult; myGlobal.myTesting.ValidateTouchButton = r ? "Passed" : "Failed"; string msg = window.Message; myGlobal.myTesting.LogSystem += msg; myGlobal.myTesting.LogSystem += r ? ".........Kết quả: Passed\r\n" : ".........Kết quả: Failed\r\n"; this.Opacity = 1; })); if (!r) { if (myGlobal.mySetting.StopTest.Equals("Yes")) { goto END; } } } //5 - Validate power switch if (myGlobal.myTesting.IsCheckPowerSwitch) { myGlobal.myTesting.ValidatePowerSwitch = "Waiting..."; //check power switch Dispatcher.Invoke(new Action(() => { this.Opacity = 0.5; myGlobal.myTesting.LogSystem += string.Format("\r\n+++ KIỂM TRA POWER SWITCH +++\r\n"); PowerSwitch window = new PowerSwitch(); window.ShowDialog(); r = window.Lamp1Result && window.Lamp2Result && window.Lamp3Result; string msg = string.Format(".........Power Switch1 : {0}\r\n", window.Lamp1Result); msg += string.Format(".........Power Switch2 : {0}\r\n", window.Lamp2Result); msg += string.Format(".........Power Switch3 : {0}\r\n", window.Lamp3Result); myGlobal.myTesting.LogSystem += msg; myGlobal.myTesting.ValidatePowerSwitch = r ? "Passed" : "Failed"; myGlobal.myTesting.LogSystem += r ? ".........Kết quả: Passed\r\n" : ".........Kết quả: Failed\r\n"; this.Opacity = 1; })); if (!r) { if (myGlobal.mySetting.StopTest.Equals("Yes")) { goto END; } } } //6 - Save device info (id,type) to sql server if (myGlobal.myTesting.IsStorageInfoToSql) { myGlobal.myTesting.SaveInfoToSql = "Waiting..."; myGlobal.myTesting.LogSystem += string.Format("\r\n+++ LƯU THÔNG TIN SẢN PHẨM (ID,TYPE) LÊN SQL SERVER +++\r\n"); //check id valid or not r = !string.IsNullOrEmpty(myGlobal.myTesting.ID); if (!r) { myGlobal.myTesting.SaveInfoToSql = "Failed"; myGlobal.myTesting.LogSystem += ".........Kết quả: Failed\r\n"; myGlobal.myTesting.LogSystem += ".........Thông tin lỗi: ID sản phẩm không đúng\r\n"; goto END; } //save device info to sql server string table_name = "ProductManagement"; var sqlServer = new ProjectSqlServer(myGlobal.mySetting.SqlServerName, myGlobal.mySetting.SqlDatabase, myGlobal.mySetting.SqlUser, myGlobal.mySetting.SqlPassword); TableProductManagement deviceinfo = new TableProductManagement() { DeviceID = myGlobal.myTesting.ID, DeviceType = DeviceType.SMH_SW3.ToString().ToUpper() }; r = sqlServer.Insert_NewRow_To_SqlTable <TableProductManagement>(table_name, deviceinfo, "tb_ID"); if (!r) { myGlobal.myTesting.SaveInfoToSql = "Failed"; myGlobal.myTesting.LogSystem += ".........Kết quả: Failed\r\n"; myGlobal.myTesting.LogSystem += ".........Thông tin lỗi: không thể ghi dữ liệu lên sql server\r\n"; goto END; } myGlobal.myTesting.SaveInfoToSql = "Passed"; myGlobal.myTesting.LogSystem += ".........Kết quả: Passed\r\n"; } //7 - Print the product id label if (myGlobal.myTesting.IsPrintLabel) { myGlobal.myTesting.PrintLabel = "Waiting..."; //check id valid or not r = !string.IsNullOrEmpty(myGlobal.myTesting.ID); if (!r) { myGlobal.myTesting.PrintLabel = "Failed"; goto END; } //print label string id_table_name = "tb_ProductID"; string log_table_name = "tb_DataLog"; string report_name = "ProductID"; TableProductID id_info = new TableProductID() { ProductID = myGlobal.myTesting.ID }; TableDataLog ms_log_info = new TableDataLog() { DateTimeCreated = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), ErrorMessage = "", Factory = "", JigNumber = "", LineCode = "", ProductCode = "", ProductColor = "", ProductID = id_info.ProductID, ProductName = "SMARTSWITCH", ProductNumber = "", Station = "PCBA-FUNCTION", Worker = "", WorkOrder = "" }; r = ProjectTestItem.Print_DUT_ID_Labels <TestingInformation, TableProductID, TableDataLog> ( myGlobal.myTesting, myGlobal.myTesting.ID, string.Format("{0}access_db\\{1}", AppDomain.CurrentDomain.BaseDirectory, myGlobal.mySetting.MSAccessFile), id_table_name, id_info, log_table_name, ms_log_info, report_name ); myGlobal.myTesting.PrintLabel = r == true ? "Passed" : "Failed"; if (!r) { goto END; } } END: st.Stop(); timer_scrollsystemlog.Stop(); myGlobal.myTesting.LogSystem += "\r\n+++ KẾT THÚC KIỂM TRA SẢN PHẨM +++\r\n"; myGlobal.myTesting.LogSystem += string.Format(">>> Tổng thời gian kiểm tra: {0} ms\r\n", String.Format("{0:n0}", st.ElapsedMilliseconds)); myGlobal.myTesting.LogSystem += string.Format(">>> Phán định sản phẩm: {0}\r\n", r == true ? "Passed" : "Failed"); bool ___ = r == true?myGlobal.myTesting.initPassed() : myGlobal.myTesting.initFailed(); myGlobal.myTesting.StartButtonContent = "START"; //close device under test if (ProjectTestItem.DUT != null && ProjectTestItem.DUT.IsConnected == true) { ProjectTestItem.DUT.Close(); } //save log string logdir = string.Format("{0}log", AppDomain.CurrentDomain.BaseDirectory); if (!Directory.Exists(logdir)) { Directory.CreateDirectory(logdir); Thread.Sleep(100); } string pddir = string.Format("{0}\\smartswitch", logdir); if (!Directory.Exists(pddir)) { Directory.CreateDirectory(pddir); Thread.Sleep(100); } string stdir = string.Format("{0}\\pcba", pddir); if (!Directory.Exists(stdir)) { Directory.CreateDirectory(stdir); Thread.Sleep(100); } string lgsingle = string.Format("{0}\\logsingle", stdir); if (!Directory.Exists(lgsingle)) { Directory.CreateDirectory(lgsingle); Thread.Sleep(100); } string lgtotal = string.Format("{0}\\logtotal", stdir); if (!Directory.Exists(lgtotal)) { Directory.CreateDirectory(lgtotal); Thread.Sleep(100); } //log single string dedir = string.Format("{0}\\{1}", lgsingle, DateTime.Now.ToString("yyyyMMdd")); if (!Directory.Exists(dedir)) { Directory.CreateDirectory(dedir); Thread.Sleep(100); } string file = string.Format("{0}\\{1}_{2}_{3}_{4}.txt", dedir, DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss"), string.IsNullOrEmpty(myGlobal.myTesting.ID) ? "NULL" : myGlobal.myTesting.ID, myGlobal.myTesting.TotalResult); StreamWriter sw = new StreamWriter(file, true, Encoding.Unicode); sw.WriteLine(myGlobal.myTesting.LogSystem); sw.Close(); //log total string _title = "DateTimeCreate,ID,ConRF,TransRF,LED,TouchButton,PowerSwitch,PrintLabel,Total"; string _content = string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8}", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), myGlobal.myTesting.ID, myGlobal.myTesting.ValidateConnection, myGlobal.myTesting.ValidateTransmission, myGlobal.myTesting.ValidateLED, myGlobal.myTesting.ValidateTouchButton, myGlobal.myTesting.ValidatePowerSwitch, myGlobal.myTesting.PrintLabel, myGlobal.myTesting.TotalResult); string ft = string.Format("{0}\\{1}.csv", lgtotal, DateTime.Now.ToString("yyyyMMdd")); if (!File.Exists(ft)) { sw = new StreamWriter(ft, true, Encoding.Unicode); sw.WriteLine(_title); } else { sw = new StreamWriter(ft, true, Encoding.Unicode); } sw.WriteLine(_content); sw.Close(); }
// private void _RunAll(string _id) { myGlobal.myTesting.StartButtonContent = "STOP"; timer_scrollsystemlog.Start(); Stopwatch st = new Stopwatch(); st.Start(); bool r = false; //release device under test if (ProjectTestItem.DUT != null) { ProjectTestItem.DUT = null; } //init control myGlobal.myTesting.initValidating(); myGlobal.myTesting.ID = _id; ////1 - Validate LED if (myGlobal.myTesting.IsCheckLED) { myGlobal.myTesting.ValidateLED = "Waiting..."; //check connection between DUT (usb dongle) vs PC if (ProjectTestItem.DUT == null || ProjectTestItem.DUT.IsConnected == false) { r = ProjectTestItem.Open_Device_USB_Dongle(myGlobal.myTesting, myGlobal.mySetting, 10); if (!r) { myGlobal.myTesting.ValidateLED = "Failed"; goto END; } } //check led Dispatcher.Invoke(new Action(() => { this.Opacity = 0.5; myGlobal.myTesting.LogSystem += string.Format("\r\n+++ KIỂM TRA LED +++\r\n"); MultiLED window = new MultiLED(myGlobal.myTesting.ID, DeviceType.SMH_SW3); window.ShowDialog(); r = window.Led1Result && window.Led2Result && window.Led3Result; myGlobal.myTesting.ValidateLED = r ? "Passed" : "Failed"; string msg = string.Format(".........LED1 : {0}\r\n", window.Led1Result); msg += string.Format(".........LED2 : {0}\r\n", window.Led2Result); msg += string.Format(".........LED3 : {0}\r\n", window.Led3Result); myGlobal.myTesting.LogSystem += msg; myGlobal.myTesting.LogSystem += r ? ".........Kết quả: Passed\r\n" : ".........Kết quả: Failed\r\n"; this.Opacity = 1; })); if (!r) { goto END; } } //2 - Validate touch button if (myGlobal.myTesting.IsCheckTouchButton) { myGlobal.myTesting.ValidateTouchButton = "Waiting..."; //check connection between DUT (usb dongle) vs PC if (ProjectTestItem.DUT == null || ProjectTestItem.DUT.IsConnected == false) { r = ProjectTestItem.Open_Device_USB_Dongle(myGlobal.myTesting, myGlobal.mySetting, 10); if (!r) { myGlobal.myTesting.ValidateTouchButton = "Failed"; goto END; } } //check touch button Dispatcher.Invoke(new Action(() => { this.Opacity = 0.5; myGlobal.myTesting.LogSystem += string.Format("\r\n+++ KIỂM TRA NÚT CẢM ỨNG +++\r\n"); MultiTouchButton window = new MultiTouchButton(myGlobal.myTesting.ID); window.ShowDialog(); r = window.TouchResult; myGlobal.myTesting.ValidateTouchButton = r ? "Passed" : "Failed"; string msg = window.Message; myGlobal.myTesting.LogSystem += msg; myGlobal.myTesting.LogSystem += r ? ".........Kết quả: Passed\r\n" : ".........Kết quả: Failed\r\n"; this.Opacity = 1; })); if (!r) { goto END; } } //3 - Validate power switch if (myGlobal.myTesting.IsCheckPowerSwitch) { myGlobal.myTesting.ValidatePowerSwitch = "Waiting..."; //check power switch Dispatcher.Invoke(new Action(() => { this.Opacity = 0.5; myGlobal.myTesting.LogSystem += string.Format("\r\n+++ KIỂM TRA POWER SWITCH +++\r\n"); PowerSwitch window = new PowerSwitch(); window.ShowDialog(); r = window.Lamp1Result && window.Lamp2Result && window.Lamp3Result; string msg = string.Format(".........Power Switch1 : {0}\r\n", window.Lamp1Result); msg += string.Format(".........Power Switch2 : {0}\r\n", window.Lamp2Result); msg += string.Format(".........Power Switch3 : {0}\r\n", window.Lamp3Result); myGlobal.myTesting.LogSystem += msg; myGlobal.myTesting.ValidatePowerSwitch = r ? "Passed" : "Failed"; myGlobal.myTesting.LogSystem += r ? ".........Kết quả: Passed\r\n" : ".........Kết quả: Failed\r\n"; this.Opacity = 1; })); if (!r) { goto END; } } END: st.Stop(); timer_scrollsystemlog.Stop(); myGlobal.myTesting.LogSystem += "\r\n+++ KẾT THÚC KIỂM TRA SẢN PHẨM +++\r\n"; myGlobal.myTesting.LogSystem += string.Format(">>> Tổng thời gian sản phẩm: {0} mili giây\r\n", String.Format("{0:n0}", st.ElapsedMilliseconds)); myGlobal.myTesting.LogSystem += string.Format(">>> Phán định sản phẩm: {0}\r\n", r == true ? "Passed" : "Failed"); bool ___ = r == true?myGlobal.myTesting.initPassed() : myGlobal.myTesting.initFailed(); myGlobal.myTesting.StartButtonContent = "START"; //close device under test if (ProjectTestItem.DUT != null && ProjectTestItem.DUT.IsConnected == true) { ProjectTestItem.DUT.Close(); } //save log string logdir = string.Format("{0}log", AppDomain.CurrentDomain.BaseDirectory); if (!Directory.Exists(logdir)) { Directory.CreateDirectory(logdir); Thread.Sleep(100); } string pddir = string.Format("{0}\\smartswitch", logdir); if (!Directory.Exists(pddir)) { Directory.CreateDirectory(pddir); Thread.Sleep(100); } string stdir = string.Format("{0}\\asm", pddir); if (!Directory.Exists(stdir)) { Directory.CreateDirectory(stdir); Thread.Sleep(100); } string lgsingle = string.Format("{0}\\logsingle", stdir); if (!Directory.Exists(lgsingle)) { Directory.CreateDirectory(lgsingle); Thread.Sleep(100); } string lgtotal = string.Format("{0}\\logtotal", stdir); if (!Directory.Exists(lgtotal)) { Directory.CreateDirectory(lgtotal); Thread.Sleep(100); } //log single string dedir = string.Format("{0}\\{1}", lgsingle, DateTime.Now.ToString("yyyyMMdd")); if (!Directory.Exists(dedir)) { Directory.CreateDirectory(dedir); Thread.Sleep(100); } string file = string.Format("{0}\\{1}_{2}_{3}_{4}.txt", dedir, DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss"), string.IsNullOrEmpty(myGlobal.myTesting.ID) ? "NULL" : myGlobal.myTesting.ID, myGlobal.myTesting.TotalResult); StreamWriter sw = new StreamWriter(file, true, Encoding.Unicode); sw.WriteLine(myGlobal.myTesting.LogSystem); sw.Close(); //log total string _title = "DateTimeCreate,ID,LED,TouchButton,PowerSwitch,Total"; string _content = string.Format("{0},{1},{2},{3},{4},{5}", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), myGlobal.myTesting.ID, myGlobal.myTesting.ValidateLED, myGlobal.myTesting.ValidateTouchButton, myGlobal.myTesting.ValidatePowerSwitch, myGlobal.myTesting.TotalResult); string ft = string.Format("{0}\\{1}.csv", lgtotal, DateTime.Now.ToString("yyyyMMdd")); if (!File.Exists(ft)) { sw = new StreamWriter(ft, true, Encoding.Unicode); sw.WriteLine(_title); } else { sw = new StreamWriter(ft, true, Encoding.Unicode); } sw.WriteLine(_content); sw.Close(); }