LUA Hilfe/Befehle

Hallo
ich habe mal wieder eine frage. Wie kann mann die zahlen aus einem text herausfischen ?
In meinem beispiel bekomme ich nur die erste raus. Wie könnte ich die Formel ergänzen?

Bitte um einen tipp. Danke


text = "ich habe 2 dan 3 hhhhd ich habe 23"
    a, b, c = string.match(text, "(%d+")) 
print(a..b..c)

a, b, c = string.match(text, "(%d+ (%d+) (%d+)")) -- das geht auch nicht.

Habe es gelöst. Trotzdem kann mann ein par beispiele geben???


text = "ich habe 2 dan 23 hhhhd ich habe 40"
    a, b, c,d,f = string.match(text, "(%d+).-(%d+).-(%d.)") 

print(a)
print(b)
print(c)

Hallo, gibt es einen LUA Befehl, der einen Schalter für eine vorgegeben Zeit ausgeschaltet lässt, so dass man ihn auch nicht manuell am Schalter einschalten kann?

Hi,
Es gibt hier ein Script mit dem die Parameter eines RollerShutters angepasst wurden, so dass die Tasten vorrübergehend gesperrt waren.
Das könnte dir helfen.

Viele Grüße Hoggle

Hi Hoogle,
Danke für die Info, ich kann das Script leider nicht finden. ist es in der Datenbank?
Zweite Frage: Kann ich mit einem Roller shutter auch licht steuern? Es geht hier um ca 2,5 KW.
Ich schildere mal mein Vorhaben, vielleicht habt ihr ja eine bessere Lösung als den Schalter zu blockieren.
Meine Kunden schalten morgens um 7:00 das Licht ein, um ca 9:00 ist es hell genug, und das licht sollte (bei gesundem Menschenverstand) wieder ausgeschltet werden. Leider gibt es den heutzutage nur noch selten… Das Licht brennt dann meist bis 13:00 durch bis es doch mal irgend wer aus macht. Spätestens dann ich selber. Daher soll zwischen Sonnenaufgang und Sonnenuntergang das licht gar nicht erst eingeschaltet werden können.
Wer eine Idee hat, immer her damit.

Prüfe doch einfach per Script, ob das Licht im besagten Zeitraum an ist, wenn ja, mach es per Script wieder aus.

Viele Grüße Hoggle

Ja dieses Script habe ich mir schon geschrieben. Das funktioniert auch. Ist nur blöd, weil immer alle 40 Lampen an gehen und nach 1 Minute (wenn das Script prüft) wieder aus gehen.

Warum prüfst du das nicht sofort?
Trigger ist die Lampe, nicht eine Prüfung alle x Minuten

Ich weiß nicht genau was du meinst. Die Lampen gehen ja trotzdem kurz an.



--[[
%% properties
16 value   --das sind meine 40 Lampen--
%% events
%% globals
--]]

local trigger = fibaro:getSourceTrigger()
local verbrauch = tonumber(fibaro:getValue(16,"power"));
local switches = { 16}; 

if (fibaro:countScenes() > 1)
  then
 	fibaro:abort();
  fibaro:debug('abort');
end

    
----Verbrauchsmessung--------
    if(verbrauch > 0) 
  
       then fibaro:debug('Licht ist eingeschaltet..');
    		fibaro:debug('Aktueller Verbrauch: '.. verbrauch ..' Watt.');
  		
----------------------------------------------------------------------
  			for i = 1,#switches do
			fibaro:call(switches[i],"turnOff")
			fibaro:debug("Schalter ID: "..switches[i]   .." ausgeschaltet")
    end
       else fibaro:debug('Licht ist ausgeschaltet');
  
  end

Hi,
Nimm mal in Zeile 5 alles hinter value weg.

Ja, kurz an und gleich wieder aus.
Hast du dir ansonsten mal die Parameter des Modules genauer angesehen, ob es hier ein ganz abschalten über Taster gibt?

Viele Grüße Hoggle

