เอกสาร

พื้นที่แอปพลิเคชัน MQTT

MQTT เป็นโปรโตคอลอินเทอร์เน็ตที่มีนายหน้าข้อความกลาง ด้วยนายหน้าข้อความนี้ ผู้เข้าร่วมสามารถสมัครรับข้อมูล "หัวข้อ" บางอย่างและส่งข้อความในหัวข้อต่างๆ cFos Charging Manager สามารถฟังข้อความในหัวข้อเฉพาะ ดังนั้นจึงสามารถควบคุมผ่าน MQTT นอกจากนี้ยังสามารถส่งสถานะของอุปกรณ์ที่จัดการได้อีกด้วย cFos Power Brain Wallbox ยังสามารถควบคุมผ่าน MQTT และส่งสถานะได้ สิ่งนี้มีประโยชน์เมื่อเชื่อมต่อกับระบบอัตโนมัติภายในบ้าน สำหรับการควบคุมอุตสาหกรรม (M2M) และสำหรับการตรวจสอบและบันทึก หัวข้อทั้งหมดเริ่มต้นด้วย cfos_mqtt หากคุณต้องการเชื่อมต่ออุปกรณ์ cFos MQTT หลายตัวกับโบรกเกอร์ MQTT หัวข้อนี้สามารถเลือกขึ้นต้นด้วย cfos_mqtt_<Seriennummer>/ ซึ่งปรับได้ภายใต้การกำหนดค่า ในการกำหนดค่า คุณยังสามารถระบุ URL สำหรับโบรกเกอร์ MQTT มาตรฐาน URL สามารถเริ่มต้นด้วย mqtt:// และ mqtts:// ด้วย mqtts:// cFos Charging Manager หรือ cFos Power Brain Wallbox สร้างการเชื่อมต่อ TLS ใช้พอร์ตมาตรฐาน 1883 สำหรับการเชื่อมต่อที่ไม่ได้เข้ารหัสและ 8883 สำหรับการเชื่อมต่อ TLS อย่างไรก็ตาม คุณสามารถระบุพอร์ตใน URL ได้เช่นกัน คุณสามารถป้อนชื่อผู้ใช้และรหัสผ่านในรูปแบบปกติของ URL เช่น mqtt://user:[email protected] หากคุณระบุโบรกเกอร์ MQTT ในการกำหนดค่า cFos Charging Manager คุณสามารถระบุโบรกเกอร์รายบุคคลหรือเพียงแค่เขียน mqtt จากนั้นจึงใช้โบรกเกอร์เริ่มต้นที่จัดเก็บไว้ในการกำหนดค่า

cFos Charging Manager รองรับทั้ง MQTT 3.1.1 และ MQTT 5 หากคุณเริ่ม URL ด้วย mqtt3:// หรือ mqtt5:// (mqtts3:// และ mqtts5:// สำหรับการเชื่อมต่อที่เข้ารหัส) คุณจะต้องกำหนดเวอร์ชันโปรโตคอล ค่าเริ่มต้นคือ MQTT 3.1.1 ด้วย MQTT 5 cFos Charging Manager จะพยายามเปลี่ยนกลับเป็น MQTT 3.1.1 หากมีข้อความแสดงข้อผิดพลาดที่เกี่ยวข้อง สิ่งนี้ใช้ได้กับโบรกเกอร์ Mosquitto รุ่นเก่า แต่ไม่จำเป็นต้องใช้กับโบรกเกอร์รายอื่น

หมายเหตุ: เนื่องจากการตั้งค่า MQTT ต้องใช้รหัสผ่านผู้ดูแลระบบ ตัวจัดการการชาร์จจึงจัดการข้อมูลตามนั้น ดังนั้นข้อมูลจะถูกส่งโดยจงใจซึ่งสามารถเข้าถึงได้ด้วยรหัสผ่านของผู้ดูแลระบบเท่านั้น

