สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
Nest thermostat ติดตามอุณหภูมิ ความชื้น และการใช้เตาเผา/ไฟฟ้ากระแสสลับ และผู้ใช้จะดูข้อมูลย้อนหลังได้เพียง 10 วันเท่านั้น ฉันต้องการรวบรวมข้อมูลในอดีต (>10 วัน) และพบสคริปต์ของ Google สเปรดชีตที่ส่ง Ping ซ้อนทุก ๆ เวลาที่ตั้งไว้ และรับข้อมูลสภาพอากาศในท้องถิ่นจาก openweathermap.org และบันทึกในสเปรดชีต
ทุกอย่างเป็นไปด้วยดีเป็นเวลาหนึ่งปี และสคริปต์ก็หยุดรวบรวมข้อมูลในทันที หลังจากค้นหาโดย Google ฉันรู้ว่าหนึ่งแถวทุกๆ 5 นาทีสำหรับ Google spreadhseet หมายถึงการกดปุ่มถึงขีด จำกัด สูงสุดของเซลล์ที่ Google สเปรดชีตสามารถรองรับได้ ฉันอัปเดตสคริปต์ดั้งเดิมให้ยังคง ping Nest ทุก 5 นาที แต่รวบรวมข้อมูลใน 1 แถวต่อวัน สคริปต์ตรวจสอบแถวสุดท้ายและหากเป็นวันเดียวกัน สคริปต์จะผนวกข้อมูลในแถวเดียวกันแทนที่จะเพิ่มแถวใหม่
เครดิตสคริปต์ต้นฉบับ ฉันเพิ่งทำการแก้ไขเล็กน้อยเพื่อให้เหมาะกับความต้องการของฉัน
// งานของ michael-pesce: https://gist.github.com/michael-pesce/a4ba55d4fc4…// งานของ BEEZLY:
คำสำคัญ: ประวัติ Nest Thermostat, Nest Heat, Nest Temperature History, Nest Thermostat Hack, Nest Thermostat Tips, ประวัติ Nest Energy, Nest Daily Use, Nest Daily Usage, ดาวน์โหลดข้อมูล Nest Thermostat
ขั้นตอนที่ 1: สร้าง Google ชีตใหม่ (บันทึกเป็นในสเปรดชีตที่แชร์ของฉัน)
เริ่มต้นด้วย Google แผ่นงานที่ใช้ร่วมกันของฉันที่ลิงก์ด้านล่าง (เปิดไฟล์นั้นแล้วคลิกไฟล์ จากนั้น "ทำสำเนา" และบันทึกใน Google ไดรฟ์ของคุณ)
PS: อย่าขอให้ฉันอนุญาตให้คุณแก้ไขไฟล์นี้ ก่อนที่คุณจะทำการเปลี่ยนแปลงใดๆ ซึ่งคุณจะไม่สามารถทำการเปลี่ยนแปลงได้ เนื่องจากฉันแชร์สิ่งนี้เป็นสเปรดชีตแบบอ่านอย่างเดียว ให้ทำการ "ทำสำเนา" ใน Google ไดรฟ์ของคุณเอง แล้วดำเนินการแก้ไขต่อไป
docs.google.com/spreadsheets/d/1zTHUfiltWomhPYmfD3TYRRoJZsgcjrQ_A2xHSTK5_dE/edit?usp=sharing
สำหรับผู้ที่มีปัญหาเกี่ยวกับการให้สิทธิ์: ลองใช้สคริปต์ในไฟล์ต่อไปนี้ มีฟังก์ชันเพิ่มเติมที่เกี่ยวข้องกับโปรโตคอลการอนุญาต 2.0 ใหม่ของ Nest ฉันไม่ได้ลอง ดังนั้นหากคุณพบปัญหาหรือปัญหาใด ๆ โปรดโพสต์ในส่วนความคิดเห็น ให้เครดิตกับ mcr2582
www.dropbox.com/s/8rbtg7pb0xl9n9x/nest%20t…
รูปแบบอื่นของสคริปต์โดย Coder56: รายละเอียดเพิ่มเติมในส่วนความคิดเห็น ฉันไม่ได้ลอง แต่สคริปต์ได้รับการจัดระเบียบเป็นอย่างดีและดูเหมือนว่าจะทำงานได้ดีสำหรับผู้ใช้หลายคน
docs.google.com/spreadsheets/d/15bTn9_Cv9I…
ขั้นตอนที่ 2: คัดลอกสคริปต์
ข้ามขั้นตอนนี้หากคุณได้บันทึกสำเนาไว้ใน Google ชีตที่แชร์ของฉัน
- บนแถบเมนู คลิก เครื่องมือ -> ตัวแก้ไขสคริปต์… เพื่อเปิด ตัวแก้ไขสคริปต์ (หน้าต่างใหม่)
- ใน Script Editor ให้ลบสคริปต์/ไฟล์เริ่มต้นทั้งหมด และสร้างใหม่ (ฉันเรียกมันว่า "NestScript.gs")
- ตัดและวางข้อความทั้งหมดนี้จากไฟล์ที่แนบมาใน NestScript.gs จากนั้นบันทึกสคริปต์ (สำหรับขั้นตอนนี้ โปรดใช้สคริปต์จาก Google ชีตที่ฉันแชร์ในขั้นตอนที่ 1 หากคุณบันทึกสำเนาในไฟล์นั้น คุณ ควรมีสคริปต์อยู่แล้ว หากคุณไม่ได้เปิดไฟล์นั้นและไปที่ส่วนสคริปต์แล้วคัดลอกข้อความที่ผ่านมา ฉันลบไฟล์ข้อความสคริปต์ที่แนบมากับขั้นตอนนี้เนื่องจากไม่ทันสมัยและอาจสร้างความสับสน.)
ขั้นตอนที่ 3: ปรับใช้เป็นเว็บแอป
- บนแถบเมนู คลิก เครื่องมือ -> ตัวแก้ไขสคริปต์… เพื่อเปิด ตัวแก้ไขสคริปต์ (หน้าต่างใหม่)
- บนแถบเมนู ให้คลิก เผยแพร่ -> ปรับใช้เป็น Web App
- เลือก "เรียกใช้แอปในฐานะฉัน"
- เลือกว่าใครมีสิทธิ์เข้าถึงแอป: "ใครก็ได้ แม้กระทั่งไม่ระบุชื่อ"
-
คัดลอก/จดลิงก์ไปยังเว็บแอปใหม่ของคุณในตอนนี้ และจะถูกเพิ่มไปยังรูทีน runDataCollection ด้านล่าง (โค้ดแรก) ในขั้นตอนถัดไป
ขั้นตอนที่ 4: ทริกเกอร์
นี่คือที่ที่คุณกำหนดความถี่ในการรวบรวมข้อมูล
- บนแถบเมนู คลิกทริกเกอร์ของโปรเจ็กต์ปัจจุบัน
- คลิกเพิ่มทริกเกอร์ใหม่
- สำหรับ Run เลือกฟังก์ชัน runDataCollection, Events: time-driven และเลือกส่วนที่เหลือตามความต้องการของคุณ (ฉันทำทุกๆ 5 นาที)
ขั้นตอนที่ 5: ข้อมูลเพิ่มเติมใน Script
มาแก้ไขสคริปต์ให้เข้ากับตัวควบคุมอุณหภูมิ เมือง และ Google ชีตของคุณ
การเปลี่ยนแปลงแต่ละรายการจะแสดงด้วยหมายเลขบรรทัดของสคริปต์ คุณจะต้องไปที่บรรทัดนั้นในสคริปต์และอัปเดตตามคำแนะนำด้านล่าง (หมายเลขบรรทัดควรถูกต้องหากบรรทัดที่ 40 คือ "runDataCollection()…")
- บรรทัดที่ 45: เพิ่มลิงค์ webapp ในการกำหนดเส้นทาง runDataCollection (นี่คือสิ่งที่คุณระบุไว้ในขั้นตอนใดขั้นตอนหนึ่งก่อนหน้านี้)
- บรรทัดที่ 53: ชื่อผู้ใช้และรหัสผ่านของ Nest
- บรรทัดที่ 77: ID อุปกรณ์เทอร์โมสตัท
คุณสามารถรับรหัสสำหรับตัวควบคุมอุณหภูมิแต่ละตัวได้โดยไปที่แดชบอร์ดของ Nest คลิกที่ตัวควบคุมอุณหภูมิ คลิกไอคอนรูปเฟืองที่ด้านบนขวา จากนั้นคัดลอกช่อง "หมายเลขซีเรียล" จะมีลักษณะดังนี้: 02XX01XX471XXX3S
บรรทัดที่ 90: City ID (คำแนะนำเพิ่มเติมในสคริปต์ด้านบนบรรทัดนี้อาจเป็นประโยชน์)
หากต้องการค้นหารหัสเมือง ไปที่ "https://openweathermap.org/find?q=" ค้นหาเมืองของคุณ คลิกที่ลิงค์เมืองและ ID จะเป็นตัวเลข 7 หลักใน URL
บรรทัดที่ 103: Google ชีต ID (คำแนะนำเพิ่มเติมในสคริปต์ด้านบนบรรทัดนี้อาจเป็นประโยชน์)
รหัสชีตสามารถดึงมาจากชีต URL ดูรูปแบบนี้สำหรับตำแหน่งที่รหัสชีตอยู่ใน URL:https://docs.google.com/spreadsheets/d/THIS_IS_WHERE_THE_SHEET_ID_IS/edit#gid=123456789
ขั้นตอนที่ 6: จบสเปรดชีต
ข้ามขั้นตอนนี้หากคุณเริ่มต้นด้วยสเปรดชีตที่แชร์ของฉัน
สองบรรทัดนี้ต้องอยู่ในสเปรดชีตเพื่อให้โค้ดทำงานได้
บรรทัดแรก (แถวส่วนหัว): ช่องว่างคั่นคอลัมน์
วันที่/เวลา เดือน วัน ปี อุณหภูมิ ความชื้น ภายนอก อุณหภูมิ ภายนอก ความชื้น ความร้อน_การใช้งาน AC_Usage สภาพอากาศ อัตโนมัติ
บรรทัดที่สอง:
เพิ่มวันที่ของเมื่อวานในคอลัมน์แรกและศูนย์ในคอลัมน์ที่เหลือ
อย่างนั้นแหละ. ปล่อยให้สคริปต์ทำงานและควรเพิ่มหนึ่งแถวต่อวัน แล้วส่ง Ping ตัวควบคุมอุณหภูมิและสภาพอากาศในท้องถิ่นของคุณเพื่อรับข้อมูลตามความถี่ทริกเกอร์ที่คุณตั้งไว้
หากคุณปรับใช้เว็บแอปอีกครั้ง ให้ใช้การแก้ไขใหม่ ฉันมีปัญหาในการใช้การแก้ไขแบบเดียวกันโดยที่สคริปต์ไม่ทำงาน
หากสคริปต์ไม่ทำงาน ให้ทำตามขั้นตอนก่อนหน้าอีกครั้ง และตรวจสอบให้แน่ใจว่าคุณได้อัปเดตสคริปต์ตามที่แนะนำโดยขั้นตอนเหล่านี้อย่างถูกต้อง นี่เป็นสาเหตุที่เป็นไปได้มากที่สุดของปัญหาที่สคริปต์ไม่ทำงาน
ปัญหาที่ทราบ (หากใครรู้วิธีแก้ไขโปรดตอบกลับในส่วนความคิดเห็น):
1) สคริปต์ล้มเหลวในการรับข้อมูลจากรังตลอดทั้งวัน ฉันมีทริกเกอร์ของฉันทุกๆ 5 นาที ซึ่งควรส่งผลให้มีการอ่านทั้งหมด 288 ครั้งตลอดทั้งวัน ฉันได้รับ ~ 170 ต่ำสุดที่ฉันได้รับคือ 16 และสูงสุดคือ 264