Ikea Vindriktning

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Ikea Vindriktning

Inlägg av Micke_s »

Blev 2st Vindrikning även här.

Fanns på avdelningen "möbelutställningen", vilket innebär hela ovanvåningen och mittgången nere vid tag-det-själv. Tack IKEA för den uppenbara lagerplatsen.
Hittade till sist där de smarta högtalarna låg.
vindrikning.jpg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
simply
Inlägg: 497
Blev medlem: 19 januari 2006, 11:27:36
Ort: sthlm
Kontakt:

Re: Ikea Vindriktning

Inlägg av simply »

Blir en sväng förbi närmaste IKEA så snart som möjligt, verkar det onekligen som...

//
Användarvisningsbild
sommarlov
Inlägg: 514
Blev medlem: 28 november 2015, 19:03:40
Ort: 08

Re: Ikea Vindriktning

Inlägg av sommarlov »

Skrev ett litet program för en Arduino som lyssnar på TX från Vindriktningen. Skriver sen ut:

Message: 16 11 0B 00 00 00 04 00 00 03 1F 00 00 00 04 01 00 00 00 A3 - crc ok. Particles: 4µg/m³
Message: 16 11 0B 00 00 00 05 00 00 03 20 00 00 00 05 01 00 00 00 A0 - crc ok. Particles: 5µg/m³

Kod: Markera allt

#include <SoftwareSerial.h>

// Connect RX on Vindriktning to pin 10 on Arduino
SoftwareSerial portTx(10, 11);

void setup()
{
  Serial.begin(115200);
  while (!Serial) {
    ;
  }
  Serial.println("Starting setup.");

  portTx.begin(9600);
  portTx.listen();

  Serial.println("Started setup.");
}

char letters[] = "0123456789ABCDEF";
String ToHex(int val) {
  int low = val & 0x0f;
  int high = (val >> 4) & 0x0f;
  String output = "";
  output += letters[high];
  output += letters[low];
  return output;
}

bool foundStart = false;
char buffer[25];
int buffer_index = -1;
int message_length = 0;

void loop() {
  if (portTx.available()) {
    char inByte = portTx.read();

    if (!foundStart && inByte == 0x16) {
      foundStart = true;
      //Serial.println("Found message start");

      // Restore pointers
      buffer_index = 0;
      message_length = 0;
    }

    if (foundStart) {
      buffer[buffer_index] = inByte;
      buffer_index++;

      if (buffer_index == 2) {
        message_length = inByte;
        //Serial.println("Found message len: 0x" + ToHex(message_length) + "/" + String(message_length));
      }

      if (buffer_index == message_length + 3) {
        Serial.print("Message: ");
        for (int i = 0; i < buffer_index; i++) {
          Serial.print(ToHex(buffer[i])); Serial.print(" ");
        }

        int crc = 256;
        for (int i = 0; i < message_length + 2; i++) {
          crc -= buffer[i];
        }

        if ((char)crc == buffer[buffer_index - 1]) {
          Serial.print("- crc ok. ");

          long particles = buffer[2 + 3] * 256 + buffer[2 + 4];
          Serial.println("Particles: " + String(particles) + "µg/m³");
        } else {
          Serial.println("- crc error " + String(ToHex(crc)) + " vs " + String(ToHex(buffer[buffer_index - 1])));
        }

        foundStart = false;
      }
    }
  }
}
Zkronk
Inlägg: 1423
Blev medlem: 23 augusti 2005, 16:44:36
Ort: Uppsala

Re: Ikea Vindriktning

Inlägg av Zkronk »

Jag var lite tveksam till att sensorn fungerade, men när jag testade att blåsa ut ett stearinljus framför fläkten så gav den utslag efter en liten stund :)
Nu kör jag med en ESP8266:a och skriver ut på serieporten, men jag tänkte försöka se om man kan få in det här i ESPHome och sen vidare till Home Assistant.

Kod: Markera allt

PM2.5 particles: 0 ug/m3
PM2.5 particles: 0 ug/m3
PM2.5 particles: 0 ug/m3
PM2.5 particles: 326 ug/m3
PM2.5 particles: 35 ug/m3
PM2.5 particles: 34 ug/m3
PM2.5 particles: 31 ug/m3
PM2.5 particles: 28 ug/m3
PM2.5 particles: 25 ug/m3
PM2.5 particles: 22 ug/m3
PM2.5 particles: 0 ug/m3
PM2.5 particles: 0 ug/m3
PM2.5 particles: 0 ug/m3
Användarvisningsbild
sommarlov
Inlägg: 514
Blev medlem: 28 november 2015, 19:03:40
Ort: 08