หมายเหตุเกี่ยวกับโบรกเกอร์ MQTT: ขอบคุณ Stefan G. (#diebestenuserderwelt) เราสามารถทดสอบกับโบรกเกอร์ MQTT ที่สร้างขึ้นใน ioBroker โบรกเกอร์ MQTT 3.1.1 นี้ (ณ เดือนกุมภาพันธ์ 2023) ไม่ทำงานตามมาตรฐานหลายประการ: ความพยายามในการเชื่อมต่อจะถูกยกเลิกโดยไม่มีข้อความแสดงข้อผิดพลาด เพย์โหลดในแพ็กเก็ต PUBLISH ขาดหายไปในบางครั้ง แพ็กเก็ต PUBLISH ถูกส่งสองครั้ง (สามารถทำได้โดยปิดการตั้งค่าคอนฟิกหรือไม่) โบรกเกอร์นี้จึงไม่เหมาะสำหรับการควบคุม Charging Manager API เนื่องจากอาจมีการดำเนินการคำขอ API หลายครั้ง แม้ว่าเราสนใจที่จะให้ MQTT ใช้งานได้กับโบรกเกอร์มากที่สุดเท่าที่จะเป็นไปได้ แต่ปัจจุบันเราแนะนำให้ใช้ Mosquitto สำหรับ ioBroker

การรวมเมตรและกล่องติดผนังโดยใช้อุปกรณ์ประเภท "อินพุต HTTP"

แทนที่จะจัดหาอุปกรณ์เหล่านี้ผ่าน HTTP (ดู HTTP API -> HTTP Counters และ Wallboxes) อุปกรณ์เหล่านี้ยังสามารถฟัง MQTT ได้อีกด้วย ป้อน mqtt หรือ URL นายหน้า MQTT เป็นที่อยู่อุปกรณ์ จากนั้นมิเตอร์หรือวอลล์บ็อกซ์ที่เกี่ยวข้องจะฟังหัวข้อ cfos_mqtt/set/<Geräte-ID> เช่น สำหรับมิเตอร์ที่มี ID อุปกรณ์ M1 ถึง cfos_mqtt/set/M1 ตัวนับอินพุต HTTP คาดหวังสตริง JSON เป็นข้อความ ตามที่อธิบายไว้ใน HTTP API ภายใต้ "ตัวนับ HTTP และ Wallboxes" ดังนั้นแหล่งที่มา MQTT ของคุณจึงต้องส่งข้อมูลในรูปแบบนี้ คุณสามารถผสานรวมอุปกรณ์ที่ cFos Charging Manager ไม่รองรับได้โดยการรับข้อมูลจากแหล่งอื่น (เช่น ระบบอัตโนมัติในบ้าน) แล้วนำเข้าไปยัง Charging Manager
หมายเหตุ: หากข้อมูลต้นทางอยู่ในรูปแบบที่แตกต่างจากตัวนับ HTTP คุณสามารถสร้าง ตัวนับแบบกำหนดเอง ได้ สำหรับ MQTT อธิบายไว้ด้านล่าง

ตัวอย่าง:
คุณได้สร้างตัวนับอินพุต HTTP และมี M3 เป็นรหัสอุปกรณ์ ตามที่อยู่ที่คุณระบุที่อยู่ของ Mosquitto Broker เช่น mqtt://หากคุณป้อนคำสั่งต่อไปนี้บนบรรทัดคำสั่งบนคอมพิวเตอร์ที่ใช้ Mosquitto:
mosquitto_pub -h localhost -t cfos_mqtt/set/M3 -m '{ "model": "TestModell", "import_wh": 12345, "export_wh": 23456, "voltage": [231, 232, 233], "current": [10001, 10002, 10003] }'
ตัวนับควรมีค่าข้างต้น

ถ่ายโอนสถานะของอุปกรณ์ตัวจัดการการชาร์จ

ในการกำหนดค่าเครื่องมือจัดการการชาร์จ คุณสามารถระบุ URL ของโบรกเกอร์ MQTT (หรือ mqtt สำหรับโบรกเกอร์มาตรฐาน) จากนั้นเครื่องมือจัดการการชาร์จจะเผยแพร่สถานะของอุปกรณ์ทั้งหมดภายใต้หัวข้อ cfos_mqtt/get/dev_info มันส่งข้อมูลนี้ในรูปแบบที่รู้จักจาก HTTP get_dev_info ซึ่งจะให้ค่าทั้งหมดของอุปกรณ์ตามที่มองเห็นได้ใน UI เช่น ค่าประสิทธิภาพของมาตรวัดหรือสถานะของวอลล์บ็อกซ์ หากคุณต้องการสมัครใช้งานเฉพาะอุปกรณ์แต่ละเครื่อง คุณสามารถปิดใช้งานช่องทำเครื่องหมาย "เผยแพร่ข้อมูลเกี่ยวกับ MQTT" และเลือกตัวเลือก "เผยแพร่ข้อมูลเกี่ยวกับ MQTT" แทนในการตั้งค่าสำหรับอุปกรณ์แต่ละเครื่องภายใต้ "แสดง" สตริง JSON ที่สอดคล้องกันสำหรับอุปกรณ์ที่เกี่ยวข้องจะถูกเผยแพร่ภายใต้หัวข้อ cfos_mqtt/get/<device ID> คุณยังสามารถสมัครรับค่าส่วนกลางทั้งหมดภายใต้หัวข้อ cfos_mqtt/get/params เนื่องจากค่าเหล่านี้จะถูกส่งออกในรูปแบบที่เรียกว่า HTTP get_dev_info ภายใต้ "params"

ควบคุม cFos Charging Manager API ผ่าน MQTT

ในการกำหนดค่า cFos Charging Manager คุณสามารถระบุ URL ของโบรกเกอร์ MQTT (หรือ mqtt สำหรับโบรกเกอร์มาตรฐาน) ภายใต้ "โบรกเกอร์สำหรับการเข้าถึง API ผ่าน MQTT" หากค่านี้ไม่ว่างเปล่า cFos Charging Manager จะสมัครสมาชิกหัวข้อทั้งหมดที่ขึ้นต้นด้วย cfos_mqtt/api/ จากนั้นตีความข้อความภายใต้หัวข้อว่าชื่อหัวข้อเป็น HTTP URL ที่ลงท้ายด้วย /cnf? เริ่มต้นและส่งต่อไปยัง HTTP API จากนั้น Charging Manager จะเผยแพร่การตอบสนอง HTTP API เป็น JSON ภายใต้หัวข้อ cfos_mqtt/api_res คุณมี HTTP API เกือบทั้งหมดภายใต้การควบคุมของคุณผ่าน MQTT ข้อยกเว้นคือการเรียก API ที่ส่งคืนการตอบกลับ JSON แบบยาว ตัวอย่าง: cfos_mqtt/api/cmd=set_cm_vars&name=x&val=1 ใช้ฟังก์ชัน API set_cm_var เพื่อตั้งค่าตัวแปร Charging Manager x เป็น 1 มีข้อความอยู่ใต้ cfos_mqtt/api/cmd=enter_rfid&rfid=5678&dev_id=E1 ป้อน RFID 5678 สำหรับ Wallbox ด้วยรหัสอุปกรณ์ E1 (ดูเพิ่มเติมที่ ฟังก์ชัน RFID แบบขยาย ของเรา)
คุณสามารถใส่ข้อมูลที่ถ่ายโอนผ่าน HTTP POST ในข้อความใต้หัวข้อ

ตัวอย่าง: การเปลี่ยนแปลงกระแสรวมสูงสุดที่มีให้กับตัวจัดการการชาร์จเป็นระยะๆ:
ป้อนนายหน้าของคุณภายใต้การตั้งค่าตัวจัดการการชาร์จทั่วไปภายใต้ "นายหน้าสำหรับการเข้าถึง API ผ่าน MQTT" (หรือเพียงแค่ mqtt หากจะใช้นายหน้าเริ่มต้นที่จัดเก็บภายใต้ "การกำหนดค่า") จากนั้นเผยแพร่ไปยังหัวข้อโดยใช้ MQTT
cfos_mqtt/api/cmd=set_params
วัตถุ JSON ที่มีเนื้อหาต่อไปนี้:
{"max_total_cur_prc": p}
โดยที่ p คือเปอร์เซ็นต์ของกระแสรวมสูงสุดที่ตั้งไว้ล่วงหน้าที่จะรับ
หมายเหตุ: การเรียก HTTP API บางส่วนส่งผลให้ตัวจัดการการชาร์จบันทึกการกำหนดค่า หากคุณเรียกใช้บ่อยเกินไป แฟลช (ใน cFos Power Brain หรือ cFos Wallbox Booster) หรือการ์ด SD ใน Raspberry จะเสื่อมสภาพ การเรียก API "set_params" ที่มีพารามิเตอร์แต่ละตัว "max_total_cur_prc" จึงไม่นำไปสู่การบันทึกพารามิเตอร์

ควบคุมวอลล์บ็อกซ์ผ่าน MQTT

หาก cFos Charging Manager ไม่ได้อยู่ในโหมด "การจัดการโหลด" แต่อยู่ในโหมด "การตรวจสอบ" คุณสามารถควบคุมวอลล์บ็อกซ์ทั้งหมดได้ด้วยตัวเองโดยใช้ MQTT สิ่งนี้ใช้โดยเฉพาะกับวอลล์บ็อกซ์ cFos Power Brain ที่ทำงานเป็นทาสในโหมด "สังเกต" ในการดำเนินการนี้ คุณจะต้องกาเครื่องหมายที่ตัวเลือก “เปิดใช้งานการควบคุมวอลล์บ็อกซ์” ใต้ MQTT ในการตั้งค่าตัวจัดการการชาร์จ จากนั้น cFos Charging Manager จะรับฟังหัวข้อ MQTT cfos_mqtt/ctl และคาดหวังข้อความด้วยออบเจ็กต์ JSON วัตถุนี้มีวัตถุย่อยเป็นคุณสมบัติโดยมีรหัสอุปกรณ์เป็นชื่อ วัตถุย่อยมีลักษณะดังนี้: {"cur": c, "ena": b, "wke": b, "phs": p} โดยที่ c คือกระแสไฟชาร์จในหน่วย mA และ b สามารถเป็นจริงหรือเท็จได้ . "ena": false ปิดใช้งานการชาร์จบนวอลล์บ็อกซ์ "wke": true พยายามส่งคำสั่ง "ปลุกอัตโนมัติ" ไปยังวอลล์บ็อกซ์ (ปัจจุบันทำได้เฉพาะกับวอลล์บ็อกซ์ cFos Power Brain เท่านั้น) p สามารถเป็น 1 หรือ 3 เพื่อสลับระหว่างการชาร์จแบบ 1 เฟสและ 3 เฟส คุณยังสามารถละเว้น "cur", "ena", "wke" และ "phs" เพื่อทำหน้าที่ควบคุมบางอย่างเท่านั้นได้ ตัวอย่าง:
{"E1":
{cur: 8000, ena: true, wke: true},
"E2":
{cur: 10000, phs: 3}}

ตั้งค่ากระแสการชาร์จของวอลล์บ็อกซ์ด้วยรหัสอุปกรณ์เป็น 8A เปิดใช้งานการชาร์จ และพยายามปลุกรถ นอกจากนี้ กระแสไฟชาร์จสำหรับ Wallbox E2 ถูกตั้งค่าไว้ที่ 10A และสลับไปที่การชาร์จแบบ 3 เฟส

ส่งบันทึกและบันทึกการทำธุรกรรมผ่าน MQTT

คุณสามารถระบุ URL ของโบรกเกอร์ MQTT สำหรับการถ่ายโอนรายการบันทึกในบันทึกของระบบภายใต้ "การกำหนดค่า" จากนั้น cFos Charging Manager จะเผยแพร่รายการบันทึกทั้งหมดภายใต้หัวข้อ cfos_mqtt/log สิ่งนี้ทำให้คุณสามารถประเมินบันทึกจากระยะไกลเพื่อตรวจสอบตัวจัดการการชาร์จ คุณยังสามารถระบุ URL ของโบรกเกอร์ MQTT สำหรับรายการในบันทึกการทำธุรกรรมภายใต้ "การกำหนดค่า" จากนั้นธุรกรรมโหลดทั้งหมดจะถูกส่งภายใต้หัวข้อ cfos_mqtt/ta_log ซึ่งช่วยให้สามารถประเมินข้อมูลการเรียกเก็บเงินของธุรกรรมการเรียกเก็บเงินจากระยะไกล และสร้างการสำรองข้อมูลของธุรกรรมการเรียกเก็บเงินบนระบบอื่นได้ ธุรกรรมการชาร์จเริ่มต้นเมื่อเสียบขั้วต่อการชาร์จและสิ้นสุดเมื่อไม่ได้เสียบปลั๊ก

เคาน์เตอร์แบบกำหนดเองด้วย MQTT

คุณสามารถสร้าง ตัวนับแบบกำหนดเอง โดยใช้ rtype=2 สำหรับ MQTT ตัวนับเหล่านี้ถูกกำหนดคล้ายกับตัวนับ HTTP (rtype = 1) อย่างไรก็ตาม ที่อยู่ในที่นี้ไม่ใช่ HTTP URL แต่เป็นหัวข้อ MQTT ตัวอย่าง:
"power_w": {
"address": "/test_topic3",
"type": "float",
"query": "power_w"
}

ที่นี่ตัวนับที่ผู้ใช้กำหนดสมัครรับข้อมูลหัวข้อ /test_topic3 และคาดหวังวัตถุ JSON ที่มีคุณสมบัติ "power_w" เช่น {"power_w": 1234} ตัวแปรตัวนับที่แตกต่างกันสามารถมีหัวข้อที่แตกต่างกันและจะได้รับการอัปเดตทันทีที่มีการเผยแพร่ข้อความภายใต้หัวข้อที่เกี่ยวข้อง