Umsetzung von Befehlen in kaskadierten Skripten sinnvoll??

Alles klar,
Habe jetzt 90% meiner Abschaltungen über RaumVariablem mit deinem “myRoom” Skript realisiert.
Vorerst mal nur Licht und Plugs.
Nächste Woche beginne ich dann mit den Rollershuttern :wink:

Gruppen sind nur 2 Stück übriggeblieben, so bekomm ich etwas Übersicht, bei den Variablen.

Vielen Dank nochmal für deine Hilfe!!

Hab diese variablen Skritpte jetzt seit einigen Monaten laufen und seither funktioniert alles bestens!
Schalte “raumweise” die Geräte aus und es kommt nur zu minimalen Zeitverzögerungen von maximal 5-7 Sekunden, wenn ich ALLES abschalte!
Einzelne Räume sind merklich schneller!

Wirklich sehr gut gelöst, danke nochmal @mdietinger für die Inspiration und die Unterstützung beim Programmieren!!

Hallo @mdietinger,
Ich habe nach langer Zeit wieder mal einige Module zu Räumen hinzugefügt und dein Skript wieder mal etwas intensiver genutzt. Dabei ist mir aufgefallen, dass NEUE Variablen immer erst beim 2. Aufruf des Skriptes richtig gesetzt werden!
Beim ERSTEN Aufruf wird nur ein „{“ in die Variable geschrieben.

Da ich dein Skript (noch) nicht zu 100% verstanden habe, hat es etwas gedauert, bis ich diesen Fehler finden konnte!
Ich hab verstanden, dass der erste Teil der Schleife prüft, ob die Variable leer ist und wenn nicht da was reinschreibt!
Aber WAS GENAU macht der 2. Teil mit dem HTTP Request?
Ist das nur so komplex, weil er die Variablen anlegen muss und es dafür keinen simpleren Weg gibt?
Falls du Lust hast, freue ich mich über eine kurze Info! Wenn nicht, kann ich’s auch verstehen, der Thread ist ja schon etwas älter :wink:

function globalVar(var,val) 
  if (fibaro:getGlobal(var) ~= nil) then
    fibaro:debug('Benötigte Variable ' ..var.. ' erkannt.')
    fibaro:setGlobal(var,'')
    fibaro:setGlobal(var,val)
  else
    local http = net.HTTPClient()
    http:request("http://127.0.0.1:11111/api/globalVariables", {
    options = {
    method = 'POST',
    headers = {},
    data = '{"name":"'..var..'","value":"'..val..'"}',
    timeout = 10000
    },
  success = function(response)
    local result = response.data;
    if response.status == 200 or response.status == 201 then
      fibaro:debug('Status: ' ..response.status.. ' - in Variable '..var..' wurde '..val..' angelegt')
    else
      fibaro:debug('Error: ' ..response.status.. ' - Zugriff verweigert')
    end
  end,
  error = function(err)
    fibaro:debug('[ERROR] ' .. err)
    end
    })
  end
end 

Hallo

Ich versuche mich mal an einer Antwort.
Der Erste Teil der „If“ Schreibt „val“ in eine Globale-Variabel.
Vorher fragt das „if“ ab ob die da ist.
Der „else“ erzeugt eine Globale-Variabel dazu geht er auf sich selber „127.0.0.1:11111“ und baut da eine Variabel mit dem Namen „var“.
Also erst mal schauen ob was da ist wenn ja dan rein damit und wenn nix da ist, erst mal was bauen.
Da wird dann nix reingeschrieben dass passiert erst im 2 Anlauf wenn die denn da ist.
Scheint eine Alte Geschichte zu sein vom HC2 vermute ich.
Gruss Frank

PS ich suche einen Guten QA um meine Stripes zu steuern hast du da was ich habe keinen Bock einen zu bauen und das Vorhandene gefällt mir nicht.
Weiterhin verstehe ich auch die Vorlage von QA Color noch nicht darum währe ein Beispiel nicht schlecht.

Zusatz:
Jetzt habe ich mal den Kompletten Bereich gelesen.
Das kommt mir sehr bekannt vor das macht auch der HC3.
Oben hat @mdietinger die Funktion eigentlich beschrieben.
Ich lag also Richtig mit meiner Erklärung.
Das mit dem erhöhten Verkehr im Mash macht mir auch Probleme weiterhin habe ich Große Probleme mit der Beta und dem Speichermanagement.
Ich habe schon fast alles Umgebaut um weniger Programmdurchläufe zu erzeugen.
Ich hatte gehofft das die Beta das Problem beheben würde aber sie hat das nur NOCH SCHLIMMER gemacht.

Hallo Frank,

Danke für die Erklärung, das bestätigt auch, warum beim ersten Mal „nur“ die Variablen erzeugt werden! Ich wußte nicht, dass das Anlegen der Variablen so komplex ist!
Das Skript um welches es hier geht ist grundsätzlich genial, es erzeugt Tabellen mit verschiedenen Funktionsgruppen in unterschiedlichen Räumen und schreibt diese in Variablen. Damit kann man sehr schnell und zuverlässig viele Geräte schalten!
Ich verwende es beim Verlassen des Hauses um ALLES abzuschalten und hab jetzt aus Langeweile versucht es etwas einfacher und übersichtlicher zu machen. Wenn das Anlegen von Variablen nur über die HTTP Requests klappt, dann macht es nicht viel Sinn da rumzuprogrammieren, denn der Rest ist meiner Meinung nach eh perfekt gelöst :wink:
Das tolle daran ist, dass es damit KEINE Verzögerungen im Mash Verkehr gibt, deshalb gefällt es mir so gut!!

Du hast recht, ich habe mich nun wieder meiner HC2 gewidmet, weil einige Komfort Funktionen in der HC3 noch nicht so klappen, wie ich das will! Somit ist die Motivation in der HC3 was zu machen eher eingeschlafen …
Außerdem läuft meine HC2 gerade so schön stabil, dass ich den Komplettumstieg wieder aufgeschoben hab.

Zu den Stripes, kann ich leider nichts beitragen, damit habe ich mich in der HC3 noch gar nicht beschäftigt!
ich habe nur eine LED Kette vom Hofer (Aldi) mit der HC2 im Einsatz, wo ich einfach einen RGBW Controller drangelötet habe. Verwende ihn eher selten und dann nur mit den vorgegebenen Funktionen in der Fibaro App am Handy!

1 „Gefällt mir“

Hallo pblacky,

Berges01 hat das richtig erkannt.
Eigentlich wird die Variable beim erstellen befüllt, aber da dürfte etwas nicht richtig funktionieren.
Könnte das einmal ansehen wenn ich Zeit habe, aber der einfachste Workaround ist dass du die Variable nach Erstellung nochmals befüllst.
z.b. wenn der response code abgefragt wird
if response.status == 200 or response.status == 201 then
fibaro:setGlobal(var,’’)
fibaro:setGlobal(var,val)
fibaro:debug(‚Status: ’ …response.status… ’ - in Variable ‚…var…‘ wurde ‚…val…‘ angelegt‘)
else

Hi @mdietinger,
Danke für den Tipp, habs eingebaut und funktioniert!
Ich weiß nicht wer dieses Skript außer uns noch verwendet, für mich passt es völlig mit diesem Workaround :wink:

Würde dieses Skript eigentlich auch auf der HC3 Sinn machen, oder gibt es dort neue Funktionen, die es obsolet machen?
Bin nämlich schon am rumprobieren für den Umstieg auf meine HC3, irgendwann mal …

Habe mich mit HC3 noch nicht auseinandergesetzt.
Wahrscheinlich bedarf es gröberer Überarbeitung aller Skripte.
Warte noch zu bis endlich Zigbee nativ unterstützt wird.
Davor sehe ich wenig Sinn zu wechseln da die HC2 stabil ist und alles macht was ich brauche.