หน้าเว็บ

วันพุธที่ 17 มิถุนายน พ.ศ. 2563

Linux Mint แก้ปัญหา Add Printer Auto ใน Network

Linux Mint แก้ปัญหา Add Printer Auto ใน Network
เมื่อต่อ Network แล้วเข้า printer ตัว Printer ที่อยู่ใน Network จะ Add เข้ามา Auto บางตัวไม่ได้ใช้
ลบออกแล้วก็ยัง Add เข้ามาใหม่

แก้โดย
  1. nano /etc/cups/cups-browsed.conf

Uncomment
CreateIPPPrinterQueues LocalOnly

  1. /etc/init.d/cups restart


ก็จะเหลือเฉพาะ Printer ที่เรา Add ไว้

https://forums.linuxmint.com/viewtopic.php?t=277091

วันพฤหัสบดีที่ 11 มิถุนายน พ.ศ. 2563

PI : Pi zero ตรวจวัดความร้อนและวัดการสั่น

PI : Pi zero ตรวจวัดความร้อนและวัดการสั่น
1. ติดตั้ง PI และ Set Headless
https://intranet.sci.com/blog.php?u=281&b=1770
boot เข้า Pi update upgrade set ntp

2. Fix ip wifi for pi zero
  1. nano /etc/dhcpcd.conf

Add
interface wlan0
static ip_address=192.168.0.164/24
static routers=192.168.0.2
static domain_name_servers=192.168.0.2 8.8.8.8

แล้ว Reboot เครื่อง


การต่อวัดอุณหภูมิ mlx90614
1. วัดอุณหภูมิ mlx90614 4 ขา ใช้ ไฟ 5V GNC SCL SDA

2. เปิดโหมด I2C
  1. raspi-config


http://domoticx.com/raspberry-pi-i2c-bus-gebruiken/
3. เปิดดูไฟล์ Boot config ว่า
  1. nano /boot/config.txt

ถูกเปิดแล้วหรือยัง
dtparam=i2c_arm=on
dtparam=spi=on

4. Download
https://github.com/mcauser/micropython-mlx90614
micropython-mlx90614-master(1).zip
(55.74 KB) Not downloaded yet

5. ติดตั้ง Uzip และแตกไฟล์
  1. apt-get install unzip

6. เข้าไปใน Folder ที่แตกได้ ติดตั้งโปรแกรม
  1. python setup.py install

7. เขียน Code
  1. nano Tmp_Sensor.py
  1. import smbus
  2.  
  3. class MLX90614():
  4.  
  5.     MLX90614_RAWIR1=0x04
  6.     MLX90614_RAWIR2=0x05
  7.     MLX90614_TA=0x06
  8.     MLX90614_TOBJ1=0x07
  9.     MLX90614_TOBJ2=0x08
  10.  
  11.     MLX90614_TOMAX=0x20
  12.     MLX90614_TOMIN=0x21
  13.     MLX90614_PWMCTRL=0x22
  14.     MLX90614_TARANGE=0x23
  15.     MLX90614_EMISS=0x24
  16.     MLX90614_CONFIG=0x25
  17.     MLX90614_ADDR=0x0E
  18.     MLX90614_ID1=0x3C
  19.     MLX90614_ID2=0x3D
  20.     MLX90614_ID3=0x3E
  21.     MLX90614_ID4=0x3F
  22.  
  23.     def __init__(self, address=0x5a, bus_num=1):
  24.         self.bus_num = bus_num
  25.         self.address = address
  26.         self.bus = smbus.SMBus(bus=bus_num)
  27.  
  28.     def read_reg(self, reg_addr):
  29.         return self.bus.read_word_data(self.address, reg_addr)
  30.  
  31.     def data_to_temp(self, data):
  32.         temp = (data*0.02) - 273.15
  33.         return temp
  34.  
  35.     #def get_amb_temp(self):
  36.     #    data = self.read_reg(self.MLX90614_TA)
  37.     #    return self.data_to_temp(data)
  38.  
  39.     def get_obj_temp(self):
  40.         data = self.read_reg(self.MLX90614_TOBJ1)
  41.         return self.data_to_temp(data)
  42.  
  43. if __name__ == "__main__":
  44.     sensor = MLX90614()
  45.     #print(sensor.get_amb_temp())
  46.     print(sensor.get_obj_temp())


