Forum

Forum

Notifications
Clear all

[Sticky] Preco Smart House

108 Posts
20 Users
13 Likes
16.7 K Views
(@mates)
Eminent Member
Joined: 7 years ago
Posts: 26
 

Myslím že se na Node-red díváš z loxoňáckého pohledu, kde se nejspíše používají klasické logické hradla "prvky" AND, NAND, OR, XOR atp. a to že tě někdo u Node redu vytočil tomu asi taky neprospělo 😀 No offence. 

Musím se zastat node-redu, protože jsem v podstatě nenarazil na problém, který bych tam nemohl nějakým způsobem vyřešit. V Node-redu můžeš vytvořit klasický program, sestávající se z IFů, proměnných, funkcí atp...

Tvůj příklad s porovnáváním různých hodnot je řešitelný vícero způsoby. Node-red umožňuje ukládat hodnoty tj. používat různé typy proměnných (Global, Flow, Context), ukládat data do DB, JSON atp. S těmito daty následně pracovat pomocí standartních nodů node-red IFy, delay, trigger, všechny potřebné funkce jsou k dispozici.

Takže teploty, vlhkosti, magnety v okně, stavy relé, vstupy atp. můžu načíst každých X sekund do proměnných a pak pouštím logiku nad těmito hodnotami.

Nerozepíšu to úplně detailně, ale např. u sebe doma tím řídím topení a ohřev bojleru pomocí kotle na peletky. Kde je kontrola na teplotu kotle, bojleru, akumulačky nahoře a dole, teplota v domě. Na základě těchto hodnot se ovládají čerpadla a spuštění kotle. Taky tam je logika využití odpadního tepla které se nashromáždí ve výměníku kotle po té co se dotopí a teplo se přesune do bojleru. Taky se sleduje množství pelet v zásobníku pomocí arduina a ultrazvukového senzoru -> kotel se nespustí pokud dojdou pelety a řve to mailem ať to běžím dosypat 🙂

Je to jenom část toho jak vypadá řízení kotle a čerpadel, je k tomu sousta návazností, ale jen pro představu:

Kotel

Nechci tady nikoho konvertovat k node-red, ale myslím že si zaslouží šanci 🙂

Pokud by byl zájem můžu připravit nějaký srozumitelný flow, který by se dal importovat do Node-red, kde si to můžete projít a vyzkoušet.


   
skybor reacted
ReplyQuote
(@_petr_)
Honorable Member
Joined: 6 years ago
Posts: 491
 

@mates Příkladů není nikdy dost, tak se hlásím jako zájemce.


   
ReplyQuote
(@mates)
Eminent Member
Joined: 7 years ago
Posts: 26
 

@_petr_

Pokusil jsem se sestavit příklad který dal @dusanmsk

Jen jednoduše s několika příklady jak k tomu lze přistoupit.

 

Flow je v pro import do node red je zde: https://pastebin.com/xzqmQvuW

Flow1
Flow2

Nejde mi přiložit JSON.


   
budulinek, skybor and L reacted
ReplyQuote
 L
(@l)
Famed Member Admin
Joined: 9 years ago
Posts: 3062
 

>> Nejde mi přiložit JSON.

Opraveno. Dik, nevedel sem.


   
ReplyQuote
 L
(@l)
Famed Member Admin
Joined: 9 years ago
Posts: 3062
 

Diky za ukazku. Ten problem, co s tim MSK ma imho je, ze vychazi z toho, jak to resi Loxone.

Tam si ten posledni stav ta vazba pomatuje automaticky, zatimco v nodeRedu se musi pouzivat ukladani do promennych. Obcas je to trochu opruz, protoze by pritom stacilo jen natahat cary.

Ale sem rad, ze si priklad postl. Sam sem premyslel, jestli to nejde nejak jinak a sam takto uz par veci bohuzel resim (napriklad situaci, kdy si potrebuju pamatovat posledni stav svetla, ktere Loxone poslalo). Namisto,a by si to ta vazba pomatovala porad, je potreba to ulozit a priste pak nacist z promenne.

Ale je to jen o te filozofii pouzivani.


   
Mates reacted
ReplyQuote
skybor
(@skybor)
Trusted Member
Joined: 3 years ago
Posts: 74
 
