GĂ„ til innhold
  • Bli medlem
StĂžtt hjemmeautomasjon! đŸ„‡đŸ„ˆđŸ„‰

Anbefalte innlegg

Skrevet

Har en flow som kjÞrer gardinen ned nÄr LUX i rommet blir over 200 (Basert pÄ Fibaro motion sensor), og en annen flow som kjÞrer den opp igjen nÄr LUX blir mindre enn 199.

Funker fint det, men hvordan hindrer jeg den i Ä gÄ opp og ned som en jojo nÄr LUXen er akkurat i grenseland? dvs nÄr gardinen gÄr ned, sÄ blir LUXen under 199 og den gÄr opp igjen. Da blir LUXen over 200 og den gÄr ned. Slik gÄr nu dagan....

 

Noen forslag?

Kanskje en sjekk mot tid? At gardinen mÄ ha vÊrt nede i minst en time fÞr den kan gÄ opp igjen?

Har ingen anelse om hvordan det settes opp i sÄfall.

Skrevet

Med kun en lux i forskjell sÄ er det ulempen. Det enkleste er Ä si ned pÄ 200 og opp pÄ f.eks. 150 (her kan du teste ut hva som passer best).

 

Eventuelt at du gÄr inn med en minimumstid som man skal holde endringen fÞr det kan komme en ny endring. Jeg kjenner ikke dine enheter godt nok til Ä si hvordan du kan gjÞre det i de.

Skrevet

Ja, det er jo selvfÞlgelig ogsÄ en mulighet. Jeg kan teste Ä ha litt stÞrre "avstand" mellom opp og ned.

 

Takk for tipset :)

Skrevet

Jeg har lagd det slik at nÄr de fÞrst gÄr ned sÄ stÄr de slik i minimum 8 timer hvis ingen er hjemme eller i 2 timer hvis noen er hjemme. At de skal gÄ opp og ned etterhvert som skyene driver forbi, er ikke bra.

Skrevet
2 timer siden, stigvi skrev:

Jeg har lagd det slik at nÄr de fÞrst gÄr ned sÄ stÄr de slik i minimum 8 timer hvis ingen er hjemme eller i 2 timer hvis noen er hjemme. At de skal gÄ opp og ned etterhvert som skyene driver forbi, er ikke bra.

Det var noe sÄnt jeg tenkte pÄ ogsÄ. 

Er det pÄ Homey? Kunne jeg i sÄfall tatt en titt pÄ den flowen? 

 

Skrevet
30 minutter siden, AndersO skrev:

Er det pÄ Homey?

Nei, det er skrevet i python for Home Assistant. Men kan dele hvis du fortsatt er interessert

Skrevet
1 time siden, stigvi skrev:

Nei, det er skrevet i python for Home Assistant. Men kan dele hvis du fortsatt er interessert

Ja takk, gjerne. Kan jo hende det gĂ„r opp et lys 😄

Skrevet

Man kan sette i samme flow at man deaktiverer flowen og setter i gang en timer pÄ x minutter. NÄr x minutter har gÄtt sÄ aktiveres flow igjen. 

Skrevet
10 timer siden, AndersO skrev:

Ja takk, gjerne. Kan jo hende det gĂ„r opp et lys 😄

Konfigurasjon for en av gardinene:

 

gardiner:
        - id: hagestue_oest
          navn: Hagestue Ăžst
          retning: 138.6
          sollysnivaa: 27000
          forsinkelse_borte: 18000
          forsinkelse_hjemme: 7200
          gardin: cover.rullegardin_hagestue_oest
          vindu: binary_sensor.glassdor_a
          sollyssensors: sensor.lysstyrke_filtrert
          elevation: 5
          azimuth_morgen: 10
          azimuth_kveld: 10
          borteposisjon: 0
          hjemmeposisjon: 40
          overstyr: input_select.modus_gardin_terrasse
          bryter: gardin_bryter
          event_auto: 1002
          event_alltid_oppe: 2002
          event_halvveis_nede: 3002
          delay: 2



Kode:

 

import time

registered_triggers = []
factory_apps = []

@time_trigger('startup')
def gardinstartup():
    for app in pyscript.app_config:
        factory_apps.append(Gardiner(app))

