Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

stigvi

Medlemmer
  • Innlegg

    2 751
  • Ble med

  • Besøkte siden sist

  • Dager vunnet

    155

Alt skrevet av stigvi

  1. Kjenner ikke til hvordan den virker i Homey, men den er litt spesiell uanz system. Det virker som om den trigger kun hvis den blir påtrykt en vekselspenning på inngangen. Det er helt ok i de fleste ringeklokkeanlegg, men har du et system med likespenning så er kanskje ikke Zage løsningen. Det finnes alternativer, men har du kjøpt Zage så er det jo kjekt om den kommer til nytte.
  2. Se om du kan bruke dette biblioteket, pyTibber · PyPI
  3. Jeg har 170 enheter. I fjor høst hadde jeg store problemer med å få det stabilt, men så byttet jeg ut 6 IKEA pærer med Philips sine og etter det har det vært helt stabilt.
  4. 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
  5. Nei, det er skrevet i python for Home Assistant. Men kan dele hvis du fortsatt er interessert
  6. 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.
  7. Har du prøvd å ta den ut av stikkontakten og sette den i igjen etter at du har endret?
  8. Ikke annet enn at releet i den (og tilsvarende slike enheter) har begrenset levetid. Men det er ikke sikkert z-water har gjort noe heller for å øke levetiden. Hvis du slår av/på hvert 5. minutt så har du ca 100.000 operasjoner pr år. En aktuator er en induktiv last av verste sort (generer gnist over kontakten når en slår av) og jeg ville ikke veddet på at de holder i årevis.
  9. Jeg ser det hver gang jeg legger ut noe her at det er rom for forbedringer på andre steder. De to kortene jeg hadde for å vise værmelding så litt triste ut og viste dobbelt opp med info. Så da byttet jeg de ut med en jeg fant i HACS
  10. Her er et eksempel på hvordan jeg henter ut fra værmeldingen hvor mange timer med sol det er meldt fra nå og framover. Det kan brukes til å styre oppvarming i huset eller gardiner. Og det er lett å bytte ut dette til noe annet som antall dager med regn, antall timer med frost osv. Skal en ha antall timer så må en aktivere timebasert værmelding i met.no integrasjonen. Met.no integrasjonen skal da ha to sensorer. sensor: - platform: template sensors: timer_med_sol: friendly_name: Timer med sol unit_of_measurement: h value_template: >- {% set vars = namespace(count=0) %} {% set vars = namespace(found=true) %} {% set vars.count = 0 %} {% set l = state_attr('weather.orstad_utsyn_hourly','forecast')|map(attribute='condition')|list %} {% for item in l %} {% if vars.found == true and item == 'sunny' %} {% set vars.count = loop.index %} {% else %} {% set vars.found = false %} {% endif %} {% endfor %} {{ vars.count }}
  11. Antar det er i samme enhet som verdien rapporteres i. Er den i Watt, så setter du hvor mange Watt den må endres før det rapporteres. Det er det mest naturlige enn prosent her i og med at enheten ikke har et klart bilde av hva som er grenseverdier, altså prosent av hva da. PS. Bildet nedenfor er fra en Samsung smartplugg
  12. Har du deconz? I så fall endres dette på det som heter report interval på denne egenskapen.
  13. stigvi

    HA 2021.3.0

    Fra wikipedia At the GitHub "State of the Octoverse" 2020 Home Assistant was listed in second place in the Top 10 list of Python packages with most active contributors (with 8,162 unique contributors during 2020). Similarly, the 2019 "State of the Octoverse" listed Home Assistant as the tenth biggest open source project on GitHub, based on the number of active contributors that year (the project had contributions from 63,000+ contributors during 2019).
  14. stigvi

    HA 2021.3.0

    Mon tro hvor mange utviklere det er totalt sett i dette hvis en også tar med alle de som lager noe som havner under HACS. En ukvalifisert gjetning er et 4-sifret tall......
  15. stigvi

    HA 2021.3.0

    FYI: Denne kom i går og de fortsetter med å finpusse og forbedre. Etterhvert fremstår Home Assistant som ganske strømlinjeformet og det er ganske klart for meg at jeg gjorde det rette valget med å gå for denne istedenfor andre systemer 🙂
  16. https://www.ikea.com/no/no/p/tradfri-tradlos-dimmer-hvit-70408595/ - IKEA Er på tilbud fram til 7. mars. De hentes inn i Home Assistant ved hjelp av en zigbee integrasjon. Home Assistant har en innebygget og i tillegg finnes det andre som deconz og zigbee2mqtt
  17. Jeg har ikea sin zigbee vippebryter strategisk plassert ved porten. Fungerer fint det ......
  18. Noe så kjedelig som å bytte ut appdaemon med pyscript. Pyscript er et ganske nytt prosjekt til Home Assistant. Den kom i fjor høst. Appdaemon har fungert veldig bra for min del, men av og til føler en at det er å skyte spurv med kanon. At den er en add-on og kommuniserer med HA via et rest api gjør også litt til at den ikke er lynrask. Av og til kunne hendelser bruke lange 0,5s på å vandre fra HA til Appdaemon. Pyscript er en komponent til HA og er mye nærmere dataene. I tillegg har utvikleren tenkt lurt og slikt som entiteter kan aksesseres som python variable istedenfor via funksjoner som i Appdaemon. Appdaemon sin sterke avhengighet av å bruke timere slipper en også i pyscript der det er mer naturlig å bruke waitfor eller sleep istedenfor. Føler en at en trenger noe mer enn Home Assistant sin innebygde automasjon så kan jeg anbefale pyscript. Det meste gjøres langt lettere i python. Her er et eksempel for "ringe på dørklokken" kode. @event_trigger("deconz_event", "id == 'bell' and input_boolean.sleeptime == 'off'") @time_active("range(00:00, 23:59:59)", hold_off=30) def doorbell(context, device_id, event_type, trigger_type, unique_id, id=None, event=None): log.info("Noen ringte paa") light.garasje.turn_on(flash = "short") light.bod.turn_on(flash = "short") light.vaskerom_tak.turn_on(flash = "short") light.bad_u_etg.turn_on(flash = "short") script.doorbell.turn_on() script.send_melding.turn_on(variables = {'title': 'Dør', 'message': 'Noen ringte på', 'channel': 'Info'}) camera.kamera1_cam.snapshot(filename = "/media/snapshot_bell1.jpg") camera.kamera2_cam.snapshot(filename = "/media/snapshot_bell2.jpg") camera.kamera3_cam.snapshot(filename = "/media/snapshot_bell3.jpg") camera.kamera4_cam.snapshot(filename = "/media/snapshot_bell4.jpg") notify.mobile_app_sm_g715fn(message = "Har dere besøk?", title = "Varme", data = {'actions': [{'action': 'nothing', 'title': 'Nei'}, {'action': 'SWITCH_ON_VISITORS', 'title': 'Ja'}]}) @event_trigger("mobile_app_notification_action") def handle_event(action=None): if action == "SWITCH_ON_VISITORS": input_boolean.visitors_comfort_temp.turn_on()
  19. En Aqara dørsensor
  20. Dette har vært diskutert før. Å stoppe ventilasjonen betyr lite for brannutviklingen. Derimot er det viktig å få ut røyk med hensyn til de som er i huset og sånn sett kan det være lurt å sette vifter på maks fart.
  21. Kult og et flott alternativ til en konkurrent som er avhengig av en skytjeneste for å virke optimalt
  22. Det tror jeg faktisk de færreste har
  23. Hva med å ta strømmen kun hvis ingen er hjemme?
  24. Det er vel derfor det er påbudt med utvendig og lett tilgjengelig skap med hovedsikring ute på nye hus. Genialt for gatas pøbelunger. Nå er det ikke "ring og spring", men "slå av og spring"
  25. Det er ikke noe usikkerhet i det. Ballen er der rett foran ansiktet og å la bilen sige i mot i lav fart til den akkurat berører ballen er så lett at tilogmed jeg og kånå klarer det hver dag.
×
×
  • 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.