HM-CC-SCD Nachbau mit CCS811 möglich?

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Antworten
Benutzeravatar
EdgarWollust
Beiträge: 2
Registriert: 30.01.2019, 18:17
Wohnort: Dresden

HM-CC-SCD Nachbau mit CCS811 möglich?

Beitrag von EdgarWollust » 04.05.2019, 20:27

Hallo liebe gemeinde,

wie der Titel es schon vermuten lässt, habe ich mir beim freundlichen Chinamann ein paar solcher ( CCS811) Sensoren bestellt
und wäre daran interessiert, diese als HM-CC-SCD nachzubauen. Als reine Arduino-Modul-Kombination bekomme ich werte, aber leider wurde das AskSin++-Projekt ja nur für einen Potentialfreien vorgesehen. Daher meine Frage, gibt es eine möglichkeit, besagten Sensor, welcher mittels I2C funktioniert, einzubinden in das AskSin++-Projekt? Leider stehen mir hierfür (noch) nicht genügend Programmierkenntnisse zur verfügung.

Vielen Dank im Voraus,
Euer Edgar.

Svenson
Beiträge: 12
Registriert: 26.09.2017, 21:57

Re: HM-CC-SCD Nachbau mit CCS811 möglich?

Beitrag von Svenson » 22.02.2021, 13:56

Hallo zusammen,

ich packe diesen Thread mal wieder aus, weil ich mir die gleiche Frage gestellt haben.
Aufgrund dessen habe ich mal versucht den Sensor hier einzubinden.
Vielen Dank an die großartige Vorarbeit von Jerome.
Die Idee dahinter war den CO2 ppm Wert auszuwerten und gemäß der Logik in der Vorlage in zwei boolsche Variablen zu schreiben.
Ich bekomme das Gerät in Homematic auch angezeigt und kann auch Einstellungen vornehmen.
Die Verdrahtung erfolgt SCL auf A5 und SDA auf A4, sowie Wake auf GND.

Ein Langzeittest steht noch aus, ebenso ob der Status richtig in Homematic übertragen wird. - Das konnte ich tatsächlich noch nicht sehen, weil ich es nicht geschafft habe den Sensor so zu manipulieren, dass er dauerhaft einen schlechten Wert anzeigt.
(Plastiktüte drüber und mit dem Strohhalm Ausatemluft reinblasen hält nicht so lange an.)

Beste Grüße
Svenson

Code: Alles auswählen

//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2016-10-31 papa Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
// 2021-02-21 Sensor ccs811 shalfen V 1.0
//- -----------------------------------------------------------------------------------------------------------------------

// define this to read the device id, serial and device type from bootloader section
// #define USE_OTA_BOOTLOADER

#define CFG_STEPUP_BYTE 0x00
#define CFG_STEPUP_OFF  0x00
#define CFG_STEPUP_ON   0x01

#define CFG_BAT_LOW_BYTE 0x01
#define CFG_BAT_CRITICAL_BYTE 0x02

//Die I2C Adresse ist definitiv 0x5A

// define device configuration bytes
#define DEVICE_CONFIG CFG_STEPUP_OFF,22,19

// 24 0030 4D455130323134373633 80 910101

#define EI_NOTEXTERNAL
#include <EnableInterrupt.h>
#include <AskSinPP.h>
#include <LowPower.h>
#include "Adafruit_CCS811.h"
#include "ccs811.h"
#include <Wire.h>
#include <Register.h>
#include <ContactState.h>
#include <ThreeState.h>

// nWAKE not controlled via Arduino host, so connect CCS811.nWAKE to GND
CCS811 ccs811;
// we use a Pro Mini
// Arduino pin for the LED
// D4 == PIN 4 on Pro Mini
#define LED1_PIN 4
#define LED2_PIN 5
// Arduino pin for the config button
// B0 == PIN 8 on Pro Mini
#define CONFIG_BUTTON_PIN 8
// SENS1 SENS2
//   0    0 = normal
//   0    1 = erhöht
//   1    0 = stark erhöht
bool SENS1;
bool SENS2;
int CO2;
// number of available peers per channel
#define PEERS_PER_CHANNEL 10
#define CYCLETIME seconds2ticks(60UL * 60 * 16)
// all library classes are placed in the namespace 'as'
using namespace as;
// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
  {0x13, 0x56, 0x34},     // Device ID
  "JPCCSCD001",           // Device Serial
  {0x00, 0x56},           // Device Model
  0x10,                   // Firmware Version
  as::DeviceType::ThreeStateSensor, // Device Type
  {0x01, 0x00}            // Info Bytes
};
class BatSensor : public BatterySensorUni<17,7,3000> {
  bool m_Extern;
public:
  // sense pin = A3 = 17, activation pin = D7 = 7
  BatSensor () : BatterySensorUni(), m_Extern(false) {}
  virtual ~BatSensor () {}

