AndersO Skrevet 5. mars 2021 Skrevet 5. mars 2021 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. Siter
Guahtdim Skrevet 5. mars 2021 Skrevet 5. mars 2021 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. Siter
AndersO Skrevet 5. mars 2021 Forfatter Skrevet 5. mars 2021 Ja, det er jo selvfølgelig også en mulighet. Jeg kan teste å ha litt større "avstand" mellom opp og ned. Takk for tipset Siter
stigvi Skrevet 5. mars 2021 Skrevet 5. mars 2021 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. Siter
AndersO Skrevet 5. mars 2021 Forfatter Skrevet 5. mars 2021 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? Siter
stigvi Skrevet 5. mars 2021 Skrevet 5. mars 2021 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 Siter
AndersO Skrevet 5. mars 2021 Forfatter Skrevet 5. mars 2021 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 😄 Siter
StaggerLee Skrevet 5. mars 2021 Skrevet 5. mars 2021 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. Siter
stigvi Skrevet 6. mars 2021 Skrevet 6. mars 2021 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 Siter
AndersO Skrevet 6. mars 2021 Forfatter Skrevet 6. mars 2021 Tusen takk 😀 Blir litt å sette seg inn i her ja 👍 Siter
torstein89 Skrevet 9. mars 2021 Skrevet 9. mars 2021 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 Siter
Anbefalte innlegg
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.