Fenster oder Tür auf dann Heizung runterstellen

Hier eine Szene die bei öffnen des Fensers oder der Tür den Heizplan auf Manuell stellen und beim schließen den Heizplan wieder auf Automatik stellen

--Declaration

  conditions = { {
      isTrigger = true,
      operator = "match",
      property = "cron",
      type = "date",
      value = { "*", "*", "*", "*", "*", "*" }
    } },
  operator = "any"
}

--Aktion
--[[
Globale Variablen

Für die einzelnen Heizkreise

Bezeichnung                     Global-Variable        ID des Heizkreises
------------------------------------------------------------------
Dachgeschoss WII Zimmer         Heiz_DG_WII                 2
Dachgeschoss Noras Zimmer       Heiz_DG_Noras               3
Dachgeschoss Sonjas Zimmer      Heiz_DG_Sonjas              4
Dachgeschoss Badezimmer         Heiz_DG_Bad                 8
Erdgeschoss Flur                Heiz_EG_Flur                5
Erdgeschoss Toilette            Heiz_EG_Toil                6
Erdgeschoss Computerraum        Heiz_EG_Comp                7
Erdgeschoss Küche               Heiz_EG_Kueche              10
Erdgeschoss Esszimmer           Heiz_EG_Essz                11
Erdgeschoss Wohnzimmer          Heiz_EG_Wohnz               12
Kellergeschoss Wohnzimmer       Heiz_KG_Wohnz               13
Kellergeschoss Kueche           Heiz_KG_Kueche              14
Kellergeschoss Eingang          Heiz_KG_Eing                15
--]]



---------------------------------------------------------------------------------------
--------------- Funcition Tür zu, Fenster zu sonst Heizung runterregeln ---------------
-- Solte es eine Tür oder ein Fenster nicht geben, so das Feld mit 0 oder "" besetzen.
-- Beispiel hzone_tuer_fenster(Z_1,168,210,"",12)
-- Z_1 = Globale Zählvariabel der jeweiligen Heizzohne (String)
-- 168 = ID des Türkontaktes
-- 210 = ID des Fenster1 Kontaktes
-- "" = Platzhalter für 2. Fenster
-- 12 = ID der Heizzohne
---------------------------------------------------------------------------------------
function hzone_tuer_fenster(v_global,tuer,fenster1,fenster2,zone_id)
    local z_fenster1 = false
    local z_fenster2 = false
    local z_tuer = false
    -- Zählvariabel Global nach Local holen
    local v_local = tonumber(fibaro.getGlobalVariable(v_global))
    --Gibt es ein Fenster1 oder nicht
    if fenster1 == 0 or fenster1 == "" then
        z_fenster1 = false
    else
        z_fenster1 = fibaro.getValue(tonumber(fenster1), "value")
    end
     --Gibt es ein Fenster2 oder nicht
    if fenster2 == 0 or fenster2 == "" then
        z_fenster2 = false
    else
        z_fenster2 = fibaro.getValue(tonumber(fenster2), "value")
    end
    --Gibt es eine Tür oder nicht
    if tuer == 0 or tuer == "" then
        z_tuer = false
    else
        z_tuer = fibaro.getValue(tonumber(tuer), "value")
    end
    --print(" zustand in Reihenfolge ",v_local," ",z_tuer, " ", z_fenster1, " ", z_fenster2)
    if v_local > 0 or (z_tuer == true) or (z_fenster1 == true) or (z_fenster2 == true) then
        --print("Los gehts Tür, Fenster1 oder Fenster2 ist auf")
        v_local = v_local + 1
        --print("Öffnungszeit in Minuten = ",v_local)  
    end
    if v_local == 6 then -- 5min
        --print("Heizplan ", zone_id ," auf 8°C")
        fibaro.homeCenter.climate.setClimateZoneToManualMode(tonumber(zone_id), 'Heat',"Hold", 8, nil)
    end
    if (z_tuer == false) and (z_fenster1 == false) and (z_fenster2 == false) and (v_local ~= 0) then
        --print("Heizplan ",zone_id ," wieder aktivieren")
        fibaro.homeCenter.climate.setClimateZoneToScheduleMode(tonumber(zone_id))
        v_local = 0
    end
    --Zählvariabel Local auf Global zurückschreiben
    fibaro.setGlobalVariable(v_global,tostring(v_local))
