LUA Hilfe/Befehle

Hallo zusammen,

anbei ein paar Befehle aus der LUA HC2 Welt die euch beim basteln weiterhelfen :slight_smile:

Push Nachricht an das Smartphone

fibaro:call(ID des Smartphones, "sendPush", "Hier den gewünschten Text eintragen der per Push geschickt werden soll");

Debug Text im Script, damit wird ein Text im unteren Fenster angezeigt mit dem der Verlauf oder Infos angezeigt werden können.

fibaro:debug('Text eintragen');

Schlafen, wenn Schleifen etc. erstellt werden sollte der folgende Befehl verwendet werden.

fibaro:sleep(60000) — in Millisekunden 60000 = 1 min

Licht einschalten

fibaro:call(ID, "turnOn")

Licht ausschalten

fibaro:call(ID, "turnOff")

Das soll es erstmal gewesen sein.
Würde mich freuen wenn ihr dabei helfen würdet ein gesammeltes Archiv über die ganzen Befehle anzulegen.

Gruß Alex

Und noch was aus der LUA Welt

Den Dimmer einen bestimmten Wert zuweisen, zb. 15%

fibaro:call(ID, "setValue", 15)

Szene abbrechen

fibaro:abort()
Wird häufig im zusammenhang mit benutzt wenn der Trigger auf Sensoren o.ä. gesetzt ist, verhindert so ein doppeltes ausführen.
if (fibaro:countScenes()>1) 
  then 
  fibaro:abort();
end

Kommentare im Script einfügen mit 2 Bindestrichen

-- Kommentar das im Script nicht gelesen wird, nützlich für Informationen

Gruss

Habe mal was gefunden leider nur in Englisch…

http://www.fibarouk.co.uk/support/lua/library/

Welche Bedeutung haben die Zeilen

–[[
%% autostart
%% properties
%% globals
–]]

in einem LUA-Script? Sind das LUA-Befehle oder ist es eine Fibaro-Eigenheit?

Vielen Dank und Gruß hgm

Hi,

das ist grundsätzlich ein Kommentar. Fibaro nutzt das um z.B. Szenen zu triggern oder wie in deinem Fall die Szene als autostart-Szenen zu definieren.

Gruß

Vielen Dank für die schnelle Antwort. In manchen Scripten sind dort auch Zeilen eingetragen. Wie hier z.B. (aus: “Lichtsteuerung Teil 2: Fibaro Tageszeiten Variable via LUA setzen”):

–[[
%% properties
222 value
352 value
%% globals
–]]

Welche Eintragungen werden dort gemacht? Sind “222” und “352” Modul-ID’s und das Script wird gestartet, wenn die “value” der beiden Module auslösen? Oder wie muss ich mir das vorstellen?

Welchen Bedeutung haben dann die “globals”?

Gruß
HGM

Genau, die Szene wird immer dann ausgelöst, wenn sich die value der device-IDs 222 & 352 ändert. Bei einem Wallplug zum Beispiel könnt da auch 10 power stehen, dann würde das Skript getriggert werden, wenn sich die Leistungsaufnahme des Plugs ändert.

Unter den gloabls kannst du globale Variablen eintragen, welche dann bei einer Änderung die Szene triggern.

Herlichen Dank. Du hast mir geholfen.

Wäre es auch möglich, eine Variable in dem Header Bereich zu verwenden ?
local startSource = fibaro:getSourceTrigger();
local melder = 75
local lampe = 73
local dauer = 120

–[[
%% properties
%% globals
melder value
–]]

Klar. Musst einfach unter globales den Variablen-Namen eintragen. Dann wird die Szene getriggert, wenn sich die Variable ändert.

Kurze Frage:
Gibt es einen Code im fibaro:debug um das Datum mit anzugeben?
Möchte dies gern als zusätzlichen Eventlog nutzen.

Danke & Gruß

Hi,

Schau mal hier:

http://www.fibarouk.co.uk/support/lua/library/os-time/

Gruß

Ich habe 2 Variablen “PresentState” und “TimeOfDay”.
Wie kann ich folgendes realisieren:
Wenn nicht “Nacht” dann Verbraucher einschalten und wenn “Nacht” oder “Away” dann Verbraucher ausschalten.
Meine Szene reagiert nicht auf “Away” weil es ja nicht “Nacht” ist.
Im Bild ist die Variable “PresentState” auf “Away” und trotzdem geht der Verbraucher nicht aus.

Unbenannt6.jpg

Du musst die erste if Abfrage für away setzen. (Sollte ja Tageszeitunabhängig greifen)
Dann elseif auf Nacht
und am Schluss else (deckt restliche Tageszeiten ab)

Die Bedingungen werden der Reihe nach abgearbeitet und sobald eine Bedingung erfüllt ist verlässt das Program die Else Abfrage

Ich habs jetzt so gemacht und es funktioniert! Danke!

--[[
%% properties
%% events
%% globals
TimeOfDay
PresentState
--]]

local scene = 40
local boiler = 5

if (fibaro:getGlobalValue("PresentState") == "Away" ) 
  or (fibaro:getGlobalValue("TimeOfDay") == "Night" ) 
  then fibaro:call(boiler, "turnOff"); fibaro:debug("Boiler aus") 
elseif (fibaro:getGlobalValue("PresentState") == "Home" ) 
    or (fibaro:getGlobalValue("TimeOfDay") ~= "Night" ) 
    then fibaro:call(boiler, "turnOn"); fibaro:debug("Boiler an") 
end;

Dazu auch noch eine allgemeine Frage: Wann wird ein Semikolon sinnvoll gesetzt bzw. welche Funktion hat das?

Ein Semikolon wird nur benötigt, wenn mehrere Befehle in einer Zeile angesetzt werden. Ansonsten brauchst du keine Setzen.

Gruß

Mit folgendem Code kann eine Variable auf eine Nachkommastelle gerundet werden:

local Alter = tonumber(string.format("%.1f", Variable))

Wobei Alter der gerundete Wert und Variable der Wert mit Nachkommastellen ist

Wenn es Ganzzahlig werden soll, dann statt der “1” ein “0” einsetzen.

Letztens suchte jemand den Code um Datum und Uhrzeit in den Debug zu bekommen:

Date = os.date("%d.%m.%Y %H:%M:%S", os.time())
fibaro:debug(Date)

Und weitere Kürzel:
http://forum.fibaro.com/index.php?/topic/21878-lua-date-time-month-code-shortcuts/

Was ich heute lange gesucht habe ist, eine Variable zu splitten bzw. den ersten Teil der Variable zu bekommen:

local Teil = string.sub(Lang, 1, 5);

wobei “Lang” die Ursprungs-Variable ist
“1” ist der Startwert, ab dem die Auslesung beginnt.
“5” es werden die ersten 5 Zeichen ausgelesen
“Teil” ist die neue Variable mit den ersten fünf Zeichen der Ursprungs-Variable