
Diana
23.05.2018
09:32:48
Привет, я делаю примерно то что тебе надо, сам конечно не профи, но думаю тебе поможет: придется разобраться со стороны питона с asyncio, websockets(я использую библиотеку которая так и называется websockets и она на основе asyncio), sqlite3 - бд для записи данных с датчиков, со стороны веба понадобиться слегка разобраться с JS и как минимум с библиотеками d3.js или попроще например plotly.js чтобы рисовать красивые графики. И еще вместо ардуино лучше возьми esp8266 или esp32 с прошивкой micropython
Спасибо за развёрнутый ответ!
Ардуино у меня как данность, которая уже есть в проекте (их там даже две, к одной идёт обращение с распберри и управление второй ардуино, а вторая уже общается с датчиками и выполняет простые действия типа вкл/выкл каких-то элементов). Пока с ними особо не взаимодействую, но возможно, буду и с ардуино разбираться и программировать. Но я спрошу у ребят про esp, спасибо :)


Sergey
23.05.2018
09:40:38
@lig11 вполне правильно объяснил, что можно задачу декомпозировать, сделать примитивный PoC, а там уже по необходимости прикручивать, если надо. Хоть вебсокеты, хоть graphql, хоть influxdb
И реакта туда?

Google

Dmitry
23.05.2018
09:47:33
triggered

Andrey
23.05.2018
10:02:24
ну оба сразу то зачем

Sergey
23.05.2018
10:03:30
>Н — надёжность
FTFY

Dmitry
23.05.2018
13:35:18
была здесь пара человек)
Я пользовался, практическая польза не обнаружена
это было аж вот как давно: https://t.me/spbpython/33611
короче в истории можешь поискать)
лично считаю что проперти-бэйзд тесты это клёво!
а тебе зачем?)

Michael
23.05.2018
13:46:28
Ну тебе тут ADT прийдется описывать
в целом норм но хз, может с тайпингом они прокуачают его

Dmitry
23.05.2018
13:48:07
может тебе нужен фаззинг?
хотя Hypothesis вроде умеет в него

Google

Aleksandr
23.05.2018
14:07:16
Важно понимать что гипотезы не про фазинг, а про анализ какого то инвариантного относительно входа и, внезапно, выхода свойства. Раз свойство инвариантно, то вход можно генерить из говна и палок (фазить т.е.) а аутпут вообще не важен, важно только некоторое свойство аутпута или того как эти аутпуты коррелируют друг с другом.
Фазинг тут скорее допустимая имплементация
Скажем тестишь ты очередь с приоритетом - вход, да и выход на аппенд и поп не важны, важно только что приоритет с каждым попом падает


Marco
23.05.2018
14:18:06
Привет :)
Подскажите, пожалуйста, что почитать и какие технологии лучше выбрать (никогда ничего подобного не делала, бэграунд базовый курс на степике по питону), если нужно сделать такое:
поднять сервер на raspberry, который должен выполнять функции:
* отправка управляющих команд дальше на arduino (пока что это просто отправка строки json),
* уметь запрашивать показания датчиков с ардуино с заданной периодичностью и принимать их (посредством также, отправки и получении json строки),
* работа с БД: запись полученных данных в БД, считывание при запросе
* взаимодействие с пользователем через веб-страницу: ввод каких-то изначальных данных пользователем, которые дальше формируются уже в запрос для ардуино); отображение данных, отображающее текущее состояние ардуино, составление и отображение графиков на основе данных с датчиков.
Нагуглила python-eve, но не уверена, что это вообще то, что нужно. Да и какого-то общего представления, как такое делать нет, буду рада, если направите в нужную сторону))
Саму веб-страницу тоже нужно написать (можно ли это делать посредством питона, типа какого-то фреймворка, который всё странслирует в js? или лучше с самим js разобраться, и делать на нём?)
Задача довольно типичная (неоднократно брал такие проекты), но есть несколько моментов, на которые нужно обратить внимание:
- Подключаться лучше через ttl serial, а не через usb. Это упрощает взаимодействие и избавляет от лишних задержек (недетерминированных) при передаче данных.
- Распбери 3.3v, ардуино - 5v. Для согласования уровней можно использовать logic level converter, но проще взять голую ATmega328P, залить на неё бутлодер ардуино, и запитать от 3.3v.
- Земля у распбери и ардуино обязательно должна быть общая, т.к. ttl не имеет гальванической развязки.
- Ардуино - это realtime окружение, распбери - нет. Опрос датчиков нужно производить на самой ардуино (с заданной периодичностью), и слать все результаты на распберри. Если требуется незамедлительная реакция (сигнализация или изменение состояния других устройств) это тоже нужно делать на ардуино.
- В пакеты данных при передаче между ардуино и распбери нужно добавлять контрольную сумму и проверять её на другом конце. Иначе иногда, вследствие помех или плохого контакта, будут появляться искажённые показания или происходить неправильная реакция на команды. Желательно немного усложнить протокол - добавить подтверждение доставки. Повторная отправка битых пакетов в некоторых случаях требуется, но при этом существенно возрастает сложность отладки, поэтому лучше просто протоколировать ошибки и уведомлять администратора о сбоях.
- Распбери в качестве веб-сервера и сервера баз данных - это плохая идея. Лучше вынести эти функции на VPS в датацентре. SD карты при регулярной записи данных быстро изнашиваются и дохнут в самый неподходящий момент. Процессор довольно слабенький, память медленная, сетевая карта висит на usb 2.0 - всё это добро может упасть в случае наплыва посетителей. Если распбери не грузить, она работает довольно стабильно.
- Альтернатива атмеге - stm32. Они лучше по всем позициям кроме более высокого порога входа. Если возможностей атмега хватает, я бы взял именно её - проще будет находить разработчиков для поддержки / внедрения новой функциональности.
- Вместо распберри можно использовать Ethernet Shield, TTL UART to Ethernet Module, или TP-Link TL-MR3020 / TL-WR902AC (с прошивкой openwrt / lede, подключившись через usb или подпаявшись к gpio), но если распбери уже используется в проекте, то пусть используется и дальше.
Весь проект можно условно разделить на следующие части:
- протокол взаимодействия между ардуино и распбери
- прошивка ардуино
- скрипт на raspberry, который будет отправлять команды на ардуино, принимать показания датчиков, и пересылать их на VPS
- rest api между веб сервером и raspberry
- django или flask на VPS