end --function


------------------------------------------------------------------------------------
---------------------------------- Hauptprogramm -----------------------------------
------------------------------------------------------------------------------------

--print("Start Heiz-F.oT.Steuerung")

-----------------------------------------------------------------------------
hzone_tuer_fenster("Heiz_DG_WII",143,148,0,2) --Dachgeschoss WII-Zimmer
hzone_tuer_fenster("Heiz_DG_Noras",0,158,0,3) --Dachgeschoss Noras-Zimmer
hzone_tuer_fenster("Heiz_DG_Sonjas",474,134,0,4) --Dachgeschoss Sonjas-Zimmer
hzone_tuer_fenster("Heiz_DG_Bad",110,113,0,8) --Dachgeschoss Badezimmer
hzone_tuer_fenster("Heiz_EG_Flur",544,0,0,5) --Erdgeschoss Flur zur Garage
hzone_tuer_fenster("Heiz_EG_Toil",0,65,0,6) --Erdgeschoss Toilette
hzone_tuer_fenster("Heiz_EG_Comp",0,539,0,7) --Erdgeschoss Computerraum
hzone_tuer_fenster("Heiz_EG_Kueche",0,202,0,10) --Erdgeschoss Küche
hzone_tuer_fenster("Heiz_EG_Essz",0,213,243,11) --Erdgeschoss Esszimmer
hzone_tuer_fenster("Heiz_EG_Wohnz",0,213,243,12) --Erdgeschoss Wohnzimmer
hzone_tuer_fenster("Heiz_KG_Eing",344,0,0,15) --Kellergeschoss Eingang
hzone_tuer_fenster("Heiz_KG_Kueche",0,350,0,14) --Kellergeschoss Küche
hzone_tuer_fenster("Heiz_KG_Wohnz",313,321,0,13) --Kellergeschoss Wohnzimmer
-----------------------------------------------------------------------------

Auch hier nichts besonderes aber gut zum Abschauen und lernen.

Gruss Frank

Hallo Frank,

Finde ich gut, es entspricht exact meiner Frage die ich gestern gestellt habe.
Ich habe jedoch keine Ahnung, wie ich das Script in eine neu Lua Scene kampierendes kann.
Mit dem Tablette ist ein Copy Paste offensichtlich nicht unterstützt.
In welche Spalte gehört welches Script Element.
Danke in Voraus, bin neu auf die Fibaroplatform gewechselt. Deshalb diese Simple Frage

HC3 mit Klimaplan und Kontaktüberwachung
Fibaro Forum
Hallo, Ich bin seit einigen Tagen neu auf dieser Platform. Hatte zuvor ein Vera System. Binnen 2 Tagen habe ich meine Geräte, 60Aktoren, 20 Fensterkontakten, 15 Heizkörper, Netatmo, … Ich habe nun die Klimasteuerung entdeckt, was ich von meinem vorherigen System nicht kannte. Toll. Ich habe es so gemacht , dass ich nun Blockszenen erstelle beim Öffnen bzw. Schließen des Fensterkontaktes, Thermostat auf Off. Es scheint aber so, dass die Klimasteuerung dies jedoch in kürzester Zeit „Korrigiert…

Hallo Nobby @Nobby_Mi

