|
|
3 | | # Date: 2020.06 | | 3 | | # Date: 2021.08 |
4 | | # Version: 0.0.2 | | 4 | | # Version: 4.3.2_0.0.1 |
5 | | # | | 5 | | # |
6 | | | | |
|
|
9 | | 8 | | source /usr/bin/config |
|
|
11 | | WIFI_CONF_FILE="/etc/miio/wifi.conf" | | 10 | | GATEWAY=192.168.5.1 |
12 | | DEVICE_CONFIG_FILE="/etc/miio/device.conf" | | 11 | | NETMASK=255.255.255.0 |
13 | | WIFI_SETUP_SCRIPT="/usr/bin/do_start_ap.sh" | | |
14 | | | | |
15 | | WIFI_CONF_MONITOR="/usr/bin/wifi_conf_monitor.sh" | | |
|
17 | | 13 | | LOG_FILE=/data/log/wifi.log |
|
18 | | | | 14 | | WPA_SUPPLICANT_SCRIPT=/etc/init.d/wpa_supplicant.sh |
19 | | wifi_ap_mode() | | 15 | | WPA_SUPPLICANT_CONFIG_FILE=${WPA_CONF_FILE} |
20 | | { | | 16 | | |
21 | | # AP mode | | 17 | | mkdir -p /data/config/wifi |
22 | | MODEL=`cat $DEVICE_CONFIG_FILE | grep -v ^#` | | 18 | | |
23 | | MODEL=${MODEL##*model=} | | 19 | | if [ x"${AP_IF_NAME}" = x ]; then |
24 | | MODEL=`echo $MODEL | cut -d ' ' -f 1` | | 20 | | AP_IF_NAME=wlan1 |
25 | | vendor=`echo ${MODEL} | cut -d '.' -f 1` | | 21 | | fi |
26 | | product=`echo ${MODEL} | cut -d '.' -f 2` | | 22 | | |
27 | | version=`echo ${MODEL} | cut -d '.' -f 3` | | 23 | | if [ -z "${CHANNEL}" ]; then |
28 | | | | 24 | | CHANNEL=6 |
29 | | CMD="${WIFI_SETUP_SCRIPT} ${vendor}-${product}-${version}_miap$1 open" | | 25 | | fi |
| | 26 | | |
| | 27 | | # 支持畅快连一键配网时,设置为1;否则设置为0 |
| | 28 | | if [ "${MIIO_SDK_MJAC}" == "true" ]; then |
| | 29 | | MIIO_NET_AUTO_PROVISION=0 # 使用安全芯片的产品,不支持一键配网功能 |
| | 30 | | else |
| | 31 | | MIIO_NET_AUTO_PROVISION=1 # 非安全芯片的产品,默认支持一键配网功能 |
| | 32 | | fi |
| | 33 | | MIIO_NET_SMART_CONFIG=1 # 支持畅快连改密同步时,设置为1;否则设置为0 |
| | 34 | | |
| | 35 | | if [ $MIIO_NET_AUTO_PROVISION -eq 1 ]; then |
| | 36 | | ap_interface=${AP_IF_NAME} |
| | 37 | | else |
| | 38 | | ap_interface=${WIFI_NODE} |
| | 39 | | fi |
| | 40 | | sta_interface=${WIFI_NODE} |
| | 41 | | |
| | 42 | | get_bind_status() { |
| | 43 | | if [ -f ${WIFI_CONF_FILE} ]; then |
| | 44 | | bind_status="ok" |
| | 45 | | else |
| | 46 | | bind_status="" |
| | 47 | | fi |
| | 48 | | |
30 | | log "CMD=${CMD}" | | 49 | | log "bind_status: $bind_status" |
31 | | ${CMD} & | | 50 | | } |
| | 51 | | |
| | 52 | | update_wpa_conf_apsta() |
| | 53 | | { |
| | 54 | | cat <<EOF > $WPA_SUPPLICANT_CONFIG_FILE |
| | 55 | | ctrl_interface=/var/run/wpa_supplicant |
| | 56 | | update_config=1 |
| | 57 | | network={ |
| | 58 | | key_mgmt=WPA-PSK |
| | 59 | | proto=WPA WPA2 |
| | 60 | | scan_ssid=1 |
| | 61 | | } |
| | 62 | | EOF |
|
|
34 | | wifi_sta_mode() | | 65 | | hidden_update() |
35 | | { | | 66 | | { |
36 | | SSID="$1" | | 67 | | ssid=$1 |
37 | | PSK="$2" | | 68 | | bssid=$2 |
38 | | | | 69 | | |
39 | | if [ ! -f "${CONFIGNET_FLAG}" ]; then | | 70 | | cat <<EOF > $WPA_SUPPLICANT_CONFIG_FILE |
40 | | # One key Wi-Fi encryption function of Mijia router | | 71 | | ctrl_interface=/var/run/wpa_supplicant |
41 | | # After modifying the router password on the APP, it will be sent to the robot | | 72 | | update_config=1 |
42 | | set_wifi_light.sh flash_fast | | 73 | | network={ |
43 | | | | 74 | | ssid="$ssid" |
| | 75 | | bssid=$bssid |
| | 76 | | key_mgmt=NONE |
| | 77 | | scan_ssid=1 |
| | 78 | | } |
| | 79 | | EOF |
| | 80 | | } |
| | 81 | | |
| | 82 | | hidden_insert() |
| | 83 | | { |
| | 84 | | ssid=$1 |
| | 85 | | bssid=$2 |
| | 86 | | |
| | 87 | | cat <<EOF >> $WPA_SUPPLICANT_CONFIG_FILE |
| | 88 | | |
| | 89 | | network={ |
| | 90 | | ssid="$ssid" |
| | 91 | | bssid=$bssid |
| | 92 | | key_mgmt=NONE |
| | 93 | | scan_ssid=1 |
| | 94 | | } |
| | 95 | | EOF |
| | 96 | | } |
| | 97 | | |
| | 98 | | master_update() |
| | 99 | | { |
| | 100 | | ssid=$1 |
| | 101 | | passwd=$2 |
| | 102 | | |
| | 103 | | if [ x"$passwd" = x ]; then |
44 | | echo `date` "config net by router" >> ${LOG_FILE} | | 104 | | cat <<EOF > $WPA_SUPPLICANT_CONFIG_FILE |
45 | | killall -9 wifi_conf_monitor.sh | | 105 | | ctrl_interface=/var/run/wpa_supplicant |
46 | | if [ -n "$SSID" ];then | | 106 | | update_config=1 |
47 | | if [ -n "$PSK" ];then | | 107 | | network={ |
48 | | SSID="${SSID}" PSK="${PSK}" ${WIFI_CONF_MONITOR} & | | 108 | | ssid="$ssid" |
| | 109 | | key_mgmt=NONE |
| | 110 | | scan_ssid=1 |
| | 111 | | } |
| | 112 | | EOF |
| | 113 | | else |
| | 114 | | cat <<EOF > $WPA_SUPPLICANT_CONFIG_FILE |
| | 115 | | ctrl_interface=/var/run/wpa_supplicant |
| | 116 | | update_config=1 |
| | 117 | | network={ |
| | 118 | | ssid="$ssid" |
| | 119 | | psk="$passwd" |
| | 120 | | key_mgmt=WPA-PSK |
| | 121 | | proto=WPA WPA2 |
| | 122 | | scan_ssid=1 |
| | 123 | | } |
| | 124 | | EOF |
| | 125 | | fi |
| | 126 | | } |
| | 127 | | |
| | 128 | | master_insert() |
| | 129 | | { |
| | 130 | | ssid=$1 |
| | 131 | | passwd=$2 |
| | 132 | | |
| | 133 | | if [ x"$passwd" = x ]; then |
| | 134 | | |
| | 135 | | cat <<EOF >> $WPA_SUPPLICANT_CONFIG_FILE |
| | 136 | | |
| | 137 | | network={ |
| | 138 | | ssid="$ssid" |
| | 139 | | key_mgmt=NONE |
| | 140 | | scan_ssid=1 |
| | 141 | | } |
| | 142 | | EOF |
49 | | else | | 143 | | else |
| | 144 | | cat <<EOF >> $WPA_SUPPLICANT_CONFIG_FILE |
| | 145 | | |
| | 146 | | network={ |
| | 147 | | ssid="$ssid" |
50 | | SSID="${SSID}" ${WIFI_CONF_MONITOR} & | | 148 | | psk="$passwd" |
51 | | fi | | 149 | | key_mgmt=WPA-PSK |
52 | | else | | 150 | | proto=WPA WPA2 |
53 | | echo `date` "ssid is null" >> /tmp/wifi.log | | 151 | | scan_ssid=1 |
54 | | fi | | 152 | | } |
| | 153 | | EOF |
| | 154 | | fi |
| | 155 | | } |
| | 156 | | |
| | 157 | | update_wpa_conf_select_hidden() |
| | 158 | | { |
| | 159 | | hide_ssid=$1 |
| | 160 | | hide_bssid=$2 |
| | 161 | | |
| | 162 | | get_master_network |
| | 163 | | log "miio_ssid:$miio_ssid" |
| | 164 | | log "miio_passwd:$miio_passwd" |
| | 165 | | log "miio_ssid_5g:$miio_ssid_5g" |
| | 166 | | log "miio_passwd_5g:$miio_passwd_5g" |
| | 167 | | |
| | 168 | | get_bind_status |
| | 169 | | |
| | 170 | | if [ x"$bind_status" != x"ok" ]; then |
| | 171 | | hidden_update "$hide_ssid" "$hide_bssid" |
|
56 | | # start wifi station mode | | 173 | | hidden_update "$hide_ssid" "$hide_bssid" |
57 | | echo -n "STA" > ${CONFIGNET_FLAG} && sync | | |
58 | | # must wait for wifi_manager scan ap and get scan result, so need wait 5s + 3s | | |
59 | | sleep 8 | | |
60 | | rm -f ${AP_FLAG} && sync | | |
61 | | | | |
62 | | if [ -n "$SSID" ];then | | |
63 | | if [ -n "$PSK" ];then | | 174 | | if [ x"$miio_ssid" != x ]; then |
64 | | LEN=`echo "${PSK}" | awk '{print length($0)}'` | | 175 | | master_insert "$miio_ssid" "$miio_passwd" |
65 | | echo "SSID=\"${SSID}\" PWD=\"${PSK}\" PWD_LEN=${LEN}" >> /tmp/wifi.log | | 176 | | fi |
66 | | if [ ${LEN} -lt 8 ]; then | | 177 | | if [ x"$miio_ssid_5g" != x ]; then |
67 | | SSID="${SSID}" STATE="PWD_ERROR" /usr/bin/wifi_state.sh & | | |
68 | | log "pwd wrong" | | |
69 | | else | | |
70 | | wifi_cli "${SSID}" "${PSK}" | | |
71 | | fi | | |
72 | | else | | |
73 | | wifi_cli "${SSID}" "${PSK}" | | 178 | | master_insert "$miio_ssid_5g" "$miio_passwd_5g" |
74 | | fi | | |
|
|
|
|
| | 183 | | update_wpa_conf_select_master() |
| | 184 | | { |
| | 185 | | miio_ssid=$1 |
| | 186 | | miio_passwd=$2 |
| | 187 | | miio_ssid_5g=$3 |
| | 188 | | miio_passwd_5g=$4 |
| | 189 | | net_added=0 |
| | 190 | | |
| | 191 | | if [ x"$miio_ssid_5g" != x ]; then |
| | 192 | | master_update "$miio_ssid_5g" "$miio_passwd_5g" |
| | 193 | | net_added=1 |
| | 194 | | fi |
| | 195 | | |
| | 196 | | if [ x"$miio_ssid" != x ]; then |
| | 197 | | if [ $net_added -eq 0 ]; then |
| | 198 | | master_update "$miio_ssid" "$miio_passwd" |
| | 199 | | else |
| | 200 | | master_insert "$miio_ssid" "$miio_passwd" |
| | 201 | | fi |
| | 202 | | fi |
| | 203 | | } |
| | 204 | | |
| | 205 | | get_mac() |
| | 206 | | { |
| | 207 | | macstring= |
252 skipped lines |
| | 460 | | |
| | 461 | | # clear ip address |
| | 462 | | ipaddr flush $sta_interface |
| | 463 | | ipaddr flush $ap_interface |
| | 464 | | |
| | 465 | | ifconfig $ap_interface down |
| | 466 | | ifconfig $sta_interface down |
| | 467 | | |
| | 468 | | ifconfig $sta_interface up |
| | 469 | | #iwconfig $sta_interface mode Managed |
| | 470 | | |
| | 471 | | # start wpa_supplicant |
| | 472 | | ${WPA_SUPPLICANT_SCRIPT} ${sta_interface} ${WPA_SUPPLICANT_CONFIG_FILE} |
| | 473 | | |
| | 474 | | # 关闭防火墙 |
| | 475 | | firewall_close |
| | 476 | | |
| | 477 | | # start get ip |
| | 478 | | get_ip |
| | 479 | | |
| | 480 | | log `wpa_cli -i $sta_interface list_network` |
| | 481 | | log "end_time: select master ssid" |
| | 482 | | echo `date` "finish select master ssid" >> ${LOG_FILE} |
| | 483 | | } |
| | 484 | | |
79 | | get_ssid_passwd() | | 485 | | get_master_network() |
80 | | { | | 486 | | { |
81 | | STRING=`sed -n '/^key_mgmt=/p' $WIFI_CONF_FILE` | | 487 | | key_mgmt=`sed -n '/^key_mgmt=/p' ${WIFI_CONF_FILE}` |
82 | | key_mgmt=${STRING##*key_mgmt=} | | 488 | | key_mgmt=${key_mgmt##*key_mgmt=} |
83 | | | | |
84 | | 489 | | if [ $key_mgmt == "NONE" ]; then |
|
85 | | passwd="" | | 490 | | miio_passwd="" |
86 | | | | 491 | | else |
87 | | STRING=`sed -n '/^ssid=/p' $WIFI_CONF_FILE` | | 492 | | miio_passwd=`sed -n '/^psk=/p' ${WIFI_CONF_FILE}` |
88 | | ssid=${STRING#*ssid=\"} | | 493 | | miio_passwd=${miio_passwd#*psk=\"} |
89 | | ssid=${ssid%\"*} | | 494 | | miio_passwd=${miio_passwd%\"*} |
90 | | else | | 495 | | fi |
91 | | STRING=`sed -n '/^ssid=/p' $WIFI_CONF_FILE` | | 496 | | miio_ssid=`sed -n '/^ssid=/p' ${WIFI_CONF_FILE}` |
92 | | ssid=${STRING#*ssid=\"} | | 497 | | miio_ssid=${miio_ssid#*ssid=\"} |
93 | | ssid=${ssid%\"*} | | 498 | | miio_ssid=${miio_ssid%\"*} |
94 | | | | 499 | | |
| | 500 | | key_mgmt_5g=`sed -n '/^key_mgmt_5g=/p' ${WIFI_CONF_FILE}` |
| | 501 | | key_mgmt_5g=${key_mgmt_5g##*key_mgmt_5g=} |
| | 502 | | if [ $key_mgmt_5g == "NONE" ]; then |
| | 503 | | miio_passwd_5g="" |
| | 504 | | else |
95 | | STRING=`sed -n '/^psk=/p' $WIFI_CONF_FILE` | | 505 | | miio_passwd_5g=`sed -n '/^psk_5g=/p' ${WIFI_CONF_FILE}` |
96 | | passwd=${STRING#*psk=\"} | | 506 | | miio_passwd_5g=${miio_passwd_5g#*psk_5g=\"} |
97 | | passwd=${passwd%\"*} | | 507 | | miio_passwd_5g=${miio_passwd_5g%\"*} |
|
| | 509 | | miio_ssid_5g=`sed -n '/^ssid_5g=/p' ${WIFI_CONF_FILE}` |
| | 510 | | miio_ssid_5g=${miio_ssid_5g#*ssid_5g=\"} |
| | 511 | | miio_ssid_5g=${miio_ssid_5g%\"*} |
| | 512 | | } |
| | 513 | | |
| | 514 | | # wifi_reconnect(offline time = 15min) |
| | 515 | | # restart wpa_supplicant dhcp/dns and network |
| | 516 | | wifi_reconnect() |
| | 517 | | { |
| | 518 | | ifconfig $sta_interface down |
| | 519 | | ifconfig $sta_interface up |
| | 520 | | |
| | 521 | | sleep 1 |
| | 522 | | killall -9 wpa_supplicant |
| | 523 | | ${WPA_SUPPLICANT_SCRIPT} ${sta_interface} ${WPA_SUPPLICANT_CONFIG_FILE} |
| | 524 | | sleep 1 |
| | 525 | | get_ip |
| | 526 | | #sleep 1 |
| | 527 | | |
| | 528 | | # 重启dns,清除dns缓存 |
| | 529 | | #/etc/init.d/network restart |
| | 530 | | |
| | 531 | | #sleep 1 |
| | 532 | | } |
| | 533 | | |
| | 534 | | # wifi_reload (offline time = 60min) |
| | 535 | | # reload kernel of wifi |
| | 536 | | # restart wpa_supplicant dhcp/dns and network |
| | 537 | | # restart miio_client |
| | 538 | | wifi_reload() |
| | 539 | | { |
| | 540 | | # 重启驱动 |
| | 541 | | ifconfig $sta_interface down |
| | 542 | | sleep 1 |
| | 543 | | /usr/bin/wifi_act.sh rmmod |
| | 544 | | sleep 2 |
| | 545 | | /etc/init.d/wifi.sh |
| | 546 | | sleep 1 |
| | 547 | | ifconfig $sta_interface up |
| | 548 | | sleep 1 |
| | 549 | | |
| | 550 | | wifi_reconnect |
| | 551 | | |
| | 552 | | # 重启OT |
| | 553 | | /etc/rc.d/miio.sh stop |
| | 554 | | sleep 1 |
| | 555 | | /etc/rc.d/miio.sh |
|
|
|
|
| | 560 | | get_bind_status |
| | 561 | | |
103 | | if [ -e $WIFI_CONF_FILE ]; then | | 562 | | if [ x"$1" = x"SET_AP_MODE" ]; then |
104 | | get_ssid_passwd | | 563 | | wifi_ap_mode |
| | 564 | | fi |
| | 565 | | if [ x"$1" = x"SET_APSTA_MODE" ]; then |
105 | | wifi_sta_mode "$ssid" "$passwd" | | 566 | | wifi_apsta_mode |
106 | | else | | 567 | | fi |
107 | | STRING=`ifconfig wlan0` | | 568 | | if [ x"$1" = x"CLOSE_STA_MODE" ]; then |
108 | | | | 569 | | wifi_close_sta_mode |
109 | | macstring=${STRING##*HWaddr } | | 570 | | fi |
110 | | macstring=`echo ${macstring} | cut -d ' ' -f 1` | | 571 | | |
111 | | | | 572 | | if [ x"$1" = x"SELECT_HIDDEN" ]; then |
112 | | mac1=`echo ${macstring} | cut -d ':' -f 5` | | 573 | | hide_ssid=$2 |
113 | | mac2=`echo ${macstring} | cut -d ':' -f 6` | | 574 | | hide_bssid=$3 |
114 | | MAC=${mac1}${mac2} | | 575 | | select_hidden_ssid "$hide_ssid" "$hide_bssid" |
115 | | | | 576 | | fi |
| | 577 | | if [ x"$1" = x"SELECT_MASTER" ]; then |
| | 578 | | get_master_network |
| | 579 | | select_master_ssid "$miio_ssid" "$miio_passwd" "$miio_ssid_5g" "$miio_passwd_5g" |
| | 580 | | fi |
| | 581 | | |
| | 582 | | if [ x"$1" = x"WIFI_RECONNECT" ]; then |
| | 583 | | wifi_reconnect |
| | 584 | | fi |
| | 585 | | if [ x"$1" = x"WIFI_RELOAD" ]; then |
| | 586 | | wifi_reload |
| | 587 | | fi |
| | 588 | | |
| | 589 | | if [ x"$bind_status" = x"ok" ] && [ "$#" = 0 ]; then |
| | 590 | | get_master_network |
| | 591 | | select_master_ssid "$miio_ssid" "$miio_passwd" "$miio_ssid_5g" "$miio_passwd_5g" |
| | 592 | | fi |
| | 593 | | if [ x"$bind_status" != x"ok" ] && [ "$#" = 0 ]; then |
| | 594 | | if [ $MIIO_NET_AUTO_PROVISION -eq 1 ]; then |
| | 595 | | wifi_apsta_mode |
| | 596 | | else |
116 | | #wifi_ap_mode $MAC | | 597 | | # wifi_ap_mode |
| | 598 | | wifi_sta_mode |
| | 599 | | fi |
|
|
|
120 | | start | | 603 | | start $1 $2 $3 |
|