Serge
23.05.2018
14:45:41
ой
In [4]: pow(pow(pow(10, 10), 10), 10)
---------------------------------------------------------------------------
OverflowError Traceback (most recent call last)
<ipython-input-4-9a9fd5e0f2a8> in <module>()
----> 1 pow(pow(pow(10, 10), 10), 10)
OverflowError: math range error


Хыиуду
23.05.2018
14:48:24
ой
In [4]: pow(pow(pow(10, 10), 10), 10)
---------------------------------------------------------------------------
OverflowError Traceback (most recent call last)
<ipython-input-4-9a9fd5e0f2a8> in <module>()
----> 1 pow(pow(pow(10, 10), 10), 10)
OverflowError: math range error
Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 17:26:49) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
»> pow(pow(pow(10, 10), 10), 10)
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
ЧЯДНТ?


Маша
23.05.2018
14:51:56
гуголплекс!

Хыиуду
23.05.2018
14:53:26
Не, не он
Это по факту 10^1000. А гуголплекс - это 10^(10^100)

Serge
23.05.2018
15:02:49


Roman
23.05.2018
15:07:34

Serge
23.05.2018
15:08:09
одно сохраняет тип, другое всегда приводит к float.
удобно. очень удобно и всё логично

Aleksandr
23.05.2018
15:10:15

Serge
23.05.2018
15:11:03

Aleksandr
23.05.2018
15:11:04
питон говно какое то короче, ну что тут добавить

Google

Aleksandr
23.05.2018
15:11:30
от питона ничего не жду
всё очень плохо
на хаскеле писать нада, очевидно же

Некто
23.05.2018
15:13:08
Я ждала реплику про плюсы. Не угадала.

Dmitry
23.05.2018
15:13:41
у плюсов всего 2 плюса. а у хаскеля ...

Hot
23.05.2018
15:13:52
Смешно.

Некто
23.05.2018
15:14:00
Да

Dmitry
23.05.2018
15:14:14
языки похожи?
или там на нём пишут?

Aleksandr
23.05.2018
15:15:34
не знаю, не получается у меня связать азиатов и ленивое исполнение, как то наоборот

Некто
23.05.2018
15:16:33

Aleksandr
23.05.2018
15:17:02
китайцы которые не китайцы, лол

Aleksandr
23.05.2018
15:17:18

Dmitry
23.05.2018
15:17:31
гонконгцы
ужс

Admin
ERROR: S client not available

Некто
23.05.2018
15:18:07
Хотела найти грустный стикер, но есть только такие.

Dmitry
23.05.2018
15:21:57
посмотрел фото с гонконгского FP митапа - там они есть)
но на удивление там их 50%)

Aleksandr
23.05.2018
15:23:18
китайцы очень стремятся попасть в гк кстати, считается пристижным местом дофига

Google

Dmitry
23.05.2018
15:23:24
наверное там прикольно

Aleksandr
23.05.2018
15:23:25
наоборот неверно
я не был, жена говорит там нормас
я был в сингапуре - тоже нормас

Dmitry
23.05.2018
15:25:15
вроде Лёша говорил что в ГК нет налогов. или это в Сингапуре

Aleksandr
23.05.2018
15:25:45
я нинаю
знаю что раньше в сингапуре с налогами было очень просто - их считай не было для иностранных юрлиц
поэтому и экономика рывком развилась

Dmitry
23.05.2018
15:26:24
вот бы нам

Aleksandr
23.05.2018
15:26:50
ну хз, у нас вот валежник можно собирать
я считаю годный трейдоф

Dmitry
23.05.2018
15:27:17
мой коллега тоже радуется

Max
23.05.2018
15:31:06
А попадались кому клаудпровайдеры с широким bandwidth(ну кроме хетзнера) за разумные деньги по штатам/европпам?

Marco
23.05.2018
17:49:30

Артур
23.05.2018
18:12:04

Serge
23.05.2018
18:27:11

Артур
23.05.2018
18:47:36
Предположу, что math всегда работает с float. Опять же, не выглядит удивительно

Max
23.05.2018
19:15:40