Debian 9 (stretch) – instalace php 7.1

V poslední verzi Debianu Stretch je defaultně php 7.0, pokud potřebujete novější 7.1, je možné jej bez kompilace zdrojových kódů nainstalovat přes balíčky:

apt-get install apt-transport-https lsb-release ca-certificates
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt-get update
apt-get install php7.1

Stejným způsobem nainstalujeme PHP7.2:

apt install php7.2 php7.2-cli php7.2-common php7.2-json php7.2-opcache php7.2-mysql php7.2-zip php7.2-fpm php7.2-mbstring 

Jak jsem nasadil Let’s Encrypt

Dnes si prakticky ukážeme jak zprovoznit Let’s Encrypt na vlastním serveru s Debianem a Apache. Let’s Encrypt je továrna na certifikáty zdarma.

Instalace Let’s Encrypt

git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Zastavíme Apache

/etc/init.d/apache2 stop
#nebo

systemctl stop apache2.service

Přesvědčíme se že na portu 80 nic neposlouchá:

netstat -na | grep ':80.*LISTEN'

Vygenerování certifikátu

cd /opt/letsencrypt
./letsencrypt-auto certonly --standalone
  1. zadáme email
  2. souhlasíme s podmínkami
  3. zadáme doménová jména pro která chceme certifikát (example.com, www.example.com, app.example.com)
IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through
   e-mails sent to vencax@gmail.com.
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/www.meducina.cz/fullchain.pem. Your cert will
   expire on 2016-04-14. To obtain a new version of the certificate in
   the future, simply run Let's Encrypt again.
 - Your account credentials have been saved in your Let's Encrypt
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Let's
   Encrypt so making regular backups of this folder is ideal.
 - If you like Let's Encrypt, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Opět spustíme Apache

/etc/init.d/apache2 start

Certifikáty byly vytvořeny do složky:

ls -al /etc/letsencrypt/live/www.your_domain_name.com

Do Apache pak stačí pouze přidat (základní nejjdnodužší nastavení):

vim meducina.cz-ssl.conf:

<VirtualHost *:443>
    ServerAdmin webhosting@ukaztese.cz
    ServerName  meducina.cz
    ServerAlias *.meducina.cz
    DocumentRoot /var/www/meducina.cz/web/www/www

    SSLEngine on
    SSLCertificateFile "/etc/letsencrypt/live/www.meducina.cz/cert.pem"
    SSLCertificateKeyFile "/etc/letsencrypt/live/www.meducina.cz/privkey.pem"
</VirtualHost>

Přidáme tuto konfiguraci:

cd /etc/apache2/sites-enabled
a2ensite meducina.cz-ssl

Restartovat Apache a je to 🙂

Ovšem doporučuji Apache nastavit pořádně. K tomu pomůže Generator Mozilla Security (musel jsem povolit a2enmod headers). Takto mi to funguje

#Listen 443
<VirtualHost *:443>
    ServerAdmin webhosting@ukaztese.cz
    ServerName  meducina.cz
    ServerAlias *.meducina.cz
    DocumentRoot /var/www/meducina.cz/web/www/www

    SSLEngine on
    SSLCertificateFile      "/etc/letsencrypt/live/www.meducina.cz/cert.pem"
    SSLCertificateKeyFile   "/etc/letsencrypt/live/www.meducina.cz/privkey.pem"
    SSLCACertificateFile    "/etc/letsencrypt/live/www.meducina.cz/fullchain.pem"

    # HSTS (mod_headers is required) (15768000 seconds = 6 months)
    Header always set Strict-Transport-Security "max-age=15768000"
</VirtualHost>



# intermediate configuration, tweak to your needs
SSLProtocol             all -SSLv3
SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
    SSLCompression          off
#    SSLSessionTickets       off   #WTF - why don't work?

    # OCSP Stapling, only in httpd 2.3.3 and later
    SSLUseStapling          on
    SSLStaplingResponderTimeout 5
    SSLStaplingReturnResponderErrors off
SSLStaplingCache        shmcb:/var/run/ocsp(128000)

Přesměrování na https

Veškerý traffic přesměrujeme na http

<VirtualHost *:80>

#...
    #redirect to https
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
#...

</VirtualHost>

 

Obnova certifikátů

Doporučuji si udělat symlink aby příkaz letsencrypt-auto fungoval kdekoliv z příkazové řádky:

ln -s /opt/letsencrypt/letsencrypt-auto /usr/local/bin/letsencrypt-auto

Certifikáty jsou vystavené pouze s platností 90 dnů! Zároveň je doporučováno je každých 60 dnů obnovit. Aktualizace certifikátů zatím stále není k dispozici, ale certifikát obnovíme opětovným spuštěním příkazů uvedených výše.

 

Pravidelná aktualizace certifikátů

Abychom nemuseli myslet na pravidelnou aktualizaci certifikátů, přidáme záznam do cornu, který nám je bude automaticky aktualizovat:

crontab -e

Obnovu certifikátů budeme spouštět každý první den v sudém měsíci ve 4:00 ráno:

0 4 1 */2 * cd /opt/letsencrypt && ./letsencrypt-auto certonly --apache --renew-by-default --apache -d www.meducina.cz >> /var/log/letsencrypt/meducina.cz-renew.log 2>&1
0 4 1 */2 * cd /opt/letsencrypt && ./letsencrypt-auto certonly --apache --renew-by-default --apache -d www.vhazovani.cz >> /var/log/letsencrypt/meducina.cz-renew.log 2>&1
0 4 1 */2 * letsencrypt-auto certonly --apache --renew-by-default --apache -d www.protivinsko.cz >> /var/log/letsencrypt/protivinsko.cz-renew.log 2>&1

To je vše. Není nutné restartovat Apache

Ovšem lepší je dát do cronu pouze 1 script, který bude automaticky obnovovat certifikáty:

0 4 1 */2 * /root/letsencrypt-renew

vim /root/letsencrypt-renew

#!/bin/bash

/opt/letsencrypt/letsencrypt-auto certonly --apache --renew-by-default --apache -d www.meducina.cz >> /var/log/letsencrypt/meducina.cz-renew.log 2>&1

/opt/letsencrypt/letsencrypt-auto certonly --apache --renew-by-default --apache -d www.vhazovani.cz >> /var/log/letsencrypt/vhazovani.cz-renew.log 2>&1

/opt/letsencrypt/letsencrypt-auto certonly --apache --renew-by-default --apache -d www.protivinsko.cz >> /var/log/letsencrypt/protivinsko.cz-renew.log 2>&1

/opt/letsencrypt/letsencrypt-auto certonly --apache --renew-by-default --apache -d www.mamejidlo.cz >> /var/log/letsencrypt/mamejidlo.cz-renew.log 2>&1

Nastavit oprávnění pro spouštění:

chmod oug+x letsencrypt-renew

 

Leptání plošného spoje v domácích podmínkách

Již pěknou řádku let mi doma leží chemikálie pro leptání plošných spojů. Největší překážka pro mne byl osvit desky UV zářením. Při použití UV trubic pro mne byl výsledek vždy nejistý. Proto jsem investoval do trochu sofistikovanějšího řešení a koupil osvitovou jednotku na plošné spoje, se kterou je výroba plošných spojů v domácích podmínkách jednoduchá.

Desky pro plošný spoj máchám v plastových krabičkách na potraviny. Tyto krabičky jsou levné a mají výhodu, že se nechají uzavřít.

Osvit plošného spoje

Vytištěný plošný spoj (tisknu klasicky, žádné otáčení) na obyčejném papíře nastříkám sprejem Transparent 21. Správně otočím a plošný spoj a ozařuji 9minut 30 vterin (defaultní nastavení UV jednotky). Pokud leptám větší plochu spoje, klidně postříkám papír přímo na desce (osvit trvá docela dlouho a Transparent 21 se rychle odpařuje). Pro větší plošné spoje je ovšem nutné vytisknout plošný spoj na fólii – nemusí se stříkat sprejem Transparent 21 a výsledek je lepší.

Vývojka

Vývojku používám kupovanou již naředěnou: Vývojka obsahuje hydroxid sodný 1,5%

Vyvolávám v roztoku při pokojové teplotě. Roztoku mám v nádobě cca 0,5cm. Okamžitě po vložení do čerstvého roztoku (mědí nahoru) se začnou zobrazovat cestičky plošného spoje. Za 3 minuty by mělo být hotovo. Ovšem já vyčkávám déle, dokud neuvidím všechny cestičky bez šumu. Čekám cca 6 minut. A kádinkou občas pohybuji aby se k destičce dostala nenasycená vývojka a odplavily nečistoty. V úplně čistém roztoku 3minuty stačí, možná až moc (některé písmo je hůře vidět).  Jakmile se už nic neodpouští, pryč s tím. Udělal jsem pokus a za minutu vyndal, i to je asi moc 🙂 I ve starším roztoku 0,5 minuty stačí.

