Oprava bootování Linux Mint v zavaděči GRUB v openSUSE

Dlouhodobě používám Linux Mint 21.2 „Victoria“, který je založen na Ubuntu 22.04 LTS Jammy Jellyfish na PC UEFI, GPT particí s LVM na btrfs a chtěl jsem vyzkoušet i něco jiného, takže volba padla na instalaci openSUSE Tumbleweed v dual bootu s Mintem.

openSUSE funguje skvěle, nicméně nepočítal jsem s tím, že openSUSE přepíše původní zavaděč GRUB svým vlastním, který nebude schopen nabootovat původní Linux Mint. V nabídce GRUBu pro výběr systému se sice zobrazí, ale po potrvzení volby „Linux Mint 21.2 (on /dev/mapper/vg0-root)“ je zobrazena chyba:

error: ../../grub-core/fs/btrfs.c:2159:file '/boot/vmlinuz-5.15.0-87-generic' not found
error> ../../grub-core/loader/i386/efi/linux.c:168:you need to load the kernel first.

Press any key to continue...

Problém lze obejít nabootováním Mintu přes UEFI zavaděč v počítači, ale co je příčinou chyby?

V zavaděči GRUB přejdeme do režimu příkazové řádky stisknutím klávesy „C“ a pokračujeme příkazy, kterými zjistíme obsah disku a nastavení:

grub> ls /boot

error: ../../grub-core/fs/btrfs.c:2159:file '/boot' not found.
grub> ls /
@/ @home/
grub> ls /@/boot/
vmlinuz-5.15.0-87-generic initrd.img-5.15-87-generic System.map-5.15.0-87-generic grub/ efi/ vmlinuz.old
grub> ls
(proc) (lvm/vg0-root--os) (lvm/vg0-swap) (lvm/vg0-root) (memdisk) (hd0) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1)
grub> btrfs-list-subvols (lvm/vg0-root)
ID 256 path @
ID 257 path @home
grub> btrfs-get-default-subvol (lvm/vg0-root)
/

Z toho vyplývá, že na souborovém systému btrfs není vybrán jako výchozí subvolume @, kde je nainstalován Linux Mint. V tom případě lze zavaděč dočasně uschopnit příkazem:

grub> btrfs-mount-subvol / / @
grub> ls /
dev/ run/ lib32 boot/ lib sbin cdrom/ srv/ media/ usr/ opt/ lib64 bin home/ etc/ var/ tmp/ libx32 sys/ mnt/ proc/ root/

Následně vyskočíme z příkazového režimu GRUBu klávesou „Esc“ a po výběru systému Linux Mint 21.2 v nabídce již úspěšně nabootuje a následuje jednoduchá oprava z příkazového řádku v systému Linux Mint:

$ sudo -i
# btrfs subvolume get-default /
ID 5 (FS_TREE)
# btrfs subvolume list /
ID 256 gen 342 top level 5 path @
ID 257 gen 341 top level 5 path @home
# btrfs subvolume set-default 256 /
# btrfs subvolume get-default /
ID 256 gen 352 top level 5 path @

A nyní již operační systém Linux Mint bez problémů startuje volbou z nabídky openSUSE GRUBu.

Měření a ukládání dat v cloudu (3.)

  1. Měříme a získáváme měřené údaje
  2. Odesíláme údaje a sbíráme v cloudu
  3. Sebraná data ukládáme do databáze
  4. Data z databáze zpracujeme, zobrazíme a analyzujeme

3. Ukládání měření do databáze

Pro sběr měřených dat je nejvhodnější databáze časových řad (TSDB – Time Series Database), protože je přizpůsobena pro optimální uložení velkého množství dat v časové řadě a pro další zpracování disponuje optimalizovanými agregačními funkcemi. Velmi často používanou databází je InfluxDB, která je zdarma i s užitečnými nástroji ke zpracování dat a díky připraveným knihovnám se s ní snadno pracuje v různých programovacích jazycích.

3.1 Instalace vlastní InfluxDB

Databázový stroj InfluxDB můžeme v oblíbeném operačním systému Debian GNU/Linux či Ubuntu/Mint Linux jednoduše nainstalovat ze standardního instalačního balíku influxdb. Případně na jiných platformách podle návodu k instalaci na webu influxdata.com.

Předpokladem je, že máme k dispozici hodně úložného prostoru, protože data mohou časem narůst do obřích rozměrů.

$ apt install influxdb

Nepotřebujeme-li zaznamenávat dotazy a přístupy přes HTTP, tak můžeme vypnout logování v konfiguračním souboru /etc/influxdb/influxdb.conf.

[data]
query-log-enabled = false

[http]
log-enabled = false

3.2 InfluxDB v cloudu

InfluxDB lze používat také v cloudu a zde se budeme věnovat platformě InfluxDB Cloud 2.0, která nabízí provoz připraveného databázového stroje v cloudu AWS (v Evropě Frankfurt n.M.), v Azure (v Evropě Amsterdam) nebo v Google Cloud (v Evropě Belgie).

Varianta Free je k dispozici všem zdarma s několika omezeními: zápis 5 MB za 5 vteřin, dotazy 300 MB za 5 minut, 10000 řad dat a maximálně 2 databáze (Buckets) se zachováním dat 30 dní. Pro nenáročné domácí použití naprosto dostačující.

Pro další práci s databází jsou klíčové následující kroky s poznamenáním údajů potřebných k přístupu k databázi:

  • Podle vybrané lokality poznamenat URL InfluxDB Cluster Node
  • Při instalaci nebo později vytvořit databázi (Bucket) na stránce Data/Buckets
    – poznamenat Bucket ID
  • Vytvořit přístupový Token a nastavit oprávnění na stránce Data/Tokens
    – poznamenat Token
  • Pojmenovat organizaci – Organization/About
    – poznamenat User ID a Organization ID

3.3 Ukládání zpráv z MQTT brokeru do InfluxDB

Cesta měřených údajů z MQTT klienta na MQTT broker a přes MQTT - TSDB bridge do databáze časových řad.

Je několik možností, jak přijímat zprávy z MQTT brokeru a data ukládat do databáze InfluxDB.

  • Vlastní skript/program – v Pythonu lze pro připojení k MQTT brokeru a InfluxDB použít moduly Paho MQTT Client a InfluxDB-Python. Jako například ve skriptech MQTT 2 InfluxDB Bridge nebo MQTTInfluxDBBridge.py.
  • Program Telegraf obsahuje modul MQTT Consumer, který pracuje jako MQTT klient zapisuje odebírané zprávy do InfluxDB. V konfiguračním souboru /etc/telegraf/telegraf.conf stačí nastavit jen pár údajů nebo si vygenerovat potřebnou konfiguraci v administraci InfluxDB Cloud.
[[inputs.mqtt_consumer]]
   servers = ["tcp://42616269c5a14a655a6c6f64c49b6a.s2.eu.hivemq.cloud:8883"]
   topics = [
     "test/#",
   ]
   username = "kralicek-itacek"
   password = "***heslo***"

[[outputs.influxdb_v2]]
   urls = ["https://eu-central-1-1.aws.cloud2.influxdata.com"]
   token = "$INFLUX_TOKEN"
   organization = "Kralickovo"
   bucket = "Kralickuv Bucket"

Do souboru /etc/default/telegraf vložíme token pro přístup k databázi InfluxDB v podobě nastavení proměnné prostředí:

INFLUX_TOKEN=CkJhYmnFoWUgZG8ga2/FoWUuCgo=
  • Definice toku dat ve vývojovém nástroji Node-RED – tuto variantu popíšu podrobněji níže.

