Jump to content

Welcome to Smart Home Forum by FIBARO

Dear Guest,

 

as you can notice parts of Smart Home Forum by FIBARO is not available for you. You have to register in order to view all content and post in our community. Don't worry! Registration is a simple free process that requires minimal information for you to sign up. Become a part of of Smart Home Forum by FIBARO by creating an account.

 

As a member you can:

  •     Start new topics and reply to others
  •     Follow topics and users to get email updates
  •     Get your own profile page and make new friends
  •     Send personal messages
  •     ... and learn a lot about our system!

 

Regards,

Smart Home Forum by FIBARO Team


Search the Community

Showing results for tags 'fukcje'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • FIBARO Community
    • FIBARO Portal and Forum policy
    • FIBARO
    • Say hello!
    • Off-topics
  • FIBARO Update
    • FIBARO System Update
    • FIBARO Mobile Update
  • FIBARO Community Support
    • Scenes and Interface
    • FIBARO Products
    • FIBARO Mobile
    • FIBARO HomeKit
    • FIBARO Assistant Integrations
    • Other Devices / Third-party devices
    • Tutorials and Guides
    • Home Automation
    • Suggestions
  • FIBARO Społeczność
    • FIBARO
    • Przywitaj się!
    • Off-topic
  • FIBARO Aktualizacja
    • FIBARO System Aktualizacja
    • FIBARO Mobile Aktualizacja
  • FIBARO Wsparcie Społeczności
    • Sceny i Interfejs
    • FIBARO Urządzenia
    • FIBARO Mobilnie
    • FIBARO HomeKit
    • Integracja z Amazon Alexa i Google Home
    • Urządzenia Firm Trzecich
    • Poradniki
    • Automatyka Domowa
    • Sugestie

Categories

  • Scenes
  • Virtual Devices
  • Quick Apps
  • Icons

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Facebook


Google+


Skype


Website URL


WhatsApp


Country


Gateway/s


Interests

