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