Ikea Vindriktning
Re: Ikea Vindriktning
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.
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.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Ikea Vindriktning
Blir en sväng förbi närmaste IKEA så snart som möjligt, verkar det onekligen som...
//
//
Re: Ikea Vindriktning
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³
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
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.
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
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.
-
- Inlägg: 14894
- Blev medlem: 21 juni 2003, 21:26:56
- Ort: Väster om Lund (0,67 mSv)
Re: Ikea Vindriktning
tack för denna. Inte för sensorn, men för ett rimligt prisat och format filter till luftrenaren
Re: Ikea Vindriktning
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.
Re: Ikea Vindriktning
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.
(Har inte stoppat in en esp8266 i andra Vindriktningen, blir nästa steg).
När jag fått lite historik på det där, blir den en graf oxo.
(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.
Re: Ikea Vindriktning
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.
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
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?
Ö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?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Ikea Vindriktning
En annan person har oxo hackat och gjort en lösning. Finns på HackADay.
https://hackaday.com/2021/07/24/esp8266 ... ty-sensor/
https://hackaday.com/2021/07/24/esp8266 ... ty-sensor/
Re: Ikea Vindriktning
Och nu har EspHome stöd för Vindriktning https://next.esphome.io/components/sensor/pm1006.html
Re: Ikea Vindriktning
Grymt!
Det enda dryga med allt detta är ju att jag köpte en sensor-modul, dyrare, PRECIS innan jag fick nys om Vindriktning
OH well
Det enda dryga med allt detta är ju att jag köpte en sensor-modul, dyrare, PRECIS innan jag fick nys om Vindriktning
OH well
Re: Ikea Vindriktning
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:
Valde att populera picoblade kontakten på IKEA Vindriktning:s kretskort för att ansluta mitt kretskort:
Kläms bakom skruvstolparna:
Inkopplat och klart att skruvas ihop:
Använder mig av Hypfer:s kod på git: https://github.com/Hypfer/esp8266-vindr ... cle-sensor
/// Marcus
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:
Valde att populera picoblade kontakten på IKEA Vindriktning:s kretskort för att ansluta mitt kretskort:
Kläms bakom skruvstolparna:
Inkopplat och klart att skruvas ihop:
Använder mig av Hypfer:s kod på git: https://github.com/Hypfer/esp8266-vindr ... cle-sensor
/// Marcus