• Vítejte na XBMC-Kodi.cz
  • Česko-slovenská komunita fanoušků XBMC/Kodi
Vítejte návštevníku! Přihlášení Registrace


Hodnocení tématu:
  • 2 Hlas(ů) - 1.5 Průměr
  • 1
  • 2
  • 3
  • 4
  • 5
Domácí automatizace - bezpečně
#1
Thumbs Up 
Ahoj všem fandům IoT,
 rozhodl jsem se založit toto vlákno na popud zvětšující se neznalosti, ignoranství uživatelů o problematice IoT, která se stává čím dál více součástí našeho běžného života. Že člověk narazí na různých diskuzních fórech na nezkušené uživatele, ovlivněné mylnými informacemi buď ze zapleveleného internetu, nebo od jiných neznalých uživatelů tvářících se jako Guru, je pochopitelné. Ale vidím narůstající trend, že se tohle děje i na fórech, kde to nebývalo zvykem. Jedná se především o fóra zaměřené na opensource, IT a také toto fórum. Ano, narážím třeba na vlákno zabývající se Xiaomi, které je až fanaticky podstrkováno uživatelům, kteří třeba nejsou schopni domyslet rizikovost používání tohoto řešení. Při snaze alespoň o nějakou věcnou argumentaci a rozdmýchání diskuze, je pak uživatel maximálně napadán, urážen a zesměšňován. To je mimochodem ukázka nezralosti a neznalosti dotčených postujících uživatelů (kteří když nevědí jak argumentovat, začnou hledat sílu v davu a nevěcně ostatní osočovat). Bohužel se tak děje i ze strany uživatelů, kteří by měli být dle jejich prezentace na úrovni. Tohle je ale dáno, špatným systémem vyhodnocování úrovně členů tohoto fóra, odvíjející se od volby dat ovlivňující statistiku jejich postupu.  Ve vodách opensource se osobně pohybuji odhadem 13 let, trvale jsem přešel myslím s nástupem ubuntu 10.04LTS. Za tu dobu sleduji pozitivní rozvoj tohoto směru, mezi běžnou laickou veřejnost, který má bohužel i negativní stránku. Snaha o zjednodušení a přístupnost pro běžného uživatele, sebou přináší několik úskalí:
1, zvýšení zranitelnosti, jelikož každý systém je jen tak robustní jak ho nastaví jeho uživatel
2, odchod zkušených uživatelů, kteří většinou nemají kantorské nadání řešit pořád dokola elementární věci. Tím i následně klesá úroveň těchto fór, jelikož chybí přirozená korektura nesmyslů.
3, čím víc je tato technologie využívaná běžnou populací, stává se více zajímavá pro různé společnosti a útočníky. Tady se ale začínají ve větší míře vyskytovat laici, neschopni správně reagovat na rizika.

A takhle bych mohl pokračovat, zkrátka musíme vývoj brát tak jak je a doufat, že převáží spíše přínosy a negativa se přirozeně vytřídí. Tohle asi tak obecně k opensource, které má dost blízko i k IoT, jelikož jako na vše má svou alternativu. Výhodu v tomto řešení oproti komerčnímu, vidím v jeho transparentnosti, bezpečnosti, rychlosti vývoje, ohebnosti. Nemusím sice všemu rozumět, ale jelikož může do zdrojového kódu nahlížet kdokoli, je velká pravděpodobnost, že se do něj mrkne někdo, kdo je na vyšším levelu. To u komerčního řešení možné není a pokud má nekalé úmysly přímo společnost dodávající toto řešení, je pravděpodobnost odhalení tohoto chování takřka nemožná. Jsou pouze dvě cesty:
1, reverzní inženýrství, které je v home podmínkách náročné
2, sledování chování zařízení v bezpečném prostředí


Toho docílíme, že zařízení budeme provozovat po určitou dobu v uzavřené sítí, kde nebude mít možnost přístupu do naši soukromé LAN s daty a jsme schopni jednoduše sledovat datový tok, který je ovlivněn pouze tímto zařízením. Dále pokud není zařízení schopno fungovat bez vnějšího prostředí, je to špatně, jelikož naši bezpečnost předáváme na bedra někomu dalšímu. To je sice fajn pokud tato společnost splňuje různé náležitosti ať už certifikace, je podrobována pravidelným auditům apod. Tohle se bohužel neděje pokud se jedné o různé pofidérní společnosti z východu. Bezpečností IoT se naštěstí zabývá čím dál více společností (nebudeme si nalhávat že mají ušlechtilé pohnutky, je to byznys). Pokus nemáte tušení o co jde prosím o přečtení IoT bezpečnost dále pár postřehů tady a tady.

Jak je vidět je to naštěstí ve většině případů bráno dost vážně. Bohužel existuje spousta výjimek, které se snad tímto podaří rozprášit. A teď k samotnému vláknu, vkládejte postřehy, zajímavosti, řešení pro inspiraci, jak lze řešit chytrou domácnost. Díky tomu se třeba zjistí, že každý může mít chytré řešení, které je i bezpečné, levné, a má trvalou hodnotu.
 
Citovat
#2
Jsem rad, ze ses konecne odhodlal si zalozit vlastni tema. Skoda jen, ze si to pojal jako uplakankovstvi nad tim, ze ti jinde ten zly guru (toto oznaceni jsem si nevymyslel, to prideluje forum automaticky v souvislosti s poctem prispevku) rozslapal neopravnene hracicky a ne nejak konkretne, co by posunulo vsechny nekam dal.

Mimochodem, u OpenSource ctu velmi casto, jak se "nekdo treba podiva". A potom clovek zjisti, ze se nepodiva nikdo a ze nejake bezpecnostni chyby se tahnout uz x let. V kazdem pripade, ja jsem ten posledni, co by odmital opensource, jen bych na nej nespolehal, jako na jedinou a spravnou cestu.

