[
{
"id": "cc405f26.55827",
"type": "inject",
"z": "c074f42b.f6c088",
"name": "每5分钟更新一次天气",
"topic": "",
"payload": "",
"payloadType": "date",
"repeat": "300",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"x": 250,
"y": 320,
"wires": [
[
"65adc498.bc16fc",
"62ae1970.f2d5e8"
]
]
},
{
"id": "5b139640.329d78",
"type": "http request",
"z": "c074f42b.f6c088",
"name": "实时天气",
"method": "GET",
"ret": "obj",
"url": "[url=https://api.caiyunapp.com/v2/{{{api_key}}}/{{{jingdu}}},{{{weidu}}}/realtime.json]https://api.caiyunapp.com/v2/{{{api_key}}}/{{{jingdu}}},{{{weidu}}}/realtime.json[/url]",
"tls": "",
"x": 520,
"y": 220,
"wires": [
[
"7a457f00.54ab1"
]
]
},
{
"id": "8197202e.07adf",
"type": "debug",
"z": "c074f42b.f6c088",
"name": "调试信息",
"active": true,
"tosidebar": true,
"console": true,
"tostatus": false,
"complete": "true",
"x": 910,
"y": 220,
"wires": []
},
{
"id": "62ae1970.f2d5e8",
"type": "function",
"z": "c074f42b.f6c088",
"name": "北京基础数据",
"func": "//api key\nmsg.api_key = ''\n//精度\nmsg.jingdu = ''\n//纬度\nmsg.weidu = ''\n\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 340,
"y": 180,
"wires": [
[
"670c1d09.039f84",
"5b139640.329d78"
]
]
},
{
"id": "670c1d09.039f84",
"type": "http request",
"z": "c074f42b.f6c088",
"name": "天气预报",
"method": "GET",
"ret": "obj",
"url": "[url=https://api.caiyunapp.com/v2/{{{api_key}}}/{{{jingdu}}},{{{weidu}}}/forecast.json?unit=metric:v2&alert=true]https://api.caiyunapp.com/v2/{{{api_key}}}/{{{jingdu}}},{{{weidu}}}/forecast.json?unit=metric:v2&alert=true[/url]",
"tls": "",
"x": 500,
"y": 60,
"wires": [
[
"1af1c48b.96027b"
]
]
},
{
"id": "7a457f00.54ab1",
"type": "function",
"z": "c074f42b.f6c088",
"name": "数据处理",
"func": "var REALTIME_TYPES = {\n 'temperature': ['temperature', '摄氏度','mdi:thermometer'],\n 'skycon': ['skycon', '',''],\n 'cloudrate': ['cloudrate', '%','mdi:weather-partlycloudy'],\n 'aqi': ['AQI', ' ','mdi:cloud-outline'],\n 'humidity': ['humidity', '%','mdi:water-percent'],\n 'pm25': ['pm25', '毫克每立方','mdi:blur'],\n 'o3': ['o3', '毫克每立方','mdi:blur'],\n 'co': ['co', '毫克每立方','mdi:blur'],\n 'pm10': ['pm10', '毫克每立方','mdi:blur'],\n 'no2': ['no2', '毫克每立方','mdi:blur'],\n 'pres': ['pres', '帕','mdi:arrow-collapse-down'],\n 'so2': ['so2', '毫克每立方','mdi:blur'],\n\n}\n\nvar SKYCON_TYPE = {\n 'CLEAR_DAY':'晴天',\n 'CLEAR_NIGHT':'晴夜',\n 'PARTLY_CLOUDY_DAY':'多云',\n 'PARTLY_CLOUDY_NIGHT':'多云',\n 'CLOUDY':'阴',\n 'RAIN':'雨',\n 'SNOW':'雪',\n 'WIND':'风',\n 'FOG':'雾',\n 'HAZE':'雾霾',\n}\n\n\nfunction direction_chinese(direction){\n if (direction > 337.4 || direction < 22.5)\n final_direction = '北风'\n else if (direction > 22.4 && direction < 67.5)\n final_direction = '东北风'\n else if ( direction > 67.4 && direction < 112.5)\n final_direction = '东风'\n else if ( direction > 112.4 && direction < 157.5)\n final_direction = '东南风'\n else if ( direction > 157.4 && direction < 202.5)\n final_direction = '南风'\n else if ( direction > 202.4 && direction < 247.5)\n final_direction = '西南风'\n else if ( direction > 247.4 && direction < 292.5)\n final_direction = '西风'\n else if ( direction > 292.4 && direction < 337.5)\n final_direction = '西北风'\n else\n final_direction = '无数据'\n return final_direction\n}\n\nvar payload = msg.payload\n\nvar w = {}\n\nfor(var key in REALTIME_TYPES) {\n var value = payload['result'][key]\n if (value > 0) {\n \n }else {\n \n }\n w[key] = payload['result'][key] + REALTIME_TYPES[key][1]\n}\n\n////天气概况\nw['skycon'] = SKYCON_TYPE[w['skycon']]\n////风\nw['wind_direction'] = direction_chinese(payload['result']['wind']['direction'])\nw['wind_speed'] = payload['result']['wind']['speed'] + 'Km/h'\n//降水\nw['nearest_precipitation_distance'] = payload['result']['precipitation']['nearest']['distance'] + '千米'\nw['nearest_precipitation_intensity'] = payload['result']['precipitation']['nearest']['intensity'] + 'mm'\nw['local_precipitation_intensity'] = payload['result']['precipitation']['local']['intensity'] + 'Km/h'\nw['local_datasource'] = payload['result']['precipitation']['local']['datasource']\n\nmsg.payload = w\nmsg.all = payload\n\n\n\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 680,
"y": 300,
"wires": [
[
"8197202e.07adf",
"5c275717.09d878"
]
]
},
{
"id": "1af1c48b.96027b",
"type": "function",
"z": "c074f42b.f6c088",
"name": "数据处理",
"func": "var data_forecast = msg.payload\n\nvar REALTIME_TYPES = {\n 'probability_30': ['%'],\n 'probability_60': ['%'],\n 'probability_90': ['%'],\n 'probability_120': ['%'],\n 'probability_3h': ['%'],\n 'probability_4h': ['%'],\n 'wind_min': ['千米每小时'],\n 'wind_max': ['千米每小时'],\n 'temperature_min': ['摄氏度'],\n 'temperature_max': ['摄氏度'],\n\n}\n\nvar w = {}\nvar c = {} //不带单位,用来做自动化\n\n//描述\nc['description'] = data_forecast['result']['minutely']['description']\n//降雨率\nvar probability = data_forecast['result']['minutely']['probability']\nc['probability_30'] = (probability[0] * 100).toFixed(2) \nc['probability_60'] = (probability[1] * 100).toFixed(2) \nc['probability_90'] = (probability[2] * 100).toFixed(2) \nc['probability_120'] = (probability[3] * 100).toFixed(2)\n//\nvar probability_4h = data_forecast['result']['minutely']['probability_4h']\nif (probability_4h) {\n c['probability_3h'] = (probability_4h[2] * 100).toFixed(2)\n c['probability_4h'] = (probability_4h[3] * 100).toFixed(2)\n}else {\n c['probability_3h'] = '您的API_KEY不支持该参数[probability_3h]'\n c['probability_4h'] = '您的API_KEY不支持该参数[probability_4h]'\n REALTIME_TYPES['probability_3h'][0] = ''\n REALTIME_TYPES['probability_4h'][0] = ''\n}\n//风\nvar wind = data_forecast['result']['daily']['wind']\n//温度\nvar temperature = data_forecast['result']['daily']['temperature']\n\nc['wind_min'] = wind[0]['min']['speed']\nc['wind_max'] = wind[0]['max']['speed']\n\nc['temperature_min'] = temperature[0]['min']\nc['temperature_max'] = temperature[0]['max']\n\nfor(var key in REALTIME_TYPES) {\n w[key] = c[key] + REALTIME_TYPES[key][0]\n}\n\nvar alert_content = data_forecast['result']['alert']['content']\nif (alert_content && alert_content.lenght > 0) {\n w['alert'] = alert_content[0]['description']\n w['alert_source'] = alert_content[0]['source']\n w['alert_county'] = alert_content[0]['county']\n}else {\n w['alert'] = '暂无预警'\n w['alert_source'] = '暂无预警'\n w['alert_county'] = '暂无预警'\n}\n\nmsg.payload = w\nmsg.c = c\nmsg.all = data_forecast\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 700,
"y": 120,
"wires": [
[
"8197202e.07adf",
"b37ba7eb.a6b268"
]
]
},
{
"id": "5c275717.09d878",
"type": "mqtt out",
"z": "c074f42b.f6c088",
"name": "mqtt发送北京天气",
"topic": "/node-red/caiyun/realtimebj",
"qos": "0",
"retain": "false",
"broker": "be6fbf37.e5d2b",
"x": 930,
"y": 340,
"wires": []
},
{
"id": "b37ba7eb.a6b268",
"type": "mqtt out",
"z": "c074f42b.f6c088",
"name": "mqtt发送北京天气",
"topic": "/node-red/caiyun/forecastbj",
"qos": "0",
"retain": "",
"broker": "be6fbf37.e5d2b",
"x": 970,
"y": 80,
"wires": []
},
{
"id": "ab020489.1205d8",
"type": "http request",
"z": "c074f42b.f6c088",
"name": "实时天气",
"method": "GET",
"ret": "obj",
"url": "[url=https://api.caiyunapp.com/v2/{{{api_key}}}/{{{jingdu}}},{{{weidu}}}/realtime.json]https://api.caiyunapp.com/v2/{{{api_key}}}/{{{jingdu}}},{{{weidu}}}/realtime.json[/url]",
"tls": "",
"x": 480,
"y": 540,
"wires": [
[
"c22fba76.a16058"
]
]
},
{
"id": "2a68a664.f7a97a",
"type": "debug",
"z": "c074f42b.f6c088",
"name": "调试信息",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"x": 840,
"y": 580,
"wires": []
},
{
"id": "d376a8a4.651f38",
"type": "http request",
"z": "c074f42b.f6c088",
"name": "天气预报",
"method": "GET",
"ret": "obj",
"url": "[url=https://api.caiyunapp.com/v2/{{{api_key}}}/{{{jingdu}}},{{{weidu}}}/forecast.json?unit=metric:v2&alert=true]https://api.caiyunapp.com/v2/{{{api_key}}}/{{{jingdu}}},{{{weidu}}}/forecast.json?unit=metric:v2&alert=true[/url]",
"tls": "",
"x": 500,
"y": 360,
"wires": [
[
"27c0fc6e.0c0b44"
]
]
},
{
"id": "c22fba76.a16058",
"type": "function",
"z": "c074f42b.f6c088",
"name": "数据处理",
"func": "var REALTIME_TYPES = {\n 'temperature': ['temperature', '摄氏度','mdi:thermometer'],\n 'skycon': ['skycon', '',''],\n 'cloudrate': ['cloudrate', '%','mdi:weather-partlycloudy'],\n 'aqi': ['AQI', ' ','mdi:cloud-outline'],\n 'humidity': ['humidity', '%','mdi:water-percent'],\n 'pm25': ['pm25', '微克每立方','mdi:blur'],\n 'o3': ['o3', '微克每立方','mdi:blur'],\n 'co': ['co', '微克每立方','mdi:blur'],\n 'pm10': ['pm10', '微克每立方','mdi:blur'],\n 'no2': ['no2', '微克每立方','mdi:blur'],\n 'pres': ['pres', '帕','mdi:arrow-collapse-down'],\n 'so2': ['so2', '微克每立方','mdi:blur'],\n\n}\n\nvar SKYCON_TYPE = {\n 'CLEAR_DAY':'晴天',\n 'CLEAR_NIGHT':'晴夜',\n 'PARTLY_CLOUDY_DAY':'多云',\n 'PARTLY_CLOUDY_NIGHT':'多云',\n 'CLOUDY':'阴',\n 'RAIN':'雨',\n 'SNOW':'雪',\n 'WIND':'风',\n 'FOG':'雾',\n 'HAZE':'雾霾',\n}\n\n\nfunction direction_chinese(direction){\n if (direction > 337.4 || direction < 22.5)\n final_direction = '北风'\n else if (direction > 22.4 && direction < 67.5)\n final_direction = '东北风'\n else if ( direction > 67.4 && direction < 112.5)\n final_direction = '东风'\n else if ( direction > 112.4 && direction < 157.5)\n final_direction = '东南风'\n else if ( direction > 157.4 && direction < 202.5)\n final_direction = '南风'\n else if ( direction > 202.4 && direction < 247.5)\n final_direction = '西南风'\n else if ( direction > 247.4 && direction < 292.5)\n final_direction = '西风'\n else if ( direction > 292.4 && direction < 337.5)\n final_direction = '西北风'\n else\n final_direction = '无数据'\n return final_direction\n}\n\nvar payload = msg.payload\n\nvar w = {}\n\nfor(var key in REALTIME_TYPES) {\n var value = payload['result'][key]\n if (value > 0) {\n \n }else {\n \n }\n w[key] = payload['result'][key] + REALTIME_TYPES[key][1]\n}\n\n////天气概况\nw['skycon'] = SKYCON_TYPE[w['skycon']]\n////风\nw['wind_direction'] = direction_chinese(payload['result']['wind']['direction'])\nw['wind_speed'] = payload['result']['wind']['speed'] + 'Km/h'\n//降水\nw['nearest_precipitation_distance'] = payload['result']['precipitation']['nearest']['distance'] + '千米'\nw['nearest_precipitation_intensity'] = payload['result']['precipitation']['nearest']['intensity'] + 'mm'\nw['local_precipitation_intensity'] = payload['result']['precipitation']['local']['intensity'] + 'Km/h'\nw['local_datasource'] = payload['result']['precipitation']['local']['datasource']\n\nmsg.payload = w\nmsg.all = payload\n\n\n\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 640,
"y": 640,
"wires": [
[
"2a68a664.f7a97a",
"e19afc09.09f6d"
]
]
},
{
"id": "27c0fc6e.0c0b44",
"type": "function",
"z": "c074f42b.f6c088",
"name": "数据处理",
"func": "var data_forecast = msg.payload\n\nvar REALTIME_TYPES = {\n 'probability_30': ['%'],\n 'probability_60': ['%'],\n 'probability_90': ['%'],\n 'probability_120': ['%'],\n 'probability_3h': ['%'],\n 'probability_4h': ['%'],\n 'wind_min': ['千米每小时'],\n 'wind_max': ['千米每小时'],\n 'temperature_min': ['摄氏度'],\n 'temperature_max': ['摄氏度'],\n\n}\n\nvar w = {}\nvar c = {} //不带单位,用来做自动化\n\n//描述\nc['description'] = data_forecast['result']['minutely']['description']\n//降雨率\nvar probability = data_forecast['result']['minutely']['probability']\nc['probability_30'] = (probability[0] * 100).toFixed(2) \nc['probability_60'] = (probability[1] * 100).toFixed(2) \nc['probability_90'] = (probability[2] * 100).toFixed(2) \nc['probability_120'] = (probability[3] * 100).toFixed(2)\n//\nvar probability_4h = data_forecast['result']['minutely']['probability_4h']\nif (probability_4h) {\n c['probability_3h'] = (probability_4h[2] * 100).toFixed(2)\n c['probability_4h'] = (probability_4h[3] * 100).toFixed(2)\n}else {\n c['probability_3h'] = '您的API_KEY不支持该参数[probability_3h]'\n c['probability_4h'] = '您的API_KEY不支持该参数[probability_4h]'\n REALTIME_TYPES['probability_3h'][0] = ''\n REALTIME_TYPES['probability_4h'][0] = ''\n}\n//风\nvar wind = data_forecast['result']['daily']['wind']\n//温度\nvar temperature = data_forecast['result']['daily']['temperature']\n\nc['wind_min'] = wind[0]['min']['speed']\nc['wind_max'] = wind[0]['max']['speed']\n\nc['temperature_min'] = temperature[0]['min']\nc['temperature_max'] = temperature[0]['max']\n\nfor(var key in REALTIME_TYPES) {\n w[key] = c[key] + REALTIME_TYPES[key][0]\n}\n\nvar alert_content = data_forecast['result']['alert']['content']\nif (alert_content && alert_content.lenght > 0) {\n w['alert'] = alert_content[0]['description']\n w['alert_source'] = alert_content[0]['source']\n w['alert_county'] = alert_content[0]['county']\n}else {\n w['alert'] = '暂无预警'\n w['alert_source'] = '暂无预警'\n w['alert_county'] = '暂无预警'\n}\n\nmsg.payload = w\nmsg.c = c\nmsg.all = data_forecast\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 680,
"y": 480,
"wires": [
[
"2a68a664.f7a97a",
"c827ce1d.3333"
]
]
},
{
"id": "e19afc09.09f6d",
"type": "mqtt out",
"z": "c074f42b.f6c088",
"name": "mqtt发送武汉天气",
"topic": "/node-red/caiyun/realtimewh",
"qos": "0",
"retain": "false",
"broker": "be6fbf37.e5d2b",
"x": 870,
"y": 720,
"wires": []
},
{
"id": "c827ce1d.3333",
"type": "mqtt out",
"z": "c074f42b.f6c088",
"name": "mqtt发送武汉天气",
"topic": "/node-red/caiyun/forecastwh",
"qos": "0",
"retain": "",
"broker": "be6fbf37.e5d2b",
"x": 910,
"y": 480,
"wires": []
},
{
"id": "65adc498.bc16fc",
"type": "function",
"z": "c074f42b.f6c088",
"name": "上海基础数据",
"func": "//api key\nmsg.api_key = ''\n//精度\nmsg.jingdu = ''\n//纬度\nmsg.weidu = ''\n\n\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 320,
"y": 480,
"wires": [
[
"d376a8a4.651f38",
"ab020489.1205d8"
]
]
},
{
"id": "be6fbf37.e5d2b",
"type": "mqtt-broker",
"z": "",
"name": "mqtt",
"broker": "192.168.0.124",
"port": "1883",
"clientid": "",
"usetls": false,
"compatmode": true,
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"willTopic": "",
"willQos": "0",
"willPayload": ""
}
]