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

Vinnerliste

Populært innhold

Viser innholdet med mest poeng fra 02. juni 2024 i alle områder

  1. Jeg liker å få varsel på telefon når noe skjer i HA som jeg bør gjøre noe med. Dette har jeg forsåvidt fint fått til i pyscript, men jeg synes det har vært litt dillete å sette opp fordi det ikke alltid er like lett å vite hva triggere inneholder av data. Nå som jeg har gått over til automasjoner i HA er det mye som er langt lettere å få til med en, etter min mening, god visuell editor. Her er et eksempel. I den visuelle editoren ser det slik ut: Koden for dette er vist nederst. Det som skjer er at når stråleovn på terrasse har stått på i 33 minutter og 10 sekunder så sendes et varsel til mobiltelefon Så venter automasjonen i opp til 6 timer på svar. Hvis ovn slås av før dette så forsvinner melding på telefon. Den forsvinner også hvis 6 timer går uten svar. Trykker jeg på "Nei" så slås ovn av. Tidligere hadde jeg dette i flere funksjoner i pyscript. Når jeg flyttet det over til HA automasjon så ble det laget flere automasjoner, en for å sende melding og en annen som ventet på svar fra telefon. I dag fant jeg ut jeg ville samle dette til en enkel automasjon som både sender melding og som venter på svar. Fordelen er å samle dette. Bakdelen er at en vent-operasjon ikke overlever en omstart av HA. Det klarer jeg å leve med på akkurat denne for stråleovnen, men i andre sammenhenger er det jo litt dumt. - id: '1712999347947' alias: Spør om terrassevarmer skal slås av description: '' trigger: - platform: state entity_id: - switch.terrassevarmer from: 'off' to: 'on' for: hours: 0 minutes: 33 seconds: 10 condition: [] action: - service: notify.mobile_app_pixel_7 metadata: {} data: message: Skal den fortsatt stå på? title: Terrassevarmer data: tag: terrassevarmer actions: - action: NO_ACTION_TERRASSEVARMER title: Ja - action: SWITCH_OFF_TERRASSEVARMER title: Nei - wait_for_trigger: - platform: event event_type: mobile_app_notification_action event_data: action: SWITCH_OFF_TERRASSEVARMER - platform: event event_type: mobile_app_notification_action event_data: action: NO_ACTION_TERRASSEVARMER - platform: state entity_id: - switch.terrassevarmer from: 'on' to: 'off' continue_on_timeout: true timeout: hours: 6 minutes: 0 seconds: 0 milliseconds: 0 - choose: - conditions: - condition: template value_template: >- {{ wait.trigger == None or (wait.trigger.platform == 'state' and wait.trigger.to_state.state == 'off')}} sequence: - service: notify.mobile_app_pixel_7 metadata: {} data: message: clear_notification data: tag: terrassevarmer - conditions: - condition: template value_template: >- {{ wait.trigger.platform == 'event' and wait.trigger.event.data.action == 'SWITCH_OFF_TERRASSEVARMER' }} sequence: - service: switch.turn_off metadata: {} data: {} target: entity_id: switch.terrassevarmer mode: restart
    1 poeng
  2. Her er kode for å lese DS18B20: Bibliotekene er: Dalles DS18B20 ser ut som en transistor men er egentlig en IC. Den finnes i TO-92 (som en liten transistor) pakning men også bygget inn i en vanntett rustfri probe med lang kabel: Den er superenkel å bruke til å lese temperaturer med og koster lite. Det eneste den trenger er en pull-up resistor på 4,7k (Mellom + og Data) Spenningen kan være mellom 3 og 5,5V (Altså kan du bruke 3,3V spenningen fra ESP32en om det trengs. Mange sensorer Du kan koble opptil 32 stk DS18B20 etter hverandre på samme kabelen (Kun 1 pullup resistor) Du kan spørre etter antallet slik: deviceCount = sensors.getDeviceCount(); Og du leser dem slik: Temp1=sensors.getTempCByIndex(0); Temp2=sensors.getTempCByIndex(1); Alarmer Biblioteket inneholder også kode for alarmer om du ikke vil kode dem selv. Da må du også finne adressen til sensoren: DeviceAddress Temp1Addr; sensors.getAddress(Temp1Addr, 0); så kan du sette alarmtemperaturene: sensors.setHighAlarmTemp(Temp1Addr, 26.5); sensors.setLowAlarmTemp(Temp1Addr, 19); Og teste om alarmen er aktiv: if (sensors.hasAlarm(Temp1Addr)) { OBS Den trigger både på høy og lav så du må lese temp for å finne ut hvem. Leseintervaller Når du skal bruke den med MQTT må du bestemme deg for NÅR den skal rappportere temperaturen. Hver gang temperaturen endrer seg (mer en x grader)? Fast hvert x sekund Hver gang du ber om det. For den har passert over/under en granse (Alarm) De to første kan hardkodes eller de kan ha en default verdi og så kan de endres med MQTT kommandoer. Interupt Om du skal lese dem hvert x sekund kan du bruke et interupt. (Om du bruker en delay kan jo ikke ESP32 gjøre noe annet fornuftig mens den venter) Et interupt avbryter prosessoren med det den driver med og kjører en rutine, når rutinen er ferdig fortsetter prosessoren der den slapp. Rutinen som skal kjøres merkes med IRAM_ATTR slik at compileren legger den i instruksjons RAM for at den skal kunne kjøres raskt: void IRAM_ATTR onTimer(){ itsTimeNow=1; } En slik rutine bør gjøre så lite som mulig for ikke å forstyrre prosessoren for mye. Det enkelste er å bare sette en variabel. Denne bør deklareres med voilatile for at compileren skal holde den i RAM (og ikke i et register) slik at hovedprogrammet kan lese den correct: volatile int itsTimeNow = 0; I hoved loop'en kan vi nå teste på denne slik: if (itsTimeNow==1 ) { read_temp(); MQTTclient.publish("TempTestClient/Temp1", String(Temp1)); itsTimeNow=0; // Reset } Timer ESP32 har flere (2-4) harware timere som vi kan bruke til å kalle på interuptet. Du deklarerer den slik: hw_timer_t *My_timer = NULL; og setter den til å telle slik: My_timer = timerBegin(0, 8000, true); Fordi disse timerne teller VELDIG fort har jeg her brukt en "prescaler" på 8000 som gjør at jeg kan be om et interupt hver gang den når 10000 og det vil utgjøre et sekund: timerAttachInterrupt(My_timer, &onTimer, true); // Kobler interupt rutinen til timeren timerAlarmWrite(My_timer, 100000, true); //10000 = 1 Sek Altså hvert 10sek her timerAlarmEnable(My_timer); //start Her er et forslag til MQTT kode som poster temp fra 2 sensorer på forskjellige vis:
    1 poeng
Vinnerlisten er satt til Oslo/GMT+01:00
×
×
  • 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.