ขนาด Battery Li-Ion

หนา กว้าง ยาว

751525 7.5 15.0 25
702040 7.2 21.0 42.5
753048 7.7 3.1 50.5
723272 7.4 33.0 74.5
704060 7.4 41 62.5
803035 8.2 31.0 37.5

Windows 11 Home Single to Pro

dism /Online /Get-TargetEditions
sc config LicenseManager start= auto & net start LicenseManager
sc config wuauserv start= auto & net start wuauserv
changepk.exe /productkey VK7JG-NPHTM-C97JM-9MPGT-3V66T

Raspberry Pi Zero W + PCM5102 DAC + Inmp441 Google Assistant 2024

sudo nano /boot/config.txt

dtparam=i2s=on

Disable audio (snd_bcm2835) ที่ default onboard ถ้ามี

#dtparam=audio=on

dtoverlay=hifiberry-dac เอาไว้ท้ายสุดไฟล์

sudo nano /etc/asound.conf

pcm.!default {
type hw card 0
}
ctl.!default {
type hw card 0
}

sudo reboot

2x TP-Link AX53 Setup EasyMESH

AX53-A Setup Main Router ต้องต่ออินเตอร์เน็ต ที่ช่องสีฟ้าให้ได้ก่อน ตั้งค่า WIFI SSID PASSWORD สมัครใช้ TP-Link ID ไปที่ Advanced เลือก EasyMesh ดู Current Moode ว่าเป็น Main Router หรือไม่

AX43-B เข้าไปไม่ต้องตั้งอะไรมาก Time Zone ส่วน SSID PASSWORD ใช้ Default เดิมๆ

ไปที่ส่วน Advanced เลือก EasyMesh ซึ่ง Current Moode เป็น Main Router กด Change Mode เลือก Cกด OK รอจนตั้งค่าเสร็จ ปิด Router

กลับมาที่ AX53-A กด ADD SATELLITE DEVICES เลือก TP-Link Router กด Next จากนั้น ระบบจะค้นหาตัว Satellite Router ให้ไปที่ AX53-B กดปุ่ม WPS 2 วินาที รอสักครู่บนจอ AX53-A จะแสดง Wifi SSID ของ AX53-B

ESP32 Data to Google Sheet 2024

สร้าง Google sheet ขึ้น คัดลอก Google Sheet ID

https://docs.google.com/spreadsheets/d/XXXXX Google Sheet ID XXXXX/edit#gid=0

เก็บไว้ 

เลือก ส่วนขยาย (Extension)

Apps Script

จะมีไฟล์ชื่อ รหัส.gs หรือ code.gs คัดลอกไฟล์ต่อไปนี้ลงไป

 

				
					function doGet(e) { 
Logger.log( JSON.stringify(e) );
var result = 'Ok';
if (e.parameter == 'undefined') {
result = 'No Parameters';
}
else {
var sheet_id = 'Google Sheet id'; // Spreadsheet ID
var sheet = SpreadsheetApp.openById(sheet_id).getActiveSheet();
var newRow = sheet.getLastRow() + 1; 
var rowData = [];
var Curr_Date = new Date();
rowData[0] = Curr_Date; // Date in column A
var Curr_Time = Utilities.formatDate(Curr_Date, "Asia/Bangkok", 'HH:mm:ss');
rowData[1] = Curr_Time; // Time in column B
for (var param in e.parameter) {
Logger.log('In for loop, param=' + param);
var value = stripQuotes(e.parameter[param]);
Logger.log(param + ':' + e.parameter[param]);
switch (param) {

case 'press1':
rowData[2] = value; 
result = 'OK'; 
break;

case 'temp1':
rowData[3] = value; 
result += ', OK'; 
break; 

case 'deep1':
rowData[4] = value; 
result += ', OK'; 
break;

case 'alti1':
rowData[5] = value; 
result += ', OK'; 
break;  

case 'press2':
rowData[6] = value; 
result = 'OK'; 
break;

case 'temp2':
rowData[7] = value; 
result += ', OK'; 
break; 

case 'deep2':
rowData[8] = value; 
result += ', OK'; 
break;

case 'alti2':
rowData[9] = value; 
result += ', OK'; 
break;  

default:
result = "unsupported parameter";
}
}
Logger.log(JSON.stringify(rowData));
var newRange = sheet.getRange(newRow, 1, 1, rowData.length);
newRange.setValues([rowData]);
}
return ContentService.createTextOutput(result);
}
function stripQuotes( value ) {
return value.replace(/^["']|['"]$/g, "");
}
				
			

เอา Google Sheet ID ใส่ในช่อง

โดยฟังก์ชั่น doGet(e)

จะเพิ่มแถวเข้าไปโดย คอลัมน์แรก

โดยส่งข้อมูลผ่าน rowData []

rowData[0] = วันที่ 

rowData[1] = เวลา 