http://domoticx.com/raspberry-pi-thermometer-ir-contactloos-mlx90614/

8. Test Run
  1. python Tmp_Sensor.py

9. จะได้ค่าอุณหภูมิ ของความร้อนที่ยิง
root@pi200:/home/pi# python Temp_Sensor.py
32.25
root@pi200:/home/pi# python Temp_Sensor.py
31.69
root@pi200:/home/pi#


การต่อตัววัดการสั่น 801S

1. การต่อ ตัววัดการสั่น 801S ตัว PI รับค่าได้เฉพาะ Digital ถ้าต้องการให้ได้รับค่า Analog ตัวใช้ตัวแปลงค่า
MCP3008
https://www.arduinoall.com/product/984/mcp3008-8-channel-10-bit-adc-with-spi-interface
การต่อเข้า PI
ไฟ 3.3V
GND
Aout
ต่อ PI และ MCP3008

2. เขียน Code
  1. nano Vibration_Sensor.py  

Code
  1. # Simple example of reading the MCP3008 analog input channels and printing
  2. # them all out.
  3. # Author: Tony DiCola
  4. # License: Public Domain
  5. import time
  6. import datetime
  7.  
  8. # Import SPI library (for hardware SPI) and MCP3008 library.
  9. import Adafruit_GPIO.SPI as SPI
  10. import Adafruit_MCP3008
  11.  
  12. # Software SPI configuration:
  13. ## GPIO ##
  14. CLK  = 11
  15. MISO = 9
  16. MOSI = 10
  17. CS   = 8
  18.  
  19. ## PIN ##
  20. #CLK  = 23
  21. #MISO = 21
  22. #MOSI = 19
  23. #CS   = 24
  24.  
  25. mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI)
  26. print(datetime.datetime.now())
  27. # Hardware SPI configuration:
  28. # SPI_PORT   = 0
  29. # SPI_DEVICE = 0
  30. # mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))
  31.  
  32. print('Reading MCP3008 values, press Ctrl-C to quit...')
  33. # Print nice channel column headers.
  34. #print('| {0:>4} | {1:>4} | {2:>4} | {3:>4} | {4:>4} | {5:>4} | {6:>4} | {7:>4} |'.format(*range(8)))
  35. #print('{6:>4}|{7:>4}'.format(*range(8)))
  36. print('{7:>4}'.format(*range(8)))
  37. print('-' * 57)
  38. # Main program loop.
  39. while True:
  40.     # Read all the ADC channel values in a list.
  41.     values = [0]*8
  42.     for i in range(8):
  43.         # The read_adc function will get the value of the specified channel (0-7).
  44.         values[i] = mcp.read_adc(i)
  45.     # Print the ADC values.
  46.     print('{7:>4}'.format(*values))
  47.     #print('{6:>4}|{7:>4}'.format(*values))
  48.     #print('| {0:>4} | {1:>4} | {2:>4} | {3:>4} | {4:>4} | {5:>4} | {6:>4} | {7:>4} |'.format(*values))
  49.     # Pause for half a second.
  50.     time.sleep(1)


***สำคัญ SPI ใช้ GPIO ไม่ได้ใช่ PIN *** จะไม่ได้ค่า
https://learn.adafruit.com/raspberry-pi-analog-to-digital-converters/mcp3008
3. Test Run คำสั่ง จะได้ค่า ตัวเลข
python Vibration_Sensor.py
2020-05-21 18:37:18.288545
Reading MCP3008 values, press Ctrl-C to quit...
7
---------------------------------------------------------
0
1023
31
896
1023