A ted k tematu - uz ve vedlejsim tematu jsem se ti snazil naznacit (a ostatni byli tehoz nazoru), ze tohleto "laborovani" v uzavrene siti, sledovani provozu, atd. je sice vec pekna, ale ze by asi bylo vhodne se zamerit i na "kriticnost provozovani reseni" (prijatelna mira rizika). Pokud je riziko blizici se limitne nule, tak je asi zbytecne, aby nekdo (skoda, ze ne zrovna ty!?!) travil svuj cas sniffovanim site. Proste prijatelna mira rizika muze ta, ze se clovek spokoji s tim, ze si holt nejaky cinsky soudruh precte informaci o tom, kdy nekomu spustilo zaplavove cidlo.

Uprimne jsem ocekaval, ze zde pujdes prikladem a misto obecnych libivych (ci uplakanych) textu se tu treba ja dozvim, jak si za pet minut sniffovani nejakeho vyrobku Xiaomi zjistil to a to KONKRETNI bezpecnostni riziko. Tim bys totiz celou tu tvou "teorii" posunul do praxe.
Apple TV 4K gen.3 128GB - tvOS 16.2 (iSCC, KODI 19.4) & 3x HomePod - audioOS 16.2 & RPi 4B 8GB RAM - IOTstack & 1x RPi 2B - Raspbian & RPi Zero
Intel NUC NUC10i5FNK - i5 10210U, 64GB RAM, ESXi (W10, W11, Debian,...) 
iPhone 15 Pro 512 GB - iOS v17.2.1 (KODI 19.4) & Apple Watch 9 45mm v10.2
iPad Pro 11 512 GB - iPadOS v17.2.1 (KODI 19.4)
 
Citovat
#3
Docela zajímavý článek na toto téma je v časopisu Computer 2018/11 na straně 14.
 
Citovat
#4
Tak pro začátek je důležité mít nějaké centrum chytré domácnosti. Četl jsem tady nějaké povzdechy nad raspberry jak mu dochází dech apod. Ano na nové formáty a kodeky už nemá dostatečně optimalizovaný hardware, tak proč ho nevyužít jako centrum chytré domácnosti. Já jsem zvolil Home Assistant, ale možností je mnohem víc, nástřelem Domoticz, OpenHab. Možností instalace je několik, já zvolil stažení připraveného image výhoda tohoto řešení je jednoduchost, a hlavně přímá podpora rozšíření tzv. ADD-ON. Postup rozbalení image atd. snad není potřeba popisovat. Po vložení připravené SD karty (doporučená velikost je 32GB) do raspberry a jeho připojení na napájení si počkáme asi 5 min. (četl jsem až 20) než se provede prvotní inicializace. Home assistent by si měl provést scan sítě a pokud rozezná nějaké IoT zařízení, tak ho automaticky přidá. Nepřipojujte žádný monitor apod. Home assistant nemá žádný xserver, takže obrazový výstup nečekejte (vystačíte si jen s ethernetem a napájením). Otevřete prohlížeč na jakémkoliv PC ve stejné síti a zadejte IP:8123, pokud neznáte přidělenou IP adresu zadejte hassio.local:8123. Po prvotní inicializaci home assistant nabídne vytvoření účtu, takže zadáme jméno a heslo, tohle jde pak postupem času upravit, takže stačí zadat něco jednoduchého a následně při vytvoření přístupu z venku si změnit heslo. 

Po výzvě k přihlášení zadáme jméno/heslo a  naběhne home assistant do úvodní obrazovky tzv. dashboard. Doporučuji si vše proklikat a udělat si základní přehled. Pokud by někdo hledal, kde je nastavení uživatele jako je jazyk, heslo tak je pod odznáčkem obsahujícím vaše iniciály,  vedle nápisu home assistant vlevo nahoře. Jméno uživatele jde zase změnit pod kartou Nastavení/Uživatelé. Pokud by někomu nebylo něco jasné, napište a doladíme, ať se může jít prochodit nějaká první IoT. K tomu bude potřeba doinstalovat a oživit pár addonů jako je Configurator, Mosquitto, Node-Red, SSH, Samba.

