12/28/2016

PHP : PHP ดึงค่าจาก Web HTTPS มาใช้งาน ด้วย PHP Simple HTML DOM Parser Manual

PHP : PHP ดึงค่าจาก Web HTTPS มาใช้งาน ด้วย PHP Simple HTML DOM Parser Manual

http://simplehtmldom.sourceforge.net/manual.htm

ถ้าดึง Web ปกติ สามารถใช้ ได้เลย
  1. include('simple_html_dom.php');
  2. $dom = file_get_html("http://www.kasikornbank.com/TH/RatesAndFees/ForeignExchange/Pages/ForeignExchangeHistory.aspx?");
  3. $html = $dom->find('table[class=ContentTB] tbody tr');
  4. foreach ($html as $tr){
  5. echo "<br><font color='red'>".$tr."</font>";
  6. }


แต่ถ้าเป็น HTTPS จะไม่ได้จะมี Error
Warning: file_get_contents(): SSL: Connection reset by peer in Line Error
Warning: file_get_contents(): Failed to enable crypto in Line Error

ต้องใช้ เพื่อให้ https ผ่าน
  1. include('simple_html_dom.php');
  2. $url = 'https://www.pbebank.com/rates/forex.html';
  3.  
  4. $arrContextOptions=array(
  5.     "ssl"=>array(
  6.         "verify_peer"=>false,
  7.         "verify_peer_name"=>false,
  8.     ),
  9. );  
  10.  
  11. stream_context_create($arrContextOptions));
  12. $response = file_get_contents("https://www.pbebank.com/rates/forex.html", false, stream_context_create($arrContextOptions));
  13.  
  14. print_r($response);
  15.  
  16. $dom = str_get_html($response);
  17. $html = $dom->find('table[id=tech-companies] tbody tr');
  18.  
  19. print_r("<br>".$html[1]);
  20. print_r("<br>".$html[3]);

12/26/2016

VB : VB Select ข้อมูลซ้อนกัน พร้อมกัน 2 Table

VB : VB Select ข้อมูลซ้อนกัน พร้อมกัน 2 Table

เช่นต้องการ While ข้อมูลจาก Table หนึ่ง เสร็จแล้วใน Loop While ต้องการ Select ข้อมูลจาก Table อื่นมาอีก

จะต้อง ใช้ตัวแปร Connect คนละตัวกัน เช่น
  1. Public Class Reports
  2.     Dim myConnection As New MySqlConnection
  3.     Private myConnectionString As String
  4.  
  5.     Dim myConnection1 As New MySqlConnection
  6.     Private myConnectionString1 As String
  7.  
  8.     Dim myDataset As New DataSet
  9.     Dim myReader As MySqlDataReader
  10.     Dim myCommand As New MySqlCommand
  11.     Dim SQL As String
  12.     Dim myAdapter As New MySqlDataAdapter
  13.  
  14.     Dim myDataset1 As New DataSet
  15.     Dim myReader1 As MySqlDataReader
  16.     Dim myCommand1 As New MySqlCommand
  17.     Dim SQL1 As String
  18.     Dim myAdapter1 As New MySqlDataAdapter
  19.  
  20.   Private Sub Reports_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  21.         myConnectionString = "server=xxx;" _
  22.         & "user id=xx;" _
  23.         & "password=xx;" _
  24.         & "Allow Zero DateTime=True;" _
  25.         & "charset=tis620;"
  26.  
  27.         myConnectionString1 = "server=xxx;" _
  28.         & "user id=xx;" _
  29.         & "password=xx;" _
  30.         & "Allow Zero DateTime=True;" _
  31.         & "charset=tis620;"
  32.  
  33. //Button1.Click
  34.             myConnection.ConnectionString = myConnectionString
  35.             myConnection.Open()
  36.             myCommand.Connection = myConnection
  37.  
  38.             SQL = "SELECT BudgetNo, ROUND(BudgetNo, 0) AS NoSort, Department, BudgetDetail, Qty, FromLastYear, BudgetAmount, Year, BudgetUsed, PlanDate, CreateDate, Unit, UseQty, DocumentBudget FROM sci_rp.RPBudget " _
  39.             & " WHERE RPBudget.Department ='" & DepartCode & "'" _
  40.             & " AND RPBudget.Year = '" & DateStartYear & "'" _
  41.             & " ORDER BY Department, NoSort, length(BudgetNo) ASC"
  42.             '& " ORDER BY Department, length(BudgetNo), BudgetNo ASC"
  43.  
  44.             myCommand.CommandText = SQL
  45.             myAdapter.SelectCommand = myCommand
  46.             myReader = myCommand.ExecuteReader
  47.  
  48.             While myReader.Read()
  49.  
  50.                 myConnection1.ConnectionString = myConnectionString1
  51.                 myConnection1.Open()
  52.                 myCommand1.Connection = myConnection1
  53.  
  54.                 SQL1 = "SELECT RPID, Description, EndDate, Qty, Stock, In_price, Status, ApproveDate FROM sci_rp.RPLines " _
  55.                 & " WHERE RPLines.BudgetNo = '" & BudgetNo & "'" _
  56.                 & " AND (RPLines.Status = 'Purchased'" _
  57.                 & " OR RPLines.Status = 'Approve')" _
  58.                 & " AND RPLines.ApproveDate <= '" & DateSQL & "'" _
  59.                 & " ORDER BY RPLineId ASC"
  60.                 myCommand1.CommandText = SQL1
  61.                 myAdapter1.SelectCommand = myCommand1
  62.                 myReader1 = myCommand1.ExecuteReader
  63.                 While myReader1.Read()
  64.  
  65.  
  66.             End While
  67.  
  68.             End While