////##########################////
Code สำเร็จที่ใช้ Run ทั้งวัดการสั่นและความร้อน
  1. # Simple example of reading the MCP3008 analog input channels and printing
  2. # them all out.
  3. # Author: Tony DiCola
  4. # License: Public Domain
  5. # Vibration 801S
  6. import time
  7. import datetime
  8. # Import SPI library (for hardware SPI) and MCP3008 library.
  9. import Adafruit_GPIO.SPI as SPI
  10. import Adafruit_MCP3008
  11.  
  12. # Tmp Sensor
  13. import smbus
  14.  
  15. # Vibration 801S
  16. # Software SPI configuration:
  17. ## GPIO ##
  18. CLK  = 11
  19. MISO = 9
  20. MOSI = 10
  21. CS   = 8
  22.  
  23. ## PIN ##
  24. #CLK  = 23
  25. #MISO = 21
  26. #MOSI = 19
  27. #CS   = 24
  28.  
  29. mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI)
  30. print(datetime.datetime.now())
  31. # Hardware SPI configuration:
  32. # SPI_PORT   = 0
  33. # SPI_DEVICE = 0
  34. # mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))
  35. #print('Reading MCP3008 values, press Ctrl-C to quit...')
  36. # Print nice channel column headers.
  37. #print('| {0:>4} | {1:>4} | {2:>4} | {3:>4} | {4:>4} | {5:>4} | {6:>4} | {7:>4} |'.format(*range(8)))
  38. #print('{6:>4}|{7:>4}'.format(*range(8)))
  39. #print('{7:>4}'.format(*range(8)))
  40. #print('-' * 57)
  41.  
  42. # Tmp Sensor Use
  43. class MLX90614():
  44.  
  45.     MLX90614_RAWIR1=0x04
  46.     MLX90614_RAWIR2=0x05
  47.     MLX90614_TA=0x06
  48.     MLX90614_TOBJ1=0x07
  49.     MLX90614_TOBJ2=0x08
  50.  
  51.     MLX90614_TOMAX=0x20
  52.     MLX90614_TOMIN=0x21
  53.     MLX90614_PWMCTRL=0x22
  54.     MLX90614_TARANGE=0x23
  55.     MLX90614_EMISS=0x24
  56.     MLX90614_CONFIG=0x25
  57.     MLX90614_ADDR=0x0E
  58.     MLX90614_ID1=0x3C
  59.     MLX90614_ID2=0x3D
  60.     MLX90614_ID3=0x3E
  61.     MLX90614_ID4=0x3F
  62.  
  63.     def __init__(self, address=0x5a, bus_num=1):
  64.         self.bus_num = bus_num
  65.         self.address = address
  66.         self.bus = smbus.SMBus(bus=bus_num)
  67.  
  68.     def read_reg(self, reg_addr):
  69.         return self.bus.read_word_data(self.address, reg_addr)
  70.  
  71.     def data_to_temp(self, data):
  72.         temp = (data*0.02) - 273.15
  73.         return temp
  74.  
  75.     #def get_amb_temp(self):
  76.     #    data = self.read_reg(self.MLX90614_TA)
  77.     #    return self.data_to_temp(data)
  78.  
  79.     def get_obj_temp(self):
  80.         data = self.read_reg(self.MLX90614_TOBJ1)
  81.         return self.data_to_temp(data)
  82.  
  83. #if __name__ == "__main__":
  84. #    sensor = MLX90614()
  85. #    #print(sensor.get_amb_temp())
  86. #    print(sensor.get_obj_temp())
  87.  
  88. # Main program loop.
  89. while True:
  90.     # Read all the ADC channel values in a list.
  91.     values = [0]*8
  92.     for i in range(8):
  93.         # The read_adc function will get the value of the specified channel (0-7).
  94.         values[i] = mcp.read_adc(i)
  95.  
  96.         sensor = MLX90614()
  97.         #print(sensor.get_amb_temp())
  98.         #print(sensor.get_obj_temp())
  99.  
  100.     # Print the ADC values.
  101.     print('{7:>4}'.format(*values))
  102.     print(sensor.get_obj_temp())
  103.     #print('{6:>4}|{7:>4}'.format(*values))
  104.     #print('| {0:>4} | {1:>4} | {2:>4} | {3:>4} | {4:>4} | {5:>4} | {6:>4} | {7:>4} |'.format(*values))
  105.     # Pause for half a second.
  106.     time.sleep(10)

