Google is committed to advancing racial equity for Black communities. See how.
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

เครื่องมือ OpenWeave

jinja-placeholder-0 /index.md "> ดูแหล่งที่มาบน GitHub

OpenWeave มีชุดเครื่องมือบรรทัดคำสั่งเพื่อกำหนดค่าจัดการและทดสอบการปรับใช้ OpenWeave

สร้างเครื่องมือสาน

เป้าหมายของ weave-tools จะสร้างไฟล์เก็บถาวร tar สำหรับเครื่องมือบรรทัดคำสั่งของ Weave ที่เลือกไว้สำหรับการแจกจ่าย มันมีเครื่องมือดังต่อไปนี้:

เครื่องมือ ลักษณะ ตำแหน่งการ สร้างแบบสแตนด์อโลน
gen-qr-code สร้างรหัส QR /src/tools/misc
mock-device การจำลองอุปกรณ์สานทั่วไป /src/test-apps
weave สร้างและจัดการใบรับรองการสาน /src/tools/weave
weave-device-descriptor เข้ารหัสและถอดรหัสสตริงตัวให้คำอธิบายอุปกรณ์ Weave สำหรับการจับคู่รหัส QR /src/test-apps
weave-device-mgr จัดการกระบวนการจับคู่อุปกรณ์ /src/device-manager/python
weave-heartbeat ส่งและรับข้อความโปรไฟล์ Heartbeat ที่ /src/test-apps
weave-key-export ส่งคำขอส่งออกคีย์ /src/test-apps
weave-ping ส่งและรับข้อความโปรไฟล์ Echo /src/test-apps

วิธีสร้างเป้าหมาย:

  1. ติดตั้งสิ่งที่ จำเป็น ต้องมี สำหรับ build ทั้งหมด
  2. กำหนดค่า OpenWeave โดยไม่รองรับ BlueZ:
     cd <path-to-openweave-core>
    ./configure --without-bluez 
  3. ทำให้เป้าหมายของ weave-tools :
     make weave-tools 
  4. ตรวจสอบไดเร็กทอรี root openweave-core สำหรับไฟล์เก็บถาวร tar:
     ls weave*
        weave-tools-x86_64-unknown-linux-gnu-4.0d.tar.gz

GEN-รหัส QR

เครื่องมือ gen-qr-code ต้องการโมดูล Python qrcode ใช้ pip เพื่อติดตั้ง:

 pip install --user qrcode

ใช้ gen-qr-code เพื่อสร้างรหัส QR สำหรับการจับคู่อุปกรณ์ อินพุตสำหรับเครื่องมือต้องอยู่ในไฟล์โลคัล ตัวอย่างเช่นในการสร้างรหัส QR ที่ส่งผู้ใช้ไปที่ https://www.google.com :

  1. สร้างไฟล์ด้วยสตริงสำหรับรหัส QR:
     echo "https://www.google.com" >> ~/ow_qrcode 
  2. สร้างรหัส QR 64x64 ของสตริงนั้น:
     ./gen-qr-code -v 1 -s 64 < ~/ow_qrcode 
  3. หากต้องการบันทึกรหัส QR เป็นภาพให้ระบุไฟล์เอาต์พุต:
     ./gen-qr-code -v 1 -s 64 < ~/ow_qrcode > ~/ow_qrcode.png
    Use the weave-device-descriptor tool to generate the device descriptor string
    for use in a Weave device's pairing QR code.

จำลองอุปกรณ์

เครื่องมือจำลอง mock-device จำลองโหนดการสานทั่วไป เครื่องมืออื่น ๆ และสคริปต์กรณีทดสอบใช้เครื่องมือนี้เพื่อห่อหุ้มฟังก์ชันการทำงานของสาน ยกตัวอย่างอุปกรณ์จำลองในโหนด Happy ส่วนตัวเพื่อทดสอบฟังก์ชันการทำงานสานในโทโพโลยีจำลอง

ตัวอย่างเช่นในการเริ่มต้นอุปกรณ์การจำลองการฟังบนที่อยู่ IPv6 ของ fd00:0:1:1::1 ก่อนอื่นให้เพิ่มที่อยู่ IPv6 นั้นในอินเตอร์เฟส lo (loopback):

 sudo ifconfig lo add fd00:0:1:1::1/64

