Обмен RaspberryPi между клиентом WLAN и AccessPoint - PullRequest
1 голос
/ 30 сентября 2019

В настоящее время я пытаюсь настроить Wi-Fi RaspberryPI 3 A +.

Я следовал этому руководству: здесь , чтобы сделать Raspberry точкой доступа WiFi. теперь у меня работает небольшой веб-сервер Flask. С этим я хочу деактивировать AP и вместо этого подключить Raspberry к Wi-Fi.

Но это не работает.

Так что я активирую AP через:

    def setAP(ssid, pw):
        os.system('sudo systemctl stop dnsmasq')
        os.system('sudo systemctl stop hostapd')

        if not os.path.isfile('/etc/dhcpcd.conf.orig'):
            os.system('sudo mv /etc/dhcpcd.conf /etc/dhcpcd.conf.orig') 
            with open('/etc/dhcpcd.conf', "a+") as f:
                dat = f.read()
                if " static ip_address" not in dat:
                    f.write("interface wlan0\n static ip_address=192.168.4.1/24\n   nohook wpa_supplicant")

        os.system('sudo service dhcpcd restart')

        if not os.path.isfile('/etc/dnsmasq.conf.orig'):
            os.system('sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig')       
            with open('/etc/dnsmasq.conf', 'w') as f:
                f.write("interface=wlan0\n")
                f.write("dhcp-range = 192.168.4.2,192.168.4.20,255.255.255.0,24h\n")

        os.system('sudo service dnsmasq restart')

        with open('/etc/hostapd/hostapd.conf', "w") as f:
            f.write("interface=wlan0\n")
            f.write("driver=nl80211\n")
            f.write("ssid={:}\n".format(ssid))
            f.write("hw_mode=g\n")
            f.write("channel=7\n")
            f.write("wmm_enabled=0\n")
            f.write("macaddr_acl=0\n")
            f.write("auth_algs=1\n")
            f.write("ignore_broadcast_ssid=0\n")
            f.write("wpa=2\n")
            f.write("wpa_passphrase={:}\n".format(pw))
            f.write("wpa_key_mgmt=WPA-PSK\n")
            f.write("wpa_pairwise=TKIP\n")
            f.write("rsn_pairwise=CCMP\n")

        with open('/etc/default/hostapd', "w") as f:
            f.write('DAEMON_CONF="/etc/hostapd/hostapd.conf"')

        os.system('sudo systemctl unmask hostapd')
        os.system('sudo systemctl enable hostapd')
        os.system('sudo systemctl start hostapd')

Затем я попытаюсь изменить это через:

    def setClient(ssid, pw, dhcp=True, ip=""):
        os.system('sudo systemctl stop dnsmasq')
        os.system('sudo systemctl stop hostapd')

        if os.path.isfile('/etc/dhcpcd.conf.orig'):
            os.system('sudo mv /etc/dhcpcd.conf.orig /etc/dhcpcd.conf') 

        os.system('sudo service dhcpcd restart')

        if os.path.isfile('/etc/dnsmasq.conf.orig'):
            print('configure dhcp')
            os.system('sudo mv /etc/dnsmasq.conf.orig /etc/dnsmasq.conf')   

        with open('/etc/default/hostapd', "w") as f:
            f.write(' ')


        if not os.path.isfile('/etc/wpa_supplicant/wpa_supplicant.conf.orig'):
            os.system('sudo mv /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf.orig')   

И подключиться к Wi-Fi:

    os.system('sudo mv /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf.orig')   

    with open('/etc/wpa_supplicant/wpa_supplicant.conf', 'w+') as f:
        f.write('ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev\n')
        f.write('update_config=1\n')
        f.write('country=DE\n\n')
        f.write('network={\n')
        f.write('\tssid="{:}"\n'.format(ssid))
        f.write('\tpsk="{:}"\n'.format(pw))
        f.write('}')
    os.system('sudo wpa_cli -i wlan0 reconfigure')

и здесь я получаю сообщение об ошибке:

Failed to connect to non-global ctrl_ifname: wlan0  error: No such file or directory

также теперь я не могу подключиться к Wi-Fi с графическим интерфейсом или raspi-config. Он говорит мне "беспроводной интерфейс не найден". с ifconfig я все еще вижу wlan0 - но это случайно? IP-адрес.

И точка доступа все еще активна.

кто-то знает, что я делаю не так? или несколько советов, как это сделать лучше?

...