K manipulaci s destičkou plošného spoje používám fotografické kleště. Nikdy nesahejte to roztoků rukou bez jakéhokoliv nástroje! Destičku vyndám, omyji pod tekoucí studenou vodou a do sucha osuším.

Leptání v chloridu železitém FeCl3

Chlorid železitý FeCl3 není nebezpečný ale zanechává obtížně odstranitelné hnědé skvrny, které se na oblečení po čase změní v díry. Rukama do roztoku nesajte. Ani nedoporučuji železné kleště/nůžky pro manipulaci s destičkou plošného spoje. Po práci ruce důkladně umyjeme a ošetříme krémem.

K destičce plošného spoje udělám z elekrikářské lepenky madla pro snadnější manipulaci. Leptám v leptacím roztoku.

Leptám s použitím fotografické misky do které naliji cca 0,5 cm chloridu železitého. Plošný spoj za madla položím na hladinu (mědí dolů). Nejprve položím 1 hranu a postupně celý spoj aby pod ním nevznikla „bublina“. Suchý plošný spoj plave na hladině. Rozpuštěná měď klesá ke dnu.

Leptání v žádném případě neurychlujte štětcem! Doporučuji občas kontrolovat v jakém stavu se nachází leptání.

Leptám při pokojové teplotě (čím vyšší teplota tím rychlejší leptání). V čerstvém chloridu železitém trvá leptání cca 20 minut. Ke konci leptání je vidět prosvítání motivu. Leptám do té doby než zmizí „červené“ pozadí.

Mytí & finální úprava

Vyleptaný plošný spoj důkladně omyjeme vodou a mýdlem abychom odstranili zbytky leptacího roztoku. Poté desku osušíme. Měděné plošky potřeme štětečkem s lihem (Aceton 700ml) a umyjeme pastou na nádobí Toro. Po těchto procedurách je neprodleně nutné nanést ochranný lak aby nedošlo k oxidaci mědi. Lak nanáším štětečkem. Mnohonásobně jednoduší (ale samozřejmě dražší než ochranný lak nanášený štětečkem) než nanášení laku štětečkem je použít sprej FLUX SK10

Honneywell Dolphin 75e

Do práce jsme vybírali mobilní terminál, který bude mít hardwarovou čtečku čárových kódu. Po prozkoumání nabízených zařízení nám zůstaly pouze zařízení s OS Android (snad s tím W10 ještě zahejbe ale asi to potrvá). Nakonec jsme vybrali Honneywell Dolphin 75e ale pro ten nefungují oficiální ovladače. WTF?

Nakonec jsem to obešel takto a ovladače fungují:

  1. přesvědčte se že máte nainstalovány ovladače pro Google USB Driver
    doolphin75e_1
  2. Úprava android_winusb.inf
    Soubor android_winusb.inf jsem v mém případě nalezl na: C:\Users\pc-x\AppData\Local\Android\sdk\extras\google\usb_driver\android_winusb.infProvedeme jeho editaci a za sekce Under both the [Google.NTx86] [Google.NTamd64] přidáme:

    ;Honeywell Dolphin Android Product[A0:fastboot,A1:adb,A2:UMS,A3:ums-adb]
    %SingleAdbInterface% = USB_Install, USB\VID_0C2E&PID_0BA0&MI_00
    %SingleAdbInterface% = USB_Install, USB\VID_0C2E&PID_0BA1
    %CompositeAdbInterface% = USB_Install, USB\VID_0C2E&PID_0BA3&MI_01
    %SingleBootLoaderInterface% = USB_Install, USB\VID_0C2E&PID_0BA0
    
  3. Ve Správci zařízení zvolíme na neznámém zařízení Aktualizace software ovladače… a vybereme Vyhledat ovladač v počítači kde zvolíme cestu:
    C:\Users\pc-x\AppData\Local\Android\sdk\extras\google\usb_driver

    vyskočí upozornění, že Windows nemůže oveřit vydavatele tohoto software, to potvrdíme a ovladače máme nainstalované 🙂

ADB