Addony se instaluji pod kartou Hass.io/ADD-ON STORE kde si přidáme komunitní repozitáře pomocí tohoto postupu. Je to jednoduché, jen pomocí Add se vloží url adresa repozitáře. Díky tomu získáme node-red, MQTT Server & Web client. Takže z oficiálního repozitáře si nainstalujeme Configurator, Mosquitto broker, Samba share, SSH server a z komunitních Node-RED a popř. MQTT Server & Web client. Ten já osobně nepoužívám jelikož jako server používám Mosquitto, takže pak by šlo použít z tohoto doplňku jen Web client, kde je přehledně vidět komunikace MQTT, ale to je i v logu Mosquitto.
Pokud máme nainstalováno, tak si rozklikneme první doplněk Configurator. Tam upravíme Config, já mám tohle
Kód:
{
 "dirsfirst": false,
 "enforce_basepath": false,
 "username": "přihlašovací jméno",
 "password": "heslo",
 "ssl": false,
 "certfile": "fullchain.pem",
 "keyfile": "privkey.pem",
 "allowed_networks": [
   "192.168.0.0/16",
   "172.30.0.0/16"
 ],
 "banned_ips": [
   "8.8.8.8"
 ],
 "banlimit": 0,
 "ignore_pattern": [
   "__pycache__"
 ],
 "notify_service": "persistent_notification.create"
}
doplníme jméno a heslo od Home Assistenta. Pokud nemáme rozsah IP adres vnitřní LAN v rozsahu co je uveden pod allowed networks, tak ho buď přidáme, nebo upravíme prefix (/16 = 255.255.0.0) Pak už stačí uložit pomocí save a nahoře dát Start. U novějšího je Config a nepamatuje si editaci
Kód:
{
 "dirsfirst": false,
 "enforce_basepath": false
}
takže se nic vepisovat nemusí. Po novu si addon bere autentizaci přímo z Home assitanta. Ono popravdě se toho poslední dobou dost mění a to výrazně. Takže např. to co se pracně naučíte je smeteno ze stolu a dělá se to jinak 8  Ale to je asi dobře, každý vývoj je pozitivní. Takže Start a po chvilce by měl addon změnit červený puntík na zelený. Navíc v přehledu addonu v DASHBOARD by měl být taky označen jako zelené puzzle. Mimochodem teď mě trklo že se tady objevuje aktualizace Home assistanta, takže dost důležitá záložka. Nyní v addonu klikneme na OPEN WEB UI a mělo by se otevřít webové rozhraní. Pomocí configurátoru se dají upravovat hlavní konfigurační soubory. Nacházi se v rootu pod složkou config. Asi nejdůležitější je configuration.yaml následuje customize.yaml, groups.yaml, automations.yaml, scripts.yaml, themes.yaml. Ono v případě používání lovelace odpadá použití groups.yaml jelikož se veškerá grafika dá po potvrzení ruční editace uživatelem naklikat. Jako první věc doporučuji si udělat snadný přístup do configuratoru přes nabídku z panelu vlevo. Udělá se to přidáním těchto řádků
Kód:
panel_custom:
 - name: hassio-main
   sidebar_title: Configurator
   sidebar_icon: mdi:wrench
   js_url: /api/hassio/app/entrypoint.js
   url_path: configurator
   embed_iframe: true
   require_admin: true
   config:
     ingress: "core_configurator"
do configuration.yaml, uložit a následě stačí kliknout v pravo na ozubené kolečko a zvolit Restartovat HASS. Po naběhnutí by se měl v levo oběvit Configurator. 
Další dopněk Mosquitto broker. Do jeho configu
Kód:
{
 "logins": [
   {"username": "přihlašovací jméno",
     "password": "heslo"}
 ],
 "anonymous": false,
 "customize": {
   "active": false,
   "folder": "mosquitto"
 },
 "certfile": "fullchain.pem",
 "keyfile": "privkey.pem"
}
stačí jen vepsat jméno a heslo do položky logins a uložit. Po spuštění máme funkční MQTT.
Další doplněk node-red je ptrochu náročnější. Do configu se musí vyplnit řádek credential_secret. Já tam mám 17-ti místný unikátní klíč. Pak ještě do řádku hesla musí být použito nějaké jiné heslo než je do Hass.
Kód:
{
 "credential_secret": "nějaký unikatní klíč ",
 "dark_mode": false,
 "http_node": {
   "username": "přihlašovací jméno",
   "password": "jiné heslo"
 },
 "http_static": {
   "username": "",
   "password": ""
 },
 "ssl": false,
 "certfile": "fullchain.pem",
 "keyfile": "privkey.pem",
 "require_ssl": false,
 "system_packages": [],
 "npm_packages": [],
 "init_commands": [],
 "log_level": "info"
}
Po uložení by měl node-red snad naběhnout.
SSH server slouží pro přístup přes terminál, jeho spuštění je triviálni
Kód:
{
 "authorized_keys": [],
 "password": "heslo"
}
Poslední doplněk Samba share bude potřeba ke vzdálenému procházení složek v Hass. Pomocí SSH je to náročnější, ale taky to jde. Do configu
Kód:
{
 "workgroup": "WORKGROUP",
 "username": "přihlašovací jméno",
 "password": "heslo",
 "interface": "",
 "allow_hosts": [
   "10.0.0.0/8",
   "172.16.0.0/12",
   "192.168.0.0/16"
 ]
}
a pohlídejte si, aby pod "allow_hosts byl rozsah LANky. Po uložení a spuštění by se měl pod sítí ve WORKGROUP ukázat Hass. Pokud se podařilo všechny doplňky spustit, máme vyhráno a může se začít inegrovat nějaké IoT zařízení.
 
Citovat
#5
@S474N: s tím tvým "uplakankovstvím" si vedle. Tohle vlákno jsem založil proto, že budu postupně vkládat postup jak rozchodit bezpečnou domácí automatizaci. Co jsem psal je můj názor a shrnutí situace okolo IoT a jeho vývoji, který se podobá vývoji opensources. Takže se bude ubírat pravděpodobně stejným směrem. To že sis označení Guru nevymyslel jsem popisoval o špatně nastaveném systému většiny fór, kde je úroveň uživatele většinou přímo úměrná jen počtu postů. O jejich kvalitě, přínosu, nebo nebezpečnosti toto nevypovídá. Takže nemusíš mít obavy, žádné hračky si nerozšlapal. To že je opensource jediná správná cesta jsem nikdy netvrdil, jsou i komerční možnosti, kde jsem ale upozornil na vyšší cenu a obezřetnost uživatele od koho si tuto technologii pořizuje. Jde vidět že si toho o rizicích IoT moc nečetl, když pořád tvrdíš tyhle blbosti, ono o informaci, že máš někde rozsvíceno opravdu nejde. Asi nechceš, nebo jen nejsi schopen dané rizika domyslet v celém spektru. A u spousty uživatelů je nepřípustné jenom to, že jejich koupené čidlo není jen jejich vlastnictví a je možnost jeho čtení a ovládání někým dalším.
 
Citovat
#6
cuore má pravdu
A je dobre otvoriť tému na tento problém.

Tiež som tu upozornil na tému Zľavy na GEARBESTe a moderátor má chcel ukameňovať.
Zbytočná téma na zľavy. To si nájdem celú ponuku na WWW.

