FHEM Forum

Verschiedenes => Bastelecke => MySensors => Thema gestartet von: popeye1979 am 13 Oktober 2016, 13:59:45

Titel: MySensors 2.0.0 Heartbeat
Beitrag von: popeye1979 am 13 Oktober 2016, 13:59:45
Hallo zusammen,

gibt es ein Heartbeat Example 2.0.0 Sketch?

Ich möchte das sich meine Sensoren 1(bis x)mal am Tag melden um zu signalisieren das sie noch leben. Hat dies jmd umgesetzt?
Titel: Antw:MySensors 2.0.0 Heartbeat
Beitrag von: gloob am 13 Oktober 2016, 14:11:16
Meine Temperatursensoren senden entweder nach Änderung oder alle 60 Minuten einen Wert. Auf FHEM Seite habe ich dann einen Watchdog laufen. Um was für Sensoren geht es dir denn?

Sind die Sensoren batteriebetrieben?
Titel: Antw:MySensors 2.0.0 Heartbeat
Beitrag von: popeye1979 am 13 Oktober 2016, 14:51:16
Ja teils teils.
Der BinarySwitch mit 2 reedkontakten ist Batterie betrieben(pro mini modifiziert).
Der LightSensor hängt am USB Netzteil.
Titel: Antw:MySensors 2.0.0 Heartbeat
Beitrag von: gloob am 13 Oktober 2016, 14:54:51
Zur not kannst du auch bei dem LightSensor mit Netzteil die Versorgungsspannung messen und senden.

/********************************************
*
* Sends battery information (battery percentage)
*
* Parameters
* - force : Forces transmission of a value
*
*******************************************/
void sendBattLevel(bool force)
{
  if (force) lastBattery = -1;
  long vcc = readVcc();
  if (vcc != lastBattery) {
    lastBattery = vcc;

#ifdef BATT_SENSOR
    float send_voltage = float(vcc)/1000.0f;
    send(msgBatt.set(send_voltage,3));
#endif

    // Calculate percentage

    vcc = vcc - 1900; // subtract 1.9V from vcc, as this is the lowest voltage we will operate at

    long percent = vcc / 14.0;
    sendBatteryLevel(percent);
    transmission_occured = true;
  }
}

/*******************************************
*
* Internal battery ADC measuring
*
*******************************************/
long readVcc() {
  // Read 1.1V reference against AVcc
  // set the reference to Vcc and the measurement to the internal 1.1V reference
  #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
    ADMUX = _BV(MUX5) | _BV(MUX0);
  #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
    ADcdMUX = _BV(MUX3) | _BV(MUX2);
  #else
    ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #endif 

  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Start conversion
  while (bit_is_set(ADCSRA,ADSC)); // measuring

  uint8_t low  = ADCL; // must read ADCL first - it then locks ADCH 
  uint8_t high = ADCH; // unlocks both

  long result = (high<<8) | low;

  result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
  return result; // Vcc in millivolts

}


Das ganze kann man sich dann einmal die Stunde schicken lassen und sieht auch ob der Sensor noch lebt.
Du müsstest halt nur schauen, wie du deinen BinarySwitch Sensor geweckt bekommst. Ich weiß nicht ob er ab und an automatisch aufwacht oder nur über einen Interrupt des Reed-Kontakts.
Titel: Antw:MySensors 2.0.0 Heartbeat
Beitrag von: popeye1979 am 13 Oktober 2016, 14:59:41
Ok. Schau ich mir an.

Danke!
Titel: Antw:MySensors 2.0.0 Heartbeat
Beitrag von: Hauswart am 13 Oktober 2016, 15:57:03
Die original Hearbeat Logik ist leider im FHEM Modul noch nicht integriert. :)
Titel: Antw:MySensors 2.0.0 Heartbeat
Beitrag von: gloob am 13 Oktober 2016, 15:59:48
Hier ist auch noch ein Thread im MySensors Forum dazu:

https://forum.mysensors.org/topic/4942/solved-no-heartbeat (https://forum.mysensors.org/topic/4942/solved-no-heartbeat)