Sida 2 av 4

Re: Ikea Vindriktning

Postat: 11 juli 2021, 18:09:03
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

Re: Ikea Vindriktning

Postat: 11 juli 2021, 19:18:48
av simply
Blir en sväng förbi närmaste IKEA så snart som möjligt, verkar det onekligen som...

//

Re: Ikea Vindriktning

Postat: 11 juli 2021, 22:22:22
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;
      }
    }
  }
}

Re: Ikea Vindriktning

Postat: 11 juli 2021, 22:36:09
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

Re: Ikea Vindriktning

Postat: 11 juli 2021, 22:58:08
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.

Re: Ikea Vindriktning

Postat: 12 juli 2021, 10:00:06
av rikkitikkitavi
tack för denna. Inte för sensorn, men för ett rimligt prisat och format filter till luftrenaren :)

Re: Ikea Vindriktning

Postat: 12 juli 2021, 15:52:42
av Garmen
Kan den här specificationen vara till någon hjälp?

Re: Ikea Vindriktning

Postat: 13 juli 2021, 17:37:42
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).

Re: Ikea Vindriktning

Postat: 15 juli 2021, 09:37:30
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()
 

Re: Ikea Vindriktning

Postat: 25 juli 2021, 20:22:45
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

Re: Ikea Vindriktning

Postat: 28 juli 2021, 11:03:53
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/

Re: Ikea Vindriktning

Postat: 28 juli 2021, 23:42:09
av sommarlov
Och nu har EspHome stöd för Vindriktning https://next.esphome.io/components/sensor/pm1006.html

Re: Ikea Vindriktning

Postat: 29 juli 2021, 01:36:08
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 ;)

Re: Ikea Vindriktning

Postat: 10 augusti 2021, 18:08:52
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

Re: Ikea Vindriktning

Postat: 10 augusti 2021, 23:59:25
av GeekJoan
Snyggt! :tumupp:

Har du fler kort?