Február 21, 2017

Ako odoslať príkaz z Pythonu cez MQTT na RGB LED, ktorá je pripojená k ESP8266

V minulom článku som popisoval postup, ako odoslať hodnuto so záťažou servera cez MQTT. Hodnotu je potom možné prostredníctvom Node-RED previesť na príkaz pre LampESP s farebnou ledkou. Výsledok je prostý, ledka indikuje farbou záťaž na serveri.

Ďalšia možnosť, ako odoslať príkaz s farbou priamo zo servera, je použiť Python.

Jednoduch nainštalujte paho-mqtt:

pip install paho-mqtt

Tu je krátky Python skrit (publish_server_load.py):

#!/usr/bin/env python3

import paho.mqtt.publish as publish
import os

color = 'red'
load = os.getloadavg()[0]
if load < 0.7:
    color = 'black'
elif load < 1.5:
    color = 'blue'
elif load < 3:
    color = 'green'
elif load < 7:
    color = 'orange'

publish.single('/server/monitoring/command', color, hostname='iot.sinusgear.com')

ESP modul, by mal byť nastavený na príjem témy /server/monitoring. Kód LampESP 0.3 je dostupný na GitHube.

Do crontabu stačí potom vložiť nasledujúci riadok:

* * * * * /usr/local/bin/publish_server_load.py

V prípade, že používate virtualenv, tak by príkaz mal vyzerať nasledovne:

* * * * * /opt/my-python-env3/bin/python /usr/local/bin/publish_server_load.py

Júl 6, 2014

Jednoduchý HTTP server v Python 3.x

Jednou zo skvelých vlastností Python 2.x je možnosť rýchleho spustenia doslova inštantného web serveru. Stačí zadať nasledujúci príkaz a Python web server beží.

python -m SimpleHTTPServer

S príchodom Python 3.x došlo k zmene z SimpleHTTPServer na http.server modul.

Správny príkaz na spustenie web serveru v Python 3.x je:

python -m http.server

December 14, 2010

Bez testů do vývoje nelez

Parafráza na: Bez peněz do hospody nelez 😉

Príklad z praxe: Finálny výsledok bol zle generovaný. Asi 50 krát som prešiel kód. Prešiel som všetky vrstvy. To proste nebolo možné, výsledok sa musí generovať správne!

Pozorný čitateľ iste poznamenal: Nemusí. 😛

Presne tak. Výsledok sa generoval nesprávne. A to aj napriek mojej utkvelej predstave, že všetko je napísané správne.

Tak som sa zamyslel, napísal som 5 testov, ktoré sa spustili za menej než jednu sekundu. Nad testami som pustil debugger, predebuggoval som chybný test.

Ajhľa. Bug. Miniatúrny. Fakt malý. Chýbajúci jeden riadok v štvrtej vrstve.

Preto nezabudnite písať testy a hlavne nezabudnite na to, že testy sa dajú ľahšie debuggovať než finálna aplikácia. 🙂

Ešte poznamenám, že pre vývoj na Pythonierskom Googliom AppEngine, je Intellj IDEA 10 (s Python pluginom) parádny nástroj. Pri unittestoch je potrebné správne nastaviť PYTHONPATH, a to nie len do google_appengine, ale aj do google_appengine/lib/webob.

Október 18, 2010

Inštantný HTTP Server

Používatelia Macu a Linuxu možno ani netušia ako jednoducho môžu naštartovať vlastný HTTP server.

Linux aj Mac má často nainštalovaný Python. Používatelia Windows, si môžu Python hravo doinštalovať.

V adresári, ktorý chceme sprístupniť cez HTTP server jednoducho zadáme:

python -m SimpleHTTPServer 8080

Do web prehliadača potom zadáme: http://localhost:8080

Takýto server sa hodí na rýchle testovanie napríklad Flex aplikácií.

Október 7, 2010

Prechádzka po XML s namespace v Pythone

V predchádzajúcom príspevku “Jednoduchá prechádzka po XML v Pythone”, som ukázal, ako je možné parsovať XML pomocou Pythonu.

Čo ale v prípade, že potrebujeme použiť namespace?

Namespace sa expanduje do tvaru {namespace}element. Čo sa odrazí napríklad v príkaze find. Výsledný kód bude vyzerať nasledovne:

from xml.etree import ElementTree
xmlTest="""
 <s:xml xmlns:s="library://ns.adobe.com/flex">
  <s:person>
  <s:id>573280</s:id>
  <s:type>Supplier</s:type>
 </s:person>
 <s:person>
  <s:id>66172</s:id>
  <s:type>Customer</s:type>
 </s:person>
</s:xml>
"""

tree = ElementTree.fromstring(xmlTest)

namespace="library://ns.adobe.com/flex"
for person in tree:
  type = person.find('{%s}type' % namespace)
  id = person.find('{library://ns.adobe.com/flex}id')
  if type.text == 'Supplier':
    print "Supplier:",id.text

Všimnime si jednoduchý trik s %s na riadku s type = person.find.

Jún 22, 2010

Ako zastaviť Google App Engine vo Windows na príkazovom riadku?

Testovací Google App engine server je možné naštartovať pomocou:

dev_appserver adresár

Ako ho ale zastaviť?