To že je úspešne predávaný produkt napr. XIAMOI neznamená , že je dobrý alebo bezpečný.
Čína dotuje výrobu a agresívne ceny vytlačujú konkurenciu.

USA/RUSKO/Čína sledujú ako aj každý iný.
Kto vyrába aj hardware tak si tam otvorí zadné dvierka.
Rusko nemá čo vyrábať.

A tie feedbacks/hodnotenie nie sú zárukou kvality a obzvlášť nie na GEARBESTE.
10000 predaných veci a 5 hviezdičiek. Tomu ani slepiť nemôže veriť.
A lepšie open source lebo vidíš zdrojový kód a vieš si upraviť podľa seba ak ti niečo nevyhovuje a najmä to sledovanie.
Nahrávanie hovorov SIRI/ALEXA atď., GPS, sms, cookies ...
A potom predavajú údaje iným na reklamu alebo nekalú súťaž alebo polícii.


Radšej ESP8266/ARDUINO a pod. s hotovými projektmi a možno vykonnejší software na spracovanie/ovládanie na PC(Domoticz...).


A cloud riešenia pre SMART stoja za prd. Ak zanikne firma za pár rokov alebo spoplatnia službu tak bez alternatívneho firmware všetko pôjde do koša.
Už sa tak aj stalo.
IFFT/CLOUD atď.   funguje ale niekedy stačí jednoduchšie riešenie

Uzavreté a aj  malé SMART hráčičky môžu odosielať informácie napr. vonk.IP adresu, zariadenia v sieti, otvorené porty prípadné skenovať BT či RF zariadenia v okolí napr. myš, klávesnicu.
Alebo nedajbože odomknúť váš dom ak bude nejaký pidihajzlík(zamestnanec cloud smart zariadenia) stať pred dverami.
Toto bola komédia
https://zive.aktuality.sk/clanok/126989/...v-a-domov/


Na druhú stranu netreba byť paranoidný a nevychádzať kvôli tomu z domu.
Niektorí majú domá rušičky či detektory zo strachu.
Kto nie je zlodej tak mu nevadí nejaké odosielanie dát prípadne firma kvôli špionáži.(najmä čínske kamery čo vysielajú živý obraz na cloud).
Aj tak príde doba kde všetko/všetci bude prepojené  a sledované z nariadenia vlád.. :)
Eletromechanik
 
Citovat
#7
Jen houšť s podobnými návody. Těším se na další. Za sebe děkuji.
 
Citovat
#8
No, co se týká bezpečnosti, žádná není.. Lze řešit jistou odolnost proti plošným hrozbám, ale kdyby šlo o cílený útok profesionálů, neobstojí prakticky žádné řešení... Prakticky aplikuji toto:
- síť postavená na HomeKitu, + HomeBridge na všechno to, co podporu HomeKitu nemá
- co je moje a pod kontrolou (známý protokol, LAN only), to do té sítě může
- co moje není (tedy je cloud-only, třeba moje stupidní proprietální pračka), to připojené není, nebo to dostane maximálně wifi pro guesty + vlastní pravidla na firewallu..

Ale podstatné je to, že domácímu uživateli je to ABSOLUTNĚ JEDNO, nezajímá ho to ani za mák, nemá na takové kraviny čas a nemá absolutně žádné tušení jak internet funguje a jeho znalost technologie končí u modrého éčka a seznam.cz..

Každopádně pro ty, které by to zajímat mohlo, je toto super topic, díky :)
 
Citovat
#9
mobilemanic: naprosta vetsina obyc. lidi nic neresi. Nemaji na to cas a ani znalosti a jejich vybaveni “infrastruktura” LAN je na naprosto tragicke urovni. Sestava se obvykle z nejakyho Tenda/TPLink routeru s WiFi AP, pripadne toho maji vic a ruzne ponastavovane tak, ze je tam X DHCP a tedy i ruznych segmentu site.

Pokud me nekdo z takovych lidi (rodina, znami) oslovi, tak jim rovnou rikam, ze pokud se jim mam o to starat, tak to znamena si pripravit nekolik tisicovek, vse vyhazet a vsude uz cpu UBNT. Od EdgeRouteru, pres PoE switche az po “talire”. Na tomto mam osobne overeno, ze nastavim a uz to nemusim znova resit.

Takze jsme si ted prosli zakladni sit, kterou obyc lidi neresi a tady Cuore si predstavuje, jak po nocich tihle stejni lide si budou sniffovat sit, odchytavat komunikaci a tu jeste snad i vyhodnocovat. Takhle to v tom realne, svete opravdu nefunguje. Ano, bylo by to krasne, ale fakt ne.
Apple TV 4K gen.3 128GB - tvOS 16.2 (iSCC, KODI 19.4) & 3x HomePod - audioOS 16.2 & RPi 4B 8GB RAM - IOTstack & 1x RPi 2B - Raspbian & RPi Zero
Intel NUC NUC10i5FNK - i5 10210U, 64GB RAM, ESXi (W10, W11, Debian,...) 
iPhone 15 Pro 512 GB - iOS v17.2.1 (KODI 19.4) & Apple Watch 9 45mm v10.2
iPad Pro 11 512 GB - iPadOS v17.2.1 (KODI 19.4)
 
Citovat
#10
Dopsal jsem postup pro základní oživení Hass a doplňků. Pokud by něco bylo nepochopitelné dovysvětlím, popřípadě se doplní nějaké obrázky. Příště se zaměřím na oživení chytrého relé. Dlouhým procházení jsem dospěl k názoru, že je ideální řešení v podobě ESP8266. V případě Wemos je omezení dodělávka napájení a relé. Jako ideální hardware jsem našel Sonoff Basic, který se přehraje nějakým vlastním řešením z prostředí Arduino IDE. Tady je kód sonoff-arduino
Kód:
// Knihovny pro praci s WiFi
#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h> // Dohledate ve spravci knihoven
#include <Ticker.h>
#include <EEPROM.h>
#include <TimeLib.h> // https://github.com/PaulStoffregen/Time
#include <WiFiUdp.h>
#include <OneWire.h> // Dohledate ve správci knihoven
#include <DallasTemperature.h> // Dohledate ve správci knihoven
#include "html.h" // HTML kod ovladaci stranky