rowData[2] = pres1 ความดัน MS5837 ตัวที่ 1

rowData[3] = temp1 อุณหภูมิ1

rowData[4] = deep1 ความลึก1

rowData[5] = alti1 ความสูงระดับน้ำทะเล1

rowData[6] = pres2 ความดัน MS5837 ตัวที่ 2

rowData[7] = temp2 อุณหภูมิ2

rowData[8] = deep2 ความลึก2

rowData[9] = alti2 ความสูงระดับน้ำทะเล2

Trick หากทำการแก้ไข code ใดๆ หลังจาก save ควรจะ สร้าง Script ID ใหม่

การทดลองว่า Script ทำงานหรือไม่ ให้ลองวาง code ใน browser

 

				
					https://script.google.com/macros/s/XXX Google Script ID XXXX/exec?press1=1000.2&temp1=30&deep1=0.08&alti1=50.2&press2=1000.2&temp2=30&deep2=0.08&alti2=50.3
				
			
ถ้าส่งสำเร็จไม่มีปัญหา Browser จะขึ้น OK, OK, OK, OK, OK

Windows 10 Home Single Language Change Display between English-US and Lang Thai

test on Windows 10 22H2

ENGLISH to THAI

mkdir %TEMP%\LP
if exist “%SystemRoot%\SysWOW64\” (set “Arch=x64”) else (set “Arch=x86”)
for /f “tokens=1-3” %a in (‘reg query “HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion” /v ReleaseID’) do @set “Version=%~c”
curl -o %TEMP%\LP\th-th.cab “https://filedn.com/lOX1R8Sv7vhpEG9Q77kMbn0/Windows10/language-packs/%Version%/%Arch%/th-th.cab”
dism /online /Add-Package /PackagePath:%TEMP%\LP\th-th.cab
reg add HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language /v InstallLanguage /t REG_SZ /d 041E /f
reg add HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language /v Default /t REG_SZ /d 1054 /f
rmdir /s /q %TEMP%\LP
powershell.exe Set-WinUILanguageOverride -Language th-th
powershell.exe Set-WinUserLanguageList th-th -Force
dism /online /Add-Capability /CapabilityName:Language.Basic~~~th-th~0.0.1.0
cd

THAI to ENGLISH US

Node-RED my OLD ARMv7l Raspberry PI

sudo apt update
sudo apt upgrade
uname -m เช็คว่า CPU เป็น ARMv7 ขึ้นไปหรือไม่

ติดตั้ง NodeJS และติดตั้ง Node-RED
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

ตอบ Y

ตอนนี้จะเข้าได้ทาง http://x.x.x.x:1880
ตั้ง authen
sudo nano /home/XXX/.node-red/settings.js
เอา comment ออก
adminAuth: {
type: “credentials”,
users: [{
username: “admin”,
password: “$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.”,
permissions: “*”
}]
},
แก้ admin ตามที่ชอบ

sudo npm install -g –unsafe-perm node-red-admin
สร้าง hash password
node-red-admin hash-pw
ใส่ password จะได้ hash ไปใส่ใน password: ไฟล์ settings.js

sudo node-red-stop หรือ sudo systemctl stop nodered หยุดการทำงาน Node-RED
sudo node-red-start หรือ sudo systemctl start nodered เริ่มการทำงาน Node-RED อีกครั้ง
sudo node-red-log ดู log
sudo sudo systemctl enable nodered.service to autostart Node-RED at every boot
sudo systemctl disable nodered.service to disable autostart on boot

Termsrv.dll 10.0.22621.2070

[Main]
Updated=2023-07-26
Updated=2023-07-27
LogFile=\rdpwrap.txt
SLPolicyHookNT60=1
SLPolicyHookNT61=1
@@ -7177,6 +7177,20 @@ SLInitHook.x64=1
SLInitOffset.x64=28BA0
SLInitFunc.x64=New_CSLQuery_Initialize

[10.0.22621.2070]
LocalOnlyPatch.x64=1
LocalOnlyOffset.x64=9BBA1
LocalOnlyCode.x64=jmpshort
SingleUserPatch.x64=1
SingleUserOffset.x64=1CC29
SingleUserCode.x64=Zero
DefPolicyPatch.x64=1
DefPolicyOffset.x64=1C045
DefPolicyCode.x64=CDefPolicy_Query_eax_rcx
SLInitHook.x64=1
SLInitOffset.x64=28BA0
SLInitFunc.x64=New_CSLQuery_Initialize

[10.0.22621.2070-SLInit]
bInitialized.x64 =128F4C
bServerSku.x64 =128F50
lMaxUserSessions.x64 =128F54
bAppServerAllowed.x64 =128F5C
bRemoteConnAllowed.x64=128F64
bMultimonAllowed.x64 =128F68
ulMaxDebugSessions.x64=128F70
bFUSEnabled.x64 =128F74