3.4 Node-RED jako MQTT klient zapisující data do InfluxDB

Můžeme použít vlastní instalaci prostředí Node-RED na počítači nebo v cloudu. Nejzajímavější je spuštění v IBM Cloud v rámci free tier, kde lze celé používat zdarma (stačí úroveň Lite). Instalaci provedeme po počáteční registraci podle návodu. Během instalace se pro uložení dat programu vytvoří databáze Cloudant, spustí instance aplikace Node-RED a nakonfigurují nějaké další služby potřebné pro běh prostředí.

Po přihlášení do editoru Node-RED nastavíme:

  • Menu / Manage palette / Install – do vyhledávacího pole zadáme influxdb a nainstalujeme doplněk node-red-contrib-stackhero-influxdb-v2
  • Založíme a přejmenujeme nové Flow
  • Vytvoříme node typu „mqtt-in“ a nastavíme:
    • Server (Connection – hostname, port, Use TLS; Security – uživatelské jméno a heslo)
    • Topic
    • Output – a parsed JSON object
  • Vytvoříme node typu „function“, pojmenujeme „toFloat“ a na záložce onMessage zadáme kód:
msg.payload = parseFloat(msg.payload);
return msg;
  • Vytvoříme node typu „change“, pojmenujeme „prepare fields“ a nastavíme pravidlo:
    • Set msg.payload to expression
{
   'precision': 'ms',
   'data': [
        {
            'measurement': 'test',
            'tags': {
                'host': 'zajickuvprevadec',
                'topic': msg.topic
            },
            'fields': {   
                'value': msg.payload
            },
           'timestamp':$toMillis($now())
        }
    ]
}
  • Vytvoříme node typu „Stackhero-InfluxDB-v2-write“ a nastavíme přístupové údaje Database – Host, Port, TLS, Token, Organization, Default bucket
  • Všechny vytvořené nody postupně propojíme z výstupu prvního na vstup druhého atd. Případně můžeme přidat node typu „debug“ pro výpis informací.
  • Po vytvoření kompletního Flow použijeme vpravo nahoře tlačítko Deploy a mělo by začít fungovat.

Čtení teploměru přes Bluetooth v CoreELEC

Jak načíst hodnoty aktuální teploty a vlhkosti z bezdrátového teploměru Xiaomi Temperature and Humidity Monitor 2 nebo podobného přes Bluetooth v TV boxu se systémem CoreELEC.

Proč zrovna v TV boxu? Protože bych rád údaje o teplotě dále zpracovával do přehledných statistik a grafů, a k tomu je zapotřebí trvale běžící zařízení, které bude naměřené údaje pravidelně přijímat, a posílat k dalšímu zpracování na MQTT broker nebo do databáze. Mobilní telefon nebo obecně Android se na to moc nehodí a jiné vhodné zařízení kompatibilní s Bluetooth 4.2 Low Energy (BLE) nemám k dispozici.

Prerekvizity

Co všechno budeme potřebovat:

  • Zařízení s přijímačem Bluetooth minimálně 4.2,
  • nainstalovaný systém CoreELEC s volným místem na paměťovém úložišti, se zapnutým SSH přístupem a s funkčním připojením k Internetu (na podobném systému LibreELEC možná bude fungovat také),
  • SSH terminál,
  • bezdrátový teploměr Xiaomi LYWSD03MMC nebo podobný s komunikačním modulem Bluetooth.

Jak zjistit, jakou verzi Bluetooth podporuje zařízení, kde chceme teplotu načítat z teploměru:

$ hciconfig -a
hci0:	Type: Primary  Bus: UART
	BD Address: 12:34:56:78:9A:BC  ACL MTU: 1021:5  SCO MTU: 255:11
	UP RUNNING PSCAN 
	RX bytes:2504 acl:4 sco:0 events:95 errors:0
	TX bytes:4463 acl:6 sco:0 commands:65 errors:0
	Features: 0xff 0xff 0xff 0xfe 0xdb 0xfd 0x7b 0x87
	Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
	Link policy: RSWITCH HOLD SNIFF PARK 
	Link mode: SLAVE ACCEPT 
	Name: 'tv-box-coreelec-9.2'
	Class: 0x0c0000
	Service Classes: Rendering, Capturing
	Device Class: Miscellaneous, 
	HCI Version:  (0xa)  Revision: 0x599
	LMP Version:  (0xa)  Subversion: 0xd54
	Manufacturer: Realtek Semiconductor Corporation (93)

Zde je ve výpisu vlastností zařízení HCI verze 0xa a LMP verze 0xa, což znamená dle specifikace v tabulce níže Bluetooth 5.1.

Host Controller
Interface (HCI) Version
Link Manager Protocol
(LMP) Version
Bluetooth Core
Specification
0 0 1.0b
1 1 1.1
2 2 1.2
3 3 2.0 + EDR
4 4 2.1 + EDR
5 5 3.0 + HS
6 6 4.0
7 7 4.1
8 8 4.2
9 9 5.0
10 (0xA) 10 (0xA) 5.1
11 (0xB) 11 (0xB) 5.2
12 (0xC) 12 (0xC) 5.3

Zjištění MAC adresy bezdrátového teploměru a jakou verzi Bluetooth zařízení podporuje:

$ hcitool lescan
LE Scan ...
A4:C1:38:98:76:54 (unknown)
A4:C1:38:98:76:54 LYWSD03MMC

$ hcitool leinfo A4:C1:38:98:76:54
Requesting information ...
	Handle: 16 (0x0010)
	LMP Version: 5.0 (0x9) LMP Subversion: 0x1c1c
	Manufacturer: Telink Semiconductor Co. Ltd (529)
	Features: 0x3d 0x00 0x00 0x00 0x00 0x00 0x00 0x00

Instalace Entware

Entware je repozitář balíčků z kterého lze nainstalovat mnoho programů na jakékoliv podporované zařízení s operačním systémem založeným na Linuxu – třeba na NAS nebo WiFI router s DD-WRT. Na zařízení s CoreELEC se základní instalace Entware spustí z příkazového řádku vestavěným skriptem installentware a po restartu máme k dispozici program opkg, kterým můžeme instalovat další balíčky s programy.

$ installentware 
Entware is already installed.

Příprava jazyka Python

Začneme přípravou virtuálního prostředí jazyka Python, abychom měli všechny moduly soustředěné na jednom místě a změnami neovlivnili zbytek systému.

$ python3 -m venv ~/.venv/mitemp

$ source ~/.venv/mitemp/bin/activate

(mitemp) $ python3 -m pip install --upgrade pip
Collecting pip
  Using cached https://files.pythonhosted.org/packages/8a/d7/f505e91e2cdea53cfcf51f4ac478a8cd64fb0bc1042629cedde20d9a6a9b/pip-21.2.2-py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 19.0.3
    Uninstalling pip-19.0.3:
      Successfully uninstalled pip-19.0.3
Successfully installed pip-21.2.2

Alternativně je možno nainstalovat novější verzi Python 3.9 z Entware. S výchozím Pythonem 3.7 v CoreELEC jsem měl potíže při výpočtech s desetinnými čísly, kdy výsledkem dělení 2347/100.0 nebylo hezkých 23.47, ale výsledek byl ošklivých 23.469999999999999, což se nepříjemně projevuje v zobrazení naměřených teplot.

$ opkg install python3

$ python3 -m venv --without-pip mitemp

$ source ~/.venv/mitemp/bin/activate