  void hasStepUp (bool value) {
    m_Extern = value;
    voltage();
  }
};
// * Configure the used hardware
// */
typedef AvrSPI<10, 11, 12, 13> SPIType;
typedef Radio<SPIType, 2> RadioType;
typedef DualStatusLed<LED2_PIN, LED1_PIN> LedType;
typedef AskSin<LedType, BatSensor, RadioType> BaseHal;
class Hal : public BaseHal {
  public:
    void init (const HMID& id) {
      BaseHal::init(id);
      // measure battery every 1h
      battery.init(seconds2ticks(60UL * 60), sysclock);
    }
} hal;
DEFREGISTER(Reg0, DREG_INTKEY, DREG_CYCLICINFOMSG, MASTERID_REGS, DREG_TRANSMITTRYMAX)
class RHSList0 : public RegList0<Reg0> {
  public:
    RHSList0(uint16_t addr) : RegList0<Reg0>(addr) {}
    void defaults () {
      clear();
      cycleInfoMsg(true);
      transmitDevTryMax(6);
    }
};
DEFREGISTER(Reg1, CREG_AES_ACTIVE, CREG_MSGFORPOS, CREG_EVENTDELAYTIME, CREG_LEDONTIME, CREG_TRANSMITTRYMAX)
class RHSList1 : public RegList1<Reg1> {
  public:
    RHSList1 (uint16_t addr) : RegList1<Reg1>(addr) {}
    void defaults () {
      clear();
      msgForPosA(1);
      msgForPosB(2);
      msgForPosC(3);
      ledOntime(100);
      transmitTryMax(6);
    }
};
typedef ThreeStateChannel<Hal, RHSList0, RHSList1, DefList4, PEERS_PER_CHANNEL> ChannelType;
class RHSType : public ThreeStateDevice<Hal, ChannelType, 1, RHSList0, CYCLETIME> {
  public:
    typedef ThreeStateDevice<Hal, ChannelType, 1, RHSList0, CYCLETIME> TSDevice;
    RHSType(const DeviceInfo& info, uint16_t addr) : TSDevice(info, addr) {}
    virtual ~RHSType () {}
virtual void configChanged () {
    TSDevice::configChanged();
    // set battery low/critical values
    battery().low(getConfigByte(CFG_BAT_LOW_BYTE));
    battery().critical(getConfigByte(CFG_BAT_CRITICAL_BYTE));
    // set the battery mode
    if( getConfigByte(CFG_STEPUP_BYTE) == CFG_STEPUP_ON ) {
      DPRINTLN("Use StepUp");
      battery().hasStepUp(true);
    }
  }
};
RHSType sdev(devinfo, 0x20);
ConfigButton<RHSType> cfgBtn(sdev);
void setup () {  
  DINIT(57600, ASKSIN_PLUS_PLUS_IDENTIFIER);
  sdev.init(hal);
  buttonISR(cfgBtn, CONFIG_BUTTON_PIN);
  const uint8_t posmap[4] = {Position::State::PosC, Position::State::PosC, Position::State::PosB, Position::State::PosA};
  sdev.channel(1).init(SENS1,SENS2,posmap);
  // Set frequency for CC1101
  hal.radio.initReg(CC1101_FREQ2, 0x21);
  hal.radio.initReg(CC1101_FREQ1, 0x65);
  hal.radio.initReg(CC1101_FREQ0, 0x7A);
  sdev.initDone();
  //Beginn CCS811
  //Serial.begin(9600);
  Serial.begin(57600);
  Serial.println("");
  Serial.println("setup: Starting CCS811 basic demo");
  Serial.print("setup: ccs811 lib  version: "); Serial.println(CCS811_VERSION);
  // Enable I2C
  Wire.begin();
  // Enable CCS811
  ccs811.set_i2cdelay(50); // Needed for ESP8266 because it doesn't handle I2C clock stretch correctly
  bool ok= ccs811.begin();
  if( !ok ) Serial.println("setup: CCS811 begin FAILED");
  // Print CCS811 versions
  Serial.print("setup: hardware    version: "); Serial.println(ccs811.hardware_version(),HEX);
  Serial.print("setup: bootloader  version: "); Serial.println(ccs811.bootloader_version(),HEX);
  Serial.print("setup: application version: "); Serial.println(ccs811.application_version(),HEX);
  // Start measuring
  ok= ccs811.start(CCS811_MODE_1SEC);
  if( !ok ) Serial.println("setup: CCS811 start FAILED");
}
void loop() {
  // Read
  uint16_t eco2, etvoc, errstat, raw;
  ccs811.read(&eco2,&etvoc,&errstat,&raw);
  CO2 = (eco2);
   //grün --> alles OK < 800 ppm
   //gelb --> CO2 Wert > 800 ppm
   //rot --> CO2 Wert > 1000 ppm
    if (CO2<800) {
      SENS1 = false;
      SENS2 = false;}
    if (CO2>800&&CO2<1000) {
        SENS1 = false;
        SENS2 = true;}
    if (CO2>1000) {
          SENS1 = true;
          SENS2 = false;}
  bool worked = hal.runready();
  bool poll = sdev.pollRadio();
}

