Ich habe mir dank der asksinpp-Bibliothek einen eigenen Sensor gebaut.
Realisiert mit einer Universalplatine, die ich beim freundlichen Chinesen habe Fertigen lassen.
Grundsätzlich funktioniert alles - die Werte kommen in Raspberrymatic an. Allerdings zeigen einige Sensoren ein anderes Bild an den LEDs, als würden sie keine Bestätigung bekommen.
Es ist das gleiche Bild, als wenn Raspberrymatic aus ist.
Ein - in meinen Augen funktionierender Sensor - zeigt folgendes LED-Bild: Rote Led kurz, grüne LED kurz. Alles OK.
Ein nicht funktionierender Sensor (Werte kommen aber an!) zeigt folgendes Bild: Beide Leds für ca. 2s an. Nach 5s nochmal kurz die rote.
Sketch ist auf allen gleich - bis auf die Adresse.
Ich habe mal die serielle angeschlossen, leider kann ich mit der Ausgabe nichts anfangen. Könnte mal ein Wissender drüber schauen?
Danke und Gruß,
Micha
Funktionierender Sensor (am Ende 2 Übertragungen von Temperatur und Feuchte):
Code: Alles auswählen
AskSin++ V2.1.5 (May 6 2018 14:25:25)
Address Space: 32 - 73
CC init1
CC Version: 14
- ready
Bat: 27
<- 0C 01 A0 70 345683 670BD5 00 E0 27 - 1708
waitAck: 00
<- 0C 01 A0 70 345683 670BD5 00 E0 27 - 2344
waitAck: 00
<- 0C 01 A0 70 345683 670BD5 00 E0 27 - 2981
waitAck: 00
<- 0C 01 A0 70 345683 670BD5 00 E0 27 - 3618
waitAck: 00
<- 0C 01 A0 70 345683 670BD5 00 E0 27 - 4255
waitAck: 00
<- 0C 01 A0 70 345683 670BD5 00 E0 27 - 4892
waitAck: 00
<- 0C 02 A0 70 345683 670BD5 00 F0 25 - 6537
waitAck: 00
<- 0C 02 A0 70 345683 670BD5 00 F0 25 - 7174
waitAck: 00
<- 0C 02 A0 70 345683 670BD5 00 F0 25 - 7811
waitAck: 00
<- 0C 02 A0 70 345683 670BD5 00 F0 25 - 8448
waitAck: 00
<- 0C 02 A0 70 345683 670BD5 00 F0 25 - 9084
-> 0A 02 80 02 670BD5 345683 00 - 9220
waitAck: 01
<- 0C 03 A0 70 345683 670BD5 00 FD 24 - 10260
-> 0A 03 80 02 670BD5 345683 00 - 10395
waitAck: 01
Code: Alles auswählen
AskSin++ V2.1.5 (May 6 2018 13:34:36)
Address Space: 32 - 73
CC init1
CC Version: 14
- ready
Bat: 28
<- 0C 01 B0 70 345681 00FFFF 00 EC 2C - 2062
-> 0C 3F B0 70 345682 00FFFF 00 DE 24 - 2197
waitAck: 00
<- 0C 01 B0 70 345681 00FFFF 00 EC 2C - 3055
-> 0C 3F B0 70 345682 00FFFF 00 DE 24 - 3190
waitAck: 00
<- 0C 01 B0 70 345681 00FFFF 00 EC 2C - 4050
-> 0C 3F B0 70 345682 00FFFF 00 DE 24 - 4175
waitAck: 00
<- 0C 01 B0 70 345681 00FFFF 00 EC 2C - 5044
-> 0C 3F B0 70 345682 00FFFF 00 DE 24 - 5171
waitAck: 00
<- 0C 01 B0 70 345681 00FFFF 00 EC 2C - 6039
-> 0C 3F B0 70 345682 00FFFF 00 DE 24 - 6164
waitAck: 00
<- 0C 01 B0 70 345681 00FFFF 00 EC 2C - 7032
-> 0C 3F B0 70 345682 00FFFF 00 DE 24 - 7147
waitAck: 00
<- 0C 02 B0 70 345681 00FFFF 01 03 25 - 9033
waitAck: 00
<- 0C 02 B0 70 345681 00FFFF 01 03 25 - 10022
waitAck: 00
<- 0C 02 B0 70 345681 00FFFF 01 03 25 - 11014
waitAck: 00
<- 0C 02 B0 70 345681 00FFFF 01 03 25 - 12003
waitAck: 00
<- 0C 02 B0 70 345681 00FFFF 01 03 25 - 12992
waitAck: 00
<- 0C 02 B0 70 345681 00FFFF 01 03 25 - 13983
waitAck: 00
<- 0C 03 B0 70 345681 00FFFF 01 0D 25 - 15980
waitAck: 00
<- 0C 03 B0 70 345681 00FFFF 01 0D 25 - 16969
waitAck: 00
<- 0C 03 B0 70 345681 00FFFF 01 0D 25 - 17960
waitAck: 00
<- 0C 03 B0 70 345681 00FFFF 01 0D 25 - 18950
-> 14 E5 84 5E 623C73 000000 85 35 6C 00 00 00 00 00 09 5D FE - 19118
waitAck: 00
<- 0C 03 B0 70 345681 00FFFF 01 0D 25 - 19945
waitAck: 00
<- 0C 03 B0 70 345681 00FFFF 01 0D 25 - 20934
waitAck: 00
Code: Alles auswählen
//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2016-10-31 papa Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
//- -----------------------------------------------------------------------------------------------------------------------
// define this to read the device id, serial and device type from bootloader section
// #define USE_OTA_BOOTLOADER
#define EI_NOTEXTERNAL
#include <EnableInterrupt.h>
#include <AskSinPP.h>
#include <LowPower.h>
#include <Adafruit_SHT31.h>
Adafruit_SHT31 sht31 = Adafruit_SHT31();
#include <MultiChannelDevice.h>
// https://github.com/spease/Sensirion.git
//#include <Sensirion.h>
// we use a Pro Mini
// Arduino pin for the LED
// D4 == PIN 4 on Pro Mini
#define LED_PIN 4
// Arduino pin for the config button
// B0 == PIN 8 on Pro Mini
#define CONFIG_BUTTON_PIN 8
// number of available peers per channel
#define PEERS_PER_CHANNEL 6
//seconds between sending messages
#define MSG_INTERVAL 60
// all library classes are placed in the namespace 'as'
using namespace as;
// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
{0x34, 0x56, 0x83}, // Device ID
"HMTH000003", // Device Serial
//{0x00, 0x3d}, // Device Model Outdoor
{0x00, 0x3f}, // Device Model Indoor
0x10, // Firmware Version
as::DeviceType::THSensor, // Device Type
{0x01, 0x00} // Info Bytes
};
/**
Configure the used hardware
*/
typedef AvrSPI<10, 11, 12, 13> SPIType;
typedef Radio<SPIType, 2> RadioType;
typedef DualStatusLed<5,4> LedType;
typedef AskSin<LedType, BatterySensor, 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);
battery.low(22);
battery.critical(19);
}
bool runready () {
return sysclock.runready() || BaseHal::runready();
}
} hal;
class WeatherEventMsg : public Message {
public:
void init(uint8_t msgcnt, int16_t temp, uint8_t humidity, bool batlow) {
uint8_t t1 = (temp >> 8) & 0x7f;
uint8_t t2 = temp & 0xff;
if ( batlow == true ) {
t1 |= 0x80; // set bat low bit
}
Message::init(0xc, msgcnt, 0x70, BIDI, t1, t2);
pload[0] = humidity;
}
};
class WeatherChannel : public Channel<Hal, List1, EmptyList, List4, PEERS_PER_CHANNEL, List0>, public Alarm {
WeatherEventMsg msg;
int16_t temp;
uint8_t humidity;
//Sensirion sht10 = Sensirion(A4, A5);
uint16_t millis;
public:
WeatherChannel () : Channel(), Alarm(5), temp(0), humidity(0), millis(0) {}
virtual ~WeatherChannel () {}
// here we do the measurement
void measure () {
//DPRINT("Measure...\n");
//DPRINT("T: "); DDEC(sht31.readTemperature()); DPRINT(" H: "); DDECLN(sht31.readHumidity());
}
virtual void trigger (__attribute__ ((unused)) AlarmClock& clock) {
uint8_t msgcnt = device().nextcount();
// reactivate for next measure
tick = delay();
clock.add(*this);
measure();
msg.init(msgcnt, sht31.readTemperature()*10, sht31.readHumidity(), device().battery().low());
device().sendPeerEvent(msg, *this);
}
uint32_t delay () {
return seconds2ticks(MSG_INTERVAL);
}
void setup(Device<Hal, List0>* dev, uint8_t number, uint16_t addr) {
Channel::setup(dev, number, addr);
sysclock.add(*this);
}
uint8_t status () const {
return 0;
}
uint8_t flags () const {
return 0;
}
};
typedef MultiChannelDevice<Hal, WeatherChannel, 1> WeatherType;
WeatherType sdev(devinfo, 0x20);
ConfigButton<WeatherType> cfgBtn(sdev);
void setup () {
DINIT(57600, ASKSIN_PLUS_PLUS_IDENTIFIER);
sdev.init(hal);
buttonISR(cfgBtn, CONFIG_BUTTON_PIN);
sdev.initDone();
sht31.begin(0x44);
}
void loop() {
bool worked = hal.runready();
bool poll = sdev.pollRadio();
if ( worked == false && poll == false ) {
hal.activity.savePower<Sleep<>>(hal);
}
}