// Cisla pinu LED, spinace a teplomeru
#define GPIO_LED 13
#define GPIO_TEPLOMER 14
#define GPIO_RELE 12

// Webovy server pojede na standardnim portu 80
ESP8266WebServer server(80);

// Objekt ticker z vestavene knihovny se postara o blikani LED
Ticker ticker;

// Nastartovani sbernice 1-Wire a teplomeru DS18B20
OneWire oneWire(GPIO_TEPLOMER);
DallasTemperature teplomer(&oneWire);

// Pomocne promenne pro synchronizaci casu
const char ntp_server[] = "us.pool.ntp.org";
const uint8_t zona = 1;
const uint8_t port = 8888;
uint8_t ntp_packet[48];
WiFiUDP Udp;

// Kontrolni promenna pro spinani podle casoveho planu
uint64_t kontrola_spinace = 0;

// Hodiny a minuty spinani podle casoveho planu
uint8_t zacatek_hodina, zacatek_minuta, konec_hodina, konec_minuta;

// Funkce tick rozsviti/zhasne LED
void tick() {
 digitalWrite(GPIO_LED, !digitalRead(GPIO_LED));
}

// Pokud se cip nemuze pripojit k Wi-Fi a spustil vlastni konfiguracni AP, rozblikej LED
void zacatekKonfigurace(WiFiManager *wmp) {
 Serial.println("Entered config mode");
 Serial.println(WiFi.softAPIP());
 //if you used auto generated SSID, print it
 Serial.println(wmp->getConfigPortalSSID());
 //entered config mode, make led toggle faster
 // kazdych 200 ms zavolej funkci tick
 ticker.attach(0.2, tick);
}

// Jakmile rezim konfigurace Wi-Fi skonci, ukonci blikani
// LED na Sonoff Basic ma opacnou logiku
// Pri LOW sviti a pri HIGH je zhasnuta
void konecKonfigurace() {
 ticker.detach();
 digitalWrite(GPIO_LED, HIGH);
}

// Halvni funkce, ktera se zpracuje po startu
void setup() {
 // Nastaveni smeru pinu GPIO na zapis
 pinMode(GPIO_LED, OUTPUT);
 pinMode(GPIO_RELE, OUTPUT);
 // Zhasni LED
 digitalWrite(GPIO_LED, HIGH);
 Serial.begin(115200);
 // Precti prvni 4 B z trvale pameti,
 // ve ktere jsou ulozene casy automatickeho spinani a vypinani
 EEPROM.begin(4);
 zacatek_hodina = EEPROM.read(0);
 zacatek_minuta = EEPROM.read(1);
 konec_hodina = EEPROM.read(2);
 konec_minuta = EEPROM.read(3);
  WiFiManager wifiManager;
 // Nastartuj teplomer DS18B20
 teplomer.begin();

 // Nastartuj WiFiManager, ktery se postara o pripojeni k Wi-Fi
 wifiManager.setAPCallback(zacatekKonfigurace);
 wifiManager.setSaveConfigCallback(konecKonfigurace);
 // IP parametry konfiguracni Wi-Fi site
 wifiManager.setAPStaticIPConfig(IPAddress(192, 168, 0, 1), IPAddress(192, 168, 0, 1), IPAddress(255, 255, 255, 0));

 // Pripoj se k Wi-Fi
 // Pokud zatim zadnou nemas v pameti, nebo je mimo dosah,
 // spust vlastni AP, ke kteremu se muze uzivatel pripojit a nastavit novou Wi-Fi
 if (!wifiManager.autoConnect("WiFiLampa")) {
   Serial.println("failed to connect and hit timeout");
   // Pokud se neco pokazi a nelze se pripojit, restartuj cip a zacni znovu
   ESP.reset();
   delay(1000);
 }
 else {
   Serial.print("Pripojen jako: ");
   Serial.println(WiFi.localIP());
 }

 // Ted uz jsem pripojeny k Wi-Fi, takze mohu pokracovat v programu
 // Pokud uzivatel zada do prohlizece IP adresu spinace,
 // posli mu HTML kod ulozeny v souboru html.h.
 // Behem HTTP komunikace zaroven sviti LED (problikne)
 // HTML kod se nacita primo z flashove pameti cipu a nezatezuje RAM
 server.on("/", []() {
   digitalWrite(GPIO_LED, LOW);
   server.send_P(200, "text/html", html);
   digitalWrite(GPIO_LED, HIGH);
 });

 // Server zaroven reaguje na nekolik HTTP dotazu ve formatu:
 // http://ipadresa/api?PARAMETR=HODNOTA
 // Pro nastaveni automatickeho spinani a vypinani tedy staci zavolat:
 // http://ipadresa/api?zacatek=HH:MM&konec=HH:MM
 server.on("/api", []() {
   digitalWrite(GPIO_LED, LOW);
   if (server.hasArg("zacatek") && server.hasArg("konec")) {
     if ((server.arg("zacatek") != NULL) && (server.arg("konec") != NULL)) {
       zacatek_hodina = server.arg("zacatek").substring(0, 2).toInt();
       zacatek_minuta = server.arg("zacatek").substring(3, 5).toInt();
       konec_hodina = server.arg("konec").substring(0, 2).toInt();
       konec_minuta = server.arg("konec").substring(3, 5).toInt();
       EEPROM.write(0, zacatek_hodina);
       EEPROM.write(1, zacatek_minuta);
       EEPROM.write(2, konec_hodina);
       EEPROM.write(3, konec_minuta);
       EEPROM.commit();
       server.send(200, "application/json", "{\"odpoved\":1}");
     }
     else {
       server.send(200, "application/json", "{\"odpoved\":0");
     }
   }
   // Pro sepnuti rele (zapnuti/vypnuti svetla):
   // http://ipadresa/api?stav=1 (nebo 0)
   else if (server.hasArg("stav")) {
     if (server.arg("stav") != NULL) {
       uint8_t stav = server.arg("stav").toInt();
       if (stav == 1) {
         Serial.println("Zapinam rele");
         digitalWrite(GPIO_RELE, HIGH);
         server.send(200, "application/json", "{\"odpoved\":1}");
       }
       else {
         Serial.println("Vypinam rele");
         digitalWrite(GPIO_RELE, LOW);
         server.send(200, "application/json", "{\"odpoved\":0}");
       }
     }
     else {
       server.send(200, "application/json", "{\"odpoved\":-1}");
     }
   }
   // Pro stazeni udaju (teplota, stav, cas na cipu, volna RAM) v JSON:
   // http://ipadresa/api?data=
   else if (server.hasArg("data")) {
     String data = "{\"odpoved\":1, \"zacatek\":\"#zacatek\", \"konec\":\"#konec\", \"stav\":#stav, \"cas\":\"#cas\", \"ram\":#ram, \"teplota\":#teplota}";
     char zacatek[6];
     char konec[6];
     char cas[9];
     teplomer.requestTemperatures();
     sprintf(zacatek, "%02d:%02d", zacatek_hodina, zacatek_minuta);
     sprintf(konec, "%02d:%02d", konec_hodina, konec_minuta);
     sprintf(cas, "%02d:%02d:%02d", hour(), minute(), second());

     // Nahrad hodnoty v AJAX sablone vyse
     // S tridou Arduino String zachazet s velkou rozvahou, pouziva dynamickou alokaci
     // Na cipech s malickou RAM ji mohou pri spatnem designu rychle zaplnit
     // Viz pamet typu heap, dynamicka alokace a riziko fragmentace RAM
     // https://www.gribblelab.org/CBootCamp/7_Memory_Stack_vs_Heap.html
     data.replace("#stav", String(digitalRead(GPIO_RELE)));
     data.replace("#zacatek", String(zacatek));
     data.replace("#konec", String(konec));
     data.replace("#cas", String(cas));
     data.replace("#ram", String((ESP.getFreeHeap() / 1000.0f), 2));
     data.replace("#teplota", String(teplomer.getTempCByIndex(0), 2));
     server.send(200, "application/json", data);
   }
   else {
     server.send(200, "application/json", "{\"odpoved\":0}");
   }
   digitalWrite(GPIO_LED, HIGH);
 });

 // Nastartovani UDP (synchronizace casu pomoci NTP serveru)
 Udp.begin(port);
 // Knihovna pro praci s casem bude kazdou hodinu
 // volat funkci, ktera bude stahovat cerstvy cas z NTP serveru
 setSyncProvider(ziskejNtpCas);
 setSyncInterval(3600);

 // Nastartovani HTTP serveru
 server.begin();

}

