How to speak from Arduino to Python and back


While I have work on my pet project( a network of sensors) I have faced with the task to send data from Arduino to python backend and back.

At first, I want to say that I didn't use HTTP requests because my Arduino nodes don't have the internet connections just radio network to "Hub". And Hub retranslates what he receive by the radio channel to MQTT broker via the internet.

read full ⇝

    2016-12-19 16:00:00      python arduino microcontroller protobuf

Office information gadget mounted on toy


I did small funny toy for office. Gadget mounted on motorcycle toy. Now I always know temperature, humidity and build status of some projects. Also it post temperature and humidity values to ThinkSpeak every hour and we have statistics :).

Office Status mounted on motorcycle toy

Parts that I have used:

  • Maisto BMW R1200GS
  • ESP8266-12e - brain of all, manage screen, sensors and fetch data from jenkins/codecov
  • DHT11 - temperature & humidity sensor(will be replaced with DHT2x)
  • OLED screen
  • Tic-Tac - cases made from this boxes

How report from ThingSpeak looks:

if you are interested in source code, feel free to contact me.

Gadget assembling

    2016-10-03 10:00:54      microcontroller esp8266 gadget

Django package: django-classifier


Just want to introduce my package for Django.

With help of this package you can create dynamically configurable sets of properties. Checkout tutorial for more information.

doc: http://django-classifier.readthedocs.io/

repo: https://github.com/django-stars/django-classifier

    2016-09-01 12:00:28      django package

How to change choices for field in Django-Rest-Framework


As usual for django forms common way to change choices for some field it’s overwrite __init__ method of form and replace self.fields['<field name>'].choices. But it doesn’t work for django-rest-framework serializers.ChoiceField.

For serializers.ChoiceField you can again overwrite __init__ method and replace data in self.fields['<field name>'].choice_strings_to_values where have to be dict where key is string representation of choices "key" and value is choices "key".


self.fields['fieldname'].choice_strings_to_values = {
    str(key): key
    for key, value in self.get_fieldname_choices()
    2016-08-26 19:00:26      django rest-framework

Upload files with Selenium (Windows version)


In case when you have basic HTML input for file it’s very easy, just run .find_element_by_id('id_photo').send_keys(<full path to file>). But very often we don’t have such inputs or they are hidden and we cann’t send keys to them. For such cases with using Windows we can do it with help of pywinauto or other automation GUI utilities.

So, if you have open file dialog and run test on windows, I have solution. With help of pywinauto we can put path to file into dialog and click "Open". To connect pywinauto to browser we should have process id, for Firefox we already have right id in driver instance but if you use Chrome, driver has only pid of browser but you need pid of tab, in my example I have only one tab and in code I just get first child of browser. Also we should do few tries to fill out dialog or run some sleep to wait for dialog will be opened.

Next you can found simple example how to upload file.

read full ⇝

    2016-08-08 10:00:20      test selenium

How I take photos of water crown


We can see water crown right after a water drop hits the water. So we have to take picture right after a water drop hits the water. It takes me about 20 milliseconds.

To do it in auto mode I use my camera with flash and Arduino. I use LDR and laser pointer to capture a water drop and IR led to trigger camera. The main thing is you have to capture a water drop while fooling down.

read full ⇝

    2015-07-30 10:00:00      photo arduino macro microcontroller

Waiting for finishing asynchronous calls in AngularJS


Here I’ll try to describe a few ways of waiting for asynchronous calls finish in AngularJS, from simplest to more complicated.

Simplest option from documentation about $http

When we use $http service, we can set two methods which will call only after http request, “success” and “error”

read full ⇝

    2015-01-30 10:00:40      javascript angularjs

How to use PostgreSQL partitions with Django


Partitions in PostgreSQL(and MySQL too :)) are very useful when we have to store large data dividing them by attribute for future works. In my case I have logs of working on projects, which are stored in partition for each project.

Using partitions in django project is not very difficult, but there is one issue with “returning id” for insert statement in database. Function, which will insert a record to right table, must return trigger, but not id of last record as django expects.

read full ⇝

    2014-10-04 10:00:30      django postgresql partition

Sony Action Cam firmware update error on Mac OS X


If you has error on firmware update and proposition to restart your camera and start update again, you have to

  1. copy update tool from dmg image to your local hard drive and
  2. select "Get Info" from context menu
  3. set check box "Prevent App Nap"
  4. make hard reset for camera
  5. restart update tool and finish firmware update

Algorithm for hard reset:

  1. remove battery and AC adapter(USB cable)
  2. press REC for a one minute
  3. put battery back
    2014-09-15 10:00:01      macos actioncam