(mitemp) $ curl https://bootstrap.pypa.io/get-pip.py | python
Collecting pip
  Using cached pip-21.2.2-py3-none-any.whl (1.6 MB)
Collecting setuptools
  Downloading setuptools-57.4.0-py3-none-any.whl (819 kB)
     |████████████████████████████████| 819 kB 5.8 MB/s 
Collecting wheel
  Downloading wheel-0.36.2-py2.py3-none-any.whl (35 kB)
Installing collected packages: wheel, setuptools, pip
Successfully installed pip-21.2.2 setuptools-57.4.0 wheel-0.36.2

(mitemp) $ deactivate

$ source ~/.venv/mitemp/bin/activate

Tímto máme připravené virtuální prostředí Pythonu pro další pokračování instalace.

Instalace programu lywsd03mmc

(Účelem tohoto článku není popsat jak to funguje, ale naopak zdokumentovat, co přesně nefunguje a proč, takže se předem omlouvám všem netrpělivým, že na to jdu od lesa.)

K načtení hodnot z teploměru jsem zvolil skript lywsd03mmc, který splňuje všechny požadavky. Má možnost jednorázového načtení teploty a vlhkosti nebo přečtení a uložení celé historie teplot od zapnutí teploměru do souboru CSV.

Začneme dle dokumentace s instalací vyžadované knihovny glib2 pomocí programu opkg a program pip3 slouží obecně k instalaci skriptů a modulů Pythonu.

(mitemp) $ opkg install glib2
Installing glib2 (2.68.1-3) to root...
Downloading http://bin.entware.net/aarch64-k3.10/glib2_2.68.1-3_aarch64-3.10.ipk
Installing libiconv-full (1.16-1) to root...
Downloading http://bin.entware.net/aarch64-k3.10/libiconv-full_1.16-1_aarch64-3.10.ipk
Installing libintl-full (0.21-2) to root...
Downloading http://bin.entware.net/aarch64-k3.10/libintl-full_0.21-2_aarch64-3.10.ipk
Installing zlib (1.2.11-3) to root...
Downloading http://bin.entware.net/aarch64-k3.10/zlib_1.2.11-3_aarch64-3.10.ipk
Installing libffi (3.3-2) to root...
Downloading http://bin.entware.net/aarch64-k3.10/libffi_3.3-2_aarch64-3.10.ipk
Installing libattr (2.5.1-3) to root...
Downloading http://bin.entware.net/aarch64-k3.10/libattr_2.5.1-3_aarch64-3.10.ipk
Configuring libiconv-full.
Configuring libintl-full.
Configuring zlib.
Configuring libffi.
Configuring libattr.
Configuring glib2.

(mitemp) $ pip3 install lywsd03mmc
Collecting lywsd03mmc
  Using cached lywsd03mmc-0.1.0-py3-none-any.whl (6.4 kB)
Collecting lywsd02==0.0.9
  Using cached lywsd02-0.0.9-py3-none-any.whl (4.3 kB)
Collecting bluepy==1.3.0
  Using cached bluepy-1.3.0.tar.gz (217 kB)
Using legacy 'setup.py install' for bluepy, since package 'wheel' is not installed.
Installing collected packages: bluepy, lywsd02, lywsd03mmc
    Running setup.py install for bluepy ... error
    ERROR: Command errored out with exit status 1:
     command: /storage/.venv/mitemp/bin/python3 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/storage/.opt/tmp/pip-install-09_n_amk/bluepy_f3934a7a656342c1a87ef752f6bc3e9b/setup.py'"'"'; __file__='"'"'/storage/.opt/tmp/pip-install-09_n_amk/bluepy_f3934a7a656342c1a87ef752f6bc3e9b/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /storage/.opt/tmp/pip-record-wbxlv4uq/install-record.txt --single-version-externally-managed --compile --install-headers /storage/.venv/mitemp/include/site/python3.7/bluepy
         cwd: /storage/.opt/tmp/pip-install-09_n_amk/bluepy_f3934a7a656342c1a87ef752f6bc3e9b/
    Complete output (6 lines):
    running install
    running build
    running build_py
    Working dir is /storage/.opt/tmp/pip-install-09_n_amk/bluepy_f3934a7a656342c1a87ef752f6bc3e9b
    execute make -C ./bluepy clean
    error: [Errno 2] No such file or directory: 'make': 'make'
    ----------------------------------------
ERROR: Command errored out with exit status 1: /storage/.venv/mitemp/bin/python3 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/storage/.opt/tmp/pip-install-09_n_amk/bluepy_f3934a7a656342c1a87ef752f6bc3e9b/setup.py'"'"'; __file__='"'"'/storage/.opt/tmp/pip-install-09_n_amk/bluepy_f3934a7a656342c1a87ef752f6bc3e9b/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /storage/.opt/tmp/pip-record-wbxlv4uq/install-record.txt --single-version-externally-managed --compile --install-headers /storage/.venv/mitemp/include/site/python3.7/bluepy Check the logs for full command output.

Instalace závislosti – pythonovského modulu bluepy – zhavarovala, protože není nainstalovaný program make, a proto ho nainstalujeme společně s překladačem a dalšími programy, které budou také potřeba pro překlad modulu z jazyka C.

(mitemp) $ opkg install make gcc
Installing make (4.3-1) to root...
Downloading http://bin.entware.net/aarch64-k3.10/make_4.3-1_aarch64-3.10.ipk
Installing gcc (7.4.0-6a) to root...
Downloading http://bin.entware.net/aarch64-k3.10/gcc_7.4.0-6a_aarch64-3.10.ipk
Installing libbfd (2.35.2-1) to root...
Downloading http://bin.entware.net/aarch64-k3.10/libbfd_2.35.2-1_aarch64-3.10.ipk
Installing libopcodes (2.35.2-1) to root...
Downloading http://bin.entware.net/aarch64-k3.10/libopcodes_2.35.2-1_aarch64-3.10.ipk
Installing libctf (2.35.2-1) to root...
Downloading http://bin.entware.net/aarch64-k3.10/libctf_2.35.2-1_aarch64-3.10.ipk
Installing objdump (2.35.2-1) to root...
Downloading http://bin.entware.net/aarch64-k3.10/objdump_2.35.2-1_aarch64-3.10.ipk
Installing ar (2.35.2-1) to root...
Downloading http://bin.entware.net/aarch64-k3.10/ar_2.35.2-1_aarch64-3.10.ipk
Installing binutils (2.35.2-1) to root...
Downloading http://bin.entware.net/aarch64-k3.10/binutils_2.35.2-1_aarch64-3.10.ipk
Configuring libbfd.
Configuring libopcodes.
Configuring libctf.
Configuring objdump.
Configuring ar.
Configuring binutils.
Configuring gcc.
There are no *-dev packages in Entware(with few exceptions)!
Please install headers as described in the wiki:
https://github.com/Entware/Entware/wiki
Configuring make.

Na konci jsme vyzváni k instalaci hlavičkových souborů podle popisu v dokumentaci. Ukázkový příkaz z popisu pro stažení a rozbalení hlavičkových souborů do adresáře /opt/include je pro potřeby CoreELEC zapotřebí upravit na magický příkaz:

(mitemp) $ wget -qO- \
  "$(sed -Ene 's|^src/gz[[:space:]]entware[[:space:]]([[:graph:]]+)|\1/include/include.tar.gz|p' /opt/etc/opkg.conf)" \
  | tar xvzC /opt/include
(mitemp) $ pip3 install lywsd03mmc
...
bluepy-helper.c:33:10: fatal error: glib.h: No such file or directory
 #include <glib.h>
          ^~~~~~~~