// Smycka loop se opakuje stale dokola
void loop() {
 // Zpracuj pozadavky HTTP klientu
 server.handleClient();

 // Jednou za minutu zkontroluj, jestli aktualni
 // cas neodpovida hodnotam pro automaticke sepnuti/vypnuti rele
 if (millis() > kontrola_spinace) {
   if ((zacatek_hodina == hour()) && (zacatek_minuta == minute())) {
     digitalWrite(GPIO_RELE, HIGH);
     Serial.println("Spinam rele podle casoveho planu");
   }
   if ((konec_hodina == hour()) && (konec_minuta == minute())) {
     digitalWrite(GPIO_RELE, LOW);
     Serial.println("Vypinam rele podle casoveho planu");
   }
   kontrola_spinace = millis() + 6e4;
 }

}

// Funcke pro ziskani aktualniho casu z NTP serveru skrze UDP protokol
time_t ziskejNtpCas()
{
 IPAddress ntp_server_ip;
 while (Udp.parsePacket() > 0);
 WiFi.hostByName(ntp_server, ntp_server_ip);
 odesliNtpPacket(ntp_server_ip);
 uint32_t start = millis();
 while (millis() - start < 1500) {
   int size = Udp.parsePacket();
   if (size >= 48) {
     Udp.read(ntp_packet, 48);
     unsigned long sekundy; // sekundy od roku 1900
     sekundy =  (unsigned long)ntp_packet[40] << 24;
     sekundy |= (unsigned long)ntp_packet[41] << 16;
     sekundy |= (unsigned long)ntp_packet[42] << 8;
     sekundy |= (unsigned long)ntp_packet[43];
     // Vrati pocet sekund a pripocita casovou zonu
     return sekundy - 2208988800UL + zona * SECS_PER_HOUR;
   }
 }
 // Pokud se dotaz nepodaril, vrat 0
 return 0;
}

// Funcke pro odeslani UDP paketu/framu na NTP server
void odesliNtpPacket(IPAddress &adresa) {
 memset(ntp_packet, 0, 48);
 ntp_packet[0]  = 0b11100011;
 ntp_packet[1]  = 0;
 ntp_packet[2]  = 6;
 ntp_packet[3]  = 0xEC;
 ntp_packet[12] = 49;
 ntp_packet[13] = 0x4E;
 ntp_packet[14] = 49;
 ntp_packet[15] = 52;
 Udp.beginPacket(adresa, 123);
 Udp.write(ntp_packet, 48);
 Udp.endPacket();
}
html.h
Kód:
// Pro prevod ceskych znaku v HTML kodu
// do zakladniho ASCII jsem pouzil prevod
// do formatu HEX NCR na webu:
// https://r12a.github.io/app-conversion/