นำข้อมูลเข้า Database
https://pynative.com/install-mysql-connector-python/

1. ติดตั้ง mysql-connector
  1. pip install mysql-connector-python

2. Code
  1. nano DB.py

  1. import mysql.connector
  2. from mysql.connector import Error
  3. from mysql.connector import errorcode
  4.  
  5. try:
  6.     connection = mysql.connector.connect(host='192.168.2.101',
  7.                                          database='sci_pi',
  8.                                          user='XXX',
  9.                                          password='XXX')
  10.     #INSERT INTO `Data` (`ID`, `Vibration`, `Tmp`, `TransDate`) VALUES (NULL, '50', '60', '2020-05-22');
  11.     mySql_insert_query = """INSERT INTO Data (ID, Vibration, Tmp, TransDate, FromPI)
  12.                           VALUES
  13.                           (NULL, 50, 60, '2020-05-22','192.168.0.164') """
  14.  
  15.     cursor = connection.cursor()
  16.     cursor.execute(mySql_insert_query)
  17.     connection.commit()
  18.     #print(cursor.rowcount, "Record inserted successfully into Laptop table")
  19.     cursor.close()
  20.  
  21. #except mysql.connector.Error as error:
  22. #    print("Failed to insert record into Laptop table {}".format(error))
  23.  
  24. finally:
  25.     if (connection.is_connected()):
  26.         connection.close()
  27.         #print("MySQL connection is closed")
  28.  


3. Test Run
  1. python DB.py


ดูว่าข้อมูลเข้า Database ที่สร้างไว้หรือไม่
ส่งเมล์ Zimbra แจ้งเตือนผู้เกี่ยวข้อง
เมื่อเครื่องสั่น มากหรือ มอเตอร์ร้อนมาก

1. ติดตั้ง
  1. apt-get install ssmtp


2. Code
  1. nano Mail.py

  1. import smtplib
  2.  
  3. server=smtplib.SMTP('192.168.2.102',25)
  4. server.starttls()
  5. server.login("suwit_j@sci.com","XXX")
  6.  
  7. message = """From: PI <suwit_j@sci.com>
  8. Subject: Wraning From PI Check Machine.
  9.  
  10. Wrannnig From PI Check machine.
  11. Please Chack.
  12. http://intranet.sci.com/sci/PR/rp_start.php
  13. """
  14.  
  15. server.sendmail("suwit_j@sci.com","suwit_j@sci.com", message)
  16.  
  17. server.quit()


3. ทดสอบ Run คำสั่ง
  1. python Mail.py

https://iotdesignpro.com/projects/sending-smtp-email-using-raspberry-pi

Linux Mint 19.3 Go Back To Old Kernel

Linux Mint 19.3 Go Back To Old Kernel And Boot to select grub menu.
1. แก้ grub
nano /etc/default/grub
เดิม
  1. GRUB_TIMEOUT_STYLE=hidden
  2. GRUB_TIMEOUT=0

ใหม่
  1. GRUB_TIMEOUT_STYLE=menu
  2. GRUB_TIMEOUT=4

เลข 4 คือเวลาต้องการให้หน่วงกี่วินาที

2. reboot แล้วเลือก grub ที่ต้องการ
3. ลบ grub ที่ปัญหาออก ใน Update Manager --> View --> Linux Kernel


https://forums.linuxmint.com/viewtopic.php?t=248892