compilation terminated.
./bluez-5.47/attrib/att.c:33:10: fatal error: glib.h: No such file or directory
 #include <glib.h>
          ^~~~~~~~
compilation terminated.
./bluez-5.47/attrib/gatt.c:32:10: fatal error: glib.h: No such file or directory
 #include <glib.h>
          ^~~~~~~~
compilation terminated.
./bluez-5.47/attrib/gattrib.c:34:10: fatal error: glib.h: No such file or directory
 #include <glib.h>
          ^~~~~~~~
compilation terminated.
./bluez-5.47/attrib/utils.c:30:10: fatal error: glib.h: No such file or directory
 #include <glib.h>
          ^~~~~~~~
compilation terminated.
./bluez-5.47/btio/btio.c:37:10: fatal error: glib.h: No such file or directory
 #include <glib.h>
          ^~~~~~~~
compilation terminated.
./bluez-5.47/src/log.c:38:10: fatal error: glib.h: No such file or directory
 #include <glib.h>
          ^~~~~~~~
compilation terminated.
./bluez-5.47/src/shared/io-glib.c:30:10: fatal error: glib.h: No such file or directory
 #include <glib.h>
          ^~~~~~~~
compilation terminated.
./bluez-5.47/src/shared/timeout-glib.c:22:10: fatal error: glib.h: No such file or directory
 #include <glib.h>
          ^~~~~~~~
compilation terminated.
...

Další pokus o instalaci modulu bluepy opět selhal, protože tentokrát nebyl nalezen hlavičkový soubor glib.h. Ten totiž není přímo v adresáři /opt/include, ale je v podadresáři:

(mitemp) $ find /opt/include -name 'glib.h'
/opt/include/glib-2.0/glib.h

Nyní se tedy vrátíme ke konfiguraci prostředí překladače a vytvoříme soubor gcc_env.sh s proměnnými definujícími, kde se má hledat hlavičkový soubor a knihovna glib-2.0. Následně vytvořený soubor použijeme před instalací nového skriptu. (Další možností by byla instalace balíku pkg-config z Entware, ale ten by vyžadoval ještě další konfiguraci, a proto jsem se touto cestou nevydal.)

(mitemp) $ cat > gcc_env.sh <<'END'
PREFIX=/opt
LIBDIR="${PREFIX}/lib"
INCLUDEDIR="${PREFIX}/include"

export LDFLAGS="-Wl,-rpath=${LIBDIR} -Wl,--dynamic-linker=${LIBDIR}/ld-linux.so.3 -L${LIBDIR} "
export CFLAGS="-O2 -pipe -march=native -fno-caller-saves "
export CPPFLAGS="${CFLAGS} -I${INCLUDEDIR} -I${INCLUDEDIR}/glib-2.0 -lglib-2.0 "
export CXXFLAGS="${CFLAGS} ${LDFLAGS} "
END

(mitemp) $ source ./gcc_env.sh && pip3 install lywsd03mmc
Collecting lywsd03mmc
  Using cached lywsd03mmc-0.1.0-py3-none-any.whl (6.4 kB)
Collecting lywsd02==0.0.9
  Using cached lywsd02-0.0.9-py3-none-any.whl (4.3 kB)
Collecting bluepy==1.3.0
  Using cached bluepy-1.3.0.tar.gz (217 kB)
Using legacy 'setup.py install' for bluepy, since package 'wheel' is not installed.
Installing collected packages: bluepy, lywsd02, lywsd03mmc
    Running setup.py install for bluepy ... done
Successfully installed bluepy-1.3.0 lywsd02-0.0.9 lywsd03mmc-0.1.0

Nyní je skript lywsd03mmc se všemi potřebnými moduly úspěšně nainstalovaný a můžeme ho vyzkoušet k načtení hodnot z teploměru s MAC adresou, kterou jsme zjistili na začátku tohoto článku.

(mitemp) $ lywsd03mmc A4:C1:38:98:76:54
Fetching data from A4:C1:38:98:76:54
Temperature: 24.36°C
Humidity: 61%
Battery: 89%

Nebo můžeme uložit historii teplot od zapnutí teploměru do CSV souboru k dalšímu zpracování.

(mitemp) $ lywsd03mmc2csv A4:C1:38:98:76:54 --output data.csv
Fetching data from A4:C1:38:98:76:54
Temperature: 24.36°C
Humidity: 61%
Battery: 89%
Device start time: 2021-07-22 18:39:52.948031

Fetching history from A4:C1:38:98:76:54
2021-07-22 19:39:52.948031: 24.1 to 26.8
2021-07-22 20:39:52.948031: 24.1 to 24.2
2021-07-22 21:39:52.948031: 23.7 to 24.1
2021-07-22 22:39:52.948031: 23.4 to 23.7
2021-07-22 23:39:52.948031: 23.3 to 23.8
...
Done

Měření a ukládání dat v cloudu (2.)

  1. Měříme a získáváme měřené údaje
  2. Odesíláme údaje a sbíráme v cloudu
  3. Sebraná data ukládáme do databáze
  4. Data z databáze zpracujeme, zobrazíme a analyzujeme

V předchozím díle jsme si ukázali, jak měřit a sbírat údaje. Nyní plynule navážeme a představíme si jak údaje odesílat k dalšímu zpracování.

2. Odesílání dat protokolem MQTT

Je několik možností co dělat s naměřenými hodnotami. Budeme se zabývat pouze dvěma, a to odesláním na vlastní MQTT broker, který poběží na nějakém našem počítači a použitím MQTT brokeru v cloudu, abychom se o jeho provoz nemuseli starat. MQTT broker přijímá data a rozesílá přihlášeným odběratelům. Podrobnosti viz Co je MQTT na webu RoboDoupě.

2.1 Vlastní MQTT broker – Eclipse Mosquitto™

Mosquitto můžeme stáhnout a nainstalovat podle návodu z webu https://mosquitto.org/, a nebo ve většině distribucích Linuxu je k dispozici balíček pro jednoduchou instalaci:

$ apt install mosquitto

Po instalaci je nutné upravit základní konfiguraci s nastavením uživatelů a jejich oprávnění v konfiguračních souborech v adresáři /etc/mosquitto.

Zapnutí samostatné konfigurace pro každý druh komunikace:

# soubor /etc/mosquitto/conf.d/default.conf

per_listener_settings true

Konfigurace pro protokol MQTT – povolení anonymního připojení a definice souboru s přístupovými právy.

# soubor /etc/mosquitto/conf.d/mqtt.conf

listener 1883
protocol mqtt
allow_anonymous true
acl_file /etc/mosquitto/acl-mqtt

Nastavení přístupových práv pro anonymy (číst vše pod tématem mereni/), uživatele mereni (čtení a zápis pod tématem mereni/) a pro ostatní uživatele:

# soubor /etc/mosquitto/acl-mqtt

topic read mereni/#

user mereni
topic mereni/#

pattern write $SYS/broker/connection/%c/state

Konfigurace pro protokol Websocket:

# soubor /etc/mosquitto/conf.d/websocket.conf

listener 9001
protocol websockets
allow_anonymous true
acl_file /etc/mosquitto/acl-websocket
password_file /etc/mosquitto/mosq_passwd

Definice oprávnění uživatelů přistupujících přes protokol Websocket (na začátku čtení pro anonymy a zápis pro ostatní uživatele):

# soubor /etc/mosquitto/acl-websocket

topic read $SYS/#
topic read mereni/#

pattern readwrite house/%c/#

Uložení hesel uživatelů programem mosquitto_passwd:

$ mosquitto_passwd -H sha512-pbkdf2 -b /etc/mosquitto/mosq_passwd uzivatel heslo

2.2 MQTT broker v cloudu – HiveMQ Cloud

HiveMQ provozuje veřejný MQTT broker nebo po registraci lze využít službu MQTT Cloud Broker v základní variantě zdarma (do 100 připojených klientů a 10 GB dat měsíčně, uchování dat 3 dny). Založení služby nabízí u poskytovatele AWS v Irsku a Azure ve Frankfurtu n.M.

Použití je velmi jednoduché – potřebné přihlašovací údaje jsou přehledně uvedeny na jedné stránce a je možné vytvořit několik různých uživatelů u kterých ale bohužel nelze omezit oprávnění. Nechybí podrobná nápověda jak službu použít z různých klientů a programovacích jazyků.

2.3 Odeslání a příjem datových zpráv MQTT

2.3.1 Programy mosquitto_pub a mosquitto_sub

Na spoustě Linuxových distribucí jsou v balíčku mosquitto-clients.

$ apt install mosquitto-clients

Odeslání zprávy na MQTT broker do tématu mereni/teplota:

$ mosquitto_pub -h adresa.mqtt.brokeru -p port -u uzivatel -P heslo -t "mereni/teplota" -m "28.5"

Přihlášení k odběru a zobrazení obsahu všech zpráv pod tématem mereni/:

$ mosquitto_sub -h adresa.mqtt.brokeru -p port -u uzivatel -P heslo -t "mereni/#" -v

2.3.2 V jazyce Python s použití knihovny Paho MQTT Client

Instalace v distribuci Linuxu nebo instalátorem balíčků Pythonu (v této ukázce pro Python 3):

$ apt install python3-paho-mqtt

$ pip3 install paho-mqtt

Skript mqtt-client pro odesílání zpráv na MQTT broker (v tomto případě HiveMQ Cloud):

#!/usr/bin/env python3

import paho.mqtt.client as mqtt
import time
import sys
import re

broker = dict(
        HOST = '42616269c5a14a655a6c6f64c49b6a.s2.eu.hivemq.cloud',
        PORT = 8883,
        USER = 'kralicek-itacek',
        PASS = '***heslo***'
)

def on_connect(client, userdata, flags, rc):
  if rc == 0:
    print('Connected successfully ' + str(mqtt.connack_string(rc)))
  else:
    print('Connect returned result code: ' + str(rc) + ' ' + str(mqtt.connack_string(rc)))

def on_disconnect(client, obj, rc):
  if rc == 0:
    print('Disconnected')
  else:
    print('Unexpected disconnection code: ' + str(rc) + ' ' + str(mqtt.error_string(rc)))

def on_message(client, userdata, msg):
  print('Received message: ' + str(msg.topic) + ' ' + str(msg.payload.decode('utf-8')))

def main():
  client = mqtt.Client()
  client.on_connect = on_connect
  client.on_disconnect = on_disconnect
  client.on_message = on_message
  client.tls_set(tls_version=mqtt.ssl.PROTOCOL_TLS)
  client.username_pw_set(broker['USER'], broker['PASS'])
  x = client.connect(broker['HOST'], broker['PORT'], 60)
  client.loop_start()

#  client.subscribe("#")  # debug

  for line in sys.stdin:
    m = re.match('(.*)=(.*)', line)
    if m:
      p = client.publish(m.group(1), payload=m.group(2))

  p.wait_for_publish()
  client.loop_stop()
  time.sleep(2)
  client.disconnect()

if __name__ == '__main__':
    main()

Skript po spuštění očekává zadání dat v níže uvedeném formátu a po zadání znaku konce řádku (Enter na klávesnici) hodnoty odesílá jako zprávy na MQTT broker. Ukončuje se zadáním znaku konce souboru EOF (na klávesnici Ctrl+D).

jmeno/tematu/topic=hodnota

# Příklad:
mereni/doma/teplota1=24.44

Tento formát je ideální pro předávání dat získaných v předchozí kapitole tohoto seriálu.

$ sensors -u | awk '/_input:/ { gsub("_input:", ""); print "mereni/pocitac/" $1 "=" $2 }' | mqtt-client

Podrobnější informace ke zpracování a odesílání MQTT zpráv v Pythonu najdeme na webu MQTT and Python For Beginners (anglicky).

Měření a ukládání dat v cloudu (1.)

Aneb „Jak jít s kanónem na vrabce“

  1. Měříme a získáváme měřené údaje
  2. Odesíláme údaje a sbíráme v cloudu
  3. Sebraná data ukládáme do databáze
  4. Data z databáze zpracujeme, zobrazíme a analyzujeme

1. Měření a získání naměřených dat počítačem

V našem okolí se dají pomocí speciálních čidel měřit rozmanité údaje. Od teploty, vlhkosti a tlaku vzduchu, přes měření teploty vody v zahradním jezírku nebo v kotli či bojleru, spotřebu elektřiny a vody, až po cokoliv nás napadne.

Pro začátek se můžeme spokojit s údaji, které jdou měřit v počítači nebo v jednodeskovém počítači typu Raspberry Pi s operačním systémem Linux. Osobně nejvíc používám Debian GNU/Linux, Ubuntu, Linux Mint, Armbian a CoreELEC, ale to záleží na osobním vkusu každého soudruha.