class Gardiner:
    Status_OPPE = 1
    Status_HALVVEIS = 2
    Status_LUKKET = 3
    Status_UKJENT = 4
    Status_MANUELL = 5
    Type_IKEA = 1
    Type_LUXAFLEX = 2
    Type_UKJENT = 3
    isSun = False
    isInPosition = False
    type = Type_UKJENT
    cfg = None

    def __init__(self, config):
        self.cfg = config
        state.persist(f"pyscript.gardin_{self.cfg['id']}_twls", default_value=0)
        state.persist(f"pyscript.gardin_{self.cfg['id']}_status", default_value=self.Status_OPPE)

        if "gardin" in self.cfg:
            self.type = self.Type_IKEA
        elif "scene_oppe" in self.cfg and "scene_lukket" in self.cfg and "scene_halvveis" in self.cfg:
            self.type = self.Type_LUXAFLEX

        if float(sun.sun.elevation) >= float(self.cfg['elevation']):
            if float(sun.sun.azimuth) >= float(self.cfg['retning'] - 90 + self.cfg['azimuth_morgen']):
                if float(sun.sun.azimuth) <= float(self.cfg['retning'] + 90 - self.cfg['azimuth_kveld']):
                    self.isInPosition = True

        f = int(self.cfg['forsinkelse_borte'])

        if binary_sensor.noen_er_hjemme == "on":
            f = int(self.cfg['forsinkelse_hjemme'])
        
        if time.time() - float(state.get(f"pyscript.gardin_{self.cfg['id']}_twls")) < f:
            self.isSun = True

        @state_trigger(f"{self.cfg['sollyssensors']}", state_hold = self.cfg['delay'])
        def sollys_trig():
            self.sollys()
        registered_triggers.append(sollys_trig)
                
        @state_trigger("sun.sun.azimuth", state_hold = self.cfg['delay'])
        def sun_trig():
            self.sun()
        registered_triggers.append(sun_trig)
        
        @state_trigger(f"{self.cfg['overstyr']}", state_hold = self.cfg['delay'])
        def nystatus_trig():
            self.nystatus()
        registered_triggers.append(nystatus_trig)

        @event_trigger("deconz_event")
        def bryter_trig(context, device_id, event_type, trigger_type, unique_id, id=None, event=None):
            self.bryter(id, event)
        registered_triggers.append(bryter_trig)

        if "vindu" in self.cfg:
            @state_trigger(f"{self.cfg['vindu']}")
            def nystatusvindu_trig():
                self.nystatus()
            registered_triggers.append(nystatusvindu_trig)

        if int(state.get(f"pyscript.gardin_{self.cfg['id']}_status")) == self.Status_HALVVEIS:
            state.set(f"sensor.gardin_status_{self.cfg['id']}", value = f"{self.cfg['navn']} er halvveis lukket")
        elif int(state.get(f"pyscript.gardin_{self.cfg['id']}_status")) == self.Status_LUKKET:
            state.set(f"sensor.gardin_status_{self.cfg['id']}", value = f"{self.cfg['navn']} er lukket")
        else:
            state.set(f"sensor.gardin_status_{self.cfg['id']}", value = "")

        state.set(f"sensor.gardin_sollysnivaagrense_{self.cfg['id']}", value = self.cfg['sollysnivaa'])

    def sun(self):
        self.isInPosition = False

        if float(sun.sun.elevation) >= float(self.cfg['elevation']):
            if float(sun.sun.azimuth) >= float(self.cfg['retning'] - 90 + self.cfg['azimuth_morgen']):
                if float(sun.sun.azimuth) <= float(self.cfg['retning'] + 90 - self.cfg['azimuth_kveld']):
                    self.isInPosition = True

        self.sett_posisjon()

    def nystatus(self):
        self.sett_posisjon()
    
    def sollys(self):
        try:
            if self.isInPosition == True and float(state.get(self.cfg['sollyssensors'])) >= float(self.cfg['sollysnivaa']):
                state.set(f"pyscript.gardin_{self.cfg['id']}_twls", value = time.time())

                if self.isSun == False:
                    self.isSun = True
                    #self.log("sollys er paa")
                    self.sett_posisjon()
            else:
                f = int(self.cfg['forsinkelse_borte'])

                if binary_sensor.noen_er_hjemme == "on":
                    f = int(self.cfg['forsinkelse_hjemme'])

                if self.isSun == True and time.time() - float(state.get(f"pyscript.gardin_{self.cfg['id']}_twls")) > f:
                    self.isSun = False
                    self.sett_posisjon()
            
        except Exception:
            pass

    def sett_posisjon(self):
        try:
            g = self.Status_OPPE
    
            if self.type == self.Type_IKEA:
                pos = int(self.cfg['borteposisjon'])
    
                if binary_sensor.noen_er_hjemme == "on":
                    pos = int(self.cfg['hjemmeposisjon'])
    
            if self.isSun == True and self.isInPosition == True:
                g = self.Status_LUKKET
            
            if state.get(self.cfg['overstyr']) == "Alltid oppe":
                g = self.Status_OPPE
                self.isSun = False
            elif state.get(self.cfg['overstyr']) == "Helt nede":
                g = self.Status_LUKKET
                self.isSun = False
                
                if self.type == self.Type_IKEA:
                    pos = int(self.cfg['borteposisjon'])
                
            elif state.get(self.cfg['overstyr']) == "Halvveis nede":
                g = self.Status_HALVVEIS
                self.isSun = False
    
                if self.type == self.Type_IKEA:
                    pos = int(self.cfg['hjemmeposisjon'])
                
            elif state.get(self.cfg['overstyr']) == "Manuell":
                g = self.Status_MANUELL
                self.isSun = False
            
            if "vindu" in self.cfg and state.get(self.cfg['vindu']) == "on":
                g = self.Status_OPPE
                self.isSun = False
                
            #log.info(f"Gardin {self.cfg['navn']} settes til = {g}")
            
            if g != self.Status_MANUELL:
                if self.type == self.Type_IKEA:
                    if g != self.Status_OPPE and abs(float(state.get(f"{self.cfg['gardin']}.current_position")) - pos) > 2:
                        state.set(f"sensor.gardin_status_{self.cfg['id']}", value = f"{self.cfg['navn']} er lukket")
                        cover.set_cover_position(entity_id = self.cfg['gardin'], position = pos)
                        state.set(f"pyscript.gardin_{self.cfg['id']}_status", value = self.Status_LUKKET)
                    elif g == self.Status_OPPE and float(state.get(f"{self.cfg['gardin']}.current_position")) < 99:
                        state.set(f"sensor.gardin_status_{self.cfg['id']}", value = "")
                        cover.set_cover_position(entity_id = self.cfg['gardin'], position = 100)
                        state.set(f"pyscript.gardin_{self.cfg['id']}_status", value = self.Status_OPPE)
                elif self.type == self.Type_LUXAFLEX:
                    if g == self.Status_LUKKET and int(state.get(f"pyscript.gardin_{self.cfg['id']}_status")) != self.Status_LUKKET:
                        state.set(f"sensor.gardin_status_{self.cfg['id']}", value = f"{self.cfg['navn']} er lukket")
                        scene.turn_on(entity_id=self.cfg['scene_lukket'])
                        state.set(f"pyscript.gardin_{self.cfg['id']}_status", value = self.Status_LUKKET)
                    elif g == self.Status_OPPE and int(state.get(f"pyscript.gardin_{self.cfg['id']}_status")) != self.Status_OPPE:
                        state.set(f"sensor.gardin_status_{self.cfg['id']}", value = "")
                        scene.turn_on(entity_id=self.cfg['scene_oppe'])
                        state.set(f"pyscript.gardin_{self.cfg['id']}_status", value = self.Status_OPPE)
                    elif g == self.Status_HALVVEIS and int(state.get(f"pyscript.gardin_{self.cfg['id']}_status")) != self.Status_HALVVEIS:
                        state.set(f"sensor.gardin_status_{self.cfg['id']}", value = f"{self.cfg['navn']} er halvveis lukket")
                        scene.turn_on(entity_id=self.cfg['scene_halvveis'])
                        state.set(f"pyscript.gardin_{self.cfg['id']}_status", value = self.Status_HALVVEIS)
        except Exception:
            pass
    
    def bryter(self, id=None, event=None):
        try:
            #self.log('Bryter id: {} og event {}'.format(data['id'], data['event']))
            if "bryter" in self.cfg and id == self.cfg['bryter'] and event == int(self.cfg['event_alltid_oppe']):
                state.set(f"pyscript.gardin_{self.cfg['id']}_status", value = self.Status_UKJENT)
                input_select.select_option(entity_id = self.cfg['overstyr'], option = "Alltid oppe")
            elif "bryter" in self.cfg and id == self.cfg['bryter'] and event == int(self.cfg['event_halvveis_nede']):
                state.set(f"pyscript.gardin_{self.cfg['id']}_status", value = self.Status_UKJENT)
                input_select.select_option(entity_id = self.cfg['overstyr'], option = "Halvveis nede")
            elif "bryter" in self.cfg and id == self.cfg['bryter'] and event == int(self.cfg['event_auto']):
                state.set(f"pyscript.gardin_{self.cfg['id']}_status", value = self.Status_UKJENT)
                self.isSun = False
                input_select.select_option(entity_id = self.cfg['overstyr'], option = "Auto")
                
                if(float(state.get(self.cfg['sollyssensors'])) >= float(self.cfg['sollysnivaa'])):
                    self.isSun = True
        except Exception:
            pass

 

Skrevet

Ville heller satt pÄ en timer via countdown/timer plugin. HÞrt at den innebygde utsettelsen kan vÊre litt "vanskelig" Ä ha med Ä gjÞre. Alternativt sette tidsintervall "alle" 30min/60 min og sjekk lux er over under?


Sent from my iPhone using Tapatalk

Bli med i samtalen

Du kan publisere innhold nÄ og registrere deg senere. Hvis du har en konto, logg inn nÄ for Ä poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn pĂ„ siden automatisk.   Vis som en ordinĂŠr lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   TĂžm tekstverktĂžy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies pÄ din enhet for Ä gjÞre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.