VB : VB Set Style To LibreOffice Calc And Print To Other Sheet.

VB : VB Set Style To LibreOffice Calc And Print To Other Sheet.

http://www.mediafire.com/?x9qjrd5n7u7jytl

 VB : VB Set Style To LibreOffice Calc And Print To Other Sheet.


  1.             Dim Result(-1) As Object
  2.             Dim CurrLine As String = String.Empty
  3.             Dim myDoc As Object, firstSheet As Object, secondSheet As Object  //Print To Sheet
  4.  
  5.             Dim oSM
  6.             Dim oDesk As Object
  7.             Dim arg(-1) As Double
  8.  
  9.             'Connect file and open OpenOffice
  10.             oSM = CreateObject("com.sun.star.ServiceManager")
  11.             oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
  12.  
  13.             ' Open calc
  14.             'myDoc = oDesk.loadComponentFromURL("private:factory/scalc", "_blank", 0, arg)
  15.             myDoc = oDesk.loadComponentFromURL("file://datacenter/Asset/Template/RP_Reports.ods", "_blank", 0, arg)
  16.             firstSheet = myDoc.Sheets.getByIndex(0) 'index sheet insert data.
  17.  
  18.             secondSheet = myDoc.Sheets.getByIndex(1) 'index sheet insert data.
  19.  
  20. //Select DATA We Need.
  21. //Print
  22.                             firstSheet.getCellByPosition(0, 0).setPropertyValue("CellStyle", "IntRed")
  23.                             firstSheet.getCellByPosition(0, 1).Value = myReader1.Item("In_price").ToString()
  24.  
  25.                             firstSheet.getCellByPosition(1, 1).setPropertyValue("CellStyle", "StrRed")
  26.                             firstSheet.getCellByPosition(1, 2).String = myReader1.Item("RPID").ToString()
  27.  
  28. //Print To Second  Seet
  29.  
  30.                             secondSheet.getCellByPosition(0, 0).setPropertyValue("CellStyle", "StrRed")
  31.                             secondSheet.getCellByPosition(0, 1).String = myReader1.Item("RPID").ToString()
  32.  
  33.                             secondSheet.getCellByPosition(1, 1).setPropertyValue("CellStyle", "IntRed")
  34.                             secondSheet.getCellByPosition(1, 2).Value = myReader1.Item("In_price").ToString()

PHP : PHP Mysql Select Sort String ที่เก็บค่าไว้เป็นทศนิยม

PHP : PHP Mysql Select Sort String ที่เก็บค่าไว้เป็นทศนิยม

เช่น เก็บค่า 1 , 1.10 , 10 , 1.11 , 1.12.1 ไม่สามารถทำ Type Table ให้เป็น INT, DECIMAL, DOUBLE เพื่อเรียงได้ เพราะมีทศนิยมไม่แน่นอน แต่ถ้าต้องการเรียง ต้อง ใช้ ROUND ก่อน แล้วค่อยนำมา Order By และ ตามด้วยความยาวของตัวเลขนั้น