CTRL+C nefunguje, aplikácia zostane bežať.

Je potrebné použiť kombináciu CTRL+Break (Pause).

Jún 15, 2010

Jednoduchá prechádzka po XML pomocou Pythonu

Taká užitočná vec, možno sa niekomu hodí. ElementTree pre Python obsahuje parser XML. V nasledujúcom príklade vyrobím zo stringu Element a následne nad ním spustím iteráciu cez for.

Je dôležité upozorniť, že find vracia prvky Element. Textový obsah z nich je možné vytiahnuť pomocou atribútu text.

Pokiaľ sa s tým chcete viac hrať, odporúčam použiť iPython shell, ktorý podporuje dopĺňnanie príkazov pomocou tabulátoru.

from xml.etree import ElementTree

xmlTest="""
<xml>
<person>
 <id>573280</id>
 <type>Supplier<type>
</person>
<person>
 <id>66172<id>
 <type>Customer</type>
</person>
</xml>
"""

tree = ElementTree.fromstring(xmlTest)

for person in tree:
    type = person.find('type')
    id = person.find('id')
    if type.text == 'Supplier':
        print "Supplier:",id.text

API k ElemenTree nájdete na python.org. Pre Debian je táto funkcionalita k dispozícii v balíčku python-elementtree.

Apríl 12, 2010

Matplotlib – profesionálne grafy v Pythone

Pokiaľ potrebujeme dynamicky vykresliť graf na webe, môžeme použiť napríklad Flot. Pokiaľ ale potrebujeme pracovať so zložitejšou grafikou a máme k dispozícii Python, tak je voľba jasná. Použijeme Matplotlib.

Funkcie sú veľmi príbuzné Matlabu, takže rozhodne sa netreba učiť príliš veľa nových vecí.

A výstupy z Matplotlibu sú proste kvalitné.

PS: Za odkaz ďakujem Michalovi Kaukičovi z FRI ŽU.


Apríl 11, 2010

Buildout – podpora virtuálneho prostredia nie len pre Python

Buildout pre Python je niečo ako Maven pre Javu. Buildoutu jednoducho predhodíte recept. Tento recept popisuje, ako má vaše prostredie vyzerať a Buildout za vás pohľadá všetky závislosti a nainštaluje ich. Pythonieristi si možno povedia: “Ale veď inštaláciu zvláda aj easy_install alebo pip“. To je pravda, ale Buildout posúva prácu s virtuálnym prostredím o level ďalej.

Predstavte si, že pracujete v tíme a teraz potrebujete, aby kolega mal rovnaké pracovné prostredie ako vy. Rovnaké balíky, rovnaké nastavenie služieb. Jednoducho napíšete recept pre buildout a ten mu pošlete. Buildout sa postará o vytvorenie virtuálneho prostredia, tak ako to poznáme z Virtualenv. Naviac nainštaluje potrebné balíky. Teraz pozor! Odinštaluje nepotrebné balíky. Nastaví adresáre a importy presne, tak ako je to potrebné. Buildout umožňuje zaviesť do projektu podstatný prvok: opakovateľnosť.

Buildout nie je nástroj výhradne len pre Python. Môžete s ním spracovávať, aj zdroje z Gitu alebo ZIP súborov. Pokiaľ pracujete extenzívnejšie s Pythonom a balíčkovaním aplikácii, určite mu venujte minutku na naučenie.

Príklad receptu na inštalovanie Tracu 0.12dev:

[buildout]
parts = babel genshi trac mypy

[babel]
recipe = zc.recipe.egg
eggs =
    Babel

[genshi]
recipe = infrae.subversion
as_eggs = true
urls = http://svn.edgewall.org/repos/genshi/trunk genshi


[trac]
recipe = infrae.subversion
urls = http://svn.edgewall.org/repos/trac/trunk trac
as_eggs = true

# Make eggs visible to mypy interpreter
[mypy]
recipe = zc.recipe.egg
eggs =
    ${trac:eggs}
    ${genshi:eggs}
    ${babel:eggs}
interpreter = mypy
scripts = mypy

Buildout potupne spracuje jednotlivé časti a podľa receptov uvedených za slovíčkom “recipe”, nainštaluje a upraví potrebné konfigurácie prostredia. Predtým, než sa vrhnete do písania vlastného receptu, odporúčam skontrolovať, či už rovnaký alebo veľmi podobný recept neexistuje.

Pokiaľ tápete v tom, ako funguje Python Eggs a virtuálne prostredie, odkážem vás na výbornú prezentáciu z PyConu 2009 – Eggs and Buildout deployment in Python:

Apríl 7, 2010

Konferencia: Otvorený softvér vo vzdelávaní, výskume a IT riešenia 2010

Na oficiálnych stránkach OSS 2010 nájdete organizačné informácie ku konferencii, ktorá sa bude konať 1.-4. 7. 2010 v Žiline.

Pokiaľ máte nejakú zaujímavú tému, prihláste sa so svojím príspevkom. V roku 2009 rozhodne nebola núdza o zaujímavé témy, ako napríklad OpenstreetMap, počítačová učebňa postavená na Linuxe, alebo programovanie hier v Pythone.

Konferenciu organizuje Spoločnosť pre otvorené informačné technológie (SOIT.sk).