Posted by: @mates

Je to přiliž dlouhé, kdyby vás cokoliv zajímalo pište, mé kódy jsou opensource

@mates Tak tohle mně hodně zajímá. Stavím systém do nového domku na podobné filosofii.

Základ jede na LOGO! a jako nádstavba NodeRed, který zatím testuju na RPi, ale uvažuju o nějakém robustnějším HW.

Když píšeš, že je tvůj systém opensource, nechceš to někam hodit? Minimálně pro studijní účely 😉 

Zatím řeším světla a podlahové elektrické topení.


   
ReplyQuote
skybor
(@skybor)
Trusted Member
Joined: 3 years ago
Posts: 74
 

Tak jsem trochu prohledal inet a našel zajímavé řešení na implementaci (více vstupé) logiky do node-red.

https://github.com/Supergiovane/node-red-contrib-boolean-logic-ultimate


   
ReplyQuote
msk
 msk
(@dusanmsk)
Member
Joined: 7 years ago
Posts: 1880
Topic starter  

Ok, beriem ze v nodered si mozes ulozit nejake premenne do nejakeho scope (global, flow, subflow). Lenze potom ten diagram aj tak vyzera - keby si ho neokomentoval, netusim ktora bije. Je kludne mozne ze som mentalne zaseknuty vo flow co ma loxone a nie som schopny mind-switchu robit to inak. Ale mne pripada, ze nez to robit v nodered tak ako si popisal (cast je logika, cast len setuje premenne do kontextu, atd...), tak to uz mam jednoduchsie si to naprogramovat ako normalny kus kodu a vykaslat sa na graficke prepajanie obdlznickov.

Moj example v loxone vyzera pre porovnanie nejak takto:

obrazek

Tu je to okomentovane este:

obrazek

   
skybor and Mates reacted
ReplyQuote
(@_petr_)
Honorable Member
Joined: 6 years ago
Posts: 491
 

@mates Mě zaujaly ty obrázky, které jsi vložil, protože v nich jsou použité věci, které neznám, takže jsem myslel, že se přiučím. Díky i za ten příklad, který jsi připravil.


   
ReplyQuote
msk
 msk
(@dusanmsk)
Member
Joined: 7 years ago
Posts: 1880
Topic starter  

@skybor No, to je presne o com som hovoril. Vsetko to naroutujes do jedneho vstupu a potom vo vnutri toho logickeho bloku nerozlisis z kade a co to vlastne prislo.

Ano, booleany ktore mas or/and-ovat su v pohode ci ich tam posles 1 alebo 1000. Akonahle budu vstupy roznych typov z roznych zdrojov, si v koncoch (resp. riesi sa to tak, ze ten node, ktory POSLE tu spravu, jej musi dat nejaky custom atribut, podla ktoreho si to potom v tom inpute najdes. Co je uplne nahovno so zjavnych dovodov).


   
ReplyQuote
msk
 msk
(@dusanmsk)
Member
Joined: 7 years ago
Posts: 1880
Topic starter  

Co sa mne na nodered paci a v loxone mi strasne chyba je znovpouzitelne subflow. Proste z nejakej hromady blokov si spravim custom komponentu a tu mozem v projekte pouzit 100x. Pokial clovek riesi jednu a tu samu vec 100x, je to fakt neskutocny oser. Uz som par krat skoncil na tom, ze som si otvoril to ich xml-ko a tie nody som tam kopiroval priamo v nom (je nutne upravit nazov a priradit unikatne id-cka), ale nie je to zdaleka pre kazdeho a nikto za to potom samozrejme neruci.

Mat tak cas ktory som mal pred cca 15 rokmi a knowhow ktore mam dnes, vysmrknem komplet nahradu loxplanu a nodered do roka s prstom v nose. Nejaky PoC nastrel som ukazoval v hospode pred snad 2 rokmi, logicky engine nie je az tak zlozity, najvacsi oser pre mna bolo naprogramovat graficky designer - najprv som to skusal v j2se (hnus), potom v javascripte v browseri (este vacsi hnus). Ale fungovalo to. Je samozrejme mozne, ze by som casom narazil na nejake chyby v navrhu, ktore by boli showstoppermi (ze by neslo predist deadlockom pri dorucovani eventov, alebo performance problemom), ale snazil som sa zurocit vedomosti co mam a zdalo sa mi to fakt zivotaschopne. A to bolo prosim pekne nakodene v goovy (ten engine), ktory nie je zrovna z najrychlejsich jazykov (aj ked v porovnani s javascriptom [nodered] to nebude nejaky extra rozdiel).


   
ReplyQuote
 L
