Automatyka domowa zapis czynności

  1. Zainstaluj Raspbiana na raspberry PI. Uaktywnij SSH dodając plik /boot/ssh.
  2. Przy użyciu raspi-config wyłącz manager okien, aktywuj I2C i 1-Wire.
  3. Zainstaluj Domoticz:
    curl -sSL install.domoticz.com | sudo bash
  4. Zainstaluj serwer MQTT – mosquitto
  5. Skonfiguruj urządzenia na ESP8266/ESP32 z zainstalowanym oprogramowaniem Tasmota.
  6. Skonfiiguruj domoticz.

Linux – komendy

Pomoc:
Potrzebujesz dokładnego opisu polecenia? wpisz więc coś takiego: man
hasło. Spowoduje to wyświetlenie jeśli to możliwe, podręcznika do “hasła”.

Oznaczenia:
Polecenia zakończone jednym lub dwoma wykrzyknikami wymagają wysokich
uprawnień (nawet root’a), czasem nawet fizycznego dostępu do komputera.
Mogą więc być niepraktyczne przy zdalnej pracy za pomocą telnet lub ssh.

arch – wyświetla informacje na temat budowy komputera na którym pracujesz
awk – interpreter skryptowego języka programowania
bzip2 (*.bz2) – wysokowydajny kompresor
cal – ustawienia daty cat – przekierowuje strumień danych (np. sklejanie plików cat plik1 plik2 >plik12
cd – zmiana katalogu (bez parametru: przejście do katalogu użytkownika)
chown! – ustawianie właściciela pliku
chmod – ustawianie praw dostępu do pliku tzw. atrybuty
clear – czyści okno terminalu
cmp – porównuje pliki
copy – kopiuje pliki i katalogi
cp – kopiuje pliki
cut –
date – wyświetla lub zmienia datę
dd – konwertuje i kopiuje pliki
diff – porównuje zawartość plików, np. kodu źródłowego programu
du – oblicza zajętość na dysku
df – informuje o wolnych blokach na dysku
dircmp – porównuje katalogi
dmesg!! – podaje wszystkie komunikaty wyświetlane przy uruchamianiu systemu
echo –
egrep – odmiana polecenia grep
elm – program pocztowy
exit – wylogowanie z konsoli
fdisk!! – zarządzanie partycjami dysku
fetchmail! – zarządzanie zewnętrzną pocztą
file – testowanie pliku
find – wyszukiwanie pliku, katalogu
finger! – wyszukuje informacje o użytkowniku
fsconf!! – program do zmian ustawień systemu plików
fsck!! – naprawa systemu plików
ftp – prosty klient ftp
gcc – kompilator języka c
gnus – przeglądarka news
grep – wyszukiwanie linii spełniających wyrażenia
gzip (*.gz) – kompresor
gzip -9v *    kompresja z maksymalną skutecznością poszczegolne pliki w katalogu, zastępując stare.
head – wyświetlanie początkowej części pliku
hello – wysylanie krótkiego tekstu na ekran adresata
host – podaje informacje o ‘sieciowych’ danych dotyczączych komputera
hostname! – wyświetlanie lub zmiana nazwy komputera
hwconfig –
ipcalc – program umożliwiający operacje na adresach ip
irc – klient irc
joe – edytor tekstów
join – specjalne sklejanie plików
kernelversion – podaje informacje o wersji używanego kernela
kill – zabijanie procesów
pc – kopiuje plik
ps – zarządzanie procesami
less – przeglądarka tekstów, obustronne przewijanie
lftp – dobry klient ftp
lilo!! – boot manager (Linux Loader)
links – przeglądarka www, świetna obsługa tabel
ln! – tworzy dowiązania symboliczne tzw. linki
loadkeys – ładuje nową mapę klawiatury, np. polską
locate – odpowiednik polecenia where
logout – wylogowanie z konsoli
ls – wyświetla zawartość katalogu
lynx – przeglądarka www
make!! – kompilacja jądra
man – wyświetla podręcznik do programu podanego jako parametr
mesg – włącza i wyłącza reagowanie na wywoływania
mc – menedżer plików: midnight commander
mkdir – tworzy nowy katalog
mkfs!! – formatowanie systemu plików
more – przeglądarka tekstów, przewijanie w dół
mush – program pocztowy
mutt – rozbudowany program pocztowy i news
more – program do wyświetlania pliku na ekranie
mount!! – podłącza (montuje) systemy plików / napędy
mv – zmienia nazwe/przenosi plik
newgrp! – zmiana grupy aktualnego użytkownika
pack – prosty kompresor
passwd! – ustawianie hasła
paste – łączy wiersze pliku
pico – dość przyjazny edytor tekstowy
pine – wygodny program pocztowy
ping – wysyła pakiety testowe
procmail – narzędzie zarządzające pocztą
ps – wyświetla informacje o procesach
pwd – wyświetla ścieżkę bieżącego katalogu
quota – sprawdza/ustawia ograniczenie wielkości konta
rm – usuwa pliki
rmdir – usuwa pusty katalog
rpm!! – instaluje pakiety rpm
scp – kopiowanie zdalne plików szyfrowane
screen – otwiera nowe okna konsoli podczas pracy zdalnej
sed – edytor strumieniowy, umożliwia w zaawansowaną podmianę ciągu
setenv! – ustawia zmienna lokalna/globalna
setterm – ustawienia konsoli
sort – sortuje linie w pliku
split – tworzy jeden lub wiecej plikow z pliku wejsciowego
ssh – bezpieczny telnet tzw. secure shell
startx!! – uruchamia x-window
su!! – umożliwia prace z uprawnieniami roota
slrn – dobry klient news i pocztowy
tail – wyświetlanie końcowej części pliku
talk – wywołuje adresata na wspólną pogawędkę w czasie rzeczywistym
tar – archiwizer plików, poprawia skuteczność kompresji kompresora jak:
gzip, bzip2
np.1: tar -cz ./katalog/ >archiwum.tar.gz
np.2: tar –use-compress-program=bzip2 -c ./katalog/ >archiwum.tar.bz2
telnet – klient telnet
tin – klient poczty i news
top – wyswietla obciazenie procesora przez poszczegolne procesy
touch – uaktualnia datę pliku
tr –
umount!! – odłącza systemy plików / napędy
uniq –
unpack – rozpakowuje pliki spakowane poprzez ‘pack’
unzip – rozpakowuje pliki .zip
np.: unzip -o -u plik.zip    rozpakuje do bierzącego katalogu, bez potwierdzania nadpisze stare
uptime – mowi jak dlugo jest uruchomiony komputer
w – wyświetla “kto co robi”
wc – raportuje ilość linii, słów, znaków w wyspecyfikowanych plikach
wget – ściągacz plików, obsluga ftp, http
np.: wget -r -l1 -A gif,jpg http://programy.com/lista.html
where – podaje ścieżke poszukiwanego programu
whereis – inna nazwa polecenia where
which – podaje sciezke do szukanego programu
who – informuje o zalogowanych użytkownikach
whodo – co kto robi
write – wysyłanie jednorazowo wiele linii tekstu na ekran adresata
vi – skomplikowany edytor tekstowy, dostępny w każdej odmianie unixów

 

 

Mini stacja czujników online

Spakowany sketch Arduino: Pobierz sketch Mini stacja czujników online

Wymagana biblioteka (z odpowiednimi przeróbkami): EtherCard

Podłączenie:

  • Moduł Ethernet pod złącze ICSP na Arduino (MOSI – SI, MISO – SO, SCK – SCK, GND-GND), pin CS do pinu 8, VCC do 3,3V
  • DHT11 wyjście pod pin 12
  • MQ7 wyjście analogowe pod pin A0
  • Fotorezystor pomiędzy VCC a pin A1, który ściągamy do masy rezystorem 1KΩ
  • Moduł Ethernet podpięty do routera

Aby odnaleźć IP, pod którym widnieje nasz układ proponuję zalogować się do panelu administracyjnego routera, u mnie była to zakładka/okienko “DHCP Client List”. Odczyt z czujnika tlenku węgla w normalnych warunkach wynosi poniżej 50 (<250mV). Potraktowanie go jakimikolwiek oparami powoduje szybką reakcję i skok napięcia powyżej 1V (przy bliskim rozpyleniu).

 

Walidacja numerów PESEL, NIP, REGON w Javascript i PHP

Ulepszone funkcje z tego wpisu. Aktualnie funkcje sprawdzają także sumy kontrolne zawarte w tych numerach, na podstawie Wikipedii. Wystarczy przeanalizować kody

Odmiany funkcji w Javascript i PHP są w pełni zgodne, to znaczy że dadzą taką samą odpowiedź.

Aktualizacja 2017-05-02:

  • Zamieniłem polskie nazwy zmiennych na angielskie;
  • Funkcje od PESEL sprawdzają czy data jest poprawna, tj. miesiąc nie większy niż 12 i dzień miesiąca nie większy niż 31. To rozwiązuje problemy opisane w komentarzach. Dziękuję za zwrócenie uwagi i dziękuję Panu Krzysztofowi Grabania za propozycję rozwiązania problemu.
  • Poprawione wcięcia itp.
  • Dodane formularze, gdzie można sobie potestować jak działają funkcje w wersji JS. Wersje PHP: http://test.vt0.pl/v/

Oczywiście jeśli użytkownik będzie chciał, to i tak da radę wprowadzić nieprawdziwe dane, ale dzięki tej walidacji uchronimy się przed omyłkowym wpisaniem danych z błędami w formularzu.

1. Walidacja PESEL:

Kod PHP:

function validatepesel($pesel) {
    $reg = '/^[0-9]{11}$/';
    if(preg_match($reg, $pesel)==false)
        return false;
    else
    {
        $digits = str_split($pesel);
        if ((intval(substr($pesel, 4, 2)) > 31)||(intval(substr($pesel, 2, 2)) > 12))
            return false;
        $checksum = (1*intval($digits[0]) + 3*intval($digits[1]) + 7*intval($digits[2]) + 9*intval($digits[3]) + 1*intval($digits[4]) + 3*intval($digits[5]) + 7*intval($digits[6]) + 9*intval($digits[7]) + 1*intval($digits[8]) + 3*intval($digits[9]))%10;
        if($checksum == 0) 
            $checksum = 10;
        $checksum = 10 - $checksum;
            
        return (intval($digits[10]) == $checksum);
    }
}

Kod Javascript:

function validatepesel(pesel) {
    var reg = /^[0-9]{11}$/;
    if(reg.test(pesel) == false) 
        return false;
    else
    {
        var digits = (""+pesel).split("");
        if ((parseInt(pesel.substring( 4, 6)) > 31)||(parseInt(pesel.substring( 2, 4)) > 12))
            return false;
        
        var checksum = (1*parseInt(digits[0]) + 3*parseInt(digits[1]) + 7*parseInt(digits[2]) + 9*parseInt(digits[3]) + 1*parseInt(digits[4]) + 3*parseInt(digits[5]) + 7*parseInt(digits[6]) + 9*parseInt(digits[7]) + 1*parseInt(digits[8]) + 3*parseInt(digits[9]))%10;
        if(checksum==0) checksum = 10;
            checksum = 10 - checksum;

        return (parseInt(digits[10])==checksum);
    }
}

Test:

READY

2.Walidacja NIP

Kod PHP:

function validatenip($nip) {
    $nipWithoutDashes = preg_replace("/-/","",$nip);
    $reg = '/^[0-9]{10}$/';
    if(preg_match($reg, $nipWithoutDashes)==false)
        return false;
    else
    {
        $digits = str_split($nipWithoutDashes);
        $checksum = (6*intval($digits[0]) + 5*intval($digits[1]) + 7*intval($digits[2]) + 2*intval($digits[3]) + 3*intval($digits[4]) + 4*intval($digits[5]) + 5*intval($digits[6]) + 6*intval($digits[7]) + 7*intval($digits[8]))%11;

        return (intval($digits[9]) == $checksum);
    }
}

Kod Javascript:

function validatenip(nip) {
    var nipWithoutDashes = nip.replace(/-/g,"");
    var reg = /^[0-9]{10}$/;
    if(reg.test(nipWithoutDashes) == false) {
        return false;}
    else
    {
        var digits = (""+nipWithoutDashes).split("");
        var checksum = (6*parseInt(digits[0]) + 5*parseInt(digits[1]) + 7*parseInt(digits[2]) + 2*parseInt(digits[3]) + 3*parseInt(digits[4]) + 4*parseInt(digits[5]) + 5*parseInt(digits[6]) + 6*parseInt(digits[7]) + 7*parseInt(digits[8]))%11;
        
        return (parseInt(digits[9])==checksum);
    }
}

Test:

READY

3. Walidacja REGON (9-cyfrowy):

Kod PHP:

function validateregon9($regon) {
    $reg = '/^[0-9]{9}$/';
    if(preg_match($reg, $regon)==false)
        return false;
    else
    {
        $digits = str_split($regon);
        $checksum = (8*intval($digits[0]) + 9*intval($digits[1]) + 2*intval($digits[2]) + 3*intval($digits[3]) + 4*intval($digits[4]) + 5*intval($digits[5]) + 6*intval($digits[6]) + 7*intval($digits[7]))%11;
        if($checksum == 10) 
            $checksum = 0;

        return (intval($digits[8]) == $checksum);
    }
}

Kod Javascript:

function validateregon9(regon) {
    var reg = /^[0-9]{9}$/;
    if(!reg.test(regon)) 
        return false;
    else
    {
        var digits = (""+regon).split("");
        var checksum = (8*parseInt(digits[0]) + 9*parseInt(digits[1]) + 2*parseInt(digits[2]) + 3*parseInt(digits[3]) + 4*parseInt(digits[4]) + 5*parseInt(digits[5]) + 6*parseInt(digits[6]) + 7*parseInt(digits[7]))%11;
        if(checksum == 10) 
            checksum = 0;
        
        return (parseInt(digits[8])==checksum);
    }
}

Test:

READY

Ekran logowania i układ klawiatury

logon_keybrd

Jeśli na ekranie logowania masz jako domyślny układ klawiatury inny niż preferowany, ta instrukcja jest dla Ciebie. Zaloguj się, wejdź w panel sterowania -> W kategorii “Zegar, język i region” wybierz “Zmień układ klawiatury lub inne metody wprowadzania danych”. W oknie wybierz zakładkę “Administracyjne:

logon_keybrd02

Wybierz “Kopiuj ustawienia”:

logon_keybrd03

W otwartym oknie zaznacz oba checkboxy. Pozatwierdzaj wszystkie okna i gotowe. Pamiętaj, że zwykle prawidłowy układ klawiatury to “Polski (programisty)”.