เช่น
  1. $SQL_BUDGET     = "SELECT BudgetNo, ROUND(BudgetNo, 0) AS NoSort, Department, BudgetDetail, Qty, FromLastYear, BudgetAmount, Year, BudgetUsed, PlanDate, CreateDate, Unit, UseQty, DocumentBudget FROM sci_rp.RPBudget";
  2.     $SQL_BUDGET     .= " WHERE RPBudget.Department = '".$DepartCode."'";
  3.     $SQL_BUDGET     .= " AND RPBudget.Year = '".date("Y")."'";
  4.     $SQL_BUDGET     .= " ORDER BY Department, NoSort, length(BudgetNo)  ASC";
  5.     //$SQL_BUDGET   .= " ORDER BY Department, length(BudgetNo), BudgetNo ASC";


http://www.select2web.com/sql/sql-round-function.html

12/20/2016

PHP : PHP Delete All File And Folder

PHP : PHP Delete All File And Folder

Use This Code :
  1.  
  2. $targetDir = 'uploads/contract/'.$_GET["CID"];
  3.  
  4. array_map('unlink', glob("$targetDir/*.*"));
  5. rmdir($targetDir);
  6.  

http://stackoverflow.com/questions/3349753/delete-directory-with-files-in-it

12/15/2016

IQ6.3 : OTG IQ6.3

IQ6.3 : OTG IQ6.3
1. เครื่องต้องลง CWM ไว้แล้ว
2. Root แล้ว
3. ติดตั้ง App USB OTG Helper แล้วให้สิทธิ์ root มันส่ะ
4. ES File Explorer หรือ อื่น ๆ ที่เป็น File Explorer

พร้อมแล้วเริ่มเลย
1. Download file otg.zip จาก  http://www.mediafire.com/download/mq2wdhjr3l9pibv/otg.zip
2. copy ไว้ใน SD หรือตัวเครื่องก็ได้ที่เห็นง่าย ๆ
3. เข้า Recovery(CWM)
4. เลือก install zip from sdcard
5. เลือกไฟล์ที่ Copy ไว้ตาม ข้อ 2.
6. reboot เครื่อง
7. เสียบสาย Otg และ FlashDrive
8. มันจะเด่งขึ้นมาตามรูป กด OK

9. กด MOUNT ตามรูป

10.กด Home เพื่อออกจาก โปรแกรม ไปเปิดโปรแกรม  ES File Explorer  เลือกข้างบนเป็น Local

11.เลือกที่อยู่ของไฟล์ OTG ของเรา โดยเปิด Folder  Storage  ---> UsbOtgDrives ---> Drive_1  รูปตามลำดับ



12. สุดท้ายก็จะเจอข้อมูลใน Flash Drive ของเรา

จบ OTG IQ6.3

IQ6.3 : Boot Logo และ Boot Animation 3 รุ่น ของ IQ6.3

IQ6.3 : Boot Logo และ Boot Animation 3 รุ่น ของ IQ6.3
Insatall ผ่าน CWM หรือ TWRP  เหมือนที่เคยทำครับ


Boot Logo และ Boot Animation IQ ของ  0
http://www.mediafire.com/download/llndt0er96r70xb/IQ6.3_0_BootAnim_BootLogo.zip



Boot Logo และ Boot Animation Innos
http://www.mediafire.com/download/qic52tyappqmrz7/IQ6.3_BootAnim_BootLogo_INNOS.zip


Boot Logo และ Boot Animation Highscreen
http://www.mediafire.com/download/iqdm7t7irqeo1fd/IQ6.3_Highscreen_BootAnim_BootLogo.zip

Camera : Luxriot VMS Program ส่งออกไฟล์ Video บางช่วงที่ต้องการ

Camera : Luxriot VMS Program ส่งออกไฟล์ Video บางช่วงที่ต้องการ
1. เข้าโปรแกรม Luxriot VMS แล้วเลือก Archive ตามรูป

2. เลือกกล้องที่ต้องการตรง Archive ตามรูป

3. เลือกช่วง Video ที่ต้องการ หรือไปเลือกตอน Export ก็ได้ แล้วเข้า Menu Edit --> Export Wizard
4. กด Next
5. กด Next

6. เลือกตั้งค่าไฟล์ Video ที่ต้องการ หรือกด Next