Účelem tohoto článku je v podstatě zdokumentovat základy realizovaného řešení a měřením v jiných operačních systémech se proto nezabývá.

  • Teplota procesoru a vzduchu ve skříni, počet otáček ventilátoru a hodnoty napětí programem sensors z balíku lm-sensors.

    Pro automatizované zpracování dat jsou užitečné přepínače -u pro vypsání v jednoduchém formátu či -j pro vypsání ve formátu json.

    $ sensors -u
    it8728-isa-0a30
    Adapter: ISA adapter
    in0:
      in0_input: 1.068
      in0_min: 0.000
      in0_max: 3.060
      in0_alarm: 0.000
      in0_beep: 0.000
    in1:
      in1_input: 2.232
      in1_min: 0.000
      in1_max: 3.060
      in1_alarm: 0.000
      in1_beep: 0.000
    in2:
      in2_input: 2.976
      in2_min: 0.000
      in2_max: 3.060
      in2_alarm: 0.000
      in2_beep: 0.000
    in3:
      in3_input: 2.916
      in3_min: 0.000
      in3_max: 3.060
      in3_alarm: 0.000
      in3_beep: 0.000
    in4:
      in4_input: 2.232
      in4_min: 0.000
      in4_max: 3.060
      in4_alarm: 0.000
      in4_beep: 0.000
    in5:
      in5_input: 0.708
      in5_min: 0.000
      in5_max: 3.060
      in5_alarm: 0.000
      in5_beep: 0.000
    in6:
      in6_input: 1.524
      in6_min: 0.000
      in6_max: 3.060
      in6_alarm: 0.000
      in6_beep: 0.000
    3VSB:
      in7_input: 3.384
      in7_min: 0.000
      in7_max: 6.120
      in7_alarm: 0.000
      in7_beep: 0.000
    Vbat:
      in8_input: 3.120
    fan1:
      fan1_input: 1146.000
      fan1_min: 0.000
      fan1_alarm: 0.000
      fan1_beep: 1.000
    fan2:
      fan2_input: 0.000
      fan2_min: 0.000
      fan2_alarm: 0.000
      fan2_beep: 1.000
    fan3:
      fan3_input: 0.000
      fan3_min: 0.000
      fan3_alarm: 0.000
      fan3_beep: 1.000
    fan4:
      fan4_input: 0.000
      fan4_min: 0.000
      fan4_alarm: 0.000
      fan4_beep: 1.000
    fan5:
      fan5_input: 0.000
      fan5_min: 0.000
      fan5_alarm: 0.000
      fan5_beep: 1.000
    temp1:
      temp1_input: 31.000
      temp1_max: 127.000
      temp1_min: 127.000
      temp1_alarm: 0.000
      temp1_type: 4.000
      temp1_offset: 0.000
      temp1_beep: 1.000
    temp2:
      temp2_input: -55.000
      temp2_max: 127.000
      temp2_min: 127.000
      temp2_alarm: 0.000
      temp2_type: 4.000
      temp2_offset: 0.000
      temp2_beep: 1.000
    temp3:
      temp3_input: 18.000
      temp3_max: 127.000
      temp3_min: 127.000
      temp3_alarm: 0.000
      temp3_type: 6.000
      temp3_offset: 94.000
      temp3_beep: 1.000
    intrusion0:
      intrusion0_alarm: 0.000
    

    Z výpisu můžeme jednoduchým awk skriptem vyfiltrovat a přeformátovat hodnoty, které nás zajímají.

    $ sensors -u | awk '/_input:/ { gsub("_input:", ""); print $1 "=" $2 }'
    in0=1.068
    in1=2.232
    in2=2.976
    in3=2.916
    in4=2.232
    in5=0.708
    in6=1.524
    in7=3.384
    in8=3.120
    fan1=1146.000
    fan2=0.000
    fan3=0.000
    fan4=0.000
    fan5=0.000
    temp1=31.000
    temp2=-55.000
    temp3=18.000
    
  • Teplota pevného disku nebo SSD programem smartctl z balíku smartmontools.

    Přepínač -n sleep zabrání probuzení uspaného disku a přepínačem -l scttempsts se získá teplota i uspaného disku (před uspáním).
    Při použití přepínače -A, který zobrazí S.M.A.R.T. data včetně teploty, se uspané disky probouzí. Pravidelné čtení těchto dat zabraňuje uspávání disků po nastavené době nečinnosti (programem hdparm -S<timeout>), takže používat až po jejich přechodu do úsporného režimu (zjištění programem hdparm -C).

    $ smartctl -n sleep -l scttempsts /dev/sda
    smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-77-generic] (local build)
    Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org
    
    === START OF READ SMART DATA SECTION ===
    SCT Status Version:                  3
    SCT Version (vendor specific):       1 (0x0001)
    Device State:                        Active (0)
    Current Temperature:                    21 Celsius
    Power Cycle Min/Max Temperature:     18/21 Celsius
    Lifetime    Min/Max Temperature:     -2/63 Celsius
    Specified Max Operating Temperature:    55 Celsius
    Under/Over Temperature Limit Count:   0/0
    

    Vypsání pouze aktuální teploty disku pomocí awk skriptu:

    $ smartctl -n sleep -l scttempsts /dev/sda | awk '/Current.*Celsius/ {  gsub(/([^0-9 ]+)/, ""); print "temp_sda=" $1 }'
    temp_sda=21
    
  • Měření teploty externím teplotním čidlem Dallas DS18B20 připojeným na 1-Wire sběrnici a k počítači přes seriový port RS-232 nebo přes USB TTL UART převodník.

    Načtení hodnot programem digitemp:

    $ digitemp_DS9097 -i -s /dev/ttyS0  # uložení konfigurace do .digitemprc
    DigiTemp v3.7.2 Copyright 1996-2018 by Brian C. Lane
    GNU General Public License v2.0 - http://www.digitemp.com
    Turning off all DS2409 Couplers
    ..
    Searching the 1-Wire LAN
    281234E000000001 : DS18B20 Temperature Sensor
    286789E000000099 : DS18B20 Temperature Sensor
    ROM #0 : 281234E000000001
    ROM #1 : 286789E000000099
    Wrote .digitemprc
    
    $ digitemp_DS9097 -a                # načtení hodnot všech čidel
    DigiTemp v3.7.2 Copyright 1996-2018 by Brian C. Lane
    GNU General Public License v2.0 - http://www.digitemp.com
    Jul 20 17:35:10 Sensor 0 C: 23.25 F: 73.85
    Jul 20 17:35:11 Sensor 1 C: 22.44 F: 72.39
    

    Vypsání pouze naměřené teploty ve °C jednotlivých teploměrů:

    $ digitemp_DS9097 -a -q | awk '/Sensor/ { print "temp_sensor" $5 "=" $7 }'
    temp_sensor0=23.25
    temp_sensor1=22.44
    

Příště si naměřené údaje zpracujeme a pošleme do cloudu.

Porovnání levných VPS do 100 Kč měsíčně

Koncem dubna mi poskytovatel virtuálního serveru oznámil, že bude provoz služby na konci předplaceného období ukončen a nabídl zvýhodněný přechod na jinou službu, a to více jak 5× dražší, což jsem nemohl akceptovat, protože VPS mám hlavně na hraní a provoz neziskových webových stránek, který dotuji z vlastní kapsy a platit bezmála 315 Kč měsíčně je cenově nevýhodné. Porozhlédl jsem se tedy po vhodné náhradě se stanovenými měsíčními náklady maximálně 100 Kč.

Porovnání původní služby s alternativami v přehledné tabulce:

Služba Coolhousing
VPS Lite
Forpsi Cloud
VPS Smart Small
Hukot
VPS-L02G
Cena měsíčně (bez/s DPH) 70/84,70 Kč
(čerpání z kreditu)
75 Kč/90,75 Kč
Cena ročně (bez/s DPH) 600/726 Kč 840/1016,40 Kč 837/1012,77 Kč (7% sleva)
RAM 512 MB 1 GB 2 GB
CPU 1× 1100 MHz 1× 1800 MHz 1× 2200 MHz
Úložiště 20 GB virtio 20 GB SSD 20 GB SSD virtio
Síťové připojení 100 Mbps virtio 1000 Mbps vmxnet3 1000 Mbps rtl8139
Datové přenosy neomezeně 2 TB měsíčně neomezeně
Adresa IPv4 1 1 1
Adresa IPv6 rozsah /96 rozsah /64 rozsah /121
Reverzní DNS pro IPv4 ano ano ano
Reverzní DNS pro IPv6 asi na vyžádání (v administraci je v přehledu) ne ne
Firewall ne ne pro IPv4
Automatizovaná instalace ano ano ano
Manuální instalace ano ne ano
Výběr umístění ne 8 datacenter v 6 zemích ne
Virtualizační technologie KVM VMware KVM
KVM konzole Apache Guacamole a VNC Apache Guacamole noVNC/HTML5 WebSocket
Snapshoty 3 automatické každou noc,
1 manuální
1 manuální s trvanlivostí 2 dny 4 Kč/GB měsíčně