Wie du sehen kannst ist das in 2 Bereiche unterteilt der Erste Bereich ist die Declaration.
In der Declaration werden Trigger definiert die dann die Aktion starten.
In meinem Beispiel ist das ein Trigger der 1 x in der Minute ausgelöst wird.
Der 2 Teil ist der Aktion Teil der kommt auf die Rechte Seite.
Darin ist der Code der vom trigger gestartet wird.
Da müße dann die ID´s und die Tür und Fensterkontakte angepasst werden.
Das mit dem Copy und Paste funktioniert wie bei allem Windows Systemen.
Versuche mal Markieren und dann „strg c“ für Copy und da wo es hin soll „ctrg v“ für einfügen.
Guckst du hier !
Tastenkombinationen in Windows (microsoft.com)
Gruss Frank

Hallo Frank,

vielen Dank für die schnelle Antwort. Ich habe das Script wie beschrieben angepasst. Der Trigger blieb ungeändert.

Heizen.txt (4,4 KB)

Ich habe zur Zeit nur Arbetszimmer aktiviert. Erhalte aber die Meldung

„[13.03.2021] [11:50:00] [ERROR] [SCENE163]: (load):58: attempt to compare number with nil“

Zeile 58 entspricht der Condition

if v_local > 0 or (z_tuer == true) or (z_fenster1 == true) or (z_fenster2 == true) then
–print(„Los gehts Tür, Fenster1 oder Fenster2 ist auf“)
v_local = v_local + 1
–print("Öffnungszeit in Minuten = ",v_local) "

Danke im Voraus
Norbert

Hallo Norbert

Für jeden Raum den du Steuern möchtest muss eine Globale Variabel angelegt werden, die Bezeichnung bleibt dir überlassen.
Dann musst du diese Variabel dann noch bein Aufruf der Funktion noch eintragen.
Das wirst du nicht gemacht haben darum sagt der
„[13.03.2021] [11:50:00] [ERROR] [SCENE163]: (load):58: attempt to compare number with nil“
Das besagt das er mit einer Variabel arbeiten möchte diese aber nicht definiert ist. Darum nil

Also Variabel anlegen und hier eintragen
hzone_tuer_fenster(„Heiz_DG_WII“,143,148,0,2) --Dachgeschoss WII-Zimmer

Der Auftruf hzone_tuer_fenster ruft die gleichnamige Funktion auf.
Da wird die besagte Variabel übergeben sowie die ID´s für Tür,Fenster1,Fenster2 und die ID der Heizzohne die ich steuern möchte.
Gruss Frank

Hallo Frank,

genau so ahbe ich es auch verstanden. du müsstest es doch in der Datei Heizen.txt erkennen

(Zeile 15, spätere Zuordnung Zeile 92)

Habe ich einen Denkfehler?

Gruß

Norbert