Nyní když máme ovladače, můžeme použít adb příkazy.

adb shell
adb devices

 

Google Analytics – kód pro elektronický obchod

Poprosil mne kolega, zda bych mu nepomohl nastavit měřící kód pro elektronický obchod v GA. Po pár slepých uličkách jsem se dostal k cíli. Abych vám ušetřil čas uvádím zde kód který připíše konverzi (dokončení objednávky) v elektronickém obchodě.

Bohužel se mi nepovedlo nalézt „živé“ sledování dokončených objednávek. Musíte vydržet a do 24hodin se objednávky objeví v sekci: Konverze -> Elektronický obchod -> Přehled

POZOR: tento kód je funkční pouze pro Universal Analytics

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>NAKOUPENO</title>
</head>

<body>

nakoupeno
<script>
    //---------------- START GA ------------------
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
                (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
            m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
    ga('create', 'UA-XXXXXXX-YY', 'auto');
    ga('send', 'pageview');
    //---------------- END GA ------------------

    //SHOP start
    ga('require', 'ecommerce');

    ga('ecommerce:addTransaction', {
        'id': '1234',                    // Transaction ID. Required.
        'affiliation': 'Web Site',
        'revenue': '66.31',
        'shipping': '5.25',
        'tax': '5.05'
    });
    ga('ecommerce:addItem', {
        'id': '1234',                     // Transaction ID. Required.
        'name': 'Fluffy Pink Bunnies',    // Product name. Required.
        'sku': 'DD23444',                 // SKU/code.
        'category': 'Party Toys',         // Category or variation.
        'price': '11.99',                 // Unit price.
        'quantity': '1'                   // Quantity.
    });

    ga('ecommerce:send');
    //SHOP end

</script>

</body>
</html>

Popis jednotlivých položek najdete v dokumentaci: https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce

Arduino tahák

Externí napájení Arduino mega

Doporučované napájení: 7 – 12V
Limitní hodnoty napájení: 6-20V

Maximální proud pinem: 40mA

http://www.arduino.cc/en/Main/ArduinoBoardMega2560

Externí napájení Ardudino UNO

Doporučované napájení: 7 – 12V
Limitní hodnoty napájení: 6-20V

Maximální proud pinem: 20mA

Práce s časem

mills()

Vrátí počet milisekund od spuštění programu na Arduino desce. Po přetečení (cca 50 dnů) se opět vrátí na hodnotu 0 a pokračuje v inkrementaci.

Eagle: schéma a plošný spoj pro displej HD44780

Pro hasičskou časomíru dělám v první fázi malý diplej HD44780. Mám zapojené schéma na nepájivém poli a potřebuji udělat plošný spoj v Eagle. Nakonec jsem knihovnu pro Eagle našel na webu http://www.cadsoftusa.com/downloads/libraries pod názvem lcd_2x16_led_backlight.lbr

Stáhneme soubor lcd_2x16_led_backlight.lbr a uložíme do složky lbr kde je nainstalován Eagle (u mne C:\EAGLE-7.3.0\lbr\). Po spuštění v Control panelu aktivujeme (zelené kolečko) knihovnu:  lcd_2x16_led_backlight.lbr

HD44780-control-panel

 

Displej následně najdeme pod názvem: lcd_2x16_led_backlight -> LCD_2X16_SIL

HD44780-add

Eagle: shield pro Arduino

Na včerejším BarCampu v Českých Budějovicích jsem dostal skvělý tip od kluků z Bastlírny jak udělat shield pro Arduino. Namotivován jsem se hned pustil do práce. Existuje již hotová knihovna, která má rozměry Arduina a ke které pouze přidáme požadované součástky a uděláme plošný spoj. Moje poznámky k rozchození knihovny SparkFun:

Instalace schémat do Eagle

Knihovnu stáhneme z Githubu: https://github.com/sparkfun/SparkFun-Eagle-Libraries

Přidáme do Eagle v okně Schematic: Library -> Use: vybrat všechny stažené .lbr soubory

Hlavní okno: Libraries kde přibyla nová složka ltspice ve které jsou knihovny, které nejsou aktivované (nemají zelenou ikonku). Klikneme pravým tlačítkem na složku ltspice a vybereme volbu Use all. Knihovny jsou nyní aktivované a mají zelenou ikonku.

eagle-add-library-sparkfun

Nyní v okně Schematic můžeme přidat shield pro Arduino: Add -> SparkFun-Boards -> ARDUINO_R3_SHIELD -> ARDUINO_R3_SHIELD

S tímto shieldem propojíme požadované součástky a můžeme vygenerovat plošný spoj.

Pájecí místo pro připojení drátku

U testovacích věcí potřebuji k plošnému spoji připájet drátek, kterým slouží pro testovací účely. Pro tento účel se používá takzvaný pad. V knihovně ho naleznete ve složce wirepad

eagle-wirepad

Raspberry: měření světelné intenzity s BH1750

BH1750 je levný obvod pro měření světelné intenzity. Uvažuji o tom, že bych jím rozšířil meteostanici a měřil ještě navíc světelnou intenzitu. Obvod komunikující po I2C. Proto abychom mohli komunikovat musíme povolit I2C komunikaci. Přihlašte se do Raspberry a zadejte příkaz:

sudo raspi-config

Vyberte možnost 8) Advenced Options -> A7 I2C ( povolte I2C komunikaci)