Jaké jsou výhody a nevýhody jednotlivých služeb?

  • Součástí služby VPS Lite byla velmi užitečná funkce zálohování automatickým vytvořením snapshotu každou noc, které se uchovávaly poslední tři a výhoda umístění v datacentru v Praze (velmi malá latence/RTT). Nevýhodou byl malý výkon CPU.
  • U Forpsi Cloud je velká nevýhoda nemožnosti manuálního spuštění instalace operačního systému — raději volím rozdělení disku a souborový systém sám a v budoucnu to znemožní nastartování z vlastního ISO obrazu pro případné záchranné práce, ale libí se mi vytvoření snapshotu zdarma, což se hodí třeba před velkým upgradem operačního systému. Matoucí je nejednotná administrace, která je rozdělena na tři aplikace a musí se přemýšlet, do které se přihlásit — 1. administrace domén a webhostingu, 2. administrace Cloudu a 3. dobíjení kreditu.
  • U Hukot se mi nejvíc líbí nastavení firewallu u poskytovatele, který zablokuje zbytečnou komunikaci na VPS a velká kapacita RAM, kterou ale nevyužiji, poněvadž doteď stačila pro provoz mailserveru postfix a webserveru nginx se statickými webovými stránkami čtvrtinová (a aktivně využitá byla kolem 80 MB). Během testování VPS bohužel došlo 31.5.2021 po 16. hodině asi na 20 minut k celkové nedostupnosti VPS a nezobrazila se ani webová stránka hostingu. Po opravení jsem pátral co se stalo, ale na stránce statusu hostingu vesele svítilo „Všechny systémy funkční“ a dostupnost SLA 100 %, což ve mě velkou důvěru nevzbudilo.

Ostatní parametry jsou víceméně podobné nebo na nich moc nezáleží. Zajímavější bude změřit reálný výkon VPS a zjistit jak velký je mezi nimi rozdíl.

Orientační výkon VPS byl zjištěn pomocí jednoduchých testů a pro zajímavost je tu porovnání výkonu s virtuálním serverem zdarma (v rámci OracleCloud Free Tier) a 12 let starým desktop PC s CPU Intel Core2 Duo 6700 @2.66 GHz a první generací SSD.

  bc 7zr Propustnost Disk
VPS Lite 69,4 s 922/912 MIPS 5 GB/s 30 MB/s
VPS Smart Small 28,5 s 2251/2186 MIPS 10,8 GB/s 1,1 GB/s
VPS-L02G 29,1 s 1908/1889 MIPS 10,7 GB/s 296 MB/s
OracleCloud VM.Standard.E2.1.Micro 50,2 s 746/1387 MIPS 6,7 GB/s 55 MB/s
Desktop PC 28,3 s 2562/4907 MIPS 12,1 GB/s 132 MB/s
  • měření bc (jednovláknové)
    $ time echo "scale=5000; 4*a(1)" | bc -l
  • měření 7zr
    $ 7zr b
  • měření Propustnost
    $ dd if=/dev/zero of=/dev/null bs=1M count=10k
  • měření Disk
    $ dd if=/dev/zero of=a bs=1M count=1k oflag=direct conv=fdatasync

Z měření rychlosti vyplývá, že VPS Lite je extrémně přiškrcený, Hukot používá starší/horší/pomalejší CPU než Forpsi a nejrychlejší je dvanáct let staré pécéčko i při uvažování rychlosti pouze jednoho jádra CPU.

A pokud se ptáte, proč tu není VPS otestovaných víc, tak jsem jiné služby pod 100 Kč měsíčně nezkoušel a nenašel.

Příjem DVB-T a DVB-T2 v Praze

Vysílače DVB-T2 – Praha

Na jakých frekvencích lze naladit multiplexy digitálního televizního vysílání z vysílačů DVB-T2 v Praze. Vyžaduje přijímač s tunerem podporujícím demodulaci DVB-T2 a dekodérem komprese H.265 HEVC.
Multiplex Kanál Frekvence (MHz) Polarizace Vysílač Spuštění
Multiplex 21 (ceskatelevize.cz) 26 514 V Žižkov v provozu
H Cukrák
ČT 1 HD, ČT 2 HD, ČT 3 HD, ČT 24 HD, ČT sport HD, ČT :D/art HD
Multiplex 22 (cra.cz) 40 626 V Žižkov 9.1.2020
H Cukrák 16.1.2020
Prima, Prima +1, Prima Cool, Prima Krimi, Prima Love, Prima Max, Prima Zoom, CNN Prima News, Óčko, Óčko Star
Multiplex 23 (czechdigitalgroup.cz) 23 490 V Žižkov 9.1.2020
H Cukrák 16.1.2020
Nova, Nova Cinema, Seznam.cz TV, Noe TV, NASA TV, Barrandov TV, Kino Barrandov, Barrandov Krimi
Multiplex 24 (multiplex4.cz) 42 642 H Ládví, Novodvorská 8.1.2020
V Olšanská
Nova, Nova 2, Nova Action, Nova Gold, JOJ Family, Prima Comedy Central, Sport 5, Rebel, Relax, Retro Music TV, Šlágr TV, CS Mystery, ABC TV, Galerie, Klenot TV
Regionální síť 4 (pdtv.cz) 46 674 H Ládví, Strahov, Zelený pruh 2.9.2020
Praha TV, Skylink Anténa+
Multiplex 12 (cra.cz) 31 554 V Žižkov vypnutí 30.1.2020
H Cukrák
Prima Love, Prima Zoom, Prima Max, Barrandov TV, Kino Barrandov, Barrandov Plus, Óčko Star, Šlágr TV, Óčko, Prima, Prima Cool, Barrandov Family, Noe TV, Šlágr 2, Nova Cinema, Nova, Seznam.cz TV, Prima Krimi
Multiplex 13 (multiplex4.cz) 24 498 H Ládví, Novodvorská vypnutí 8.1.2020
V Olšanská
Nova, Nova Cinema, Nova Action, Nova Gold, Nova 2, Prima Comedy Central, Joj Family, TV Rebel, TV Relax, V1 HD, Kinosvět
Na jakých frekvencích bylo DVB-T vysílání v Praze:
Multiplex Kanál Frekvence (MHz) Polarizace Vysílač Programy Vypnutí
Multiplex 1 (ceskatelevize.cz) 53 730 V Žižkov ČT 1, ČT 2, ČT 24, ČT sport, ČT :D/art 27.11.2019
H Cukrák
Multiplex 2 (cra.cz) 41 634 V Žižkov Nova, Nova Cinema, Prima, Prima Cool, Barrandov TV 8.1.2020
H Cukrák 15.1.2020
Multiplex 3 (czechdigitalgroup.cz) 59 778 V Žižkov Prima Zoom, Prima Max, Prima Love, Óčko, Óčko Star, Barrandov Plus, Kino Barrandov, Šlágr TV, Seznam.cz TV 8.1.2020
H Cukrák 15.1.2020
Multiplex 4 (multiplex4.cz) 42 642 H Ládví, Novodvorská Nova Action, Nova 2, Nova Gold, Relax, Rebel, Joj Family, Prima Comedy Central, Rebel2 8.1.2020
V Olšanská
Regionální síť 4 (pdtv.cz) 46 674 H Ládví, Strahov, Zelený pruh Retro Music TV, Kinosvět, Praha TV 28.11.2019 přepnutí na kodek MPEG-4 (AVC/H.264) ukončeno 2.9.2020
Regionální síť 7 (progressdigital.cz) 37 602 H Ládví, Novodvorská Kinosvět, Rebel 2, Galerie, Slušnej kanál 31.10.2020
Regionální síť 8 (cra.cz) 51 714 V Žižkov Šlágr 2, Sport 5, Óčko Expres, Barrandov News, Regionální televize CZ, Tuty, Power TV, Noe TV 31.10.2020
H Cukrák
Regionální síť 12 (czechdigitalgroup.cz) 47 682 V Žižkov Prima +1, Óčko Black, Óčko Expres ?

Ceny registrace a prodloužení domény .CZ

Aktuální ceník domén .CZ