วันศุกร์ที่ 8 พฤษภาคม พ.ศ. 2563

Ubiquiti loco m5 ตั้งค่า AP และ Station

Ubiquiti loco m5 ตั้งค่า AP และ Station
รูป AP to Station
การต่อสาย

ตั้งค่า IP และ User : Password Default
IP : 192.168.1.20
User : ubnt
Pass : ubnt
Set IP เครื่องไปวง 1 เพื่อตั้งค่าเริ่มต้น

ตั้งค่า AP
1. Tab Mani จดค่า Mac ไว้สำหรับ Connect

2. Tab Wireless ตั้งค่า Wireless Mode

3. Tab Network ตั้งค่า

4. Tab Advanced
Distance : ปรับระยะทางให้เหมาะสมกับการใช้งาน กี่กิโลระยะที่ติดตั้งกับ Station

5. Tab System ตั้งค่ารหัส Admin ใหม่

ตั้งค่า Station
1. Tab Network ตั้งค่า

2. Tab Advance ตั้งค่า

3. Tab Wireless ตั้งค่า Wireless Mode

แล้ว Select AP เพื่อให้ Connect ระหว่าง AP และ Station

4. Tab System ตั้งค่ารหัส Admin ใหม่ และชื่อ


นำ Notebook มาต่อ Port Lan ที่ POE ของ Station
Set IP แล้วลอง Ping หา AP ดู

http://sys2u.com/xpert/viewtopic.php?f=37&t=3277

onoff 4CH : Sonoff4CH flash program Tasmota-8.2.0

Sonoff 4CH : Sonoff4CH flash program Tasmota-8.2.0 สำหรับรดน้ำที่สวน
1. Program Tasmota download
https://github.com/arendst/Tasmota/releases/tag/v8.2.0

2. Flash ผ่าน Program Atom ที่ลง platformio ด้วย
https://intranet.sci.com/blog.php?u=281&b=1598

3. เวลา Flash ก่อน เสียบต้องกดปุ่ม IO0 แช่ไว้ก่อนเสียถึงจะ Flash ผ่าน
การต่อสาย
https://intranet.sci.com/blog.php?u=281&b=1685
รูป


4. แตกไฟล์ที่โหลดได้จากข้อ 1 แล้ว Add Project เข้า Atom
แก้ platformio.ini
เอา ; ออก จะเขียนใส่อุปกรณ์ไหนให้เลือกให้ตรง
env_default = tasmota


ใส่ port ที่จะ Upload เดิมเป็น COM5
upload_port = /dev/ttyUSB0


**** สำคัญบางครั้ง Flash แล้ว Config Wifi ไม่เปลี่ยนจำ IP เดิม WIFI เดิม ต้องแก้ที่ข้อ 6 ****
5. แก้ เข้าไปที่ sonoff --> my_user_config.h

// If not selected the default will be SONOFF_BASIC
#define MODULE SONOFF_4CH // [Module] Select default model from tasmota_template.h

// -- Wifi ----------------------------------------
#define WIFI_IP_ADDRESS "192.168.2.7" // [IpAddress1] Set to 0.0.0.0 for using DHCP or enter a static IP address
#define WIFI_GATEWAY "192.168.2.2" // [IpAddress2] If not using DHCP set Gateway IP address
#define WIFI_SUBNETMASK "255.255.255.0" // [IpAddress3] If not using DHCP set Network mask
#define WIFI_DNS "192.168.0.253" // [IpAddress4] If not using DHCP set DNS IP address (might be equal to WIFI_GATEWAY)

#define STA_SSID1 "SCI_GARDEN" // [Ssid1] Wifi SSID
#define STA_PASS1 "PASSWORD" // [Password1] Wifi password

#define NTP_SERVER1 "192.168.0.2"


