pátek 7. prosince 2018

Záchrana dat na Raspberry Pi

Pokud se stane a Raspberry Pi nestartuje jak má, je v následujících řádkách návod, jak z filesystému přenést data na flashku.

Nejprve je potřeba nastartovat RPi do single user mode:

1) Vytahnout SD kartu a vložit do čtečky karet na počítači. Objeví se malá parition, která obsahuje soubor cmdline.txt

2) Editovat soubor cmdline.txt - na konec řádku dopsat init=/bin/sh
 
3) SD kartu vložit zpět do RPi a nastartovat. RPi je nutno mít připojenou k monitoru před HDMI a je potřeba mít v USB zapojenou klávesnici.

4) RPi skončí v command promtpu, kde můžeme zadávat příkazy. Pomocí příkazu ls si nechte vypsat soubory v souborovém systému

Připojení USB flashdik

5) Do USB vložte flash disk.

6) V single user modu je filesystem mountovaný jako read only. Proveďte přemountování systému s možností zápisu:

mount -o remount,rw /

7) V adresáři /mnt vyvořte adresář, na který bude filesystem mountovaný

cd /mnt
mkdir usbdisk

8) Namountujte filesystem usb

mount -o rw /dev/sda /mnt/usbdisk

9) Zkontrolujte, že je usb disk správně připojený

ls /mnt/usbdisk

10) Pomocí příkazu cp nakopírujte soubory z SD karty na USB disk

pátek 8. června 2018

Unikátní sériové číslo Raspberry Pi

Pokud potřebujete získat sériové číslo Rasp PI, je možné je načíst z /proc/cpuinfo

cat /proc/cpuinfo

processor       : 0
model name      : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS        : 697.95
Features        : half thumb fastmult vfp edsp java tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xb76
CPU revision    : 7

Hardware        : BCM2708
Revision        : 0010
Serial          : 0000000090f8cbxw


Příkaz, který vypíše pouze sériové číslo:

cat /proc/cpuinfo |grep Serial|cut -d' ' -f2

středa 28. února 2018

Instalace Apache2 a PHP 7 na Raspberry Pi

sudo apt-get install apache2 php7.0 php7.0-curl 
       php7.0-gd php7.0-imap php7.0-json php7.0-mcrypt 
        php7.0-mysql php7.0-opcache php7.0-xmlrpc 
       libapache2-mod-php7.0

pondělí 26. února 2018

How to resolve forgotten pi password on NOOBS system on Rasperry Pi

I had to solve a problem to connect to my Raspberry Pi. I didn't use this RaspPi long time and forgot the pi user password.

The following sequence helps me to rescue the password:

1) login the RaspPi in rescue mode (hold Shift during the RaspPi start up)

2) edit the command.txt file. Add <space>init=/bin/sh at the end of command line (just after rootwait command). Exclamation: don't use Enter - the command in command.txt should be in one line.

3) exit the rescue mode and boot. The prompt sign # should appear.

4) run the mount -rw -o remount / command

5) passwd pi command and set a new password

6) remove init=/bin/sh from command.txt

pondělí 31. července 2017

IOT wan síť SIGFOX

Síť Sigfox pro připojování IOT zařízení se slušným pokrytím ČR. Pro IOT řešení vhodné tam, kde je vhodné přenášet menší objem dat s relativně malou frekvencí odesílaných zpráv. Zařízení má možnost v rámci relace i přijímat odpovědi do zařízení Sigfox podporuje také možnost geolokace bez použití GPS. Zajímavé řešení tam, kde je potřeba zařízení dlouhodobě napájet z baterie a je potřeba malá spotřeba.

Sada pro připojení.


Pro připojení je potřeba Sigfox modem. Celou sadu pro připojení například připravuje LPWAN. Jedná se o modem, USB převodník, anténa a propojovací kablíky. Plus návody, podle kterých se připojíte do sítě Sigfox během chvíle.


Zapojení zařízení na USB převodník a připojení antény je otázka minuty. USB převodník zapojit do počítače a pomocí Arduino IDE lze pak komunikovat pomocí AT příkazů. První test - v Arduino IDE otevřít okno Serial Monitor a napsat AT, odezva by mělo být OK (pozor nutno mít zvolenou volbu Both NL&CR !).

Registrace zařízení


Předpokladem je, že jste již registrování do sítě Sigfox. V ČR je potřeba zažádat (pro vývojáře možnost 1 rok zdarma) u SimpleCell - https://simplecell.eu/kontakt/#toggle-id-2 . Tam také dostanete intrukce na přihlášení do Sigfox portálu.