7. กด Next
8. เลือกช่วงเวลาที่ต้องการ ถ้าเลือกในขั้นตอนที่ 3. แล้วกด Next
9. เลือกที่เก็บไฟล์ Video ตามที่ต้องการแล้วกด Next
10. กด Next
11. รอจนกว่าจะเสร็จจะไช้เวลาช้าหรือเร็วขึ้นอยู่กับตอนที่เราเลือกช่วงเวลาถ้าเลือกช่วงยาว ก็จะใช้เวลานาน
12. กด Finish
13. จะได้ไฟล์ Video .avi ในที่ที่เราเลือก Save ข้อมูลไว้ ในข้อ 9.

12/14/2016

Axapta : คำสั่งผลิต Update Costing ไม่ได้ Error Calculating BOM consumption

Axapta : คำสั่งผลิต Update Costing ไม่ได้ Error Calculating BOM consumption
Serial number = ""
item consumption for 1.00 cannot be updated, as the cost price is known only for in stock.


เกิดจาก : คำสั่งผลิตที่คลัง หรือฝผล. ทำ Reports แล้ว ไม่มีมูลค่า Cost Amount ทำให้คำสั่งผลิตที่จะมาตัดไม่รู้มูลค่าจึงเกิด Error
สาเหตุที่ไม่มีมูลค่าเกิดจากการ Reports ติดลบ แล้วไม่สำเร็จ 2 รายการ ที่ Issue จะขึ้น Deducted Serial number 33243-00021 และ 33243-00020
แก้ไขโดยการแก้ ลบ Transaction ที่ไม่ถูกออก และแก้ให้ไปใช้ Serial number ที่ถูกต้อง

1. ต้องไปไล่ดู Transaction ของ Item ที่มีปัญหา
2. ดู Serial number ที่ฟ้อง Transaction ที่มีปัญหา ตรงช่อง Issue จะขึ้น Deducted
3. ตรวจสอบและแก้ไข Transaction ที่ไม่ถูกต้อง
Case นี้ มีปัญหาที่ PD16-018663 ที่มีการ Reports ติดลบ และ Reports บวกเข้าไปใหม่ และได้ End คำสั่งผลิตไป
และ PD16-025301 มา Pickinglist Item จากคำสั่งผลิต PD16-018663 ที่ 2 Serial number ที่ไม่มีต้นทุน จึงทำให้ Costing ไม่ได้

แก้โดย (ต้องทดลองทำใน Local ก่อนค่อยทำในของจริง)
ข้อมูลที่จะลบมี 2 Table คือ InventTrans และ InventTransExt ดูข้อมูลที่ไม่ถูกต้องตามข้อ 3. และใช้ InventDimId ในการเชื่อมโยง
1. ลบ Transaction ที่ไม่ถูกต้องออกโดยใช้ SQL Server Enterprise manager ที่ Server
ลบข้อมูลที่ไม่ถูกต้องออก เช่น
  1.  
  2. SELECT     *
  3. FROM         INVENTTRANS
  4. WHERE     (ITEMID = '332027943015') AND (RECID = '35052665' OR
  5.                       RECID = '35052668' OR
  6.                       RECID = '35052681' OR
  7.                       RECID = '38295133')
  8.  

  1.  
  2. SELECT     *
  3. FROM         INVENTTRANSEXT
  4. WHERE     (ITEMID = '332027943015') AND (RECID = '35052667' OR
  5.                       RECID = '35052670' OR
  6.                       RECID = '35052683' OR
  7.                       RECID = '38295134')
  8.  


2. แก้ Dimension ให้ไปใช้ Serial number ตัวที่ถูกต้อง
เข้าไปที่ item เลือก Edit dimension ที่ Tab Set เลือก List ทั้ง 2 ช่องให้เป็นว่าง ตามรูป




กลับไปที่หน้า Overview
แก้ Dimension ที่มีปัญหาไปใช้ Serial number ที่ใช้งานได้ จากตัวอย่าง แก้จาก 33243-00027 เป็น 33243-00020 และ 33243-00028 เป็น 33243-00021
เลือก Serial number ที่มีของอยู่จริงและใช้งานได้

3. Update Costing คำสั่งผลิตที่ Error จะ Cost ผ่าน
4. Run Job recalcInventSum โดยใส่ Item ที่มีปัญหาเข้าไป 332027943015 เพื่อเปลี่ยนแปลงข้อมูล Table Invent SUM ให้ถูกต้อง

12/12/2016

Axapta : Axapta Split Sring By Separator.

