Example #1
0
    /// <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);
    }
Example #2
0
        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);
            }
        }
Example #6
0
        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);
            }
        }
Example #7
0
 // Start is called before the first frame update
 void Start()
 {
     instance = this;
 }
Example #8
0
 private void LogIgnoredDevice(PowerSwitch powerSwitch)
 {
     _logger.LogDebug("Device of Type {type} with name {name} is ignored.",
                      powerSwitch.Type,
                      powerSwitch.Name);
 }
Example #9
0
 public async Task OnOff(PowerSwitch powerSwitch)
 {
     await SendCommand(Commands.AC_FUN_POWER, powerSwitch.ToString());
 }
Example #10
0
        /// <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;
            }
        }
Example #11
0
        //
        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();
        }
Example #12
0
        //
        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();
        }