V Sigfox portálu nejprve zadat nový Device Type.



a pak vlastní zařízení (každý modem má od výrobce ID a PAC číslo, které je nutno ve formuláři vyplnit.



Po zaregistrování se zařízení objeví v seznamu


Odeslání dat ze zařízení


Pro takto zaregistrované zařízení je možno odeslat první data (například 01020304) příkazem  AT$SF=01020304 . Pkd modem odpoví OK, data byla odeslána a mělo by se to také projevit na Sigfox portálu:



Ve sekci Group je možné vytvořit přístup k datům a dalším informacím přes REST API.


A REST volání pak data číst a přenášet pro další zpracování.





Sigfox portál zároveň umožňuje REST Callback, tzn. lze nastavit endpoint vaší aplikace a Sigfox na něj nasměrovat, data pak posílá Sigfox do vaší aplikace.

neděle 21. května 2017

3D tiskárna Renfoce RF-100

Tiskárna Renforce RF-100 - domyšlený koncept tiskárny pro koncového uživatele, který s 3D tiskem nemá žádné předchozí zkušenosti. Jedná se o tiskárnu robustní konstrukce, o které jsem přesvědčený, že na dlouhou dobu zajistí přesnost tisku. Tiskárna je sestavena, což je obrovské plus - chci se soustředit na tisk a poznávat jeho zákonitosti a nestrávit dni sestavováním a laděním správného nastavení.
Způsob tisku a řízení jednotlivých os je pěkně viditelné, takže moje 8letá dcerka už nyní chápe princip na jakém tiskárna pracuje. Jako bonus je osvětlený pracovní prostor, to sice z funčního hlediska tiskárny nemá význam, ale rozhodně to zvyšuje její atraktivitu.
Další výhodou tiskárny je, že není nutné mít připojený počítač. Tiskárna má slot pro SD kartu s uloženými modely pro tisk. V menu tiskárny pak v adresářové struktuře vyhledám soubor s koncovkou gcode - formát předpisu pro 3 tisk a nechám jej vytisknout.
Pro první tisk není potřeba mnoho, pár názorných kroků je pěkně vyobrazeno s krátkým popisem na listu A4. A musím konstatovat, že koncept menu na malém displeji tiskárny je hodně rozmyšlený a i takto stručný návod je dostatečný pro vytištění prvního modelu. Není tedy třeba dlouhé čtení návodu, ale během chvíle cca 10 minut již tiskárna tiskne. Obrovské plus, protože to neodradí i netrpělivé děti. Proto bych tiskárnu doporučil i pro školy, kde je možné během vyučovací hodiny názorně představit princip 3D tisku.
Co se týká náhradních dílů, výrobce dodává náhradní tiskovou hlavu.


Tiskárna je na druhou stranu vybavena pouze pro tisk z PLA materiálu (POLYLACTIC ACID  KYSELINA POLYMLÉČNÁ - vyroben z kukuřičného škrobu a je tak biologicky odbouratelný), který má výborné vlastnosti pro tisk a je po vytištěný pevný (asi jako logo kostky), ale hotový výrobek se nesmí vystavovat vystavovat vyšším teplotám (cca nad 60°C), protože pak hmota měkne. Pro většinu praktických použití mi to nevadí a nevadí to ani pro účely výuky, takže toto omezení neberu jako zásadní.

Vyjadřuji nadšení nad promyšleným výrobkem, mám z něj opravdovou radost.


čtvrtek 13. dubna 2017

USB2.0 Serial

Pro levnější klony Arduino (tam kde je převodník WCH type CH340G) nenajde systém Windows driver USB2.0-Serial. Je nutno doinstalovat driver CH341SER viz http://www.arduined.eu/ch340-windows-8-driver-download/

pátek 13. ledna 2017

Instalace Home Assistant

Home Assistant

Programový systém pro Smart Home napsaný v Python. Otevřeníá platforma pro přidání požadovaných modulů a zřízení. Je možné doprogramovat chování systému, například odeslání mailu na základě podmínek zjištěných ze senzorů.

Příprava raspbian lite

Ze serveru https://www.raspberrypi.org/downloads/  nahrát image  Raspbian Lite. Pomocí ImageWriter nebo podobného programu nahrát image na MicroSD kartu. Od 30.11.2016 je v implicitní image zakázán ssh, je proto potřeba jej povolit - nahrát prázdný soubor ssh do root adresáře FAT32, který je přístupný na kartě i z Windows.

Po startu Raspbian přihlásit jako pi a změnit pomocí příkazu passwd heslo,

Provést expanzi file systému příkazem raspi-config

Aktualizovat základní knihovny


sudo apt-get update sudo apt-get upgrade -y

Nainstalovat python3

sudo apt-get install python3 python3-dev python3-venv python3-pip libffi-dev libssl-dev

Přidat uživatele homeassistant  sudo useradd -rm homeassistant -G dialout,gpio,i2c

cd /srv
sudo mkdir homeassistant sudo chown homeassistant:homeassistant homeassistant sudo -u homeassistant -H -scd /srv/homeassistant
python3 -m venv
.
source bin/activate


Instalace homeassistant

python3 -m pip install wheel 

pip3 install homeassistant

 

Nastavení autostartu


https://www.home-assistant.io/docs/autostart/init.d/




Instalace openZWave Control Panel

Control Panel by měl být po instalaci Home Assistant nainstalovaný, pokud ne, dá se instalovat následujícími příkazy:

apt-get update
apt-get install libgnutls28-dev libgnutlsxx28

cd
wget ftp://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.9.52.tar.gz
tar zxvf libmicrohttpd-0.9.52.tar.gz
mv libmicrohttpd-0.9.52 libmicrohttpd
cd libmicrohttpd
./configure
make
make install

cd
git clone https://github.com/OpenZWave/open-zwave.git
cd open-zwave
make

cd
git clone https://github.com/OpenZWave/open-zwave-control-panel.git
cd open-zwave-control-panel

v Makefile je potřeba nastavit:
OPENZWAVE := ../open-zwave
LIBMICROHTTPD := -L /usr/local/lib/ -l microhttpd

a odkomentovat
# for Linux uncomment out next three lines
LIBZWAVE := $(wildcard $(OPENZWAVE)/*.a)
LIBUSB := -ludev
LIBS := $(LIBZWAVE) $(GNUTLS) $(LIBMICROHTTPD) -pthread $(LIBUSB) -lresolv

make
ln -sd ../open-zwave/config

su ldconfig

Spustit control panel na portu 8888:
./ozwcp -p 8888



pondělí 26. prosince 2016

Python Open ZWave

Python wrapper pro OpenZWave knihovny. Pro ověření správné instalace a funkce ZWave sítě používám následující jednoduchý příklad.

Příklad jednoduchého Python skriptu pro ověření funkčnosti Python Open ZWave:

import sys
import time
import openzwave
from openzwave.node import ZWaveNode
from openzwave.value import ZWaveValue
from openzwave.scene import ZWaveScene
from openzwave.controller import ZWaveController
from openzwave.network import ZWaveNetwork
from openzwave.option import ZWaveOption
#  import time
#  from louie import dispatcher, All
device="/dev/ttyACM0"
options = ZWaveOption(device, config_path="openzwave/config", user_path=".", cmd_line="")
options.set_log_file("OZW_Log.log")
options.set_append_log_file(False)
options.set_console_output(False)
options.set_save_log_level('Debug')
options.set_logging(True)
network = None
options.lock()
network = ZWaveNetwork(options, autostart=False)
network.start()
for i in range(0,90):
    if network.state>=network.STATE_AWAKED:
        print( "***** Network is ready")
        break
    else:
        sys.stdout.write(".")
        sys.stdout.flush()
        time.sleep(1.0)

Definice stavů sítě

  • STATE_STOPPED = 0
  • STATE_FAILED = 1
  • STATE_RESETTED = 3
  • STATE_STARTED = 5
  • STATE_AWAKED = 7
  • STATE_READY = 10

Odkaz zdrojový text netwok.py

https://github.com/OpenZWave/python-openzwave/blob/master/src-api/openzwave/network.py

Odkaz na zdrojový text node.py

https://github.com/OpenZWave/python-openzwave/blob/master/src-api/openzwave/node.py

Odkaz na zdrojový text value.py


https://github.com/OpenZWave/python-openzwave/blob/master/src-api/openzwave/value.py

Seznam node v ZWave síti

for nodeKey in network.nodes:
        print("Node "+str(nodeKey)+": ")
        print(str(network.nodes[nodeKey]))

Notifikace s pyDispatch

Přijímání notifikací ze ZWave sítě je důležitá funkcionalita pro spolupráci se zařízeními. Následující kód ukazuje příklad přijmutí notifikace při změně stavu sítě.

from pydispatch import dispatcher
def handle_network_started_event( sender ):
print("Network started")
dispatcher.connect( handle_network_started_event, signal=ZWaveNetwork.SIGNAL_NETWORK_STARTED, sender=dispatcher.Any )

Alternativou je knihovna louie, která poskytuje to samé, co pydispatch. 


čtvrtek 22. prosince 2016

Vývojové prostředí SmartThings

Smartthings - vývojové prostředí pro IOT napsaný v Groovy. Dokumentace SmartThings je velmi kvalitní, hodně vysvětluje základní koncepty a obsahuje hodně názorných příkladů. Věnuje se širokému poli možností komunikace mezi zařízeními. Narozdíl od jiných stránek vysvětluje i základní použité koncepty a standardy jako je například ZWave.

http://docs.smartthings.com/

středa 14. prosince 2016

AeoTec Z-Stick Gen5 Switch off toggling LED

Aeon Z-Ware Stick Gen5 po zapojení začne blikat modře, žlutě a červeně. Toto "disco" světlo lze vypnout a zapnout následujícími příkazy.

Turn off “Disco lights”:

$ echo -e -n "\x01\x08\x00\xF2\x51\x01\x00\x05\x01\x51" > /dev/serial/by-id/usb-0658_0200-if00

Turn on “Disco lights”:

$ echo -e -n "\x01\x08\x00\xF2\x51\x01\x01\x05\x01\x50" > /dev/serial/by-id/usb-0658_0200-if00

pondělí 12. prosince 2016

Instalace node.js a node-RED na Raspberry Pi 3

Nejprve provést aktualizaci Raspbian

sudo apt-get update
sudo apt-get upgrade

Nahrát a spustit instalační skript:

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)




Spustit node-RED příkazem

node-red-start


Zapnutí security

Po instalaci není node-RED zapbezpečený.Je potřeba v konfiguračním souboru /home/pi/.nodered/settings.js odkomentovat adminAuth:

adminAuth: {
    type: "credentials",
    users: [{
        username: "admin",
        password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
        permissions: "*"
    }]
}

Pro vygenerování hesla je potřeba nainstalovat node-red-admin:

sudo npm install -g node-red-admin

a heslo vygenerovat příkazem

 node-red-admin hash-pw





pátek 9. prosince 2016

Bluemix IOT

Kombinace cloudu (IBM Bluemix) a IOT

Senzory postavené na Arduino platformě komunikují naměřená data do Bluemix Node.js aplikace. Hodnoty jsou ukládány do Bluemix MySql databáze.

Tabulka pro záznam údajů:

create table T_MEASURE(C_ID int AUTO_INCREMENT, C_CHANNEL varchar(255), C_DEVICE varchar(255), C_TIME_CREATED timestamp, C_FIELD varchar(255), C_VALUE int, primary key(C_ID))

alter table T_MEASURE add index(C_CHANNEL)

alter table T_MEASURE add index(C_CHANNEL, C_DEVICE)

IOT zařízení posílá naměřené hodnoty prostřednictvím HTTP GET do Bluemix, kde se uloží do databáze:

http://BLUEMIX_LOGIN.eu-gb.mybluemix.net/sendValue?channel=channel1&sensor=water&value=1234

Aplikační kód App.js v Bluemix


// This application uses express as its web server
// for more info, see: http://expressjs.com
var express = require("express");

// cfenv provides access to your Cloud Foundry environment
// for more info, see: https://www.npmjs.com/package/cfenv
var cfenv = require("cfenv");

// create a new express server
var app = express();

// This application requires mysql
var mysql = require('mysql');

// Use the valid user credential and database name
var connection=mysql.createConnection(
{
   host     : 'us-cdbr-iron-east-04.cleardb.net',
   user     : 'USER',
   password : 'PASSWORD',
   database : 'DATABASE'
}
);

// serve the files out of ./public as our main files
app.use(express.static(__dirname + '/public'));


app.get("/sendValue", function(req,res){
   
     var channel = req.query.channel;
     var sensor = req.query.sensor;
     var value = req.query.value;
     var timestamp = Date.now;
   
     var post  = {C_CHANNEL: channel, C_SENSOR: sensor, C_VALUE: value};
 var query = connection.query('INSERT INTO T_MEASURE SET ?', post, function(err, result) {
   console.log(err);
   console.log(result);
 });
    res.send('Inserted');

});

// get the app environment from Cloud Foundry
var appEnv = cfenv.getAppEnv();

// start server on the specified port and binding host
app.listen(appEnv.port, '0.0.0.0', function() {
  // print a message when the server starts listening
  console.log("server starting on " + appEnv.url);
});

středa 26. října 2016

Měření spotřeby vody a elektřiny s Arduino Nano

Měření aktuální spotřeby vody a elektřiny přináší rozšířené možnosti, jak sledovat chod domácnosti. Využití možnosti nabízených v podobě Arduino a modulů periférií je velmi vhodnou možností, která přináší potřebnou flexibilitu v návrhu i v realizaci. 
V současné době ve zkušebním provozu provozuji sestavu podle následujícího zapojení.
Schéma zapojení
V dvouminutových intervalech Arduino Nano odesílá prostřednictvím WiFi modulu ESP8266 naměřené hodnoty do ThingSpeak.com, kde je možno nameřené hodnoty graficky zobrazit a provádět nad nimi další analýzy.


Vedle toho sestava využívá RTC modul s obvodem DS1307. Kupodivu u něj nepoužívám hodnoty pro zjištění reálného času (ten je mimochodem na tomto typu velmi nepřesný), ale modul DS1307 kromě realného času poskytuje 56 bytů RAM paměti zálohovaných vloženou baterií. Tato pamět se dobře hodí pro ukládání aktuálních hodnot sensorů, aby zůstaly zachovány i po odpojení senzoru od zdroje napájení. Zdrojem napájení je 12V spínaný zdroj, který mám zabudovaný na DIN liště vedle elektroměru.

sobota 22. října 2016

Arduino: #define versus const String

Při programování Arduina si dejte pozor jakým způsobem deklarujete konstanty. Vzhledem k omezeným zdrojům na pro proměnné (Arduino Nano: Maximum is 2,048 bytes) je potřeba s tímto místem zacházet velmi šetrně. Místo pro programový kód na tom bývá lépe (Arduino Nano: Maximum is 30,720 bytes).

Pokud tedy v programovém kódu použijete pro definici konstanty konstrukci:

const String CONST_DEVICENAME = "Adruino Nano";


bude zařízení s řetězcem pracovat jako s proměnnou a řetězec umístí do lokace pro proměnné, tudíž ubere byty s těch cenných 2kB,

Pokud použijete #define, pak se konstanta zahrne do programového kódu a ušetříte cenné místo pro proměnné:

#define CONST_DEVICENAME "Adruino Nano"




pátek 5. srpna 2016

Arduino Uno jako USB -> TTL převodník pro ESP8266

Potřeboval jsem narychlo provést připojení ESP8266 k počítači, ale neměl jsem k dispozici klasický Adruino USB TTL převodník. Jak si pomoci? Využil jsem převodník, který je na desce Arduino Uno.
Co je pro to potřeba udělat?

1) Na Arduino Uno propojit RES a GND - tím vyblokuji procesor
2) Oproti zvyklostem propojit ESP8266 a Arduino Uno
Tx - Tx
Rx - Rx
- to není chyba, opravdu je takto potřeba propojit - tzn. nebude komunikovat Arduino -> ESP, ale Adruino bude v tomto případě pouze převodníkem mezi USB počítače a vstupy ESP
2) Připojit ESP8266 na zdroj 3.3V (pro napájení jsem využil výstup 5V napojený na nastavitelný  MP2307 Mini-360 Module)

S tímto propojením a pokud na ESP GPIO0 propojím se zemí, je možné provést flash firmware na ESP jako s kalsickým USB TTL převodníkem.

čtvrtek 21. července 2016

Spuštění Raspbian v single user mode

V případě, že nelze se z nějakého důvodu nedokončí běžné spuštění lze spustit Raspbian v tzv. single user mode, kde dostanete možnost pracovat s právy root přes konzoli. Nastavení provedete na jakémkoli počítači se čtečkou SD karet. Boot partition je FAT32, takže je přístupná například i ve Windows. V boot partition je soubor cmdline.txt. Do řádku cmdline přidejte

init=/bin/sh

čtvrtek 30. června 2016

Synchronizace času

Nainstalujte ntp:

apt-get install ntp

Nastavte ntp servery v ČR v konfiguračním souboru /etc/ntp.conf

server 0.cz.pool.ntp.org iburst
server 1.cz.pool.ntp.org iburst
server 2.cz.pool.ntp.org iburst
server 3.cz.pool.ntp.org iburst