Poté restartujte Raspberry a jdeme propojit Raspberry a BH1750. Nepotřebujete žádné součástky, pouze oba obvody propojíme.

Schéma zapojení

Manuál BH1750

BH1750-raspberry

 

Napájení je 3,3V!!!

Instalace i2c-tools

apt-get install i2c-tools

Nyní si zobrazíme zařízení na I2C sběrnici:

i2cdetect 1
i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n]
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- 23 -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Je vidět že na adrese 23 je naše čidlo světelné intenzity. Pro zjištění světelné intenzity použijeme programovací jazyk Python. Pro komunikaci ještě zvýbá nainstalovat modul smbus:

apt-get install python-smbus

Získání hodnoty osvětlení

vim bh1750.py

#!/usr/bin/python
import time
import smbus

# Simple function to convert 2 bytes of data
# into a decimal number
def convertToNumber(data):
  return ((data[1] + (256 * data[0])) / 1.2)

DEVICE = 0x23 # I2C device address
bus = smbus.SMBus(1)  # Rev 2 Pi uses 1

while True:
  data = bus.read_i2c_block_data(DEVICE,0x11)
  print "Light Level : " + str(convertToNumber(data)) + " lx"
  time.sleep(0.5)

Souboru nastavíme oprávnění pro spuštění

chmod ogu+x bh1750.py

Měření spustíme:

sudo python bh1750.py

Arduino: měření světelné intenzity s BH1750

Dnes malinko odbočím a podíváme se do elektroniky. Hledám vhodné čidlo pro moji meteostanici.

Co budeme potřebovat

  • Arduino
  • modul BH1750

Schéma zapojení:

arduino-bh1750

 

BH1750 budeme napájet 5V, ovšem je možné napájet i 3.3V.

Konektor Add na BH1750 je nutné připojit na GND!

Práci si ulehčíme naimportováním této knihovny do projektu: https://github.com/claws/BH1750

Knihovnu stáhněte, rozbalte a přejmenujte na BH1750. Složku BH1750 nahrajte do adresáře názvem libraries který je ve složce kde je nainstalováno Arduino (v mém případě c:\Program Files (x86)\Arduino\libraries\). Restartujte IDE.

Výkonný kód pro měření intenzity světla bude velice jednoduchý:

/*
 
BH1750 library
 
This example initalises the BH1750 object using the default
high resolution mode and then makes a light level reading every second.
 
Connection:
 VCC-5v
 GND-GND
 SCL-SCL(analog pin 5)
 SDA-SDA(analog pin 4)
 ADD-NC or GND
*/
 
#include <Wire.h>
#include <BH1750.h>
 
BH1750 lightMeter;
 
void setup(){
  Serial.begin(9600);
  lightMeter.begin();
  Serial.println("Running...");
}
 
void loop() {
  uint16_t lux = lightMeter.readLightLevel();
  Serial.print("Light: ");
  Serial.print(lux);
  Serial.println(" lx");
  delay(1000);
}

Výstup v konzoli:

Light: 99 lx
Light: 99 lx
Light: 101 lx
Light: 101 lx
Light: 101 lx
Light: 99 lx
Light: 46 lx
Light: 1344 lx
Light: 1665 lx
Light: 17 lx
Light: 5 lx
Light: 1485 lx

Čím menší číslo tím menší intenzita světla.