Re: Ikea Vindriktning

Inlägg av sommarlov »

Hittade manualen för PM3006T (storebror för PM1006 som sitter i Ikea Vindriktning) i .pdf för de som vill spara den lokalt på er dator.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
rikkitikkitavi
Inlägg: 14826
Blev medlem: 21 juni 2003, 21:26:56
Ort: Väster om Lund (0,67 mSv)

Re: Ikea Vindriktning

Inlägg av rikkitikkitavi »

tack för denna. Inte för sensorn, men för ett rimligt prisat och format filter till luftrenaren :)
Garmen
Inlägg: 422
Blev medlem: 9 september 2020, 13:10:36
Ort: Norr om Stockholm

Re: Ikea Vindriktning

Inlägg av Garmen »

Kan den här specificationen vara till någon hjälp?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
sommarlov
Inlägg: 514
Blev medlem: 28 november 2015, 19:03:40
Ort: 08

Re: Ikea Vindriktning

Inlägg av sommarlov »

Så, nu sparas partikelvärdet i mitt home automation system varje 15:e minut, eller om värdet ändrar sig 10ug/m3 inom en kort tidsperiod. Visar upp aktuell partikelhalt samt de 3 nivåer som Ikea hade i sin manual för Vindriktning.
När jag fått lite historik på det där, blir den en graf oxo.
firefox_2021-07-13_17-34-01.png
(Har inte stoppat in en esp8266 i andra Vindriktningen, blir nästa steg).
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
janno
Inlägg: 403
Blev medlem: 11 oktober 2009, 07:34:45
Ort: Västerås

Re: Ikea Vindriktning

Inlägg av janno »

Jag köpte också en Vindriktning på IKEA.
Tog en Raspberry Pi Pico och prövade att göra ett microPython program för att läsa av, nu är jag ingen Python programmerare så mitt program ska tas med en nypa salt. går säkert att göra tusen gånger bättre, men tänkte att jag delar med mig om nån är intresserad. Jag utgick från ett blink och temperaturavläsningsexempel från dokumentationen så den koden finns kvar också.

För att dela ner UART 5V till 3.3V så använder jag en spänningsdelare däe "TX UT" går till GP 2 på Picon.

Kod: Markera allt

UART TX -> 3.3kohm --- 5.1kohm --- GND
                    |
                  TX UT

Kod: Markera allt

 
 # Example of using PIO for PWM, and fading the brightness of an LED

from machine import Pin
from machine import ADC
from machine import UART
from rp2 import PIO, StateMachine, asm_pio
from time import sleep


@asm_pio(sideset_init=PIO.OUT_LOW)
def pwm_prog():
    pull(noblock) .side(0)
    mov(x, osr) # Keep most recent pull data stashed in X, for recycling by noblock
    mov(y, isr) # ISR must be preloaded with PWM count max
    label("pwmloop")
    jmp(x_not_y, "skip")
    nop()         .side(1)
    label("skip")
    jmp(y_dec, "pwmloop")


class PIOPWM:
    def __init__(self, sm_id, pin, max_count, count_freq):
        self._sm = StateMachine(sm_id, pwm_prog, freq=2 * count_freq, sideset_base=Pin(pin))
        # Use exec() to load max count into ISR
        self._sm.put(max_count)
        self._sm.exec("pull()")
        self._sm.exec("mov(isr, osr)")
        self._sm.active(1)
        self._max_count = max_count

    def set(self, value):
        # Minimum value is -1 (completely turn off), 0 actually still produces narrow pulse
        value = max(value, -1)
        value = min(value, self._max_count)
        self._sm.put(value)

    def blink(self, value):
        for i in range(256):
            self.set(i ** 2)
            sleep(value)
        for i in range(256, 0, -1):
            self.set(i ** 2)
            sleep(value)

def ByteToHex( byteStr ):
    """
    Convert a byte string to it's hex string representation e.g. for output.
    """
    
    hex = ''.join( '{:02X}'.format(a) for a in byteStr)

    return hex.strip()        

    # return ''.join( [ "%02X " % ord( x ) for x in byteStr ] ).strip()

