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?
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?
Ja teils teils.
Der BinarySwitch mit 2 reedkontakten ist Batterie betrieben(pro mini modifiziert).
Der LightSensor hängt am USB Netzteil.
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.
Ok. Schau ich mir an.
Danke!
Die original Hearbeat Logik ist leider im FHEM Modul noch nicht integriert. :)
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)