Fhem: Airwick Freshmatic Compact als Geruchs-Sensor mit MySensors umgebaut

fhemIch habe vor ungefähr zwei Jahren den Airwick Freshmatic Compact auseinandergenommen (-> Blog-Beitrag) und jetzt mit etwas mehr Kenntnissen in Fhem und MySensors mal wieder zur Brust genommen. Ziel war es, einen günstigen Geruchs-Sensor zu bauen, der alle paar Minuten (im Sketch einstellbar) seinen akkumulierten Wert drahtlos per MySensors (-> Blogbeiträge hier, hier) an Fhem sendet. Achtung: Die bei eBay angebotenen Airwick Compact Geräte haben keine Sensoren mehr, sind als für unsere Zwecke nicht zu gebrauchen.

Hardware und Software: Den Airwick Freshmatic Compact mit Geruchs-Sensor gibt es ab und zu noch bei eBay aber viel günstiger noch auf diversen Flohmärkten. Einzelne Packungen habe ich ihn hier im Ruhrgebiet noch öfter für kleines Geld gefunden. Achtung: Darauf achten, das wirklich ein Geruchs-Sensor dort verbaut ist! Problem ist das auseinanderbauen, aber wenn man ihn erfolgreich geöffnet hat, kann es schon losgehen.

v.l.n.r.Airwick freshmatic mit Geruchs-Sensor, Voltcraft, dahinter Weihnachtsbär :-)

v.l.n.r.Airwick freshmatic mit Geruchs-Sensor, Voltcraft, dahinter Weihnachtsbär 🙂

Lötkenntnisse sind hier erforderlich, wenn es gut aussehen soll. Hier habe ich zunächst die Hauptplatine und das Relais aus dem Freshmatic Compact entfernt, um ein bisschen mehr Platz zu haben. Als Platinen-Ersatz kommt ein Arduino-Nano (-> kaufen bei Amazon: Arduino Nano) zur Anwendung, zur Übertragung der Daten an Fhem über MySensors nehme ich einen nRF24L01+ (-> Amazon: nRF24L01+ ). Diese Module sind günstig, und wenn man sich schon mal ein Netzwerk mit MySensors aufgebaut hat, kann sich ja ein weiteres Modul ohne Probleme hinzugesellen. Der Schaltplan habe ich bei Heise gefunden, den initialen Sketch habe ich von Youtube genutzt. Für die MySensors-Abteilung habe ich den Licht-Sensors-Sketch von MySensors genommen, weil dieser ständig den analogen Port A0 abfragt, genau wie der Sketch vom YouTube-Video (-> hier ansehen). Zur zeitlichen Übermittlung des gemessenen Wertes an Fhem habe ich die Timer.h-Library verwendet.  Hier kann man mit dieser Programmzeile festlegen, wann der Wert in Fhem übertragen wird. In Fhem selber genügen nach Anlernen des nRFL024+ nur ein paar Zeilen, und schon steht die Laube. An der Front des Airwick Freshmatic Compact ist noch eine Doppel-LED angebracht, die wahlweise Rot oder Grün leuchtet. Diese LED kann man über einen 100 Ohm Widerstand mit dem D1 und D2 Pin des Arduino verbinden (Polung beachten) und schon sieht man auf einem Blick, ob gelüftet werden soll oder nicht. Im Sketch kann man die Hemmschwelle noch variieren.
Der Sketch ist sicherlich noch verbesserungswürdig, der Entwickler Koepi hat selber einige Verbesserungen noch gemacht. Die könnt ihr natürlich alle selber einbauen. Von meiner Seite her funktioniert jedoch der Airwick Freshmatic Compact Sensor mobil mit eingebauter 3 x AA Eneloop Akkus und auch per Netzteil einwandfrei.

Wenn ich mal wieder was am Sketch ändern möchte, kann ich ihn leicht wieder öffnen und den Nano wieder mit frischer Software versorgen.

Anwendungsgebiete für solche Geruchssensoren sind, wie im Heise-Beitrag beschrieben,  Bereiche der Hausautomation oder als Stand-Alone Geräte z.B. fürs Büro.
Bei Fragen, einfach fragen und wenn ihr den Sketch verbessern könntet .. dann mal los!

Fhem Source-Code (die ID ist bei Euch sicher eine andere):
define MYSENSOR_111 MYSENSORS_DEVICE 111
attr MYSENSOR_111 IODev gateway
attr MYSENSOR_111 alias Airwick
attr MYSENSOR_111 mapReading_brightness 0 brightness
attr MYSENSOR_111 mapReading_level 0 level
attr MYSENSOR_111 mode node
attr MYSENSOR_111 room Wohnung
attr MYSENSOR_111 stateFormat brightness
attr MYSENSOR_111 version 1.5
define FileLog_MYSENSOR_111 FileLog ./log/MYSENSOR_111-%Y.log MYSENSOR_111:brightness:.*
define SVG_FileLog_MYSENSOR_111_1 SVG FileLog_MYSENSOR_111:SVG_FileLog_MYSENSOR_111_1:CURRENT
attr SVG_FileLog_MYSENSOR_111_1 alias 1.3 Luftqualität Airwick Freshmatic Compact
attr SVG_FileLog_MYSENSOR_111_1 label "Luftqualität Airwick-Sensor min.: $data{min1}, max: $data{max1}, Letzte: $data{currval1}"
attr SVG_FileLog_MYSENSOR_111_1 room Plots