jp112sdl
Beiträge: 8012
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 436 Mal
Danksagung erhalten: 972 Mal
Kontaktdaten:

Re: HM-CC-SCD Nachbau mit CCS811 möglich?

Beitrag von jp112sdl » 22.02.2021, 14:32

Svenson hat geschrieben:
22.02.2021, 13:56
ebenso ob der Status richtig in Homematic übertragen wird.
Wird er nicht.

Code: Alles auswählen

sdev.channel(1).init(SENS1,SENS2,posmap);
initialisiert Hardware-I/O-Pins. Anschließend wird zyklisch der Status der Pins abgefragt und bei Änderung des Pegels H/L entsprechend eine Meldung gesendet.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

PN sind deaktiviert!

Svenson
Beiträge: 12
Registriert: 26.09.2017, 21:57

Re: HM-CC-SCD Nachbau mit CCS811 möglich?

Beitrag von Svenson » 22.02.2021, 14:44

Hallo Jerome,

Vielen Dank für die schnelle Antwort. Bestünde die Möglichkeit mittels digitalWrite() die Pins auf High und Low zu heben?
Bzw. zwei andere Pins auf High und Low zu haben und auf Pin14 und Pin15 zu verdrahten?

Danke und Grüße Svenson

jp112sdl
Beiträge: 8012
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 436 Mal
Danksagung erhalten: 972 Mal
Kontaktdaten:

Re: HM-CC-SCD Nachbau mit CCS811 möglich?

Beitrag von jp112sdl » 22.02.2021, 17:44

Das ist alles nur von hinten durch die Brust.
Sinnvoller wäre es, eine eigene PinPosition Klasse zu bauen.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

PN sind deaktiviert!

Svenson
Beiträge: 12
Registriert: 26.09.2017, 21:57

Re: HM-CC-SCD Nachbau mit CCS811 möglich?

Beitrag von Svenson » 22.02.2021, 19:04

Ich versuche mich mal daran. Ich mache das ja aus dem Grund weil ich etwas lernen will. Deswegen finde ich es per se super, dass Du Hinweise gibst und nicht eine fertige Lösung vorgibst. Vielen Dank!

jp112sdl
Beiträge: 8012
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 436 Mal
Danksagung erhalten: 972 Mal
Kontaktdaten:

Re: HM-CC-SCD Nachbau mit CCS811 möglich?

Beitrag von jp112sdl » 22.02.2021, 19:19

Ist ja nicht so, dass ich nicht auch schon den "einfachen" Weg gegangen bin und einfach einen Ausgang- auf einen Eingang-Pin gebrückt habe :mrgreen:

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

PN sind deaktiviert!

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“