Axapta : Axapta Split Sring By Separator.

  1. static void StringSplitter(Args _args)
  2. {
  3.     TextBuffer  buffer;
  4.     str         value;
  5.     Counter     cnt;
  6.     int         i = 1;
  7.  
  8.     value = "AA,BB,CCC,DDD,XXX";
  9.  
  10.     buffer = new TextBuffer();
  11.     buffer.setText(value);
  12.  
  13.     while (buffer.nextToken(0, ','))
  14.     {
  15.         cnt++;
  16.  
  17.         if(cnt == i){
  18.             info (strFmt("Print %1 : %2", i, buffer.token()));
  19.         }
  20.     i++;
  21.     }
  22. }


Thank This Web : http://axhelper.blogspot.com/2014/03/split-string-value-by-using-saperatror.html

12/10/2016

SonOff : Program Code ขับสัญญาณกริ่ง + Function


 SooOff ESP8266

SonOff : Program Code ขับสัญญาณกริ่ง + Function
  1. //Public Variable.
  2. #include <ESP8266WiFi.h>
  3. #include <time.h>
  4. #include "Timer.h"
  5.  
  6. Timer t;
  7.  
  8. #define pinRelay 12
  9. #define pinBlink 13
  10.  
  11. int buttonState = 0;
  12. const int buttonPin = 0;
  13.  
  14. const char* ssid = "WIFI_NAME";                
  15. const char* password = "PASSWORD WIFI";          
  16.  
  17. int timezone = 7 * 3600;                  
  18. int dst = 0;  
  19. int result;
  20.  
  21. struct tm* p_tm ;
  22. int CountSec;
  23. int CountMin;
  24. int CountHour;      
  25.  
  26. //Close Public Variable.
  27.  
  28. void setup()
  29. {
  30. // WIFI.  
  31.   Serial.begin(115200);
  32.   Serial.setDebugOutput(true);
  33.  
  34.   pinMode(pinRelay, OUTPUT);
  35.   pinMode(pinBlink, OUTPUT);
  36.   pinMode(buttonPin, INPUT);
  37.  
  38.   digitalWrite(pinRelay, LOW);
  39.   //digitalWrite(pinBlink, HIGH);
  40.  
  41.   WiFi.mode(WIFI_STA);                                        
  42.   WiFi.begin(ssid, password);
  43.   Serial.println("\nConnecting to WiFi");
  44.   while (WiFi.status() != WL_CONNECTED) {
  45.      Serial.print(",");
  46.      delay(1000);
  47.    }
  48.     //configTime(timezone, dst, "time.nist.gov");  
  49.     configTime(timezone, dst, "192.168.0.2");  
  50.     Serial.println("\nWaiting for time");
  51.     while (!time(nullptr)) {
  52.       Serial.print(".");
  53.       delay(1000);
  54.     }
  55.     Serial.println("");
  56.    
  57.  
  58. //Keep time now.
  59.   time_t now = time(nullptr);
  60.   p_tm = localtime(&now);
  61.  
  62.   CountSec = p_tm->tm_sec;
  63.   CountMin = p_tm->tm_min;
  64.   CountHour = p_tm->tm_hour;
  65.  
  66. //Call Function Every 1 second.
  67.   int tickEvent = t.every(1000, loopTime);
  68.   int CheckClickButton = t.every(1000, ChekButton);
  69.  
  70. }
  71.  
  72. //Manual Click GPIO0
  73. void ChekButton()
  74. {
  75.   buttonState = digitalRead(buttonPin);
  76.   if (buttonState == HIGH) {
  77.     digitalWrite(pinRelay, LOW); //On relay
  78.     digitalWrite(pinBlink, HIGH); //On  LED
  79.     result = 0;
  80.   } else {
  81.     // turn LED off:
  82.     digitalWrite(pinRelay, HIGH); //Off relay
  83.     digitalWrite(pinBlink, LOW); //Off  LED
  84.     result = 1;
  85.   }
  86.   Serial.print(result);
  87. }  
  88.  
  89. //Call Function On.
  90. void CallOn()
  91. {
  92.   digitalWrite(pinRelay, HIGH); //On relay
  93.   digitalWrite(pinBlink, LOW); //On  LED
  94.   delay(8000);
  95.   CountSec = CountSec + 8;
  96. }  
  97.  
  98. //Call Function Off.
  99. void CallOff()
  100. {
  101.   digitalWrite(pinRelay, LOW); //Off relay
  102.   digitalWrite(pinBlink, HIGH); //Off  LED
  103. }  
  104.  
  105.  
  106. //Loop.        
  107. void loop()
  108. {
  109.   t.update();
  110. }
  111.  
  112. //Function Loop Time.
  113. void loopTime()
  114. {
  115.  
  116.   CountSec = CountSec + 1;
  117.  
  118.   if(CountSec == 60){
  119.     CountSec = 0;
  120.     CountMin = CountMin + 1;  
  121.  
  122.     if(CountMin == 60){
  123.       CountMin = 0;
  124.       CountHour = CountHour + 1
  125.  
  126.       if(CountHour == 24){
  127.         CountHour = 0;    
  128.      }
  129.  
  130.     }  
  131.  
  132.   }
  133.  
  134. // 12:30 Connet NTP New.
  135.   if(CountHour == 0 && CountMin == 30){
  136.     time_t now = time(nullptr);
  137.     p_tm = localtime(&now);
  138.    
  139.     CountSec = p_tm->tm_sec;
  140.     CountMin = p_tm->tm_min;
  141.     CountHour = p_tm->tm_hour;  
  142.   }
  143.  
  144. //Print Time.
  145.   Serial.print("Hour = ");
  146.   Serial.print(CountHour);
  147.   Serial.println("");
  148.  
  149.   Serial.print("Min = ");
  150.   Serial.print(CountMin);
  151.   Serial.println("");
  152.  
  153.   Serial.print("Sec = ");
  154.   Serial.print(CountSec);
  155.   Serial.println("");
  156.  
  157.  
  158.   //### Test ###//
  159.   /*
  160.   if(CountSec == 10){
  161.     Serial.print("Open");  
  162.     CallOn();
  163.   }
  164.   */
  165.   //### Test ###//
  166.  
  167.   //0:00
  168.   if((CountHour == 0) && (CountMin == 0) && (CountSec == 0)){
  169.     Serial.print("Open");
  170.     CallOn();
  171.   }
  172.   //0:30
  173.   if((CountHour == 0) && (CountMin == 30) && (CountSec == 0)){
  174.     Serial.print("Open");
  175.     CallOn();
  176.   }
  177.   //5:30
  178.   if((CountHour == 5) && (CountMin == 30) && (CountSec == 0)){
  179.     Serial.print("Open");
  180.     CallOn();
  181.   }
  182.   //6:00
  183.   if((CountHour == 6) && (CountMin == 0) && (CountSec == 0)){
  184.     Serial.print("Open");
  185.     CallOn();
  186.   }
  187.   //7:50
  188.   if((CountHour == 7) && (CountMin == 50) && (CountSec == 0)){
  189.     Serial.print("Open");
  190.     CallOn();
  191.   }
  192.   //8:00
  193.   if((CountHour == 8) && (CountMin == 0) && (CountSec == 0)){
  194.     Serial.print("Open");
  195.     CallOn();
  196.   }
  197.  //10:20
  198.   if((CountHour == 10) && (CountMin == 20) && (CountSec == 0)){
  199.     Serial.print("Open");
  200.     CallOn();
  201.   }
  202.   //12:00
  203.   if((CountHour == 12) && (CountMin == 0) && (CountSec == 0)){
  204.     Serial.print("Open");
  205.     CallOn();
  206.   }
  207.   //12:50
  208.   if((CountHour == 12) && (CountMin == 50) && (CountSec == 0)){
  209.     Serial.print("Open");
  210.     CallOn();
  211.   }
  212.   //13:00
  213.   if((CountHour == 13) && (CountMin == 0) && (CountSec == 0)){
  214.     Serial.print("Open");
  215.     CallOn();
  216.   }
  217.   //17:40
  218.   if((CountHour == 17) && (CountMin == 40) && (CountSec == 0)){
  219.     Serial.print("Open");
  220.     CallOn();
  221.   }
  222.   //18:00
  223.   if((CountHour == 18) && (CountMin == 0) && (CountSec == 0)){
  224.     Serial.print("Open");
  225.     CallOn();
  226.   }
  227.   //21:00
  228.   if((CountHour == 21) && (CountMin == 0) && (CountSec == 0)){
  229.     Serial.print("Open");
  230.     CallOn();
  231.   }  
  232.  
  233.  
  234. CallOff();  
  235.  
  236. }