Das könnte Euch auch interessieren:

v.l.n.r.Airwick freshmatic mit Geruchs-Sensor, Voltcraft, dahinter Weihnachtsbär :-)

v.l.n.r.Airwick freshmatic mit Geruchs-Sensor, Voltcraft Geruchs-Sensor, dahinter Weihnachtsbär 🙂

freshmatic compact

airwick mit nano offen klein

 

Dieser Beitrag wurde unter Fhem-Hausautomation abgelegt und mit verschlagwortet. Setze ein Lesezeichen auf den Permalink.

9 Antworten zu Fhem: Airwick Freshmatic Compact als Geruchs-Sensor mit MySensors umgebaut

  1. Klaus sagt:

    Danke für deine Antwort.
    Meine kläglichen Versuche vom Einbau der mySensors Library habe ich weggelassen. 😉

    Wenn ich jetzt von dem Lichtsensor Sketch ausgehe, hänge ich da bei 2 Punkten fest.
    1. #define LIGHT_SENSOR_ANALOG_PIN 0
    In meinem Script ist der sensor ja schon definiert. Benötige ich beide Definitionen, oder lasse ich eine von beiden weg?

    2. void loop()
    {
    int lightLevel = (1023-analogRead(LIGHT_SENSOR_ANALOG_PIN))/10.23;
    Serial.println(lightLevel);
    if (lightLevel != lastLightLevel) {
    gw.send(msg.set(lightLevel));
    lastLightLevel = lightLevel;
    }
    gw.sleep(SLEEP_TIME);
    }

    Irgendwie bekomme ich diesen Part nicht in Einklang mit dem anderen Sketch.
    Sobald ich den Part versuche mit einzubauen, kommt nix gescheites per Serieller Ausgabe bei raus.

    Bin noch ziemlicher Newbie im Bereich Arduino programmierung.

    LG
    Klaus

  2. Robin sagt:

    Hallo Klaus,
    du musst natürlich die mySensors Library in dem Script inkludieren, sonst läufts auch nicht.

    LG
    /robin

  3. Klaus sagt:

    Hi Robin,
    mit großem Interesse habe ich deinen Beitrag zu dem Airwick Sensor gelesen.
    Da ich auch noch so einen bei mir rumstehen hatte, habe ich mich mal dran gesetzt und versucht, das ganze auch bei mir umzusetzen.

    Auf meinem Nano läuft erfolgreich folgendes Script:
    ///////////////////////////////////////////////////////
    //
    // AS-MLV_P VOC Sensor
    //
    // Test program
    //
    // (c) 2014 by Koepi
    //
    ///////////////////////////////////////////////////////

    #include

    #define heater 0b00000100 // Heater VCC on D2 (PinD2)
    #define sensor 0b00000001 // Sensor VCC/Input on A0 (PinC0)

    #define GREEN 0b00001000 // RGB LED green
    #define BLUE 0b00010000 // RGB LED blue
    #define RED 0b00100000 // RGB LED red

    volatile uint16_t sensor_val = 0;
    uint32_t sensor_ovs = 0;
    volatile uint32_t timer = 0;
    volatile uint16_t milliseconds = 0;
    volatile bool sent = false;
    volatile uint8_t ms_old = 0;

    ISR(TIMER0_COMPA_vect)
    {
    milliseconds++;
    if (milliseconds == 1001) {
    milliseconds = 0;
    timer++;
    }

    if (milliseconds & 0x02) { // PWM duty 25% for LED – switch on every 2nd uneven ms.
    if (sensor_val<500) {
    PORTD |= GREEN;
    } else if (sensor_val=1000) {
    PORTD |= RED;
    }
    } else PORTD&=~(RED|GREEN|BLUE); // switch all LEDs off again. It’s PWM! 😉
    }

    void setup() {
    // setup the sensor
    DDRD |= heater; // Heater is OUTPUT
    PORTD &= ~(heater); // Heater is OFF
    DDRC &= ~(sensor); // Sensor is INPUT
    PORTC &= ~(sensor); // Disable PullUp

    // ADC setup
    ADCSRA |= ((1<<ADPS2)|(1<<ADPS1)|(1< 125Khz ADC clock source
    ADMUX |= (1< No change in MUX register…
    ADCSRA |= (1<<ADEN); //Power up the ADC
    ADCSRA |= (1<<ADSC); //Start converting

    // setup the LED
    DDRD |= RED | GREEN | BLUE; // RGB LED is OUTPUT

    // setup timer for LED PWM
    cli(); // disable global interrupts
    TCNT0 = 0; // reset Timer2 counter value
    TCCR0A = (1 << WGM01); // CTC mode
    TCCR0B = (1 << CS02) | (1 < F_CPU / 1024 (Prescaler) /1000 (Hz) -1 -> 15,625Hz
    TIMSK0 = (1<= 100) && (milliseconds <=120)) { // heat up the sensor
    if (milliseconds & 0x01) PORTD |= heater; // turn on heating
    else PORTD &= ~(heater); // turn off heating
    }

    if (milliseconds == 121) PORTD &= ~(heater); // turn off heating

    if (milliseconds == 200) { // measure the sensor
    for (int i=0; i<64; i++) { // Oversampling
    ADCSRA |= (1<<ADSC); // Start a new conversion
    cli(); // disable interrupt
    while(ADCSRA & (1<<ADSC)); // Wait for the conversion to finish
    sensor_ovs += ADC <> 5);
    sensor_ovs=0;
    sent = false;
    milliseconds+=24; // compensate for measuring time
    }

    if (milliseconds == 250) { // print out results via serial console
    if (!sent) {
    sprintf(text, „$1;1;%u;“,timer);
    Serial.print(text);
    sprintf(text, „%u;0“,sensor_val);
    Serial.println(text);
    sent = true;
    }
    }
    }

    Leider verzweifle ich seit Tagen dabei, das ganze jetzt auch noch mit mysensors zu kombinieren.
    Entweder ich bekomme keine Readings, oder die LED macht was sie will…
    Könntest du mir da wohl etwas unter die Arme greifen?

    LG
    Klaus

  4. Robin sagt:

    Hallo Freshmatic,
    ich habe mir mal so ein Phaeton-Luftqualitätssensor bestellt. Mal sehen was kommt.
    LG
    /robin

  5. Robin sagt:

    Hallo Freshmatic,
    könnte man ja mal testweise kaufen und auseinander bauen! Klar, die heutigen Autos haben ja auch einen Sensor für schlechte Luft von draußen (also Straße).
    Danke für den Tipp!

    LG
    /robin

  6. Freshmatic sagt:

    Hi Robin,

    der Luftgütesenor aus dem VW Konzern 4B0907659B (Phaeton, Audi,…) wird bei Ebay in großen Mengen ab um die 10€ verkauft. Könnte das nicht die beworbene Automotive Variante des AS-MLV / iAQ Sensors sein, die damit besser verfügbar wäre als die wenigen Restposten bei Ebay
    http://www.ebay.de/sch/i.html?_armrs=1&_from=&_ipg=&_nkw=luftg%C3%BCtesensor&_sop=15

  7. Stefan sagt:

    Hallo Robin,
    ich versuche mich gerade daran, das ganze auch nachzubauen.
    Aber irgendwie bekomme ich keine gescheiten Readings. 🙁
    Verkabelt ist der Sensor wie Maker-Beitrag.
    Könntest du wohl deinen Sketch posten, mit dem du den Arduino gefüttert hast?
    Und auch noch ne Frage zu der LED:
    Welche Farbe auf D1 und welche auf D2?

    Gruß
    Stefan

  8. Robin sagt:

    Hallo Fresmatic,
    zeige mir die Müllkippe :-), ich fahre hin. Hast Recht, die Sensoren sind spitze. Ich habe testeweise zwei hier im Einsatz,auch sofort mit Fhem verbunden. Ich vergleiche die derzeitig noch mit dem Voltcraft-Luftqualitätssensor, sieht bisher gut aus. Die rot/grüne LED klappt auch gut. Gerade wenn ich beim geschlossenen Fenster am Löten bin, zeigt mir die rote LED nach einiger Zeit doch, das ich mal das Fenster öffnen sollte. Ich bin am überlegen, ob ich in dem weißen Freshmatic-Gehäuse noch ein Piezo-Beeper mit einbauen soll. Man schaut ja nicht automatisch ständig auf die LEDs vom Freshmatic. Alternativ kann ich natürlich auch in Fhem ein kurzes Skript schreiben, der dann beispielsweise auf mein Tablet eine kurze Sprachmeldung auswirft.
    Die Ideen sind grenzenlos 🙂

    LG
    /robin

  9. Fresmatic sagt:

    Oh wie geil! Das ist ja ein kl. Weihnachtsgeschenk.
    Der Freshmatic liegt schon rum, nRF24L01+ sind gerade aus China angekommen; MySensors ich komme!!!
    Zum Ausbau des Sensors: Ich habe mit dem Akkubohrer einfach die verschmelzten Plastiknietenköpfe aufgebohrt, dauert nur ein paar Sekunden, dann kann man das Gehäuse ganz leicht zerlegen.

    P.S.: Ich könnte heulen wieviele hunderttausende Freshmatics den den Müll gewandert sind.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.