Ist die Globale Variabel genau so bezeichnet?
Ist die mit 0 (null) gefüllt ?
nimm mal die REM´s aus der Zeile und schau was da passiert !
–print(" zuststand in Reihenfolge „,v_local,“ ",z_tuer, " ", z_fenster1, " „, z_fenster2)
So ändern
print(“ zustand in Reihenfolge „,v_local,“ ",z_tuer, " ", z_fenster1, " ", z_fenster2)
Da siehst du was übergeben
Ich tippe auf einen Fehler in der Globalen Variabel.

Hallo Frank,

ich erhalte folgende Ergebnisse:

Fenster zu:
[13.03.2021] [13:50:50] [DEBUG] [SCENE163]: zustand in Reihenfolge false true false
[13.03.2021] [13:50:50] [ERROR] [SCENE163]: (load):58: attempt to compare number with nil

Fenster auf:
[13.03.2021] [13:51:00] [DEBUG] [SCENE163]: zustand in Reihenfolge false true false
[13.03.2021] [13:51:00] [ERROR] [SCENE163]: (load):58: attempt to compare number with nil

Die v_local ist wohl leer, dabei habe ich sie im global definiert:

–[[
Globale Variablen

Für die einzelnen Heizkreise

Bezeichnung Global-Variable ID des Heizkreises

Dachgeschoss Galerie Zimmer Heiz_DG_Galerie 2
Dachgeschoss Leonies Zimmer Heiz_DG_Leonie 3
Dachgeschoss Ankleidezimmer Heiz_DG_Ankleide 4
Erdgeschoss WC Heiz_EG_WC 5
Erdgeschoss Küche Heiz_EG_Kueche 6
Erdgeschoss Wintergarten Heiz_EG_Winterg 7
Erdgeschoss Wohnzimmer Heiz_EG_Wohnz 8
Obergeschoss Fernsehzimmer Heiz_OG_Fernsehz 9
Obergeschoss Arbeitszimmer Heiz_OG_Arbeitsz 10
Obergeschoss Badezimmer Heiz_OG_Bad 11
]]

Das muss an der Globalen Variabel liegen.
Da ist sicher ein Tippfehler drin.
So sieht die Globalen Variablenaufzählung bei mir aus :


Gross-Kleinschreibung oder ü ue usw. sind immer meine Tippteufel.
Da muss aber noch ein Fehler drin sein, zwischen Fenster auf und zu ist kein Unterschied da müßte sich der Zustand true/false ändern.
Gruss Frank

Hallo Frank,

besten Dank für deine Geduld.
Mit den Variablen hatte ich nicht verstanden. Die waren nur als Kommentar im Script.
Es ist vollbracht. Es funktioniert nun wie es soll.

Klasse

Gruß
Norbert

Das ist prima das es funktioniert.
Achte nur darauf das die Tür und Fensterkontakte die Richtigen Zustände Liefern.
Ich hatte mal Sensoren die haben verschiedene Zustände für zu und auf geliefert.
Es ist immer wieder Gut wenn eine Arbeit auch von Anderen genutzt wird.
Wenn du noch etwas benötigst melde dich.
Hier Posten wir alle unsere Scenen !
Aktuell in Fibaro Forum/Fibaro (HC3) LUA Scripts - siio – Community
Beteilige dich wen möglich das werden alle sehr schätzen.
Gruss Frank

Hallo Frank,

Im Wintergarten, habe ich motorbetriebene Fenster, hier nutze ich keine Kontakte, sondern den Fibaro FGRM-222.
Glaubst Du man könnte diesen auch einbinden?

Liebe Grüße und einen schönen Sonntag
Norbert

Am einfachsten währe ein Tür/Fensterkontakt einzubauen.

Es währe aber auch möglich die Funktion so zu erweitern das man den Zustand auf/zu in die Funktion integriert.
Die Funktion müßte einen zusätzliche Parameter in der Übergabe erhalten.
Rollo_ID
Dann in der Funktion das mit einbauen.
Währe kein Problem nur Arbeit.

funktions Variabelnübergabe
function hzone_tuer_fenster(v_global,tuer,fenster1,fenster2,Rollo,zone_id)

Funktion Aufruf
hzone_tuer_fenster(„Heiz_EG_Winterg“,0,0,0,999,7) --Erdgeschoss Wintergarten

999 = ID vom Rollo
Bei Rollo ID > 0 ist ein Rollo vorhanden.

Abfragen ob Rollo auf oder zu kannst du mit
Beispiel:
print("ID235 Wert = ",fibaro.getValue(235,„value“))
Bei mir ist Wert
99 = Rollo aufgefahren
0 = Rollo zugefahren

Das währen die Anfänge schaffst du den Rest alleine ?

Gruss Frank

Allerbesten Dank, so in etwa hatte ich es mir gedacht.
Es ging halt nicht sie wie einen Kontakt zu behandeln.
Die Werte 0 bzw. 99 waren der Punkt zur Klärung.

Ich werde es in einer ruhigen Minute versuchen.

Norbert

1 Like

Hallo Frank,
Ich habe dein Skript um die Anmerkungen ergänzt, funktioniert wie gewollt. Danke.
Ich habe es als Datei angehängt.
Die Variablen sind Motor1 und Motor2, an sonsten nenne ich es E-Fenster1 und E-Fenster2
Danke

Lua-Skript.txt (5,2 KB)

1 Like