จากนั้นเริ่มต้นอุปกรณ์ Mock สาน:

 ./mock-device -a fd00:0:1:1::1
WEAVE:ML: Binding IPv6 TCP listen endpoint to [fd00:0:1:1::1]:11095
WEAVE:ML: Listening on IPv6 TCP endpoint
WEAVE:ML: Binding general purpose IPv4 UDP endpoint to [::]:11095
WEAVE:IN: IPV6_PKTINFO: 92
WEAVE:ML: Binding general purpose IPv6 UDP endpoint to [fd00:0:1:1::1]:11095 (lo)
WEAVE:ML: Listening on general purpose IPv6 UDP endpoint
WEAVE:ML: Binding IPv6 multicast receive endpoint to [ff02::1]:11095 (lo)
WEAVE:ML: Listening on IPv6 multicast receive endpoint
WEAVE:EM: Cannot listen for BLE connections, null BleLayer
Weave Node Configuration:
  Fabric Id: 1
  Subnet Number: 1
  Node Id: 1
WEAVE:SD: init()
Weave Node Configuration:
  Fabric Id: 1
  Subnet Number: 1
  Node Id: 1
  Listening Addresses:
      fd00:0:1:1::1 (ipv6)
  Pairing Server: fd00:0:1:1::1
Mock Time Sync is disabled and not initialized
Mock System Time Offset initialized to: 3.213773 sec
Listening for requests...
Weave Node ready to service events; PID: 256904; PPID: 251571

ใช้แฟ --help เพื่อดูอ็อพชันการกำหนดคอนฟิกที่มีอยู่ทั้งหมด

สานอุปกรณ์บ่ง

เครื่องมือ weave-device-descriptor เข้ารหัสหรือถอดรหัสสตริงตัวอธิบายอุปกรณ์ สตริงเหล่านี้มีข้อมูลการระบุสำหรับอุปกรณ์ที่เข้ารหัสลงในรหัส QR การจับคู่สาน ใช้แฟ --help พร้อมตัวเลือกการ encode หรือ decode สำหรับข้อมูลเพิ่มเติม

 ./weave-device-descriptor encode --help
./weave-device-descriptor decode --help

เปลี่ยนเป็นรหัส

ตัวอย่างเช่นในการเข้ารหัสสตริงตัวอธิบายอุปกรณ์ด้วยข้อมูลการระบุต่อไปนี้ให้ใช้ค่าสถานะและค่าที่เหมาะสม:

สนาม ธง ความคุ้มค่า
ID ผู้ขาย -V 1
รหัสสินค้า -p 1
หมายเลขการแก้ไขผลิตภัณฑ์ -r 2
หมายเลขซีเรียล -s 18B4300000000004
วันผลิต -m 2018/05/02
802.15.4 ที่อยู่ MAC (เธรด, BLE) -8 000D6F000DA80466
รหัสการจับคู่ -P AB713H
 ./weave-device-descriptor encode -V 1 -p 1 -r 2 -s 18B4300000000004 -m 2018/05/02 \
                                   -8 000D6F000DA80466 -w 5CF370800E77 -P AB713H
1V:1$P:1$R:2$D:180502$S:18B4300000000004$L:000D6F000DA80466$W:5CF370800E77$C:AB713H$

ใช้สตริงเอาต์พุตนี้พร้อมกับเครื่องมือ gen-qr-code เพื่อสร้างรหัส QR

ถอดรหัส

ใช้ decode ตัวเลือกในการถอดรหัสองค์ประกอบของสตริงบ่งอุปกรณ์นี้ได้ องค์ประกอบที่จะถอดรหัสมีไวยากรณ์ต่อไปนี้:

1 + <device-descriptor-element> + $

ตัวอย่างเช่นในการถอดรหัสองค์ประกอบตัวให้คำอธิบายอุปกรณ์ W:5CF370800E77 :

 ./weave-device-descriptor decode 1W:5CF370800E77$
Primary WiFi MAC: 5C:F3:70:80:0E:77

สานการเต้นของหัวใจ

ใช้ Weave weave-heartbeat เพื่อส่งและรับข้อความโปรไฟล์ Heartbeat ที่ ระหว่างสองโหนดสาน Heartbeat จัดให้มีวิธีการบ่งบอกถึงความมีชีวิตชีวาของโหนดหนึ่งไปยังโหนดอื่น ๆ ในเครือข่ายหรือเพื่อตรวจสอบว่าโหนดยังคงเชื่อมต่อกับโครงสร้าง

Heartbeat ที่ประสบความสำเร็จต้องใช้หนึ่งโหนดเพื่อทำหน้าที่เป็นเซิร์ฟเวอร์ (ฟังและตอบสนองต่อ Heartbeat) และหนึ่งโหนดเพื่อทำหน้าที่เป็นไคลเอนต์ (ส่ง Heartbeat)

ทดสอบเครื่องมือ weave-heartbeat โดยใช้อินเตอร์เฟสการวนกลับเพื่อเลียนแบบสองโหนด:

  1. เพิ่มที่อยู่ IPv6 ที่จะใช้สำหรับแต่ละโหนด Heartbeat เข้ากับอินเตอร์เฟส lo (loopback):
     sudo ifconfig lo add fd00:0:1:1::1/64
    sudo ifconfig lo add fd00:0:1:1::2/64 
  2. เริ่มเซิร์ฟเวอร์ Heartbeat บนที่อยู่ fd00:0:1:1::1 และกำหนด node-id 1:

     ./weave-heartbeat --node-addr fd00:0:1:1::1 --node-id 1 --listen
        WEAVE:ML: Binding IPv6 TCP listen endpoint to [fd00:0:1:1::1]:11095
        WEAVE:ML: Listening on IPv6 TCP endpoint
        WEAVE:ML: Binding general purpose IPv4 UDP endpoint to [::]:11095
        WEAVE:IN: IPV6_PKTINFO: 92
        WEAVE:ML: Binding general purpose IPv6 UDP endpoint to [fd00:0:1:1::1]:11095 (lo)
        WEAVE:ML: Listening on general purpose IPv6 UDP endpoint
        WEAVE:ML: Binding IPv6 multicast receive endpoint to [ff02::1]:11095 (lo)
        WEAVE:ML: Listening on IPv6 multicast receive endpoint
        WEAVE:EM: Cannot listen for BLE connections, null BleLayer
        Weave Node Configuration:
          Fabric Id: 1
          Subnet Number: 1
          Node Id: 1
          Listening Addresses:
              fd00:0:1:1::1 (ipv6)
        Listening for Heartbeats...
        Weave Node ready to service events; PID: 170883; PPID: 170418

  3. เปิดหน้าต่างเทอร์มินัลที่สองและเริ่มไคลเอนต์ Heartbeat บน fd00:0:1:1::2 อยู่ IPv6 ที่มี node-id 2 และที่อยู่ IPv6 ของโหนดแรกเป็นปลายทางสำหรับ Heartbeat:

     ./weave-heartbeat --node-addr fd00:0:1:1::2 --node-id 2 --dest-addr fd00:0:1:1::1 1
        WEAVE:ML: Binding IPv6 TCP listen endpoint to [fd00:0:1:1::2]:11095
        WEAVE:ML: Listening on IPv6 TCP endpoint
        WEAVE:ML: Binding general purpose IPv4 UDP endpoint to [::]:11095
        WEAVE:IN: IPV6_PKTINFO: 92
        WEAVE:ML: Binding general purpose IPv6 UDP endpoint to [fd00:0:1:1::2]:11095 (lo)
        WEAVE:ML: Listening on general purpose IPv6 UDP endpoint
        WEAVE:ML: Binding IPv6 multicast receive endpoint to [ff02::1]:11095 (lo)
        WEAVE:ML: Listening on IPv6 multicast receive endpoint
        WEAVE:EM: Cannot listen for BLE connections, null BleLayer
        WEAVE:EM: Binding 0 : Allocated
        Weave Node Configuration:
          Fabric Id: 1
          Subnet Number: 1
          Node Id: 2
          Listening Addresses:
              fd00:0:1:1::2 (ipv6)
        Sending Heartbeats via UDP to node 1 (fd00:0:1:1::1) every 1000 ms
        Weave Node ready to service events; PID: 170932; PPID: 170608
        WEAVE:EM: Binding 0 : Configuring
        WEAVE:EM: Binding 0 : Preparing
        WEAVE:EM: Binding 0 : Ready, peer 1 ([fd00:0:1:1::1]:11095) via UDP

  4. หลังจากการเชื่อมต่อสำเร็จโหนด 2 ส่ง Heartbeats ไปที่โหนด 1 และโหนด 1 บันทึกการทำงานของ Heartbeats ที่ได้รับจากโหนด 2:

     Node 1
    <code></code>
    WEAVE:EM: Msg rcvd 00000013:1 1 0000000000000002 0000 C993 0 MsgId:1380A259
    WEAVE:EM: ec id: 1, AppState: 0xb8e89790
    Heartbeat from node 2 (fd00:0:1:1::2): state=1, err=No Error
    ### Node 2
    <code></code>
    WEAVE:EM: ec id: 1, AppState: 0x0
    WEAVE:EM: Msg sent 00000013:1 1 0000000000000001 0000 C993 0 MsgId:1380A259
    Heartbeat sent to node 1: state=1
     