static const char PROGMEM html[] = R"html(
<!DOCTYPE html>
<html lang="cs">
<head>
<title>WiFiLampa</title>
<link href="https://fonts.googleapis.com/css?family=Comfortaa&amp;subset=latin-ext" rel="stylesheet">
<script
 src="https://code.jquery.com/jquery-3.3.1.min.js"
 integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
 crossorigin="anonymous">
</script>
<style>
body{
 font-family: "Comfortaa", cursive;
 line-height: 150%;
 margin: 50px;
 text-align: center;
}
a{
 display: inline-block;
 width: 100px;
 padding: 5px;
 border: 1px solid steelblue;
 font-weight: bold;
}
a:link, a:visited, a:active{
 color: steelblue;
 background: white;
 text-decoration: none;
}
a:hover{
 color: white;
 background: steelblue;
 text-decoration: none;
}
</style>
<script>
// Tato funkce se zpracuje pote, co se stahne a vykresli cely HTML kod
$(function(){
 // Na zacatku si pres AJAX stahni JSON s informacemi
 $.get("/api?data=1", function(data){
   if(data.odpoved == 1){
     console.log(data);
     // Aktualizuj podle stazenych dat prvky na strance
     $("#cas").html(data.cas);
     $("#ram").html(data.ram);
     $("#teplota").html(data.teplota);
     $("#zacatek").val(data.zacatek);
     $("#konec").val(data.konec);
     // Podle stavu rele vykresli adekvatni tlacitko
     if(data.stav == 1){
       $("#rozsvitit").hide();
       $("#stav").html("&nbsp;sv&#x00ED;t&#x00ED;");
       $("#stav").css("color", "green");
     }
     else{
       $("#zhasnout").hide();
       $("#stav").html("&nbsp;je zhasnut&#x00E1;");
       $("#stav").css("color", "red");
     }
   }
   else{
     console.error("Chyba: " + data.odpoved);
   }
 });
 // Pokud klepnu na tlacitko nastaveni casu, odesli AJAXem nove casy automatickeho spinani
 $("#nastavit").click(function(){
   $.get("/api?zacatek=" + $("#zacatek").val() + "&konec=" + $("#konec").val(), function(data){
     if(data.odpoved == 1){
       console.log("Zmena casu automatickeho spinani a vypinani");
     }
     else{
       console.error("Chyba: " + data.odpoved);
     }
   });
 });
 // Po klepnuti na odkaz pro rozsviceni odesli AJAXem prikaz k rozsviceni
 $("#rozsvitit").click(function(){
   $.get("/api?stav=1", function(data){
     if(data.odpoved == 1){
       console.log("Rele sepnuto!");
       $("#rozsvitit").hide();
       $("#zhasnout").show();
       $("#stav").html("&nbsp;sv&#x00ED;t&#x00ED;");
       $("#stav").css("color", "green");
     }
     else{
       console.error("Chyba: " + data.odpoved);
     }
   });
 });
 // Po klepnuti na odkaz pro zhasnuti odesli AJAXem prikaz ke zhasnuti
 $("#zhasnout").click(function(){
   $.get("/api?stav=0", function(data){
     if(data.odpoved == 0){
       console.log("Rele vypnuto!");
       $("#rozsvitit").show();
       $("#zhasnout").hide();
       $("#stav").html("&nbsp;je zhasnut&#x00E1;");
       $("#stav").css("color", "red");
     }
     else{
       console.error("Chyba: " + data.odpoved);
     }
   });
 });
});
</script>
</head>
<body>
<h1>WiFiLampa<span id="stav"></span></h1>
<p>
 <a id="rozsvitit" href="#">Rozsv&#x00ED;tit</a>
 <a id="zhasnout" href="#">Zhasnout</a>
</p>
<p>
 Nastavit &#x010D;as automatick&#x00E9;ho sp&#x00ED;n&#x00E1;n&#x00ED; a vyp&#x00ED;n&#x00E1;n&#x00ED;
</p>
<p>
 Zapnout v <input id="zacatek" type="time" /> a vypnout v
 <input id="konec" type="time" />
 <input id="nastavit" type="button" value="Nastavit cas" />
</p>
<p>
 Aktu&#x00E1;ln&#x00ED; &#x010D;as: <span id="cas"></span>, teplota: <span id="teplota"></span>&nbsp;&#x00B0;C, voln&#x00E1; pam&#x011B;&#x0165;: <span id="ram"></span> kB
</p>
</body>
</html>
)html";
Nebo sáhnout po nějakém hotovém řešení např. Tasmota. Tady je výhoda rychlý rozvoj, stále možnost si Tasmotu přiohnout. Díky tomuto řešení máme k dispozici 10A Relé, s komunikací MQTT a s možností rozšíření o pousty senzorů s cenovkou do 100Kč. Takže jako hlavní nosný prvek bude právě Sonoff Basic.
 
Citovat
#11
Sonoffy jsou skvělé, ale osobně u nich vidím dva nedostatky:

1 - Pokud vím, nejsou použitelné na spínání DC, ideálně 5, 12 nebo 24 V (většina LED pásků, co znám).
2 - S Tasmotou jsou často velice nestabilní a při nesprávném nastavení v HA se nestabilita ještě zhorší. Nejvíce se mi osvědčila tasmota verze 6.3 ("tovární") a selfcompiled 6.4.1 (verze sensors). Postupně ale Tasmotu opouštím ve prospěch ESPHome.

Potencionálním třetím nedostatkem Sonoffů je nutnost napájení pinů, pokud je chce člověk flashnout, a to pro většinu (běžných) uživatelů asi bude oříšek.