Kolik stojí registrace nebo obnovení platnosti české domény .CZ na 1 rok u certifikovaných registrátorů? Novinka! Od 1.1.2019 zdražilo sdružení CZ.NIC velkoobchodní cenu domény .cz ze 125 Kč na 145 Kč bez DPH, a proto zvýšili cenu o 20 až 74 Kč i následující registrátoři.
Certifikovaný registrátor Nová doména Prodloužení registrace
bez DPH s DPH bez DPH s DPH
Active 24, s.r.o. ➡️ 199 Kč* 240,79 Kč* 269 Kč 325,49 Kč
Forpsi (INTERNET CZ, a.s.) ~ 145 Kč* 175,45 Kč* 149 Kč 180,29 Kč
IGNUM, s.r.o. ↘ 249 Kč 301 Kč 279 Kč 338 Kč
Kvapem (Stable.cz s.r.o.) ➡️ 190 Kč 230 Kč 190 Kč 230 Kč
Onebit (ONEsolution s.r.o.) ➡️ 145 Kč 175 Kč 219 Kč 265 Kč
regZone (ZONER software, a.s.) ↘ 169 Kč 204 Kč 450 Kč 545 Kč
TELE3 s.r.o. ~ 165 Kč 200 Kč 165 Kč 200 Kč
Web4U s.r.o. ↘ 145 Kč 175 Kč 196 Kč 237 Kč
WEDOS Internet, a.s. ↗ 145 Kč 175 Kč 145 Kč 175 Kč
* Ceny označené hvězdičkou jsou s akční slevou, která může mít omezenou platnost. Šipka za jménem registrátora naznačuje trend vývoje počtu zaregistrovaných domén.

Ceny u ostatních akreditovaných registrátorů

Následuje přehled cen u dalších akreditovaných registrátorů, kteří poskytují registraci domén zpravidla ve spojitosti s poskytováním služby webhostingu.
Akreditovaný registrátor Nová doména Prodloužení registrace
bez DPH s DPH bez DPH s DPH
ASPone, s.r.o. ➡️ 189 Kč 228,69 Kč 239 Kč 289,19 Kč
AXFONE s.r.o. ↘ 145 Kč 175 Kč 195 Kč 236 Kč
Gigaserver (Seonet Multimedia s.r.o.) ➡️ 159 Kč 192,39 Kč 199 Kč 240,79 Kč
OVH, Sas ➡️ 149 Kč 180,29 Kč 149 Kč 180,29 Kč
PIPNI s.r.o. ↘ 150 Kč 182 Kč 180 Kč 218 Kč
Thosting (TERMS a.s.) ↘ 146,28 Kč 177 Kč 175,21 Kč 212 Kč
Websupport, s.r.o. ↗ 175 Kč 211,75 Kč 175 Kč 211,75 Kč
* Ceny označené hvězdičkou jsou s akční slevou, která může mít omezenou platnost.

Kde zaplatím nejméně?

Nejlevnější registraci nebo prodloužení domény .cz v současné době nabízí služby Forpsi, OVH a Wedos (za cenu od 175 Kč do 180,29 Kč s DPH). Ceník byl naposledy upraven na základě informací z webových stránek uvedených registrátorů ke dni 13. ledna 2019 a je pravidelně aktualizovaný.

Jak opravit zpomalený čas ve VirtualBoxu

O několik minut zpožděný čas ve VirtualBoxuV novějších verzích Oracle VM VirtualBox 5 jsem měl problémy s velmi pomalu běžícím časem ve virtuálních počítačích, kdy virtualizovaný systém ukazoval jiný čas než byl ve skutečnosti. Týkalo se to virtualizovaných Windows XP i různých verzí Linuxu od Debian 7, Debian 8, Ubuntu 16.04 i CentOS 6 či 7. Čas se neustále zpožďoval asi o třetinu až polovinu proti reálnému času. Po delším čase tedy došlo k rozdílu oproti normálnímu času o několik minut. Po různém hledání na internetu, kdy jsem byl ujištěn, že v tom nejsem sám, se objevila jedna zřejmá příčina a několik způsobů řešení. Špatné plynutí času ve virtualizovaném operačním systému má na svědomí tzv. paravirtualizace, kdy se část práce systému přenáší na hostitelský operační systém. Možné řešení je tedy toto:
  1. V nastavení virtuálního počítače (jde změnit pouze pokud je vypnutý) je nutné vypnout paravirtualizaci nebo přepnout do minimálního režimu volbou „Systém » Akcelerace – Rozhraní paravirtualizace“ nastavení „Minimální“ nebo „Žádné“.
    Nastavení paravirtualizace ve VirtualBoxu
    Nastavení paravirtualizace ve VirtualBoxu
  2. Při instalaci každé nové verze VirtualBoxu je vhodné ve virtuálních strojích aktualizovat tzv. Přídavky pro hosta dodávané s novou verzí VirtualBoxu. Spouští se připojením ISO obrazu VBoxGuestAdditions.iso přes nabídku „Zařízení » Vložit obraz CD disku s přídavky pro hosta…“ po spuštění VM. V operačním systému se potom objeví CD, ze kterého je potřeba spustit instalační program a projít instalací. Ve Windows to bude instalátor VBoxWindowsAdditions.exe a v Linuxu instalační skript VBoxLinuxAdditions.run. Tato aktualizace mi pomohla zejména ve Windows XP, ale je pravděpodobné, že virtualizované Windows 7, 8 nebo Windows 10 budou také fungovat lépe.
    Připojení ISO obrazu CD Přídavky pro hosta ve VirtualBoxu.
    Připojení ISO obrazu CD Přídavky pro hosta ve VirtualBoxu.
  3. Po restartu virtuálního počítače by měl být čas již stejný jako na hostitelském systému.
   

Aktuální délka fronty na Lítačku

Aktuální délka fronty na vyřízení žádosti a vydání Lítačky (od března 2016 nová síťová jízdenka nebo též tramvajenka místo Opencard) a statistika s časovým vývojem za posledních 7 dnů.

Čekajících ve frontě za poslední hodinu

Průměr za posledních 24 hodin

Průměry za posledních 7 dnů

Pražská Lítačka - nová tramvajenka na městskou hromadnou dopravu
Pražská Lítačka — nová tramvajenka na městskou hromadnou dopravu
Sledujeme délku fronty na Lítačku u 11 přepážek ve Škodově paláci v Praze (ulice Jungmannova) ve všední dny od pondělí do pátku v době od 8.00 do 18.00 hodin (běžná otevírací doba) v časovém období za posledních 7 dnů. Dlouhá fronta může být ve skutečnosti kratší a postupovat rychleji, protože záleží na trpělivosti čekajících, počtu otevřených přepážek a rychlosti odbavení (pokud je narváno, tak by se doba vyřízení měla zrychlovat). Průměrná doba čekání v minutách není zatím k dispozici, ale v dohledné době plánujeme přidat alespoň neoficiální kvalifikovaný odhad. Během července 2016 bylo pro expresní vydání nejvhodnější přijít ráno před devátou, po sedmé večer nebo ve čtvrtek a pátek. Od srpna 2016 je již možné objednat Lítačku elektronicky přes internet a na přepážce je vydání karty zpoplatněno, takže na přepážky již nechodí tolik lidí a je možné přijít kdykoliv. Kromě pondělků není většinou fronta delší než pár osob s maximem kolem 25. Od roku 2017 nejsou fronty nijak zvlášť dlouhé a doba čekání je obvykle několik minut. Pokud náhodou žádné grafy nevidíte, tak asi máte zrovna smůlu a něco se pokazilo. Máte-li v prohlížeči vypnutý JavaScript, tak ho zkuste zapnout nebo na této stránce všechen povolit a neblokovat.