1

Téma: Quido - příklad čtení vstupů

Pěkný den,
pokud by to někdy někomu k něčemu bylo, tak tady uvádím příklad mojí komunikace s Quidy (2/32 a 30/3) data se mi ukládájí do pole RAM odkud si je čtu pomocí user.htm stranky. Toto co sem davam je moje DEBUG stranka pro nasazeni systemu. Potom to bude uz komplexnejsi. (kontrola, zda je ramec dlouhy jak ma byt a ma spravny kontrolni soucet, ale to az v ostre verzi.

Komunkace je pomoci Spinel 97 po RS485 se dvema moduly Quido na jedne lince z SDS-MACRO.

Tady jsou trifunkce, ktere volam v te hlavnejsi funkci. Tyto funkce cisti uart buffer a cast ram pole, kam ukladam vysledek z uartu a uklada uart do casti pole ram[400-450]. Funkci uartClean volam i pri inicializaci sds-c programu (funkce init{}).

uartClean {
   // Vycisti zasobnik UART
   var _uc;
   wait(500);
   label uartClean_1:
   _uc = sys[49];
   wait(50);
   if (sys[49] > -1) goto uartClean_1;
}
serialResponseSave {
// Vloži odpověď seriove linky do ram[400-450]
// Pro prijem seriovych dat je vyuzivano pole ram[400-450]
   var _srs;
   var _srst;
   _srst = 3;
   label serialResponseSave_2:
   if (sys[48]==0) {
      _srs = 399;
      label serialResponseSave_1:
      _srs++;
      ram[_srs] = sys[49];
      if (sys[48]==0 && _srs<450) goto serialResponseSave_1;
   } else {
      wait(300);
      if (sys[48]!=0 && _srst<=0) goto serialResponseSave_2;
   }
}
serialResponseClean {
   // Smaz odpoved ze seriove linky
   var _src;
   _src = 400;
   label serialResponseClean_1:
   ram[_src] = 0;
   _src++;
   if (_src<450) goto serialResponseClean_1;
}

Tady je hlavni funkce, kterou volam z main{}.
Je zde odkomentovana cast httpget, ktera mi posila stavy do databaze, kde mam ulozeny casy zmen na vstupech mozno smazat a stejne zakomentovana cast, ktera stavy vypisuje do console.

inputRead {
// Cte stavy vstupu a uklada je do pole ram[300-350]

   // Cleaning
   uartClean();
   serialResponseClean();

   // Quido 30/3
      // Vyšli požadavek na stav vstupu a vyčkej na odpověď a ulož ji do ram
      serial_text_out(0x2a, 0x61, 0x00, 0x05, 0x32, 0x0b, 0x31, 0x01, 0x0d);
      wait(500);
      serialResponseSave();

      // Zkontroluj zda ma odpoved spravne parametry
      if (ram[400] != 0x2A) goto jumpOverModule_1;  // prefix
      if (ram[401] != 0x61) goto jumpOverModule_1;  // protokol
      if (ram[404] != 0x32) goto jumpOverModule_1;  // adresa zarizeni
      if (ram[405] != 0x0b) goto jumpOverModule_1;  // podpis odesilatele
      if (ram[406] != 0x00) goto jumpOverModule_1;  // ack
   
      // Nastav ram[301-330] podle vstupu 1-30
      _ram = 300;
      _ram1 = 410;
      label inputRead_1:
      _ram2 = 8;
      _y = ram[_ram1];
      label inputRead_2:
      _x = _y % 2;
      _y = _y /2;
      _ram++;
      ram[_ram] = _x;
      _ram2--;
      if (_ram2>0) goto inputRead_2;
      _ram1--;
      if (_ram1>406) goto inputRead_1;

      label jumpOverModule_1:

   // Cleaning
   serialResponseClean();
   
   // Quido 2/32
      // Vyšli požadavek na stav vstupu a vyčkej na odpověď a ulož ji do ram
      serial_text_out(0x2a, 0x61, 0x00, 0x05, 0x31, 0x0c, 0x31, 0x01, 0x0d);
      wait(500);
      serialResponseSave();

      // Zkontroluj zda ma odpoved spravne parametry
      if (ram[400] != 0x2A) goto jumpOverModule_2;  // prefix
      if (ram[401] != 0x61) goto jumpOverModule_2;  // protokol
      if (ram[404] != 0x31) goto jumpOverModule_2;  // adresa zarizeni
      if (ram[405] != 0x0c) goto jumpOverModule_2;  // podpis odesilatele
      if (ram[406] != 0x00) goto jumpOverModule_2;  // ack
   
      // Nastav ram[331-332] podle vstupu 1-2
      _ram = 330;
      _ram1 = 2;
      _y = ram[407];
      label inputRead_3:
      _x = _y % 2;
      _y = _y /2;
      _ram++;
      ram[_ram] = _x;
      _ram1--;
      if (_ram1>0) goto inputRead_3;

      label jumpOverModule_2:
   
   //Cleaning
   serialResponseClean();
   
//   // Vypis vysledek do konzole
//   echo(ram[301],ram[302],ram[303],ram[304],ram[305],ram[306],ram[307],ram[308],ram[309],ram[310],
//        ram[311],ram[312],ram[313],ram[314],ram[315],ram[316],ram[317],ram[318],ram[319],ram[320],
//        ram[321],ram[322],ram[323],ram[324],ram[325],ram[326],ram[327],ram[328],ram[329],ram[330],
//        ':',
//        ram[331],ram[332])
//        ;

   // Odesli vysledek do DB
   http_get(10,1,3,1,'host','/debug/data.php?hodnota=',
        ram[301],ram[302],ram[303],ram[304],ram[305],ram[306],ram[307],ram[308],ram[309],ram[310],
        ram[311],ram[312],ram[313],ram[314],ram[315],ram[316],ram[317],ram[318],ram[319],ram[320],
        ram[321],ram[322],ram[323],ram[324],ram[325],ram[326],ram[327],ram[328],ram[329],ram[330],
        ':',
        ram[331],ram[332])
        ;
}

Pokud bude zajem mohu sem dat i user.html a funkce pro ovladani relatek (na modulech quido i sds). user.htm samozrejme zobrazuje i vstupy. Data mam v intervalu javascriptem nacitana z sds pomoci get_sys a get_ram. Diky pouziti js, neni treba refreshovat celou stranku, ale refreshuji se casti stranky. Na strance jsou taky zobrazeny teploty z cidel na obou sbernicich.

2

Re: Quido - příklad čtení vstupů

Já mám také Quida od Papoucha (používám je na řízení domu) a docela by mě Vaše kompletní řešení zajímalo. Rád bych změnil řízení z PC s Linuxem na SDS.

3 Naposledy upravil: ruda (2013-07-19 12:36:56)

Re: Quido - příklad čtení vstupů

xmasin:
Kompletní řešení už celé nebude na SDS, ale na serveru, kterej taky pobezi na linuxu. SDS je takovy prostrednik mezi quido moduly, tepelnymy cidly, elektromerem, zamky adalsimy komponenty viz nize

Zatím mám představu následující.

  • všechny quida, teplotní čidla, elektroměr, připojím k SDS, kde se data převedou ze seriove komunikace do ram pole (overeni crc, zdroje, hodnot atd) odkud si je pomoci get_ram vytahne nejakej server (predpokladam linux[debian])

  • na serveru poběží nějaká služba a ta bude hodnoty zapisovat do databáze a naopak bude posílat do SDS instrukce k ovládání výstupů (např. u topení uživatel přes nějakého klienta (viz níže) nastaví požadovanou teplotu v pokoji ta se uloží do DB, zároveň v DB bude tolerance teplot[chci 24°C, tak začne topit při 23°C a přestane při 25°C, ale to se nastaví až v praxi] a služba vezme údaj z teplotního čidla, vyhodnotí jak jsme na tom a pošle do SDS informaci jestli má topení být vypnuté/zapnuté a SDS to předá sérivou linkou QUIDO a nahlásí zpětný stav do ram

  • a nakonec pro uživatele mám zatím v plánu dvě přístupové metody do ovládání, primárně to bude webová stránka(něco málo PHP, JAVASCRIPT, HTML) a aplikaci do ANDROIDu, která bude umět jak ovládat dům, tak i například při přiložení telefonu k NFC Tagu někde v domě něco provést (například u dveři bude samolepka, přiložím telefon a dveře se odemknou

Jinak věci co chci doma snímat jsou: teploty, pohybová čidla v místnostech(zabezpečení), kontakty na oknech(při otevření okna vypnu rekuperaci a topení v místnosti), venkovní úroveň světla, spotřebu el. energie, baterii pro zálohování tohoto systému
a naopak ovládát budu: topení, hlavní vstupní dveře (tedy přesněji zámek), některá světla, bránu, branku, rekuperaci
a nakenec nějaké alarmy, když se někdo vloupá, nebo když bude teplota nějaká mimo stanovené hranice atd. to asi přes mail/sms

4 Naposledy upravil: vkalina (2013-07-20 10:24:23)

Re: Quido - příklad čtení vstupů

Takhle to provozuji já. Je ale potřeba si uvědomit, že některé operace by měli být online a to při použití databáze nenení dost dobře možné, takže něco Vám bude muset běžet přímo v SDS a na linuxu nechat vyhodnocování stavů jako čím zrovna topit a pod, ale třeba samotné řízení kotle už nechat na SDS. Jenom pro představu. Já ukládám všechny stavy do MySgl každých 5 minut a za rok má má databáze 3mil záznamů což je 100M dat. Další věc, než psát samostatný program pro android je možná lepší některé obrazovky WEBu optimalizovat pro rozlišení Mobilu a pak už je jedno, z jakého systému na ně přistupujete. Na samotné ovládání důležitých zař bych na Vašem místě použil rozhodně PHP, pokud to má být viditelné z INETu. JAVA script kód je veřejně čitelný a tak by Vám zařízení hacknul kdejaký trouba, nehledě na to, že pokud ho neovládáte, tak se s tím budete dost trápit, Ajax s jeho asynchronními funkcemi je oravdu docela oříšek na naučení. Sám jsem se s user.htm trápil asi měsíc a to mi nakonec stejně pomohl kolega v práci, jež je oproti mě opravdu programátor.

5

Re: Quido - příklad čtení vstupů

vkalina:
Tak kotel nemám, topit se bude přímotopy/infrapanely, takže jde o spínání relátek. Takže jednoduché, nevidím důvod proč řešit jinak, klidně navrhněte.

Logování zatím neřeším, ale při předpokladu nějakých 0,5GiB/rok s tím že budu mít za 100 let 50GiB databázi mě netrápí.
Jinak web je o tom, že autentizace, a akce provádím ověřováním z PHP. Ajax (mám rád jQuery), mám od toho aby si pokud mám otevřenou nějakou stránku tahal data ze vstupů a nerefreshoval mi ji celou to je o ničem. Víže je kód user.htm, která mi jenom čte vstupy a teploty z SDS.

Prográmator asi uplně nejsem, ale mám za sebou pár projektů, kde se používalo právě HTML, CSS, JAVASCRIPT (jQuery), PHP. Aplikace pro android jsou Java, tak nepředpokládám nějaké zásadní problémy.

S tou optimalizací pro web jsem to zavrhnul, protože web bude uečen pro PC a tablety a bude vidět dost informací. v HTML 5 by to šlo krásně napsat i pro telefony, ale já chci mít aplikaci běžící na pozadí a například při příchodu domů a přiblížení telefonu k NFC samolepce automaticky odemknout dvěře a proto musím mít aplikaci. Další nespornou výhodou aplikace je to, že pokud nebude mít někdo z obyvatel domu internet v telefonu, tak není problém do aplikace napsat možnost ovládání pomocí SMS, který uživatel nebude muset složitě psát a pamatovat si strukturu. Pošle SMS a systém mu vrátí stavy čidel v další SMS. A druhou SMS odešle a nastaví co bude potřebovat. Pro příjem SMS stačí opět jenom api v php.

Až bude hotovo tak sem dám nějaké ukázky, ale to bude tak na přelomu prvního a druhého kvartálu 2014. Přece jenom dům bude stát až na konci tohoto roku. A mám i jiné úkoly než tento systém.

6

Re: Quido - příklad čtení vstupů

No jak jsem psal, mám většinu taky pod Linuxem, je to jednoduché a pohodlné na úpravy, ale postupně se snažím to všechno převést na samostatné moduly v SDS a na Linuxu nechat jenom nedůležité aplikace jako je třeba zapínání vánoční výzdoby a pod. Má to jeden hlavní důvod. Ona životnost HD není nekonečná a bohuželm neznám žádný způsob, jak jednoduše a rychle naklonovat již odladěný systém. Naproti tomu naprogramování  SDS je záležitost jedné minuty. Navíc to dělám tak, aby v případě poruchy řídící elektroniky odpadla kotva relé a spotřebiče pracovali v manuálním režimu a nestalo se mi tak, že budu třeba mrznout. Kdybych znal nějaký jednoduchý způsob, jak přesypat obsah jednoho disku na druhý a měl tak funkční stroj, asi bych změnil názor, ale zatím to je tak, že když se mi vysype disk, tak to budu dávat týden do kupy a ta představa mě opravdu děsí. U Vás mě trochu zaráží, že plánujete osadit dveře elektronickými zámky a jako hlavní zdroj tepla plánujete přímotop a infra. Přijde mi to finančně celkem nevyrovnané, ale určitě to neodsuzuji. To je každého věc, za co bude v budoucnu utrácet. Já mám jako druhý zdroj tepla TC z klimatizací, provozně to vyjde tak na 50,-Kč denně od září do konce Listopadu. Prosinec až únor jedu dřevoplyn. Mám i elektrokotel, ale to je spíš historická záležitost. Jen tak ze srandy jsem ho nechal jeden den v provozu na 8 hodin akumulace a dělalo to 100,- Kč za hodinu. Představa že bych měl vekslákům z ČEZu nasypat 800,- denně by mě asi dovedla k šílenství.

7

Re: Quido - příklad čtení vstupů

vkalina: server bude zalohovany nekam pryc a disky v raidu, takze neni problem to obnovit za par hodin, manualni ovladani samozrejme nechavam pri vypadku k dispozici

v SDS bude natvrdo napsana zamrazova hranice, pod kterou se nepujde dostat (teplota), ale na zaklade vaseho pripevku asi udelam v SDS pojistku, pokud vypadne ridici server, aby se teplota v dome udrzovala na nejake rozumne urovni pri ktere se da dum obyvat

a k tomu topeni elektrinou, mam na pozemku dovedeny plyn pripraveny k pripojeni a stejne se mi nevyplati ho pripojit, dum bude totiz velme dobre izolovan a prikon potrebny na vytopeni je roven prikonu jednoho kusu malych akumulacek co zname vsichni z drivejska, pocitano je to bez ohledu na rekuperaci, takže po jejim zapocteni to bude jeste o neco mene, protoze vetrani nebude vypoustet veskere teplo ven

8

Re: Quido - příklad čtení vstupů

Pokud stavite pasiv tak to jo. S tim Raidem jsem to taky chtel, dokonce jsem si koupil desku s podporou raid, ale při instalaci nastalo velké zklamání. Raid byl pouze pro Windows přes ovladač. Tak jsem zkoušel nastavit zrcadlo pod linuxem, což fungovalo, ale nepovedlo se mi pod raid začlenit spouštěč, takže vlastně k ničemu, tak alespoň na vzdálený server každý den v noci zálohuji konfiguraci a data. Je to deně přes 100M , tak to občas musím na serveru vymazat, ale i přes všechna tato opatření to bude docela pakárna to znovu všechno rozjet, pokud klekne disk. Moje podmínka byla deska ATOM, aby to nežralo víc jak topení. Jsem z toho tak trochu sklamany. Linux je super, ale z havarie mam opravdu strach.

9

Re: Quido - příklad čtení vstupů

Tak pod linuxem mam SW RAID na jednom miste, kde bezi na obyc DELL serveru PROXMOX (coz je virtualizacni platforma na Debianu) a ja mam Debian rad.

Jinak pokud jste mel raid pomoci mdadm a zavadec grub, tak je potreba grub neinstalovat do raidu, ale na oba disky, takze napriklad:

grub-install /dev/sda
grub-install /dev/sdb

10

Re: Quido - příklad čtení vstupů

Diky zkusim to na mašině v praci, doma jsem to nakonec instaloval bez raidu a pokus o přededelání na raid na zivem stroji se mi nepodaril. Spis bych potrboval cely system prekopirovat na novy Disk, ale nejak se mi do toho moc nechce

11

Re: Quido - příklad čtení vstupů

ruda napsal:

xmasin:
Kompletní řešení už celé nebude na SDS, ale na serveru, kterej taky pobezi na linuxu. SDS je takovy prostrednik mezi quido moduly, tepelnymy cidly, elektromerem, zamky adalsimy komponenty viz nize

Zatím mám představu následující.

  • všechny quida, teplotní čidla, elektroměr, připojím k SDS, kde se data převedou ze seriove komunikace do ram pole (overeni crc, zdroje, hodnot atd) odkud si je pomoci get_ram vytahne nejakej server (predpokladam linux[debian])

  • na serveru poběží nějaká služba a ta bude hodnoty zapisovat do databáze a naopak bude posílat do SDS instrukce k ovládání výstupů (např. u topení uživatel přes nějakého klienta (viz níže) nastaví požadovanou teplotu v pokoji ta se uloží do DB, zároveň v DB bude tolerance teplot[chci 24°C, tak začne topit při 23°C a přestane při 25°C, ale to se nastaví až v praxi] a služba vezme údaj z teplotního čidla, vyhodnotí jak jsme na tom a pošle do SDS informaci jestli má topení být vypnuté/zapnuté a SDS to předá sérivou linkou QUIDO a nahlásí zpětný stav do ram

  • a nakonec pro uživatele mám zatím v plánu dvě přístupové metody do ovládání, primárně to bude webová stránka(něco málo PHP, JAVASCRIPT, HTML) a aplikaci do ANDROIDu, která bude umět jak ovládat dům, tak i například při přiložení telefonu k NFC Tagu někde v domě něco provést (například u dveři bude samolepka, přiložím telefon a dveře se odemknou

Jinak věci co chci doma snímat jsou: teploty, pohybová čidla v místnostech(zabezpečení), kontakty na oknech(při otevření okna vypnu rekuperaci a topení v místnosti), venkovní úroveň světla, spotřebu el. energie, baterii pro zálohování tohoto systému
a naopak ovládát budu: topení, hlavní vstupní dveře (tedy přesněji zámek), některá světla, bránu, branku, rekuperaci
a nakenec nějaké alarmy, když se někdo vloupá, nebo když bude teplota nějaká mimo stanovené hranice atd. to asi přes mail/sms

Já mám v plánu něco podobného jen se teď rozhoduji mezi SDS, Raspberry a klasickým, byť úsporným PC. V Quidech mám upravený software, takže třeba spínání relátek výstupu mám řešeno přivedením kladného pulzu na příslušný vstup. Aktuálně mám v plánu ovládání světel, zásuvek a regulace topení + odečítání spotřeby elektřiny a plynu, v podstatě mě vše funguje, akorát musím resp. kolega programátor musí dopsat webové rozhraní, teď to ovládám z příkazové řádky Linuxu pomocí skriptů a není to příliš komfortní, které bude běžet na serveru a vizualizovat stav domu + ovládání všech výstupů a zobrazení teplot a spotřeb. Do budoucna bych rád pořídil malou FVE, takže by se pak řízení rozrostlo o monitoring FVE.

12

Re: Quido - příklad čtení vstupů

Kontaktujte p. Tomáše Prejdu (viz eshop onlinetechnology.cz), csphone@csphone.cz, ohledně hotového Linux/SDS řešení tzv. "chytrého domu". První instalace je už hotová a právě se testuje a dolaďuje software.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

13

Re: Quido - příklad čtení vstupů

adamn napsal:

Kontaktujte p. Tomáše Prejdu (viz eshop onlinetechnology.cz), csphone@csphone.cz, ohledně hotového Linux/SDS řešení tzv. "chytrého domu". První instalace je už hotová a právě se testuje a dolaďuje software.

Psal jsem p. Prejdovi, ale bohužel mě neodpověděl, bylo by možné zveřejnit nějaké podrobnosti zde ve fóru?

14

Re: Quido - příklad čtení vstupů

Už se vám p.Prejda ozval? Něco málo o tom vím. Co potřebujete?

15 Naposledy upravil: xmasin (2013-10-29 15:04:08)

Re: Quido - příklad čtení vstupů

j@m napsal:

Už se vám p.Prejda ozval? Něco málo o tom vím. Co potřebujete?

Bohužel ne. Psal jsem mu mail 25.7.

16

Re: Quido - příklad čtení vstupů

Napište mi SZ nebo email na maly@merenienergie.cz. Předám to p.Prejdovi.

17

Re: Quido - příklad čtení vstupů

Bylo by možné zveřejnit nějaké informace o řízení domu pomocí SDS?