Technisat Promo

Startseite Foren Fibaro Forum (Z-Wave) Fibaro LUA Scripts für HC2 Modifikation Fenster auf, Heizung aus für 2 Fensterkontskte

Dieses Thema enthält 10 Antworten und 4 Teilnehmer. Es wurde zuletzt aktualisiert von  Stefan vor 4 Monate, 1 Woche.

Ansicht von 11 Beiträgen - 1 bis 11 (von insgesamt 11)
  • Autor
    Beiträge
  • #99230

    ChrisBu
    Teilnehmer

    Hallo zusammen,

    ich würde gerne nachfolgend verlinkts LUA Script für meine Fensterkontakte und Heizung verwenden.

    Fenster auf, Heizung aus.. M

    1. Bei mir im Haus habe ich jedoch einige Räume die zwei Fenster haben. Somit müsste ich das Script so modifizieren, dass zwei Fenstersensoren abgefragt werden. Leider bin ich damit total überfordert. Hat jemand eine Idee wie daa geht?

    2. Anstatt die eingestellte Temperatur des Thermostat bei geöffneten Fenster auf z. B. 5Grad abzusenken würde ich es lieber abschalten. Geht das? Es ist das Eurotronics Spirit 2 mit Flirs.

    Wie ihr merkt bin ich in Sachen LUA nicht wirklich fit.
    Daher verzeit folgende Anfängerfrage: Warum kann ich nicht ein total einfaches script nehmen a la „wenn Fensterkontakt ausgelöst dann schalte Thermostat ab. Wenn Fensterkontakt nicht mehr ausgelöst schalte wieder ein“? Ließe sich das nicht mit einer leichten „if“ Verknüpfung realisieren? Inwieweit fuscht das Heizprogramm dazwischen?

    Vielen Dank für eure Hilfe

    Christopher

    #99232

    ChrisBu
    Teilnehmer

    Ok ich antworte mir mal selber. Habe übersehen, dass im Script auch eine Lösung für 2 Kontakte beschrieben ist.

    Also ist Frage 2 und 3 noch offen 😏

    #104546

    Stefan
    Teilnehmer

    Hallo,

    kann mir jemand sagen wie der Code aussieht wenn ich 5 fenster in einem Raum habe?
    Einfach die Id hinzugfügen habe ich Probiert, ohne Erfolg.

    #104548

    mdietinger
    Teilnehmer

    Am einfachsten erscheint mir:

    durch:

    zu ersetzen.

    Dann noch alle Trigger im Kopfbereich definieren und es sollte gehen.
    Man kann zwar das ganze Script noch aufräumen und optimieren, aber wenn alle Fenster gleichwertig behandelt werden sollen würde diese Änderung den Zweck erfüllen.

    #104558

    Stefan
    Teilnehmer

    Hallo danke für deine Hilfe.
    Leider funktioniert das nicht.

    Hier kommt folgende Debug meldung:
    [DEBUG] 18:53:38: 2019-02-28 18:53:38.589218 [ fatal] Unknown exception: /opt/fibaro/scenes/20.lua:24: ‚]‘ expected near ‚,‘
    [DEBUG] 18:53:41: 2019-02-28 18:53:41.516898 [ fatal] Unknown exception: /opt/fibaro/scenes/20.lua:24: ‚]‘ expected near ‚,‘

    • Diese Antwort wurde geändert vor 4 Monate, 2 Wochen von  Stefan.
    • Diese Antwort wurde geändert vor 4 Monate, 2 Wochen von  Stefan.
    • Diese Antwort wurde geändert vor 4 Monate, 2 Wochen von  Stefan.
    #104563

    Stefan
    Teilnehmer

    –[[
    %% properties
    5 value
    14 value
    19 value
    99 value
    28 value
    60 value
    %% globals
    PresentState
    –]]

    ————— Absenk-Temperatur bei Fenster-Öffnung————-
    local schedule = {
    id = 1, –ID des Raumes / Zone im Heiz-Panel
    idleTemp = 5 –Temperatur, die bei Fenster-Öffnung gesetzt werden soll
    }
    ————— Absenk-Temperatur bei Abwesenheit —————-
    local scheduleAway = {
    id = 1, –ID des Raumes im Heiz-Panel
    idleTemp = 22 –Temperatur, die bei Abwesenheit gesetzt werden soll
    }
    if (trigger[‚type‘]==’property‘) then
    sensorID=trigger[‚deviceID‘]
    endif

    — AB HIER NICHTS MEHR ÄNDERN

    function Debug( color, message )
    fibaro:debug(string.format(‚<%s style=“color:%s;“>%s<!–%s–>‘, „span“, color, message, „span“));
    end

    local function getMethod(requestUrl, successCallback, errorCallback)
    local http = net.HTTPClient()
    http:request(requestUrl, {
    options = {
    method = ‚GET‘
    },
    success = successCallback,
    error = errorCallback
    })
    end

    local function putMethod(requestUrl, data, successCallback, errorCallback)
    local http = net.HTTPClient()
    http:request(requestUrl, {
    options = {
    method = ‚PUT‘,
    data = json.encode(data)
    },
    success = successCallback,
    error = errorCallback
    })
    end

    local function setVactionModeTrue(subjectToChange)
    local url = ‚http://127.0.0.1:11111/api/panels/heating/‘ .. subjectToChange.id
    getMethod(url, function(resp)
    if resp.status == 200 then
    print(‚Verbindung zum Heizpanel erfolgreich, Status ‚ .. resp.status)
    local panel = json.decode(resp.data)
    if panel.properties.vacationTemperature ~= nil then
    panel.properties.vacationTemperature = subjectToChange.idleTemp
    print(‚Setze Temperatur auf ‚ .. subjectToChange.idleTemp .. ‚ C‘)
    putMethod(url, panel, function(resp)
    if resp.status == 200 then
    print(‚Änderung wurde vorgenommen.‘)
    end
    end,
    function(err)
    print(‚Error ‚ .. err)
    end
    )
    else
    print(‚Panel nicht gefunden‘)
    end
    else
    print(‚Verbindung konnte nicht hergestellt werden, Status ‚ .. resp.status)
    end
    end,
    function(err)
    print(‚error ‚ .. err)
    end
    )
    end

    local function setVactionModeFalse(subjectToChange)
    local url = ‚http://127.0.0.1:11111/api/panels/heating/‘ .. subjectToChange.id
    getMethod(url, function(resp)
    if resp.status == 200 then
    print(‚Verbindung zum Heizpanel erfolgreich, Status ‚ .. resp.status)
    local panel = json.decode(resp.data)
    if panel.properties.vacationTemperature ~= nil then
    panel.properties.vacationTemperature = 0
    print(‚Setze Heizplan wieder fort.‘)
    putMethod(url, panel, function(resp)
    if resp.status == 200 then
    print(‚Änderung wurde vorgenommen.‘)
    end
    end,
    function(err)
    print(‚Error ‚ .. err)
    end
    )
    else
    print(‚Panel nicht gefunden‘)
    end
    else
    print(‚Verbindung konnte nicht hergestellt werden, Status ‚ .. resp.status)
    end
    end,
    function(err)
    print(‚error ‚ .. err)
    end
    )
    end

    local trigger = fibaro:getSourceTrigger();

    if (trigger[‚type‘]==’global‘) then
    if (fibaro:getGlobalValue(„PresentState“) == „Away“) then
    if (tonumber(fibaro:getValue(sensorID, ‚value‘)) == 0 and tonumber(fibaro:getValue(sensorID2, ‚value‘)) == 0) then
    setVactionModeTrue(scheduleAway)
    Debug(„blue“,’Abwesend, niemand Zuhause, Fahre Heizung runter.‘)
    else
    Debug(„white“,’Abwesend, niemand Zuhause, Fenster ist noch geöffnet. Es bleibt bei der festgelegten Temperatur.‘)
    end
    elseif (fibaro:getGlobalValue(„PresentState“) == „Home“) then
    if (tonumber(fibaro:getValue(sensorID, ‚value‘)) == 0 and tonumber(fibaro:getValue(sensorID2, ‚value‘)) == 0) then
    setVactionModeFalse(schedule)
    Debug(„red“, ‚Anwesend, jemand ist wieder Zuhause. Schalte Heizplan wieder ein.‘)
    else
    Debug(„white“,’Anwesend, jemand ist wieder Zuhause. Fenster ist noch geöffnet. Es bleibt bei der festgelegten Temperatur.‘)
    end
    end

    elseif (trigger[‚type‘]==’property‘) then
    if (tonumber(trigger[‚deviceID‘])==tonumber(sensorID) or tonumber(trigger[‚deviceID‘])==tonumber(sensorID2)) then
    local sensor = fibaro:getValue(sensorID, ‚value‘)
    local sensor2 = fibaro:getValue(sensorID2, ‚value‘)
    if (tonumber(sensor) == 1 or tonumber(sensor2) == 1) then
    Debug(„yellow“, ‚Fenster geöffnet.‘)
    counter = 0
    while ((tonumber(fibaro:getValue(sensorID, ‚value‘)) == 1 or tonumber(fibaro:getValue(sensorID2, ‚value‘)) == 1 ) and counter < 60) do
    counter = counter + 1
    fibaro:sleep(1*1000)
    end
    if (tonumber(fibaro:getValue(sensorID, ‚value‘)) == 1 or tonumber(fibaro:getValue(sensorID2, ‚value‘)) == 1 ) then
    Debug(„blue“,’Fenster ist immer noch auf, es wird gelüftet. Fahre Heizung runter.‘)
    setVactionModeTrue(schedule)
    else
    Debug(„yellow“, ‚Fenster wurde innerhalb einer Minute wieder geschlossen.‘)
    end
    else
    fibaro:debug(‚Fenster geschlossen.‘)
    Debug(„red“, ‚Fenster ist wieder zu. Schalte Heizplan wieder ein.‘)
    setVactionModeFalse(schedule)
    end
    end
    end`

    • Diese Antwort wurde geändert vor 4 Monate, 2 Wochen von  Stefan.
    #104627

    Stefan
    Teilnehmer
    • Diese Antwort wurde geändert vor 4 Monate, 2 Wochen von  Stefan.
    #104637

    jeep
    Teilnehmer

    Hi,

    habe mal versucht es so hinzubiegen wie ich denke dass es funktionieren müsste. Aber testen konnte ich es nicht. Nur dass beim Start keine Fehlermeldungen mehr erscheinen. Aber ich denke da ist noch viel Raum für Optimierungen.


    Grüße, Jeep
    • Diese Antwort wurde geändert vor 4 Monate, 2 Wochen von  jeep.
    #104640

    Stefan
    Teilnehmer

    Hallo Jeep,

    cool, reinkopiert und funktioniert…..hab es mit 5 Sensoren probiert.

    Vielen Dank!

    [DEBUG] 13:11:29: Fenster geöffnet.
    [DEBUG] 13:12:30: Fenster ist immer noch auf, es wird gelüftet. Fahre Heizung runter.
    [DEBUG] 13:12:30: Verbindung zum Heizpanel erfolgreich, Status 200
    [DEBUG] 13:12:30: Setze Temperatur auf 5 C
    [DEBUG] 13:12:30: Änderung wurde vorgenommen.
    [DEBUG] 13:12:44: Fenster geschlossen.
    [DEBUG] 13:12:44: Fenster ist wieder zu. Schalte Heizplan wieder ein.
    [DEBUG] 13:12:44: Verbindung zum Heizpanel erfolgreich, Status 200
    [DEBUG] 13:12:44: Setze Heizplan wieder fort.
    [DEBUG] 13:12:44: Änderung wurde vorgenommen.
    [DEBUG] 13:12:57: Fenster geöffnet.
    [DEBUG] 13:13:57: Fenster ist immer noch auf, es wird gelüftet. Fahre Heizung runter.
    [DEBUG] 13:13:57: Verbindung zum Heizpanel erfolgreich, Status 200
    [DEBUG] 13:13:57: Setze Temperatur auf 5 C
    [DEBUG] 13:13:58: Änderung wurde vorgenommen.
    [DEBUG] 13:14:33: Fenster geschlossen.
    [DEBUG] 13:14:33: Fenster ist wieder zu. Schalte Heizplan wieder ein.
    [DEBUG] 13:14:33: Verbindung zum Heizpanel erfolgreich, Status 200
    [DEBUG] 13:14:33: Setze Heizplan wieder fort.
    [DEBUG] 13:14:33: Änderung wurde vorgenommen.
    [DEBUG] 13:14:47: Fenster geöffnet.
    [DEBUG] 13:15:47: Fenster ist immer noch auf, es wird gelüftet. Fahre Heizung runter.
    [DEBUG] 13:15:47: Verbindung zum Heizpanel erfolgreich, Status 200
    [DEBUG] 13:15:47: Setze Temperatur auf 5 C
    [DEBUG] 13:15:47: Änderung wurde vorgenommen.
    [DEBUG] 13:16:31: Fenster geschlossen.
    [DEBUG] 13:16:31: Fenster ist wieder zu. Schalte Heizplan wieder ein.
    [DEBUG] 13:16:31: Verbindung zum Heizpanel erfolgreich, Status 200
    [DEBUG] 13:16:31: Setze Heizplan wieder fort.
    [DEBUG] 13:16:31: Änderung wurde vorgenommen.
    [DEBUG] 13:16:58: Fenster geöffnet.
    [DEBUG] 13:17:58: Fenster ist immer noch auf, es wird gelüftet. Fahre Heizung runter.
    [DEBUG] 13:17:58: Verbindung zum Heizpanel erfolgreich, Status 200
    [DEBUG] 13:17:58: Setze Temperatur auf 5 C
    [DEBUG] 13:17:58: Änderung wurde vorgenommen.
    [DEBUG] 13:18:06: Fenster geschlossen.
    [DEBUG] 13:18:06: Fenster ist wieder zu. Schalte Heizplan wieder ein.
    [DEBUG] 13:18:06: Verbindung zum Heizpanel erfolgreich, Status 200
    [DEBUG] 13:18:07: Setze Heizplan wieder fort.
    [DEBUG] 13:18:07: Änderung wurde vorgenommen.
    [DEBUG] 13:18:25: Fenster geöffnet.
    [DEBUG] 13:19:26: Fenster ist immer noch auf, es wird gelüftet. Fahre Heizung runter.
    [DEBUG] 13:19:26: Verbindung zum Heizpanel erfolgreich, Status 200
    [DEBUG] 13:19:26: Setze Temperatur auf 5 C
    [DEBUG] 13:19:26: Änderung wurde vorgenommen.
    [DEBUG] 13:19:41: Fenster geschlossen.
    [DEBUG] 13:19:41: Fenster ist wieder zu. Schalte Heizplan wieder ein.
    [DEBUG] 13:19:41: Verbindung zum Heizpanel erfolgreich, Status 200
    [DEBUG] 13:19:41: Setze Heizplan wieder fort.
    [DEBUG] 13:19:41: Änderung wurde vorgenommen.

    #104650

    jeep
    Teilnehmer

    OK, schön das es funktioniert, aber das war nur die halbe Miete. PresenState (Home und Away) wurde noch nicht richtig ausgewertet.
    Habe das jetzt auch angepasst. Wie schon von @mdietinger erwähnt, dies nur wenn alle Fenster gleichwertigt behandelt werden.


    Grüße, Jeep
    #104676

    Stefan
    Teilnehmer

    Vieln Dank Jeep funktioniert Top.

Ansicht von 11 Beiträgen - 1 bis 11 (von insgesamt 11)

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