Found 1 result

  1. Guest

    Funkcje: Poradnik

    Temat który powinien być, a poruszony a do tej pory nie został. Funkcje Wikipedia funkcję definiuje tak: Podprogram (inaczej funkcja lub procedura) - termin związany z programowaniem proceduralnym. Podprogram to wydzielona część programu wykonująca jakieś operacje. Podprogramy stosuje się, aby uprościć program główny i zwiększyć czytelność kodu. Pełną listę instrukcji, którą programiści z Fibaro zaimplementowali w HC2 można znaleźć chociażby tu: http://www.fibarouk.co.uk/support/lua/library/ Wszyscy tych funkcji używamy na co dzień. W każdym kodzie. Lepiej lub gorzej ale potrafimy z nich korzystać. Jednak nie wszyscy potrafimy tworzyć funkcji nowych. Spersonalizowanych. Zapytacie po co? Zacytuję Wikipedię: "Po to aby uprościć program główny i zwiększyć czytelność kodu"... ale i po to, aby przyspieszyć pisanie samego kodu, czy chociażby po to, aby robić mniej" literówek" w kodzie. Tu chciałby zaznaczyć, że nie jestem programistą. To taki człowiek powinien temat otworzyć i to napisać... Ale nie otworzył. I nie napisał A ktoś przecież powinien. Ludzi którzy chcą się uczyć ( takich jak np. ja ) jest wielu i skądś to wiedzę chcą zdobyć. Patrząc wstecz na własne doświadczenia i trudności ze znalezieniem wiedzy w języku naszych pradziadów uważam ze trzeba im pomóc. I to jest powód dla którego postanowiłem otworzyć ten temat. Więc.. Pora na pierwszą funkcję. Na razie bez argumentów. function pierwszaFunkcja() print('świat jest piękny') end Funkcje podobnie jak zmienne w większości wypadków definiuje się i umieszcza się na samym początku skryptu. Pisząc skrypt/ scenę/program , taką funkcję można później w kodzie wywołać: pierwszaFunkcja() W oknie debugera pojawi nam się napis-->> świat jest piękny. Taka funkcja w zasadzie jest mało użyteczna. Potrzebne są argumenty, czyli coś co przekażemy do funkcji. Argumenty wpisujemy wywołując funkcję wstawiając je między nawiasy. Zdefiniujmy funkcję: local dane = 'Ala ma kota' function funkcjaDruga(dane) print(dane) end a przy wywołaniu wstawmy argumenty, tu dane ze zmiennej: funkcjaDruga(dane) okno debugera -->> Ala ma kota Inny przykład funkcji która nie posiada żadnych argumentów. Rozwinięcie funkcji pierwszej: local a = '100' local b = '200' local czasAktualny = os.date('%H:%M') function funkcjaTrzecia() print (a) print (b) print (czasAktualny) end wywołajmy: funkcjaTrzecia() okno debuggera -->> 100, 200, 13:21 Zauważcie, że nic nie wstawiłem między nawiasami. Funkcja wstawiła dane ze zmiennych zdefiniowanych wcześniej. I teraz czas na wisienkę na torcie. Ta sama funkcja przygotowana do podstawiana danych. local czasAktualny = os.date('%H:%M') function funkcjaCzwarta(a,b,c) print (a) print (b) print (c) end No i wywołajmy funkcję czwartą: funkcjaCzwarta('100', '200' , czasAktualny) okno debuggera -->> 100, 200, 13:21 Wywołując funkcję wstawiłem argumenty:( '100', '200' , czasAktualny ). W zdefiniowanej funkcji znajdziemy a, b, c. W momencie wstawiania a przyjmuje wartość 100, b - wartość 200, c - czasAktualny. I tu tkwi potęga funkcji. To jest to, co bardzo upraszcza kod programu. Definiujemy funkcję raz, a potem ją wywołujemy ile chcemy, podstawiając tylko inne dane. Zmieńmy dane wejściowe funkcji: local tesciowa = ' nie cierpię teściowej' local blondi = ' kocham blondynki' local rude = 'rude też są fajne' Wywołajmy tą samą funkcję: funkcjaczwarta( blondi, rude, tesciowa) okno -->> kocham blondynki rude też są fajne nie cierpię teściowej Inny przykład: local lampaOgrod = fibaro:getValue(43) local wartoscZmiennejGobalnej =fibaro:getGlobalValue(jakasTamZmienna) Wywołajmy: funkcjaCzwarta(lampaOgrod, wartoscZmiennejGlobalnej, 'alaMaKota') Wszystko co dzieje się wewnątrz funkcji jest niewidoczne dla reszty skryptu. Czyli inaczej, nie można używać zmiennych utworzonych lub zmienionych w ciele funkcji, poza nią. Jeżeli chcemy aby funkcja zwróciła nam jakąś wartość, należy posłużyć się funkcją return. local czujnikDeszczu = 143 function deszczowo() if tonumber(fibaro:getValue(czujnikDeszczu)) > 0 or fibaro:getGlobalValue('deszcz', 'value') =='tak' or fibaro:getGlobalValue('nawadnianie', 'value') == 'nie' then return true end end W przykładzie powyższym w momencie kiedy zostaną spełnione warunki zwracana jest wartość true. wywołujemy: if deszczowo() then print(' funkcja zwróciła wartość true') end p.s możemy ale nie musimy wpisywać if deszczowo() == true. lub if deszczowo() == false then print ('funkcja nie zwróciła wartości true. Można włączyć nawadnianie') end Funkcje za pomocą instrukcji return mogą zwracać wartości, ale również i całe funkcje. Posłużę się tu przykładem. Jedną z moich ulubionych, aczkolwiek bardzo prostych funkcji: local wyrzutniaRakietID = 100 function on(urzadzenie) then return fibaro:call(urzadzenie, 'turnOn') end Wywołajmy: on(wyrzutniaRakietD) Funkcja on nie zrobi nic innego jak zwróci funkcję którą bardzo dobrze znamy, czyli po prostu uruchomi wyrzutnię rakiet. Oczywiście funkcję taką można rozwinąć: function on(urzadzenie) if tonumber(fibaro:getValue(urzadzenie, 'value')) == 0 then return fibaro:call(urzadzenie, 'turnOn') end end W tym przypadku funkcja on zanim wyśle rozkaz do wyrzutni , sprawdzi czy jest ona wyłączona. Proste funkcje które napisaliśmy, a których nie będziemy korygować, żeby nie zaciemniały reszty programu, można sformatować do jednej linijki kodu. Przy okazji wstawiając inną, na przykład analogicznie działającą funkcję off. function on(urzadzenie) if tonumber(fibaro:getValue(urzadzenie, 'value')) == 0 then return fibaro:call(urzadzenie, 'turnOn') end end; function off (urzadzenie) if tonumber(fibaro:getValue(urzadzenie, 'value')) > 0 then return fibaro:call(urzadzenie, 'turnOff') end end Instrukcja return nie musi nic zwracać. Można jej użyć aby przerwać działanie funkcji:. Przykład: local czujnikRuchu local syrena = 100 function wlaczAlarm(urzadzenie) if not czujnikRuchu then return end if tonumber(fibaro:getValue(czujnikRuchu, 'value'))>0 and tonumber(fibaro:getValue(urzadzenie, 'value'))==0 then fibaro:call(urzadzenie, 'turnOn') end end wlaczAlarm(syrena) Ponieważ zmienna czujnikRuchu nie ma wartości, wywołana funkcja po napotkaniu warunku if not czujnikRuchu z funkcji wychodzi. Tą funkcję można też napisać inaczej. Prościej: function wlaczAlarm(urzadzenie) if czujnikRuchu and tonumber(fibaro:getValue(czujnikRuchu, 'value')) >0 and tonumber(fibaro:getValue(urzadzenie, 'value'))== 0 then fibaro:call(urzadzenie, 'turnOn') end end -- if czujnikRuchu czyt.--> jeżeli zmienna czujnikRuchu istnieje i ma jakąś wartość... Lub jeszcze prościej . Korzystając z funkcji on i funkcji gV którą zastąpiłem funkcję tonumber(fibaro:getValue(urzadzenie, 'value')). function wlaczAlarm(urzadzenie) if czujnikRuchu and gV(czujnikRuchu) >0 then on(urzadzenie) end end Ot taka mała sztuczka: Po napisaniu skryptu w HC2 zaznacz go całego (ctrl +a) , po czym wciśnij shift +Tab Skrypt zostanie sformatowany. Jeśli jest poprawnie napisany, wszystkie poziomy znajdą się na swoich miejscach. Tak jak na zdjęciu poniżej. Jeśli natomiast zrobiliśmy błąd, na przykład wstawiliśmy o jedno end za dużo... Wciśnięcie klawiszy pomoże nam ten błąd znaleźć. --> Nie wszystko poniżej błędu zostało poprawnie sformatowane. Potestuj. Warto P.s. local kom ='Komentując mniej na uwadze że poradnik nie jest skończony i wymaga poprawek' local _false ='Jeżeli coś się nie zgadza czy jest niezrozumiale napisane, napisz mi na priva' function przeczytaj(tresc) if not tresc then return print 'brunetki da się lubić' end if tresc == kom then print(tresc..' - oczywiście. Jest to zrozumiałe') elseif tresc ~= kom then print(tresc..'/n tak zrobię') end end przeczytaj() przeczytaj(kom) przeczytaj(_false)
×
×
  • Create New...