YESLY Smart Home

Startseite Foren Fibaro Forum (Z-Wave) Fibaro LUA Scripts für HC2 Und noch ein Rollladen Script

Dieses Thema enthält 104 Antworten und 17 Teilnehmer. Es wurde zuletzt aktualisiert von dirkg173 dirkg173 vor 1 Woche.

Ansicht von 15 Beiträgen - 76 bis 90 (von insgesamt 105)
  • Autor
    Beiträge
  • #106762

    jeep
    Teilnehmer

    Hi @dirkg173,
    kein Problem. Ich kann zwar programmieren kann aber verdammt schlecht was erklären. Das ist auch die Meinung meiner Frau und der muss ich einfach glauben.
    Also ich probiers nochmal – die Ganze Logik der Berechnungen steckt ja in der Funktion calcTime() ab Zeile 103 die mit den zwei Parametern (sunsetHour und tonumber(randminutes) + offSetE() oder offSetM() ) aufgerufen wird.
    Darüber ab Zeile 97 ist noch die Funktion ‚randomValue‘ die die Zufallsminuten generiert.
    Im ersten Teil von calcTime() wird der String von sunsetHour oder sunriseHour in Zahlen zerlegt und die Berechnungen durchgeführt. Da wird auch das laterClose oder laterOpen errechnet. Im Zweiten Teil von calcTime() wird dann zum Schluss alles wieder nach String (HH:MM) umgewandelt.
    Die letzte Zeile in der Funktion calcTime() lautet: return newtimeString, laterClose ;. Also die Funktion gibt diese 2 Werte wieder an den Aufruf der Funktion zurück und schreibt sie in ’newsunriseHour‘ und ‚laterOpen‘. Die Namen der Übergebenen Variablen und der Empfangenden müssen nicht identisch sein. Sie werden der Reihe nach abgelegt.

    Vielleicht mal ein einfaches Beispiel :

    Wenn Du diesen Code ausführst wird es bestimmt klarer.
    Bis zum nächsten mal. ;-)


    Grüße, Jeep
    #106775
    dirkg173
    dirkg173
    Teilnehmer

    Hi @jeep,

    nachdem ich jetzt anhand Deines Beispiels ein bisschen mit den Variablen, Zahlen und Namen rumgespielt habe, verstehe ich es jetzt. Vielen Dank dafür!!!

    Für mich, der noch nie was mit Programmierung zutun hatte und auch nicht die Bedeutung aller Lua-Befehle kennt, ist es dennoch nicht ganz einfach durch so ein komplexes Script durchzublicken. Deshalb bin ich leider hin und wieder auf so hilfsbereite User wie Dich angewiesen. Mit einfachen Blockszenen kommt man ja leider nicht weit.

    Vielen Dank nochmals und ein schönes langes Wochenende!

    Gruß, Dirk

    #106779

    Canuck54
    Teilnehmer

    Hi @jeep!

    Danke für das super Skript.
    Zwei Dinge versteh ich allerdings nicht:

    1. Wozu benötige ich den Offssets für Sonnenauf-/untergang?
    Fibaro liefert doch Minuten genau Zeitpunkt für jede Location?
    Die passen für mich ziemlich gut.

    2. Wozu der random Faktor in der Zeitberechung?
    Warum sollt ich wollen, dass die Rollläden zu (relativ gesehen/abgesehen von Sunset verschiebungen, Feiertag etc.) verschiedenen Zeiten aufgehen!?

    lg

    #106859

    jeep
    Teilnehmer

    Hi @canuck54,

    prima wenn es für Dich so passt. Du kannst natürlich sunriseHour und sunsetHour in den Bedingungen verwenden.
    Denn random Faktor habe ich mit eingebaut um eine Anwesenheit zu simulieren, das war mein Ziel als ich vor ca 2 1/2 Jahren das Script angefangen habe. (Wir waren schon mal 2 Wochen weg ohne dass unsere Nachbarn das bemerkt haben.)
    Die Offsets für Sonnenaufgang und -untergang habe ich deshalb gewählt weil wir einfach Langschläfer sind und es uns stört wenn zu dieser Zeit (aktueller sunrise ca. 4:45) die Rollläden im Schlafzimmer oder Wohnzimmer aufgehen.
    Abends lasse ich sie ein wenig früher runter aber nicht ganz, so das der andere Nachbar nicht in unser großes Panoramafenster im Wohnzimmer reinglotzen kann.
    Aber Du kannst auch den offset ignorieren. Am besten für alle Monate 0 (null) eintragen. Dann musst Du im Script nicht so viel ändern.
    Viel Spaß mit dem Script.


    Grüße, Jeep
    #106990

    Cruncher
    Teilnehmer

    @jeep
    Hallo,
    ich habe auch noch mal eine Frage, und zwar verstehe ich das folgende nicht so ganz:
    In Zeile 33-36 werden doch die Zeiten angegeben, wann die Rolladen schließen sollen, in meinem Beispiel sollen sie spätestens um 21 Uhr schließen, richtig ?
    local notbeforeM = ’06:00′ — nicht vorher Morgens
    local notafterM = ’08:00′ — nicht nach 08:10
    local notbeforeE = ’16:30′ —
    local notafterE = ’21:00′ —

    Die Rolladen schließen aber erst um 22:33, wie es auch im Debug Fenster ausgegeben wird.
    Warum ist das so, und wie kann ich das so einstellen, dass die Rolladen tatsächlich spätestens um 21 Uhr schließen ?

    Gruß, Cruncher

    Dateianhänge:
    You must be logged in to view attached files.
    #107007

    jeep
    Teilnehmer

    Hi @cruncher,

    kein Problem, die Variablen (Zeile 33-36) muss man dann in den Bedingungen abfragen. Hier mal ein Beispiel:

    In diesem Fall würden die Rollläden dann schon um 21:00 schließen. Später im Herbst würden die Rollläden schon vor 21:00 schließen wenn laterClose dann kleiner als 21:00 Uhr wird.
    Wenn Du noch weitere Fragen hast, immer her damit.


    Grüße, Jeep
    #107031

    Cruncher
    Teilnehmer

    Hallo Jeep,

    vielen Dank, ich werde das morgen mal ausprobieren..
    Eine Sache ist mir noch aufgefallen.. der Sonnenschutz funktioniert soweit ganz gut. Der Rollladen im Schlafzimmer fährt komplett runter, die Lamellen bleiben offen – perfekt.
    Die beiden definierten im Wohnzimmer fahren nur zur hälfte runter.. irgendeine Idee ?

    Gruß, Cruncher

    #107035
    dirkg173
    dirkg173
    Teilnehmer

    Hi @jeep,

    es wird heißer und heißer und Dein Script nimmt an Wichtigkeit zu… :)
    Heute Morgen hatte ich das „Problem“, dass der Sonnenschutz vor „goodmorningSun“ (also dem vollständigen Öffnen der Rollos) bereits gegriffen hat. Das hängt natürlich mit den eingestellten Werten Temperatur und Lux für den Sonnenschutz, der Positionierung der Sensoren, sowie der Zeiten zusammen.
    Eine Sperre, dass die Rollläden nicht mehr hoch fahren, wenn der Sonnenschutz bereits aktiviert ist, habe ich bereits einprogrammiert und scheint auch zu funktionieren.
    Mein Problem was ich aber vermutlich haben werde ist, dass die Positionen der Rollläden vor Aktivierung des Sonnenschutzes gespeichert und nach Deaktivierung des Sonnenschutzes ja wieder in diese Postion fahren werden. Das würde in meinem Fall aber bedeuten, dass die Rollläden dann von sunProPos = 15 in die Position posClose = 9 fahren, was natürlich nicht gewünscht ist.
    Ich könnte die Speicherung der Positionen entfernen und dafür die Rollläden wieder vollständig oder auf eine bestimmte Position wieder hochfahren lassen, aber eigentlich möchte ich Positionsspeicherung nicht vollständig aufgeben.

    Wäre es möglich folgende Bedingung im Sonnenschutz einzubauen? Wenn ja wie?
    Wenn die Position der Rollläden vor Aktivierung des Sonnenschutzes <= sunProPos (in meinem Fall <= 15) dann fahre vollständig hoch, ansonsten fahre die Rollläden auf Speicherposition.
    Das müsste vermutlich hier eingebaut werden:

    Eigentlich sollte das theoretisch nicht allzu schwer sein, allerdings bin ich mit der Interpretation der Zeilen 5-7 etwas überfordert und das bremst mich, da einfach mal was dran auszuprobieren:
    if tdev ~= nil then
    wenn Werte (IDs der RollerShutter für den Sonnenschutz (rollerIDsS[r]) sowie deren Status (rollerStat)) in der Table tdev hinterlegt sind, dann
    for r=1, #rollerIDsS do
    diese Zeile verstehe ich nicht
    fibaro:call(tdev[r][1],’setValue‘, tdev[r][2]
    die in tdev hinterlegten Werte abrufen und setzen, aber warum und woher jetzt tdev[r][1] und tdev[r][2]?

    Mein größtes Verständnisproblem sind wohl wieder die Variablen…

    Ich würde mich freuen, wenn Du eventuell etwas Licht ins Dunkle bringen könntest.
    Aber fühle Dich bitte nicht verpflichtet, ich habe Dich schon genug genervt. Und zur Not bleiben die Rollläden nach Deaktivierung des Sonnenschutzes halt unten oder ich entferne die Positions-Speicherung.

    Gruß, Dirk

    #107051

    jeep
    Teilnehmer

    Hallo @dirkg173,

    wenn der Sonnenschutz schon so früh greift, ist die Postion des Temperatursensor ziemlich falsch oder der Wert von „sunProTempOn“ zu niedrig. Ich würde an Deiner Stelle erst dort ansetzen. Aber lass uns mal schauen ob ich Dich auch richtig verstanden habe.
    Da wäre aber noch eine Option, keine Ahnung ob das bei Dir dann relevant ist und zwar statt:

    erst später z.B. ab 09:00 Uhr auf Sonnenschutz prüfen, also:

    Ist nur so eine Idee. Aber natürlich können wir auch die Position vor der Aktivierung berücksichtigen. Die wird ja beim aktivieren gespeichert.

    Zur Erklärung der Zeilen: Die ‚if‘ Abfrage hast Du ja richtig gedeutet, die ‚for‘ Schleife zählt die Variable ‚r‘ die mit =1 initialisiert wird, bis zur #(Anzahl) der Rollläden in ‚rollersIDsS‘ Array. Dabei wird bei jedem Durchlauf die ‚fibaro:call‘ Anweisung ausgeführt und die Rollläden auf den Wert in der Tabelle ‚tdev‘ gesetzt. tdev ist eine zweidimensionale Tabelle hat also für jede Zeile zwei Spalten, [r][1] bedeutet einfach Zeile ‚r‘, Feld 1, da steht die ID des Rollladen.
    [r][2] bedeutet das der in Feld 2 gespeicherte Wert Anwendung findet. Aufgelöst musst Du Dir das so vorstellen:

    Feld1………….Feld2
    ID…………….Wert
    Rollladen1…….75
    Rollladen2…….60
    Rollladen3…….80

    Man könnten jetzt in Deinem Fall einen Rollladen als Referenz nehmen und den Wert abfragen. Z.B. ‚wert = fibaro:getValue(rollerIDsS[r], ‚value‘)‘, wenn der noch nicht in einer Tabelle steht. Will man den Wert aus der Tabelle abfragen muss man dass mit ‚wert = json.encode(tdev[r][2]) machen.
    Aber ehrlich gesagt ich würde lieber mit den Positionen von Temperatur- und Helligkeitssensor experimentieren, dann ist es logischer und folgt dem natürlichen Rhythmus, erst hell dann warm.


    Grüße, Jeep
    #107055
    dirkg173
    dirkg173
    Teilnehmer

    Hi @jeep,

    vielen Dank für Deine Antwort und den Tipp, den Sonnenschutz zeitlich begrenzt zu starten. Deine Erklärung zu den drei Zeilen habe ich auch erstmal so weit verstanden. Das müsste ich allerdings auch mal praktisch umsetzen, damit die Logik dahinter auch wirklich hängenbleibt.

    Bzgl. des Temp.-sensors (Netatmo Outdoor): Der ist in einer Schutzhülle (TFA Dostmann) an der Nordseite des Hauses ziemlich optimal positioniert. Ohne direkter Sonneneinstrahlung (evtl. mal kurz ziemlich spät am Abend bei untergehender Sonne), ca. 10 cm von der Hauswand entfernt, vom leicht überstehendem Hausdach geschützt aber dennoch sehr gut durchlüftet.
    Die vor Überhitzung zu schützende südliche Hausseite bekommt schon sehr früh viel Sonne ab. Um schon rel. früh der Sonneneinstrahlung entgegenzuwirken, habe ich sunProTempOn bewusst auf 20 °C eingestellt. Da gestern bereits schon sehr früh die Temperatur erreicht wurde, wurde der Sonnenschutz schon vor dem vollständigen Öffnen der Rollos aktiviert. Jetzt muss ich dazu sagen, dass aufgrund meiner Einstellungen (notbeforeM und offSetM)die Rollläden aktuell erst zwischen 07:45 Uhr und ca. 08:25 Uhr geöffnet werden. Somit hat sich das ganze überschnitten.

    Sicherlich kann ich auch noch was mit den Temperaturen spielen, aber ich werde erstmal Deinen Tipp mit der Sonnenschutzprüfung ab einer definierten Zeit umsetzen, der gefällt mir sehr gut!

    Vielen Dank nochmals und viele Grüße,
    Dirk

    #107057

    jeep
    Teilnehmer

    Hi @dirkg173

    alles klar, prima dass es mit dem Tipp den Sonnenschutz später zu Starten zu einer guten Lösung führt.


    Grüße, Jeep
    #107059

    jeep
    Teilnehmer

    Hallo zusammen,

    meine Frau hat so ziemlich alle meine Bugs aufgedeckt.😀 Heute erzählt sie mir dass sie gestern mit dem Sonnenschutz Probleme hatte. Auf meine Frage was los war, meinte sie mir das es Ihr am Nachmittag auf einmal zu dunkel war und sie einen Rollladen ganz öffnete.
    Als dann ca. 1 Std. später der Sonnenschutz zurückgenommen wurde, fuhr genau dieser Rollladen wieder in eine 50% Position, (das war die gespeicherte Postion vor der Aktivierung) was ihr ja gar nicht passte.
    Ich habe jetzt den Sonnenschutz ein wenig überarbeitet, so dass Rollläden die man während aktiven Sonnenschutz bewegt, beim zurücknehmen des Sonnenschutz nicht mehr beachtet werden.
    Um den Sonnenschutz ein wenig intelligenter zu machen hat eine kurze ‚if‘ Abfrage gereicht.
    if ( tonumber(fibaro:getValue(rollerIDsS[r], 'value')) == sunProPos )

    Hier ist die ganze Funktion die man einfach gegen die alte austauschen muss.


    Grüße, Jeep
    #107061
    dirkg173
    dirkg173
    Teilnehmer

    Hi @jeep,

    bin ich also nicht der einzige, der „Probleme“ mit dem Sonnenschutz hat, das gefällt mir… ;)
    Vielen Dank für die Erweiterung!

    Gruß, Dirk

    #107123

    Tucher
    Teilnehmer

    Hallo,

    besteht die Möglichkeit das man den Sonnenschutz für die Ost und West Seite noch mit einbaut?

    Gruß
    Tucher

    #107132

    jeep
    Teilnehmer

    @tucher,
    theoretisch schon. Dazu müsste man zusätzliche Sensoren (Temperatur und Helligkeit) für Ost und West haben.
    Du kannst aber auch Deine Rollladen IDs in der Variable ‚rollerIDsS‘ setzen und die Werte für sunProTempOn und sunProLuxOn anpassen. Ich schließe meine Südseite zusammen mit zwei Rolläden auf der Ostseite. Temperatursensor ist auf der Ostseite und LUXsensor ist SüdOstWest montiert. Muss dazu sagen mein LUXSensor misst von 0 bis 120.000 LUX.


    Grüße, Jeep
Ansicht von 15 Beiträgen - 76 bis 90 (von insgesamt 105)

Du musst angemeldet sein, um auf dieses Thema antworten zu können.