Heartbeat ด้วยอุปกรณ์จำลอง

weave-heartbeat จะ mock-device สำหรับเซิร์ฟเวอร์และไคลเอนต์ ฟังก์ชั่น Heartbeat เดียวกันสามารถแสดงให้เห็นได้โดยใช้ mock-device แทนเซิร์ฟเวอร์ Heartbeat weave-heartbeat รุ่นแรก:

 ./mock-device -a fd00:0:1:1::1

สานปิง

ใช้ Weave weave-ping เพื่อส่งและรับข้อความโปรไฟล์ Echo เพย์โหลด Echo ประกอบด้วยข้อมูลที่กำหนดโดยโหนดที่ร้องขอและคาดว่าจะถูกสะท้อนกลับทุกคำต่อคำในการตอบสนอง Echo จัดเตรียมวิธีการทดสอบการเชื่อมต่อเครือข่ายและเวลาแฝง

Echo ที่ประสบความสำเร็จต้องการหนึ่งโหนดเพื่อทำหน้าที่เป็นเซิร์ฟเวอร์ (การฟังและการตอบสนองต่อคำร้องขอ Echo) และหนึ่งโหนดเพื่อทำหน้าที่เป็นไคลเอนต์ (ส่งคำขอ Echo)

ทดสอบเครื่องมือ weave-ping โดยใช้อินเตอร์เฟสการวนกลับเพื่อเลียนแบบสองโหนด:

  1. เพิ่มที่อยู่ IPv6 ที่จะใช้สำหรับแต่ละโหนด Echo ในอินเตอร์เฟส lo (loopback):
     sudo ifconfig lo add fd00:0:1:1::1/64
    sudo ifconfig lo add fd00:0:1:1::2/64 
  2. เริ่มต้นเซิร์ฟเวอร์ Echo บนที่อยู่ fd00:0:1:1::1 โดยกำหนดเป็น node-id 1:

     ./weave-ping --node-addr fd00:0:1:1::1 --node-id 1 --listen
        WEAVE:ML: Binding IPv6 TCP listen endpoint to [fd00:0:1:1::1]:11095
        WEAVE:ML: Listening on IPv6 TCP endpoint
        WEAVE:ML: Binding general purpose IPv4 UDP endpoint to [::]:11095
        WEAVE:IN: IPV6_PKTINFO: 92
        WEAVE:ML: Binding general purpose IPv6 UDP endpoint to [fd00:0:1:1::1]:11095 (lo)
        WEAVE:ML: Listening on general purpose IPv6 UDP endpoint
        WEAVE:ML: Binding IPv6 multicast receive endpoint to [ff02::1]:11095 (lo)
        WEAVE:ML: Listening on IPv6 multicast receive endpoint
        WEAVE:EM: Cannot listen for BLE connections, null BleLayer
        WEAVE:SD: init()
        Weave Node Configuration:
          Fabric Id: 1
          Subnet Number: 1
          Node Id: 1
          Listening Addresses:
              fd00:0:1:1::1 (ipv6)
        Listening for Echo requests...
        Iteration 0
        Weave Node ready to service events; PID: 120927; PPID: 113768
        WEAVE:ECH: Listening...

  3. เปิดหน้าต่างเทอร์มินัลที่สองและเริ่มไคลเอนต์ Echo บน fd00:0:1:1::2 อยู่ IPv6 ด้วย node-id 2 และที่อยู่ IPv6 ของโหนดแรกเป็นปลายทางสำหรับคำขอ Echo:

     ./weave-ping --node-addr fd00:0:1:1::2 --node-id 2 --dest-addr fd00:0:1:1::1 1
        WEAVE:ML: Binding general purpose IPv4 UDP endpoint to [::]:11095
        WEAVE:IN: IPV6_PKTINFO: 92
        WEAVE:ML: Binding general purpose IPv6 UDP endpoint to [fd00:0:1:1::2]:11095 (lo)
        WEAVE:ML: Listening on general purpose IPv6 UDP endpoint
        WEAVE:ML: Binding IPv6 multicast receive endpoint to [ff02::1]:11095 (lo)
        WEAVE:ML: Listening on IPv6 multicast receive endpoint
        WEAVE:EM: Cannot listen for BLE connections, null BleLayer
        WEAVE:SD: init()
        Weave Node Configuration:
          Fabric Id: 1
          Subnet Number: 1
          Node Id: 2
          Listening Addresses:
              fd00:0:1:1::2 (ipv6)
        Sending Echo requests to node 1 at fd00:0:1:1::1
        Iteration 0
        Weave Node ready to service events; PID: 121125; PPID: 121017
        WEAVE:ML: Con start 9A00 0000000000000001 0001
        WEAVE:ML: Con DNS complete 9A00 0
        WEAVE:ML: TCP con start 9A00 fd00:0:1:1::1 11095
        WEAVE:ML: TCP con complete 9A00 0
        WEAVE:ML: Con complete 9A00
        Connection established to node 1 (fd00:0:1:1::1)

  4. หลังจากการเชื่อมต่อสำเร็จโหนด 1 จะบันทึกคำขอ Echo จากโหนด 2 และโหนด 2 บันทึกการตอบกลับ Echo จากโหนด 1:

     Node 1
    <code></code>
    WEAVE:ML: Con rcvd AA00 fd00:0:1:1::2 41675
    Connection received from node 2 (fd00:0:1:1::2)
    WEAVE:EM: Msg rcvd 00000001:1 15 0000000000000002 AA00 B8A5 0 MsgId:00000000
    WEAVE:EM: ec id: 1, AppState: 0xfce0ca80
    Echo Request from node 2 (fd00:0:1:1::2): len=15 ... sending response.
    WEAVE:EM: Msg sent 00000001:2 15 0000000000000002 AA00 B8A5 0 MsgId:00000000
    WEAVE:EM: Msg rcvd 00000001:1 15 0000000000000002 AA00 B8A6 0 MsgId:00000001
    ### Node 2
    <code></code>
    WEAVE:EM: ec id: 1, AppState: 0xd239baa0
    WEAVE:EM: Msg sent 00000001:1 15 0000000000000001 9A00 B8A5 0 MsgId:00000000
    WEAVE:EM: Msg rcvd 00000001:2 15 0000000000000001 9A00 B8A5 0 MsgId:00000000
    Echo Response from node 1 (fd00:0:1:1::1): 1/1(100.00%) len=15 time=0.228ms
     

สะท้อนกับอุปกรณ์จำลอง

weave-ping สร้างความ mock-device สำหรับเซิร์ฟเวอร์และไคลเอนต์ ฟังก์ชั่น Echo เดียวกันนี้สามารถแสดงให้เห็นได้โดยใช้ mock-device แทนเซิร์ฟเวอร์ Echo weave-ping ครั้งแรก:

 ./mock-device -a fd00:0:1:1::1