def Decodemessage( byteStr ):
    foundStart = False
    buffer = []
    length = 0
    cmd = 0
    data = float()
    for val in byteStr:
        if(not foundStart and val == 0x16): #HEAD 0x16
            foundStart = True
            buffer.append(val)
            continue
        
        if(foundStart and length == 0):
            length = val
            #print("packet Length read", length)
            buffer.append(val)
            continue
        
        if(foundStart and cmd == 0):
            cmd = val
            buffer.append(val)
            continue
        
        if(len(buffer) > length+1): # +1 to read the checksum
            buffer.append(val)
            #print("Length read")
            break
        
        if(foundStart):
            buffer.append(val)
            continue

       

    if(len(buffer) > 0):
        #print("Read buffer ", len(buffer))
        #print(ByteToHex(buffer))
        crc = 256
        for i in range(length):
            crc -= buffer[i]

        if(crc==buffer[len(buffer)-1]):
            # print("CRC OK")
            particles = buffer[5] * 256 + buffer[6]
            print("particles: {0} ug/m3".format(particles) )
        else:
            print("crc - error")
            print("calc crc {0:02X} = {1:02X}".format(crc, buffer[len(buffer)-1]))



# Pin 25 is LED on Pico boards
pwm = PIOPWM(0, 25, max_count=(1 << 16) - 1, count_freq=10_000_000)
temp_sensor = ADC(4)
to_volts = 3.3 / 65535
uart0 = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
rxData = bytes()

while True:
    pwm.blink(0.0005)
    temperature = temp_sensor.read_u16()
    temperature = temperature * to_volts
    celsius_degrees = 27 - (temperature - 0.706) / 0.001721
    # print(celsius_degrees, end = "\r")
    print(celsius_degrees)

    while uart0.any() > 0:
        rxData += uart0.read(1)
    Decodemessage(rxData)
    #print(ByteToHex(rxData))
    rxData = bytes()
 
Zkronk
Inlägg: 1423
Blev medlem: 23 augusti 2005, 16:44:36
Ort: Uppsala

Re: Ikea Vindriktning

Inlägg av Zkronk »

Nu har jag hunnit samla in en del data från min Vindriktning.
Över lag så verkar partikelnivåerna vara under kontroll, men ibland så ser man att nivån sticker iväg lite.
Jag antar att den suger in lite damm som flyger runt vid de tillfällena? :humm:
pm25.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
sommarlov
Inlägg: 514
Blev medlem: 28 november 2015, 19:03:40
Ort: 08

Re: Ikea Vindriktning

Inlägg av sommarlov »

En annan person har oxo hackat och gjort en lösning. Finns på HackADay.
https://hackaday.com/2021/07/24/esp8266 ... ty-sensor/
Användarvisningsbild
sommarlov
Inlägg: 514
Blev medlem: 28 november 2015, 19:03:40
Ort: 08

Re: Ikea Vindriktning

Inlägg av sommarlov »

Och nu har EspHome stöd för Vindriktning https://next.esphome.io/components/sensor/pm1006.html
simply
Inlägg: 497
Blev medlem: 19 januari 2006, 11:27:36
Ort: sthlm
Kontakt:

Re: Ikea Vindriktning

Inlägg av simply »

Grymt!

Det enda dryga med allt detta är ju att jag köpte en sensor-modul, dyrare, PRECIS innan jag fick nys om Vindriktning Bild

OH well ;)
Användarvisningsbild
lond
Inlägg: 3508
Blev medlem: 23 september 2009, 11:52:45
Ort: Hyssna

Re: Ikea Vindriktning

Inlägg av lond »

Också köpt några IKEA Vindriktning, men jag ville inte göra ett "ormbo"-inkoppling av ESP:n, så det blev ett dedikerat PCB ritat för uppgiften.

Minimalistiskt PCB där BOOT-strappen görs med en pincett på baksidan och laddning av kod sker via FTDI-kabel med pinnarna i spänn i hålen :) Uppdatering sker via OTA:
Bild

Valde att populera picoblade kontakten på IKEA Vindriktning:s kretskort för att ansluta mitt kretskort:
Bild

Kläms bakom skruvstolparna:
Bild

Inkopplat och klart att skruvas ihop:
Bild

Använder mig av Hypfer:s kod på git: https://github.com/Hypfer/esp8266-vindr ... cle-sensor

/// Marcus
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Ikea Vindriktning

Inlägg av GeekJoan »

Snyggt! :tumupp:

Har du fler kort?
Skriv svar