(@l)
Famed Member Admin
Joined: 9 years ago
Posts: 3062
 

@dusanmsk jojo, mit tak cas. vecny to problem ;-). Jinak jak pises, cely engine i vizualizace neni nic sloziteho,  jen to pak naroubovat na nejaky HW. Coz by mohl byt ten Martinuv smartcrumbs, coz by byla pecka.

Jenze, casu uz davno neni tolik co driv.


   
ReplyQuote
(@mafraf)
Eminent Member
Joined: 5 years ago
Posts: 43
 

Drobná ukázka, jak se programuje Logic Machine. Žádné klikání, vše je nachystané na uživatelské skripty. Smartcrumbs ještě žije?

PS: Nodered by tam taky mělo jít nainstalovat, i 3G modem, BT4 apod. Fajn je, že DMX jede nativně přes RS485 a člověk si může rozmyslet, co a jak použít.

image
-- Function to control shutters:
-- maxTime - Maximum shutter rolling time,
-- btnDown - Button-down object
-- btnUp - Button-up object 
-- relayDown - relay-down object
-- relayUp - relay-up object
-- statusGrp - status object (percentage value)
-- event - currently active event
function shutter_control(maxTime, btnDown, btnUp, relayDown, relayUp, statusGrp, event)
  local time = os.time()
  local pressed 
  -- delay step 0.5%
  local delay = maxTime/200         
  local main, rev, relayMain, relayRev,step
  if event.dst == btnDown then
    main, rev, relayMain, relayRev = btnDown, btnUp, relayDown, relayUp
    step = 0.5
  elseif event.dst == btnUp then
    main, rev, relayMain, relayRev = btnUp, btnDown, relayUp, relayDown
    step = -0.5
  else
    return --Invalid object
  end
  local origin = grp.getvalue(statusGrp) or 0
  local val = origin
  -- Do not allow switching the opposite relay
  if grp.getvalue(relayRev) or not grp.getvalue(main) then
    return
  end
  grp.write(relayMain, true)
  
  while true do
    -- main object in "stop" state
    pressed = grp.getvalue(main)
    if not pressed and math.abs(val-origin) < 1/delay then
      break
    end
    -- reverse object in "start" state
    if grp.getvalue(rev) or os.difftime(os.time(),time) > maxTime or not grp.getvalue(relayMain) then
      break
    end
    -- get new value
    newVal = math.min(100, val + step) 

    newVal = math.max(0, newVal)
    -- no change, stop
    if newVal == val and not pressed then
      break
    end
    -- write new value
    val = newVal
    grp.write(statusGrp, newVal, dt.scale)
    -- wait for next run
    os.sleep(delay)
  end
  grp.write(relayMain, false)
end
  
    
      
     

   
ReplyQuote
 L
(@l)
Famed Member Admin
Joined: 9 years ago
Posts: 3062
 

@mafraf fuj, to vypada jak nejakej visual basic ;-). Ono to programovani je fajn, ale jen na ty pokrocile veci. osobne bych nechtel programovat zase uplne cely dum v nejakem jazyku. Spousta veci je jen o propojovani a ta vizualizace je o dost prehlendejsi a mene nachylna na chyby.

Crumbs zije, jen klasicky neni cas. pry maji uz 3 instalace (sve vlastni + 1 kamos). ale jak se nastehovali, resi furt neco jineho 😉


   
ReplyQuote
(@mafraf)
Eminent Member
Joined: 5 years ago
Posts: 43
 

@l

Na jednodušší věci (typu světla) se dá použít přímé propojení objektů mezi sebou. Na port 1 z obrázku je napojené relé světla na chodbě. Jakmile nějaké zařízení pošle datagram s jeho adresou, výstup se nastaví podle zprávy. Tohle je klasické řešení podle KNX.

image

   
ReplyQuote
Page 4 / 8
Share: