大數據

阿里雲數據分析最佳實踐:二維數據可視化 + 設備數據下發

作者:俏巴

概述

物聯網數據分析,又稱Link Analytics,是阿里云為物聯網開發者提供的設備智能分析服務,全鏈路覆蓋了設備數據生成、管理(存儲)、清洗、分析及可視化等環節。有效降低數據分析門檻,助力物聯網開發工作。這裡分別演示通過二維數據可視化功能展示設備位置 + 通過數據分析實現定時下發數據到設備。

Step By Step

1、創建產品,導入物模型,參考鏈接

物模型json內容

{
"schema": "https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json",
"profile": {
<span class="hljs-string">"productKey"</span>: <span class="hljs-string">"a1kVHWEOsM2"</span>

},
"properties": [

{
  <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"GeoLocation"</span>,
  <span class="hljs-string">"name"</span>: <span class="hljs-string">"地理位置"</span>,
  <span class="hljs-string">"accessMode"</span>: <span class="hljs-string">"rw"</span>,
  <span class="hljs-string">"required"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-string">"dataType"</span>: {
    <span class="hljs-string">"type"</span>: <span class="hljs-string">"struct"</span>,
    <span class="hljs-string">"specs"</span>: [
      {
        <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"Longitude"</span>,
        <span class="hljs-string">"name"</span>: <span class="hljs-string">"經度"</span>,
        <span class="hljs-string">"dataType"</span>: {
          <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
          <span class="hljs-string">"specs"</span>: {
            <span class="hljs-string">"min"</span>: <span class="hljs-string">"-180"</span>,
            <span class="hljs-string">"max"</span>: <span class="hljs-string">"180"</span>,
            <span class="hljs-string">"unit"</span>: <span class="hljs-string">"°"</span>,
            <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"度"</span>,
            <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
          }
        }
      },
      {
        <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"Latitude"</span>,
        <span class="hljs-string">"name"</span>: <span class="hljs-string">"緯度"</span>,
        <span class="hljs-string">"dataType"</span>: {
          <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
          <span class="hljs-string">"specs"</span>: {
            <span class="hljs-string">"min"</span>: <span class="hljs-string">"-90"</span>,
            <span class="hljs-string">"max"</span>: <span class="hljs-string">"90"</span>,
            <span class="hljs-string">"unit"</span>: <span class="hljs-string">"°"</span>,
            <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"度"</span>,
            <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
          }
        }
      },
      {
        <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"Altitude"</span>,
        <span class="hljs-string">"name"</span>: <span class="hljs-string">"海拔"</span>,
        <span class="hljs-string">"dataType"</span>: {
          <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
          <span class="hljs-string">"specs"</span>: {
            <span class="hljs-string">"min"</span>: <span class="hljs-string">"0"</span>,
            <span class="hljs-string">"max"</span>: <span class="hljs-string">"9999"</span>,
            <span class="hljs-string">"unit"</span>: <span class="hljs-string">"m"</span>,
            <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"米"</span>,
            <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
          }
        }
      },
      {
        <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"CoordinateSystem"</span>,
        <span class="hljs-string">"name"</span>: <span class="hljs-string">"座標系統"</span>,
        <span class="hljs-string">"dataType"</span>: {
          <span class="hljs-string">"type"</span>: <span class="hljs-string">"enum"</span>,
          <span class="hljs-string">"specs"</span>: {
            <span class="hljs-string">"1"</span>: <span class="hljs-string">"WGS_84"</span>,
            <span class="hljs-string">"2"</span>: <span class="hljs-string">"GCJ_02"</span>
          }
        }
      }
    ]
  }
},
{
  <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"CurrentHumidity"</span>,
  <span class="hljs-string">"name"</span>: <span class="hljs-string">"溼度"</span>,
  <span class="hljs-string">"accessMode"</span>: <span class="hljs-string">"rw"</span>,
  <span class="hljs-string">"required"</span>: <span class="hljs-literal">false</span>,
  <span class="hljs-string">"dataType"</span>: {
    <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
    <span class="hljs-string">"specs"</span>: {
      <span class="hljs-string">"min"</span>: <span class="hljs-string">"0"</span>,
      <span class="hljs-string">"max"</span>: <span class="hljs-string">"100"</span>,
      <span class="hljs-string">"unit"</span>: <span class="hljs-string">"%"</span>,
      <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"百分比"</span>,
      <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
    }
  }
},
{
  <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"CurrentTemperature"</span>,
  <span class="hljs-string">"name"</span>: <span class="hljs-string">"溫度"</span>,
  <span class="hljs-string">"accessMode"</span>: <span class="hljs-string">"rw"</span>,
  <span class="hljs-string">"required"</span>: <span class="hljs-literal">false</span>,
  <span class="hljs-string">"dataType"</span>: {
    <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
    <span class="hljs-string">"specs"</span>: {
      <span class="hljs-string">"min"</span>: <span class="hljs-string">"-40"</span>,
      <span class="hljs-string">"max"</span>: <span class="hljs-string">"120"</span>,
      <span class="hljs-string">"unit"</span>: <span class="hljs-string">"℃"</span>,
      <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"攝氏度"</span>,
      <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
    }
  }
}

],
"events": [

{
  <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"post"</span>,
  <span class="hljs-string">"name"</span>: <span class="hljs-string">"post"</span>,
  <span class="hljs-string">"type"</span>: <span class="hljs-string">"info"</span>,
  <span class="hljs-string">"required"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-string">"desc"</span>: <span class="hljs-string">"屬性上報"</span>,
  <span class="hljs-string">"method"</span>: <span class="hljs-string">"thing.event.property.post"</span>,
  <span class="hljs-string">"outputData"</span>: [
    {
      <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"GeoLocation"</span>,
      <span class="hljs-string">"name"</span>: <span class="hljs-string">"地理位置"</span>,
      <span class="hljs-string">"dataType"</span>: {
        <span class="hljs-string">"type"</span>: <span class="hljs-string">"struct"</span>,
        <span class="hljs-string">"specs"</span>: [
          {
            <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"Longitude"</span>,
            <span class="hljs-string">"name"</span>: <span class="hljs-string">"經度"</span>,
            <span class="hljs-string">"dataType"</span>: {
              <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
              <span class="hljs-string">"specs"</span>: {
                <span class="hljs-string">"min"</span>: <span class="hljs-string">"-180"</span>,
                <span class="hljs-string">"max"</span>: <span class="hljs-string">"180"</span>,
                <span class="hljs-string">"unit"</span>: <span class="hljs-string">"°"</span>,
                <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"度"</span>,
                <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
              }
            }
          },
          {
            <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"Latitude"</span>,
            <span class="hljs-string">"name"</span>: <span class="hljs-string">"緯度"</span>,
            <span class="hljs-string">"dataType"</span>: {
              <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
              <span class="hljs-string">"specs"</span>: {
                <span class="hljs-string">"min"</span>: <span class="hljs-string">"-90"</span>,
                <span class="hljs-string">"max"</span>: <span class="hljs-string">"90"</span>,
                <span class="hljs-string">"unit"</span>: <span class="hljs-string">"°"</span>,
                <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"度"</span>,
                <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
              }
            }
          },
          {
            <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"Altitude"</span>,
            <span class="hljs-string">"name"</span>: <span class="hljs-string">"海拔"</span>,
            <span class="hljs-string">"dataType"</span>: {
              <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
              <span class="hljs-string">"specs"</span>: {
                <span class="hljs-string">"min"</span>: <span class="hljs-string">"0"</span>,
                <span class="hljs-string">"max"</span>: <span class="hljs-string">"9999"</span>,
                <span class="hljs-string">"unit"</span>: <span class="hljs-string">"m"</span>,
                <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"米"</span>,
                <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
              }
            }
          },
          {
            <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"CoordinateSystem"</span>,
            <span class="hljs-string">"name"</span>: <span class="hljs-string">"座標系統"</span>,
            <span class="hljs-string">"dataType"</span>: {
              <span class="hljs-string">"type"</span>: <span class="hljs-string">"enum"</span>,
              <span class="hljs-string">"specs"</span>: {
                <span class="hljs-string">"1"</span>: <span class="hljs-string">"WGS_84"</span>,
                <span class="hljs-string">"2"</span>: <span class="hljs-string">"GCJ_02"</span>
              }
            }
          }
        ]
      }
    },
    {
      <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"CurrentHumidity"</span>,
      <span class="hljs-string">"name"</span>: <span class="hljs-string">"溼度"</span>,
      <span class="hljs-string">"dataType"</span>: {
        <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
        <span class="hljs-string">"specs"</span>: {
          <span class="hljs-string">"min"</span>: <span class="hljs-string">"0"</span>,
          <span class="hljs-string">"max"</span>: <span class="hljs-string">"100"</span>,
          <span class="hljs-string">"unit"</span>: <span class="hljs-string">"%"</span>,
          <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"百分比"</span>,
          <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
        }
      }
    },
    {
      <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"CurrentTemperature"</span>,
      <span class="hljs-string">"name"</span>: <span class="hljs-string">"溫度"</span>,
      <span class="hljs-string">"dataType"</span>: {
        <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
        <span class="hljs-string">"specs"</span>: {
          <span class="hljs-string">"min"</span>: <span class="hljs-string">"-40"</span>,
          <span class="hljs-string">"max"</span>: <span class="hljs-string">"120"</span>,
          <span class="hljs-string">"unit"</span>: <span class="hljs-string">"℃"</span>,
          <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"攝氏度"</span>,
          <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
        }
      }
    }
  ]
}

],
"services": [

{
  <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"set"</span>,
  <span class="hljs-string">"name"</span>: <span class="hljs-string">"set"</span>,
  <span class="hljs-string">"required"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-string">"callType"</span>: <span class="hljs-string">"async"</span>,
  <span class="hljs-string">"desc"</span>: <span class="hljs-string">"屬性設置"</span>,
  <span class="hljs-string">"method"</span>: <span class="hljs-string">"thing.service.property.set"</span>,
  <span class="hljs-string">"inputData"</span>: [
    {
      <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"GeoLocation"</span>,
      <span class="hljs-string">"name"</span>: <span class="hljs-string">"地理位置"</span>,
      <span class="hljs-string">"dataType"</span>: {
        <span class="hljs-string">"type"</span>: <span class="hljs-string">"struct"</span>,
        <span class="hljs-string">"specs"</span>: [
          {
            <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"Longitude"</span>,
            <span class="hljs-string">"name"</span>: <span class="hljs-string">"經度"</span>,
            <span class="hljs-string">"dataType"</span>: {
              <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
              <span class="hljs-string">"specs"</span>: {
                <span class="hljs-string">"min"</span>: <span class="hljs-string">"-180"</span>,
                <span class="hljs-string">"max"</span>: <span class="hljs-string">"180"</span>,
                <span class="hljs-string">"unit"</span>: <span class="hljs-string">"°"</span>,
                <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"度"</span>,
                <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
              }
            }
          },
          {
            <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"Latitude"</span>,
            <span class="hljs-string">"name"</span>: <span class="hljs-string">"緯度"</span>,
            <span class="hljs-string">"dataType"</span>: {
              <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
              <span class="hljs-string">"specs"</span>: {
                <span class="hljs-string">"min"</span>: <span class="hljs-string">"-90"</span>,
                <span class="hljs-string">"max"</span>: <span class="hljs-string">"90"</span>,
                <span class="hljs-string">"unit"</span>: <span class="hljs-string">"°"</span>,
                <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"度"</span>,
                <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
              }
            }
          },
          {
            <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"Altitude"</span>,
            <span class="hljs-string">"name"</span>: <span class="hljs-string">"海拔"</span>,
            <span class="hljs-string">"dataType"</span>: {
              <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
              <span class="hljs-string">"specs"</span>: {
                <span class="hljs-string">"min"</span>: <span class="hljs-string">"0"</span>,
                <span class="hljs-string">"max"</span>: <span class="hljs-string">"9999"</span>,
                <span class="hljs-string">"unit"</span>: <span class="hljs-string">"m"</span>,
                <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"米"</span>,
                <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
              }
            }
          },
          {
            <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"CoordinateSystem"</span>,
            <span class="hljs-string">"name"</span>: <span class="hljs-string">"座標系統"</span>,
            <span class="hljs-string">"dataType"</span>: {
              <span class="hljs-string">"type"</span>: <span class="hljs-string">"enum"</span>,
              <span class="hljs-string">"specs"</span>: {
                <span class="hljs-string">"1"</span>: <span class="hljs-string">"WGS_84"</span>,
                <span class="hljs-string">"2"</span>: <span class="hljs-string">"GCJ_02"</span>
              }
            }
          }
        ]
      }
    },
    {
      <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"CurrentHumidity"</span>,
      <span class="hljs-string">"name"</span>: <span class="hljs-string">"溼度"</span>,
      <span class="hljs-string">"dataType"</span>: {
        <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
        <span class="hljs-string">"specs"</span>: {
          <span class="hljs-string">"min"</span>: <span class="hljs-string">"0"</span>,
          <span class="hljs-string">"max"</span>: <span class="hljs-string">"100"</span>,
          <span class="hljs-string">"unit"</span>: <span class="hljs-string">"%"</span>,
          <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"百分比"</span>,
          <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
        }
      }
    },
    {
      <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"CurrentTemperature"</span>,
      <span class="hljs-string">"name"</span>: <span class="hljs-string">"溫度"</span>,
      <span class="hljs-string">"dataType"</span>: {
        <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
        <span class="hljs-string">"specs"</span>: {
          <span class="hljs-string">"min"</span>: <span class="hljs-string">"-40"</span>,
          <span class="hljs-string">"max"</span>: <span class="hljs-string">"120"</span>,
          <span class="hljs-string">"unit"</span>: <span class="hljs-string">"℃"</span>,
          <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"攝氏度"</span>,
          <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
        }
      }
    }
  ],
  <span class="hljs-string">"outputData"</span>: []
},
{
  <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"get"</span>,
  <span class="hljs-string">"name"</span>: <span class="hljs-string">"get"</span>,
  <span class="hljs-string">"required"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-string">"callType"</span>: <span class="hljs-string">"async"</span>,
  <span class="hljs-string">"desc"</span>: <span class="hljs-string">"屬性獲取"</span>,
  <span class="hljs-string">"method"</span>: <span class="hljs-string">"thing.service.property.get"</span>,
  <span class="hljs-string">"inputData"</span>: [
    <span class="hljs-string">"GeoLocation"</span>,
    <span class="hljs-string">"CurrentHumidity"</span>,
    <span class="hljs-string">"CurrentTemperature"</span>
  ],
  <span class="hljs-string">"outputData"</span>: [
    {
      <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"GeoLocation"</span>,
      <span class="hljs-string">"name"</span>: <span class="hljs-string">"地理位置"</span>,
      <span class="hljs-string">"dataType"</span>: {
        <span class="hljs-string">"type"</span>: <span class="hljs-string">"struct"</span>,
        <span class="hljs-string">"specs"</span>: [
          {
            <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"Longitude"</span>,
            <span class="hljs-string">"name"</span>: <span class="hljs-string">"經度"</span>,
            <span class="hljs-string">"dataType"</span>: {
              <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
              <span class="hljs-string">"specs"</span>: {
                <span class="hljs-string">"min"</span>: <span class="hljs-string">"-180"</span>,
                <span class="hljs-string">"max"</span>: <span class="hljs-string">"180"</span>,
                <span class="hljs-string">"unit"</span>: <span class="hljs-string">"°"</span>,
                <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"度"</span>,
                <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
              }
            }
          },
          {
            <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"Latitude"</span>,
            <span class="hljs-string">"name"</span>: <span class="hljs-string">"緯度"</span>,
            <span class="hljs-string">"dataType"</span>: {
              <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
              <span class="hljs-string">"specs"</span>: {
                <span class="hljs-string">"min"</span>: <span class="hljs-string">"-90"</span>,
                <span class="hljs-string">"max"</span>: <span class="hljs-string">"90"</span>,
                <span class="hljs-string">"unit"</span>: <span class="hljs-string">"°"</span>,
                <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"度"</span>,
                <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
              }
            }
          },
          {
            <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"Altitude"</span>,
            <span class="hljs-string">"name"</span>: <span class="hljs-string">"海拔"</span>,
            <span class="hljs-string">"dataType"</span>: {
              <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
              <span class="hljs-string">"specs"</span>: {
                <span class="hljs-string">"min"</span>: <span class="hljs-string">"0"</span>,
                <span class="hljs-string">"max"</span>: <span class="hljs-string">"9999"</span>,
                <span class="hljs-string">"unit"</span>: <span class="hljs-string">"m"</span>,
                <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"米"</span>,
                <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
              }
            }
          },
          {
            <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"CoordinateSystem"</span>,
            <span class="hljs-string">"name"</span>: <span class="hljs-string">"座標系統"</span>,
            <span class="hljs-string">"dataType"</span>: {
              <span class="hljs-string">"type"</span>: <span class="hljs-string">"enum"</span>,
              <span class="hljs-string">"specs"</span>: {
                <span class="hljs-string">"1"</span>: <span class="hljs-string">"WGS_84"</span>,
                <span class="hljs-string">"2"</span>: <span class="hljs-string">"GCJ_02"</span>
              }
            }
          }
        ]
      }
    },
    {
      <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"CurrentHumidity"</span>,
      <span class="hljs-string">"name"</span>: <span class="hljs-string">"溼度"</span>,
      <span class="hljs-string">"dataType"</span>: {
        <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
        <span class="hljs-string">"specs"</span>: {
          <span class="hljs-string">"min"</span>: <span class="hljs-string">"0"</span>,
          <span class="hljs-string">"max"</span>: <span class="hljs-string">"100"</span>,
          <span class="hljs-string">"unit"</span>: <span class="hljs-string">"%"</span>,
          <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"百分比"</span>,
          <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
        }
      }
    },
    {
      <span class="hljs-string">"identifier"</span>: <span class="hljs-string">"CurrentTemperature"</span>,
      <span class="hljs-string">"name"</span>: <span class="hljs-string">"溫度"</span>,
      <span class="hljs-string">"dataType"</span>: {
        <span class="hljs-string">"type"</span>: <span class="hljs-string">"double"</span>,
        <span class="hljs-string">"specs"</span>: {
          <span class="hljs-string">"min"</span>: <span class="hljs-string">"-40"</span>,
          <span class="hljs-string">"max"</span>: <span class="hljs-string">"120"</span>,
          <span class="hljs-string">"unit"</span>: <span class="hljs-string">"℃"</span>,
          <span class="hljs-string">"unitName"</span>: <span class="hljs-string">"攝氏度"</span>,
          <span class="hljs-string">"step"</span>: <span class="hljs-string">"0.01"</span>
        }
      }
    }
  ]
}

]
}

_

2、設備端通過開源MQTT SDK上傳數據,基於開源JAVA MQTT Client連接阿里雲IoT

import com.alibaba.taro.AliyunIoTSignUtil;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import java.util.HashMap;
import java.util.Map;

public class IoTDemoPubSubDemo {

<span class="hljs-comment">// 設備三元組信息</span>
public <span class="hljs-keyword">static</span> <span class="hljs-built_in">String</span> productKey = <span class="hljs-string">"a1kVH******"</span>;
public <span class="hljs-keyword">static</span> <span class="hljs-built_in">String</span> deviceName = <span class="hljs-string">"device1"</span>;
public <span class="hljs-keyword">static</span> <span class="hljs-built_in">String</span> deviceSecret = <span class="hljs-string">"XADek3EYXzzTtxJ6a****************"</span>;
public <span class="hljs-keyword">static</span> <span class="hljs-built_in">String</span> regionId = <span class="hljs-string">"cn-shanghai"</span>;

<span class="hljs-comment">// 物模型-屬性上報topic</span>
private <span class="hljs-keyword">static</span> <span class="hljs-built_in">String</span> pubTopic = <span class="hljs-string">"/sys/"</span> + productKey + <span class="hljs-string">"/"</span> + deviceName + <span class="hljs-string">"/thing/event/property/post"</span>;
<span class="hljs-comment">// 物模型-屬性訂閱topic</span>
private <span class="hljs-keyword">static</span> <span class="hljs-built_in">String</span> subTopic = <span class="hljs-string">"/sys/"</span> + productKey + <span class="hljs-string">"/"</span> + deviceName + <span class="hljs-string">"/thing/service/property/set"</span>;
private <span class="hljs-keyword">static</span> MqttClient mqttClient;

public <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> main(<span class="hljs-built_in">String</span> [] args){

    initAliyunIoTClient();
    <span class="hljs-comment">// 彙報屬性</span>
    postDeviceProperties();
    <span class="hljs-keyword">try</span> {
        mqttClient.subscribe(subTopic); <span class="hljs-comment">// 訂閱Topic</span>
    } <span class="hljs-keyword">catch</span> (MqttException e) {
        System.out.println(<span class="hljs-string">"error:"</span> + e.getMessage());
        e.printStackTrace();
    }

    <span class="hljs-comment">// 設置訂閱監聽</span>
    mqttClient.setCallback(<span class="hljs-keyword">new</span> MqttCallback() {
        @Override
        public <span class="hljs-keyword">void</span> connectionLost(Throwable throwable) {
            System.out.println(<span class="hljs-string">"connection Lost"</span>);
        }

        @Override
        public <span class="hljs-keyword">void</span> messageArrived(<span class="hljs-built_in">String</span> s, MqttMessage mqttMessage) throws Exception {
            System.out.println(<span class="hljs-string">"Sub message"</span>);
            System.out.println(<span class="hljs-string">"Topic : "</span> + s);
            System.out.println(<span class="hljs-keyword">new</span> <span class="hljs-built_in">String</span>(mqttMessage.getPayload())); <span class="hljs-comment">//打印輸出消息payLoad</span>
        }

        @Override
        public <span class="hljs-keyword">void</span> deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {

        }
    });

}

<span class="hljs-comment">/**
 * 初始化 Client 對象
 */</span>
private <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> initAliyunIoTClient() {

    <span class="hljs-keyword">try</span> {
        <span class="hljs-comment">// 構造連接需要的參數</span>
        <span class="hljs-built_in">String</span> clientId = <span class="hljs-string">"java"</span> + System.currentTimeMillis();
        <span class="hljs-built_in">Map</span>&lt;<span class="hljs-built_in">String</span>, <span class="hljs-built_in">String</span>&gt; params = <span class="hljs-keyword">new</span> HashMap&lt;&gt;(<span class="hljs-number">16</span>);
        params.put(<span class="hljs-string">"productKey"</span>, productKey);
        params.put(<span class="hljs-string">"deviceName"</span>, deviceName);
        params.put(<span class="hljs-string">"clientId"</span>, clientId);
        <span class="hljs-built_in">String</span> timestamp = <span class="hljs-built_in">String</span>.valueOf(System.currentTimeMillis());
        params.put(<span class="hljs-string">"timestamp"</span>, timestamp);
        <span class="hljs-comment">// cn-shanghai</span>
        <span class="hljs-built_in">String</span> targetServer = <span class="hljs-string">"tcp://"</span> + productKey + <span class="hljs-string">".iot-as-mqtt."</span>+regionId+<span class="hljs-string">".aliyuncs.com:1883"</span>;

        <span class="hljs-built_in">String</span> mqttclientId = clientId + <span class="hljs-string">"|securemode=3,signmethod=hmacsha1,timestamp="</span> + timestamp + <span class="hljs-string">"|"</span>;
        <span class="hljs-built_in">String</span> mqttUsername = deviceName + <span class="hljs-string">"&amp;"</span> + productKey;
        <span class="hljs-built_in">String</span> mqttPassword = AliyunIoTSignUtil.sign(params, deviceSecret, <span class="hljs-string">"hmacsha1"</span>);

        connectMqtt(targetServer, mqttclientId, mqttUsername, mqttPassword);

    } <span class="hljs-keyword">catch</span> (Exception e) {
        System.out.println(<span class="hljs-string">"initAliyunIoTClient error "</span> + e.getMessage());
    }
}

public <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> connectMqtt(<span class="hljs-built_in">String</span> url, <span class="hljs-built_in">String</span> clientId, <span class="hljs-built_in">String</span> mqttUsername, <span class="hljs-built_in">String</span> mqttPassword) throws Exception {

    MemoryPersistence persistence = <span class="hljs-keyword">new</span> MemoryPersistence();
    mqttClient = <span class="hljs-keyword">new</span> MqttClient(url, clientId, persistence);
    MqttConnectOptions connOpts = <span class="hljs-keyword">new</span> MqttConnectOptions();
    <span class="hljs-comment">// MQTT 3.1.1</span>
    connOpts.setMqttVersion(<span class="hljs-number">4</span>);
    connOpts.setAutomaticReconnect(<span class="hljs-literal">false</span>);

// connOpts.setCleanSession(true);

    connOpts.setCleanSession(<span class="hljs-literal">false</span>);

    connOpts.setUserName(mqttUsername);
    connOpts.setPassword(mqttPassword.toCharArray());
    connOpts.setKeepAliveInterval(<span class="hljs-number">60</span>);

    mqttClient.connect(connOpts);
}

<span class="hljs-comment">/**
 * 彙報屬性
 */</span>
private <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> postDeviceProperties() {

    <span class="hljs-keyword">try</span> {
        System.out.println(<span class="hljs-string">"上報屬性值"</span>);
        <span class="hljs-built_in">String</span> payloadJson = <span class="hljs-string">"{\"params\":{\"CurrentHumidity\":12.3,\"CurrentTemperature\":12.3,\"GeoLocation\":{\"CoordinateSystem\":1,\"Latitude\":29.93089,\"Longitude\":121.59923,\"Altitude\":10}}}"</span>;
        <span class="hljs-comment">// https://yq.aliyun.com/articles/706989</span>
        MqttMessage message = <span class="hljs-keyword">new</span> MqttMessage(payloadJson.getBytes(<span class="hljs-string">"utf-8"</span>));
        message.setQos(<span class="hljs-number">1</span>);
        mqttClient.publish(pubTopic, message);
    } <span class="hljs-keyword">catch</span> (Exception e) {
        System.out.println(e.getMessage());
    }
}

}

payLoad設備參考鏈接

3、屬性上報情況查看

_

4、通過物聯網數據分析中的二維數據可視化功能,接入設備位置到地圖

_

_

_

5、物聯網數據分析通過SQL將數據下發至設備


  • 5.1 查詢數據
    _

_

_

  • 5.2 使用SQL下發數據

insert into ${pk.a1kVH.device1} select 53.3 as CurrentHumidity;  -- 導入數據到表,下發數據到設備

_

  • 5.3 設備端訂閱情況

上報屬性值
Sub message
Topic : /sys/a1kVH/device1/thing/service/property/set
{"method":"thing.service.property.set","id":"419651605","params":{"CurrentHumidity":53.3},"version":"1.0.0"}


參考鏈接

快速接入設備位置到地圖
數據開發之分析決策直達設備

Leave a Reply

Your email address will not be published. Required fields are marked *