Nespornou výhodou ESPHome je pro mě automatická integrace do HA a možnost i dodatečně různé senzory a čidla přejmenovat. A úplně super je flashování přes USB (nodeMCU nebo WemosD1) nebo OTA u Sonoffů při přechodu z Tasmoty.
Vero4K+, 3xRPi 3B;  xTrend 9500 (OpenPLI + CZ/SK Archives plugin); Turris 1.1; T61p (LinuxMint); T420 (ArchLinux); ThinkPad Edge (Linux Mint)
 
Citovat
#12
Ono na Tasmotě se stále pracuje a na HW sonoff taky, takže nedostatky se pomalu odlaďují.

1, lze řešit HW zásahem, u nové desky to páni vývojáři ulehčili, že jsou nyní pevné cesty nahrazeny dráty. Takže stačí pouze štípačky a kontakty relé jsou bezpotenciálové.
2, 6.4.1 je za určitých podmínek stabilní, zjistil jsem že nestabilita tasmoty je dána nízkým logovacím časem. Default je 300, min je 10s. Pod 30s začínají být výpadky připojení.
3, napájení pinů řeší FT232RL adaptér, jen pozor na současné napájení z adaptéru a síťe

Jinak k ESPHome - zatím jsem nezkoušel - nemám HW. Až přijde tak odzkouším, jen doufám, že se dá nahrávat a editovat v IDE, jinak to nemá pro mě smysl.
 
Citovat
#13
No jen si neplést pájení (osazení pin headeru) a napájení ;-) Ale i s tím si běžný uživatel poradí 0:-)
 
Citovat
#14
Napájení = připájení, co udělá nevhodná předpona, že :-)

Sonoffy jdou přeflešnout na ESPhome OTA, pokud již běží na Tasmotě. Pochopil jsem to tak, že Sonoffy máš. "Kód" pro ESPhome se píše nejpohodlněji přímo v prostředí ESPhome a rovnou se z něj do zařízení taky pošle, lze samozřejmě použít textový editor, například Sublime, kód je obyčejný yaml. Samotné ESPHome je dostupné buď jako doplněk pro Hassio nebo například jako Docker container připojený k HA.
Vero4K+, 3xRPi 3B;  xTrend 9500 (OpenPLI + CZ/SK Archives plugin); Turris 1.1; T61p (LinuxMint); T420 (ArchLinux); ThinkPad Edge (Linux Mint)
 
Citovat
#15
Také bych byl zvědav zda místo pájení pinové lišty někdo používá pogo piny (odpružené hroty) a kolíček "jumbo" třeba s plexi nebo jiný pohodlný "zlepšovák";-)
 
Citovat
#16
@cuore je fajn že si založil toto vlákno a prezentujes v ňom svoj názor a postoj lepšie ako vo vlakne o Xiaomi. A v mnohom môžem súhlasiť, hass plus nodemcu a pod. s tým sa dá čarovať :) Ale nie je to pre každého. Ja nie som technicky negramotny, zložil som si niekoľko pc, nainstaloval všetko čo potrebujem, zosietoval som si domácnosť, pouzival som niekoľko android zariadení s custom rom, rpi s LE, teraz vorke z CE, nejaké drobnosti z nodemcu a arduinom. Ale potom som skusil linux a niekolko sw ktoré by som chcel používať, inspirovala ma najmä táto stránka. A tam som narazil na jeden problém za druhým, hodiny googlenia sa stali dňami a týždňami. Ako si na začiatku písal o arogancii a tak, to nie je o arogancii ale o prioritách a čase. Nie každý chce a môže študovať a kodovat 4 sw ktoré by pod win rozbehal za pár hodín. Nemám pocit že je to vhodné a použiteľné pre jedného z milióna :) Ja osobne ak sa budem strašne nudiť alebo nebudem mať nič lepšie na práci sa k tomu možno vrátim... a mozno nie.
Odroid N2, Xbox One S, Vorke Z6
 
Citovat
#17
@plesi, muzes hodit odkaz na ty zlepsovaky?
 
Citovat
#18
Já mám tohle https://www.thingiverse.com/thing:2980893, ale protože je mi většinou líto nechat Sonoff jen jako relé,když se k němu dají připojit sensory nebo třeba další relé, tak ten pin header stejně většinou napájím (připájím), prostě ho tam naletuju :-)
Vero4K+, 3xRPi 3B;  xTrend 9500 (OpenPLI + CZ/SK Archives plugin); Turris 1.1; T61p (LinuxMint); T420 (ArchLinux); ThinkPad Edge (Linux Mint)
 
Citovat
#19
(23.4.2019, 10:22)ch_bdxhegz Napsal(a): Já mám tohle https://www.thingiverse.com/thing:2980893

Joo něco podobného jsem myslel :-) ... a tak si říkám zda nepoužíváte i jiné vychytávky (nějakou jinou víceúčelovou svěrku,kolík,pole...)
Jinak samosebou je lepší připájet pinový kolík,přesně jak popisuješ důvod a také že to je jen chvilka pájení.(na pár kousků)
 
Citovat
#20
Nic jiného jsem zatím neměl potřebu použít, tedy kromě běžných pomůcek jako je třetí ruka, vál na těsto upravený na pájecí pracovní plochu :-) a podobně. A vlastně i ta výše odkazovaná svorka leží v šuplíku.

Co ale v poslední době hodně zvažuju je 3D tiskárna. Průša Mk3, Ender...
Vero4K+, 3xRPi 3B;  xTrend 9500 (OpenPLI + CZ/SK Archives plugin); Turris 1.1; T61p (LinuxMint); T420 (ArchLinux); ThinkPad Edge (Linux Mint)
 
Citovat
  


Přejít na fórum:


Prochází: 1 host(ů)