6. ถ้ามีปัญหาเรื่อง Wifi ไม่จับกับ Wifi ตัวใหม่ต้องแก้แบบนี้
6.1. กดปุ่ม IO0 4 ครั้งติด ๆ กัน ตัวเครื่อง Sonoff จะปล่อย Hostsport Wifi
6.2. นำ Note book มาต่อ wifi เข้า IP 192.168.4.1 จะพบหน้าตั้งค่า Wifi หรือกด Scan for wifi network เพื่อหา wifi ที่จะต่อแล้วใส่รหัส
จึงจะ connect ได้ซึ่ง Flash บังคับไปในไฟล์ Rom ไม่มีผล

7. ตั้งค่า MQTT เพิ่มเติม จะได้ไม่ต้องแก้ Home Assistant ใหม่ 2 ที่
7.1. MQTT

7.2. รหัส Login Sonoff และชื่อที่เรียกใช้ เพื่อให้ HA เดิมสั่งงานได้ โดยไม่ต้องแก้ที่ HA

Next Cloud : Next Cloud Update แล้วเปิดไฟลื PDF ไม่แสดงข้อมูลใน PDF

Next Cloud : Next Cloud Update แล้วเปิดไฟลื PDF ไม่แสดงข้อมูลใน PDF ต้อง Download แล้วมาเปิดข้างนอกถึงจะดูข้อมูลได้
วิธีแก้
แก้ที่ apache
  1. nano /etc/apache2/conf-enabled/ssl-params.conf

ใส่ # หน้าแถว
#Header always set X-Frame-Options DENY

แล้ว Restart apache

https://help.nextcloud.com/t/new-nextcloud-15-installation-pdf-viewing-does-not-work/43767

Code PHPBB3 Post Reply Topic.

Code PHPBB3 Post Reply Topic.
ถ้า Submit Post Action ไปไฟล์อื่น ต้องใส่ enctype="multipart/form-data" ด้วย
แต่กรณีนี้จะส่งผ่าน Java ไม่ต้อง Reload หน้า Web Code ดังนี้
HTML
  1. <div id="dialog-edit-upload" title="Upload รายงานความคืบหน้า Project หรือ PMC" style="display:none;">
  2.     <form method="POST" enctype="multipart/form-data" id="myform">
  3.         <div>Upload pdf ไฟล์ เพื่อแนบรายงานความคืบหน้าแต่ละเดือน</div>
  4.         <table width='100%' border='0'>
  5.         <tr>
  6.             <td nowrap>ประจำเดือน : </td>
  7.             <td><input name='P_Month' id='P_Month_field' size='3' readonly="readonly"><input type="hidden" name='PHPBBID' id='PHPBBID_field'></td>
  8.         </tr>      
  9.         <tr>
  10.             <td nowrap>Upload PDF ไฟล์ : </td>
  11.             <td align='left' class='default'><input type="file" name="P_FILE_MONTH" id="P_FILE_MONTH_ID"></td>
  12.         </tr>                                                  
  13.         </table>   
  14.     </form>
  15. </div>


