/
stepone
/
climate-mm
Обзор
Документация
Войти
/
stepone
/
climate-mm
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
get_server.py
79 строк
2 KB
Stepan Egorov
первая загрузка
30 дек 2024, 00:13
30 дек 2024, 00:13
1e6f5e4
Код
Авторство
О чём код?
''' Get server params ''' import gc import usocket as socket import json import utime as time # Import project settings import params def to_json(project_id=None, **collector): ''' Add params to JSON ''' # Prepare dict to serialize data = {'project_id': project_id} # Micropython can not add nested dict in one string data.update(collector) return json.dumps(data) def get_server_params(project_id=None, **kwargs): ''' Get server IP addres ''' gc.collect() # Create socket to send request sender = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # Set SO_REUSEADDR to True - any app can listen this socket sender.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # Set SO_BROADCAST to true - listen broadcast packets sender.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True) # Bind socket to server IP sender.bind(('0.0.0.0', params.SERVER_LISTENER_PORT)) # Set socket as non blocked sender.setblocking(False) # Waiting loop while True: # Prepare request to server data = to_json(project_id=project_id, collector=kwargs) print(f'Send request: {data}') # Send broadcast message with project ID and collector parameters sender.sendto(data, ('255.255.255.255', params.SERVER_LISTENER_PORT)) # Wait some time to server # time.sleep_ms(params.SERVER_LISTENER_REQUEST_WAIT) # Try to read replay from socket try: # Read from socket message = sender.recvfrom(500) # Expect replay is valid and return servers params # TODO: Add replay validation print(f'Get server params: {json.loads(message[0])}') sender.close() return json.loads(message[0]) # If socket dont have data or can't be read except Exception as error: # Printt error print(f'No replay from server: {error}') gc.collect() time.sleep(1) # Continue loop to succsess def main(): ''' Test module ''' srv = get_server_params(project_id=params.PROJECT_ID, param1=123, param2="string") print(f'Server params: {srv}') if __name__ == '__main__': main()