Hallo,
ich ich setzte die perfekte LUA Licht Szene in meinem Flurt ein funktioniert einwandfrei.
Jetzt habe ich eine Indirekte Beleuchtung für den Spiegel im Bad mit einem dimmer2 und einem Fibaro Motion Sensor im Bad umsetzen wollen.
Wenn ich die IDs jetzt ersetze mit denen für Dimmer und Motionsensor im Bad, startet die Szene aber das Licht geht nicht an. Verwendie ich die Schaltbare Steckdose im Flur geht diese an. Wenn ich eine grafische Szene erstellt geht das Licht auch an.
HIer mal der Debug auszug. Vielleicht kann mir jemand helfen.

Spiegel.png

Hi,

ohne das Script kann man jetzt raten: alle IDs angepasst/ausgetauscht? Trigger angepasst?..
Parameter der betroffenen MS geprüft?

VG Hoggle

Hallo Hoggle,
ich habe hier die Lösung in einem anderen Forum gefunden, ich musste einfach die DimmerdeviceTyp um den Dimmer2 erweitern.
Bei mir musste es dann so aus sehen. DimmerDeviceType = { “com.fibaro.multilevelSwitch”, “com.fibaro.FGD212” }
Ich bin hier nur noch nicht dahinter gestiegen warum man hier noch mal die Dimmer aufführen muss wenn es in der grafischen Szene automatisch geht.
Auf jeden Fall vielen DANK für die schnelle Antwort.

Gruß Micha

Verständnisfrage für Anfänger - wenn ich z.B. von hier einen Feiertags - Skript nehme - kopiere und ändere da das Bundesland, dann füge ich den in ein LUA Feld ein - reicht das dann, das dieser genutzt wird, oder was muss ich noch tun, damit das System weiß, wann z.B. Ostern ist ? Wie verhalten sich meine Programmierungen - denken die dann, es ist Wochenende oder Sonntag ?

Wo finde ich für solche dummen Anfänger Fragen - Hilfe ?

Hi,

Du solltest der Anleitung/Infos/Blog zu dem jeweiligen Script folgen. Bzw dort Deine konkrete Frage stellen.
Ggf. musst Du noch globale Variabeln anlegen.
Dann musst Du Deinen jeweiliegn Scripten noch mitgeben (programmieren) wie es sich am WE oder einem Feiertag verhalten sollen. Oder eben nicht.
Das System weiß ja nciht, wie es sich wann verhalten soll.

VG Hoggle

Welche Rolle spielt eigentlich der Abstand zum linken Zeilenanfang?
also wenn ich jetzt z.B. folgendes schreibe:

if (
 ( tonumber(fibaro:getValue(110, "value")) > 0 )
and
 ( tonumber(fibaro:getValue(163, "value")) > 0 and tonumber(fibaro:getValue(163, "armed")) > 0))
then
  fibaro:setGlobal("sms_text", "Nachtschaltung ausgelöst!")
	fibaro:call(4, "sendPush", "Garagentor wurde geöffnet!") 
          fibaro:call(181, "turnOn");
    setTimeout(function()
		fibaro:call(181, "turnOff");
	end, 90000) 
  fibaro:startScene(120);
fibaro:sleep(3000);
fibaro:setGlobal("sms_text", "kein Wert")
end

if (
 ( tonumber(fibaro:getValue(110, "value")) > 0 )
and
 ( tonumber(fibaro:getValue(364, "value")) > 0 and tonumber(fibaro:getValue(364, "armed")) > 0))
then
  fibaro:setGlobal("sms_text", "Nachtschaltung ausgelöst!")
	fibaro:call(4, "sendPush", "Bewegungsmelder Garage angesprochen!") 
          fibaro:call(181, "turnOn");
    setTimeout(function()
		fibaro:call(181, "turnOff");
	end, 90000) 
  fibaro:startScene(120);
fibaro:sleep(3000);
fibaro:setGlobal("sms_text", "kein Wert")
end

fibaro:sleep(600*1000);

Wäre das so korrekt? Oder ist der Abstand zum Zeilenanfang egal? Die Aktionen werden nämlich erst nach 10 Minuten beendet, was darauf schließen lässt, dass die letzte Zeile “fibaro:sleep…” gleichzeitig mit den anderen Aktionen und nicht erst zum Ende ausgeführt wird.

Liege ich da richtig und wenn ja, wie muss es richtig geschrieben werden?

Danke! :slight_smile:

Keiner was dazu?

Hi,

das Zeileneinrücken ist der Ordnung geschuldet; ansonsten egal.

Der setTimeOut sorgt auch für Pausen.