Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Close #351: Enable WPS to automatically configure Wi-Fi #355

Merged
merged 4 commits into from
Dec 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions scripts/ruuvi_gw_http_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -672,6 +672,36 @@ def _do_post_connect_json(self):
print(f'Response: {resp}')
self.wfile.write(resp)

def _do_post_connect_wps(self):
global g_ssid
global g_password
global g_timestamp
global g_simulation_mode
resp = b''
req_dict = self._ecdh_decrypt_request_json(g_aes_key)
if req_dict is None:
resp += f'HTTP/1.0 400 Bad Request\r\n'.encode('ascii')
resp += f'Content-Length: 0\r\n'.encode('ascii')
resp += f'\r\n'.encode('ascii')
print(f'Response: {resp}')
self.wfile.write(resp)
return
g_ssid = 'Pantum-AP-A6D49F'
g_password = '12345678'
g_timestamp = time.time()
g_simulation_mode = SIMULATION_MODE_NO_CONNECTION
resp_content = f'{{}}'
resp_content_encoded = resp_content.encode('utf-8')
resp += f'HTTP/1.0 200 OK\r\n'.encode('ascii')
resp += f'Content-type: application/json\r\n'.encode('ascii')
resp += f'Cache-Control: no-store, no-cache, must-revalidate, max-age=0\r\n'.encode('ascii')
resp += f'Pragma: no-cache\r\n'.encode('ascii')
resp += f'Content-Length: {len(resp_content_encoded)}\r\n'.encode('ascii')
resp += f'\r\n'.encode('ascii')
resp += resp_content_encoded
print(f'Response: {resp}')
self.wfile.write(resp)

def _do_post_ruuvi_json(self):
global g_ruuvi_dict
global g_authorized_sessions
Expand Down Expand Up @@ -903,6 +933,8 @@ def do_POST(self):
self._do_post_auth()
elif self.path == '/connect.json':
self._do_post_connect_json()
elif self.path == '/connect_wps':
self._do_post_connect_wps()
elif self.path == '/ruuvi.json':
self._do_post_ruuvi_json()
elif self.path == '/bluetooth_scanning.json':
Expand Down
198 changes: 117 additions & 81 deletions src/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -443,104 +443,117 @@ <h1>
Valitse langaton verkko, jonka kautta haluat Ruuvi Gatewayn olevan yhteydessä internetiin.</p>
</div>

<div style="display: flex; justify-content: right">
<span lang="en">Sort by:&nbsp;</span>
<span lang="fi">Järjestä:&nbsp;</span>
<div id="wifi_connection-sort_order" class="language-switcher">
<ul>
<li>
<button id="wifi_connection-sort_order-by_name" class="language-switcher-active button-link">
<span lang="en">Name</span>
<span lang="fi">Nimi</span>
</button>
</li>
<li class="language-switcher-separator">|</li>
<li>
<button id="wifi_connection-sort_order-by_rssi" class="button-link"><span>RSSI</span></button>
</li>
</ul>
</div>
<div id="wifi_connection-use_wps-div">
<label for="wifi_connection-use_wps" class="control control-checkbox">
<span class="info-icon-left-column">
<span lang="en">Use WPS to connect to Wi-Fi network</span>
<span lang="fi">Käytä WPS:ää yhteyden muodostamiseen Wi-Fi-verkkoon</span>
<input type="checkbox" id="wifi_connection-use_wps">
<span class="control_indicator"></span>
</span>
</label>
</div>

<div id="page-wifi_connection-no_wifi" class="hidden">
<div class="border"></div>
<div class="block-centered err-message">
<span lang="en">No Wi-Fi networks found.</span>
<span lang="fi">Wi-Fi-verkkoja ei löytynyt.</span>
<div id="wifi_connection-list_of_wifi">
<div style="display: flex; justify-content: right">
<span lang="en">Sort by:&nbsp;</span>
<span lang="fi">Järjestä:&nbsp;</span>
<div id="wifi_connection-sort_order" class="language-switcher">
<ul>
<li>
<button id="wifi_connection-sort_order-by_name" class="language-switcher-active button-link">
<span lang="en">Name</span>
<span lang="fi">Nimi</span>
</button>
</li>
<li class="language-switcher-separator">|</li>
<li>
<button id="wifi_connection-sort_order-by_rssi" class="button-link"><span>RSSI</span></button>
</li>
</ul>
</div>
</div>
<div class="border"></div>
</div>
<div id="page-wifi_connection-list_of_ssid" class="wifi-list"></div>

<div id="page-wifi_connection-advanced-button" class="btn-dropdown">
<h2>
<span lang="en">Advanced settings</span>
<span lang="fi">Edistyneet asetukset</span>
</h2>
<div class="btn-dropdown-arrow-down"></div>
<div class="btn-dropdown-arrow-up hidden"></div>
</div>
<div id="page-wifi_connection-no_wifi" class="hidden">
<div class="border"></div>
<div class="block-centered err-message">
<span lang="en">No Wi-Fi networks found.</span>
<span lang="fi">Wi-Fi-verkkoja ei löytynyt.</span>
</div>
<div class="border"></div>
</div>
<div id="page-wifi_connection-list_of_ssid" class="wifi-list"></div>