Java
  1. function editUpload(ACTION){
  2.     var str = ACTION;
  3.     var ActionArray = str.split(',');
  4.    
  5.     $('#P_Month_field').val('');
  6.     $('#P_FILE_MONTH_ID').val('');
  7.     $('#PHPBBID_field').val('');
  8.    
  9.     $('#PHPBBID_field').val(ActionArray[0]);
  10.     $('#P_Month_field').val(ActionArray[1]);
  11.    
  12.     //var target = "project_upload.php?ACTION=" + ActionArray[0] + ',' + ActionArray[1];
  13.     var target = "project_upload.php";
  14.     $( "#dialog-edit-upload" ).dialog({
  15.         resizable: false,
  16.         width:420,
  17.         height:250,
  18.         modal: true,   
  19.         buttons: {
  20.             "Yes": function() {            
  21.             //$('#PHPBBID_field').val() ;
  22.             // Get form
  23.             var form = $('#myform')[0];
  24.      
  25.            // Create an FormData object
  26.             var data = new FormData(form);
  27.      
  28.            // If you want to add an extra field for the FormData
  29.            //data.append("CustomField", "This is some extra data, testing");
  30.      
  31.            // disabled the submit button
  32.             //$("#btnSubmit").prop("disabled", true);
  33.      
  34.             $.ajax({
  35.                 type: "POST",
  36.                 enctype: 'multipart/form-data',
  37.                 url: target,
  38.                 data: data,
  39.                 processData: false,
  40.                 contentType: false,
  41.                 cache: false,
  42.                 timeout: 800000,
  43.                     success: function(ret) {
  44.                         //alert("บันทึกข้อมูลสำเร็จ !");
  45.                         if(ret == 'OK'){
  46.                             alert("บันทึกข้อมูลสำเร็จ ");                      
  47.                         } else {
  48.                             alert("บันทึกข้อมูลไม่สำเร็จ กรุณาตรวจสอบ ! ");   
  49.                         }
  50.                         $('#P_Month_field').val('');
  51.                         $('#P_FILE_MONTH_ID').val('');
  52.                         $('#PHPBBID_field').val('');
  53.                     },
  54.                 });
  55.                 $( this ).dialog( "close" );
  56.           },
  57.             Cancel: function() {
  58.                 $( this ).dialog( "close" );
  59.             }
  60.         }   
  61.     });
  62. }


PHP
  1. if(!empty($PHPBBID)){      
  2.         include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
  3.         include($phpbb_root_path . 'includes/message_parser.' . $phpEx);
  4.                
  5.         $message_parser = new parse_message();
  6.         $message_parser->parse_attachments('P_FILE_MONTH', 'post', 139, true, false, false);
  7.         //$message_parser->parse_attachments('P_FILE_MONTH', 'post', $NumberForum, true, false, false);
  8.        
  9.         //function upload_attachment($form_name, $forum_id, $local = false, $local_storage = '', $is_message = false, $local_filedata = false);
  10.         //$upload_parser = new parse_upload();
  11.         //$upload_parser -> upload_attachment('P_FILE_MONTH', 18429, $local = false, $local_storage = '', $is_message = false, $local_filedata = false);
  12.        
  13.         $my_subject = "รายงานความคืบหน้าเดือน $P_Month";
  14.         $my_text = "รายงานความคืบหน้าเดือน $P_Month";
  15.         $poll = $uid = $bitfield = $options = '';
  16.         generate_text_for_storage($my_subject, $uid, $bitfield, $options, false, false, false);
  17.         generate_text_for_storage($my_text, $uid, $bitfield, $options, true, true, true);      
  18.        
  19.         $data = array(
  20.             'forum_id'      => 139,
  21.             'topic_id'      => $PHPBBID,
  22.             //'topic_id'      => 18429,
  23.  
  24.             'icon_id'       => false,
  25.  
  26.             'enable_bbcode'     => true,
  27.             'enable_smilies'    => true,
  28.             'enable_urls'       => true,
  29.             'enable_sig'        => true,
  30.  
  31.             'message'       => $my_text,
  32.             'message_md5'   => md5($my_text),
  33.                        
  34.             'bbcode_bitfield'   => $bitfield,
  35.             'bbcode_uid'        => $uid,
  36.  
  37.             'post_edit_locked'  => 0,
  38.             'topic_title'       => $my_subject,
  39.             'notify_set'        => false,
  40.             'notify'            => false,
  41.             'post_time'         => 0,
  42.             'forum_name'        => '',
  43.             'enable_indexing'   => true,
  44.            
  45.             'attachment_data' => $message_parser->attachment_data,
  46.             'filename_data' => $message_parser->filename_data
  47.                
  48.         );
  49.        
  50.         submit_post('reply', $my_subject, '', POST_NORMAL, $poll, $data);      
  51.        
  52.         echo "OK";
  53.     } else {
  54.         echo "ERROR";   
  55.     }