<div id="page-wifi_connection-advanced-dropdown" class="hidden">
<p>
<span lang="en">If your network is hidden, you can connect manually.</span>
<span lang="fi">Mikäli verkkosi on piilotettu voit muodostaa yhdeyden manuaalisesti.</span>
</p>
<div id="page-wifi_connection-advanced-button" class="btn-dropdown">
<h2>
<span lang="en">Advanced settings</span>
<span lang="fi">Edistyneet asetukset</span>
</h2>
<div class="btn-dropdown-arrow-down"></div>
<div class="btn-dropdown-arrow-up hidden"></div>
</div>

<label class="control control-radio">
<span lang="en">Connect manually</span>
<span lang="fi">Yhdistä manuaalisesti</span>
<input type="radio" id="page-wifi_connection-radio-connect_manually" value="" name="wifi-name">
<span class="control_indicator"></span>
</label>
<div id="page-wifi_connection-advanced-dropdown" class="hidden">
<p>
<span lang="en">If your network is hidden, you can connect manually.</span>
<span lang="fi">Mikäli verkkosi on piilotettu voit muodostaa yhdeyden manuaalisesti.</span>
</p>

<div id="page-wifi_connection-ssid_password-wrap"></div>
</div>
<label class="control control-radio">
<span lang="en">Connect manually</span>
<span lang="fi">Yhdistä manuaalisesti</span>
<input type="radio" id="page-wifi_connection-radio-connect_manually" value="" name="wifi-name">
<span class="control_indicator"></span>
</label>

<div style="position: absolute" id="page-wifi_connection-ssid_password" class="indent hidden">
<div id="input_ssid_block">
<h3>
<label for="manual_ssid">
<span lang="en">SSID (network name)</span>
<span lang="fi">SSID (verkon nimi)</span>
</label>
</h3>
<input type="text" id="manual_ssid" class="connection-field-manual">
<div class="input-placeholder">
<span lang="en">Network name</span>
<span lang="fi">Verkon nimi</span>
</div>
<div id="page-wifi_connection-ssid_password-wrap"></div>
</div>

<div id="input_password_block" class="hidden">
<h3>
<label for="pwd">
<span lang="en">Password</span>
<span lang="fi">Salasana</span>
</label>
</h3>
<div class="input-password">
<input type="password" id="pwd" class="connection-field">
<div class="input-password-eye">
<div class="eye">
<div style="position: absolute" id="page-wifi_connection-ssid_password" class="indent hidden">
<div id="input_ssid_block">
<h3>
<label for="manual_ssid">
<span lang="en">SSID (network name)</span>
<span lang="fi">SSID (verkon nimi)</span>
</label>
</h3>
<input type="text" id="manual_ssid" class="connection-field-manual">
<div class="input-placeholder">
<span lang="en">Network name</span>
<span lang="fi">Verkon nimi</span>
</div>
</div>

<div id="input_password_block" class="hidden">
<h3>
<label for="pwd">
<span lang="en">Password</span>
<span lang="fi">Salasana</span>
</label>
</h3>
<div class="input-password">
<input type="password" id="pwd" class="connection-field">
<div class="input-password-eye">
<div class="eye">
</div>
<div class="eye-slash hidden">
</div>
</div>
<div class="eye-slash hidden">
<div class="input-placeholder">
<span lang="en">Password</span>
<span lang="fi">Salasana</span>
</div>
</div>
<div class="input-placeholder">
<span lang="en">Password</span>
<span lang="fi">Salasana</span>
</div>
</div>
</div>

<div id="wifi-connection-status-block" class="hidden" style="height: 20px">
<div id="wifi-connection-failed" class="err-message">
<span lang="en">Failed to connect. Please try again.</span>
<span lang="fi">Yhdistäminen epäonnistui. Yritä uudelleen.</span>
<div id="wifi-connection-status-block" class="hidden" style="height: 20px">
<div id="wifi-connection-failed" class="err-message">
<span lang="en">Failed to connect. Please try again.</span>
<span lang="fi">Yhdistäminen epäonnistui. Yritä uudelleen.</span>
</div>
</div>
</div>

</div>
</div>

<div class="button-container">
Expand Down Expand Up @@ -3219,6 +3232,29 @@ <h2>
</div>
</div>
</div>

<div class="hidden overlay-container" id="overlay-connect_wifi_wps">
<div class="overlay">
<p>
<span lang="en">
Please start WPS (Wi-Fi Protected Setup) on your router by pressing on the WPS button.
Note that Ruuvi Gateway works on 2.4 GHz frequency. Refer to your router's documentation
to set up WPS to work on 2.4 GHz frequency if needed.
</span>
<span lang="fi">
Käynnistä WPS-yhdistäminen (Wi-Fi Protected Setup) painamalla reitittimessäsi olevaa
WPS-painiketta. Huomaa, että Ruuvi Gatewayn yhdistäminen WPS:n avulla toimii ainoastaan
2,4 GHz:n Wi-Fi-verkossa. Lue lisätietoja reitittimesi käyttöohjeesta.
</span>
</p>
<div class="button-container-centered">
<button class="btn" id="overlay-connect_wifi_wps-cancel" type="button">
<span lang="en">Cancel</span>
<span lang="fi">Peruuttaa</span>
</button>
</div>
</div>
</div>
</div>

<footer id="app-footer">
Expand Down
Loading
Loading