Universelle Hardware-Basis für 868MHz Funksensoren und Aktoren

Begonnen von papa, 05 Juli 2017, 22:12:42

Vorheriges Thema - Nächstes Thema

papa

#390
Hm - vielleicht war das aber gar kein Hardwaredefekt. Ich vermute, die Listen der Channels im Flash waren nicht korrekt initialisiert. Bei komischen Verhalten sollte immer mal zuerst ein RESET (Konfig-Taster 6 Sekunden drücken) probiert werden. Dadurch wird beim nächsten Start der Flash neu initialisiert, da die Checksumme über die Peer/Listen-Konfiguration zurück gesetzt wird. Die Checksumme wird benutzt, um Änderungen der Anzahl der Channel/Listen/Peers zu erkennen und dann den Flash neu einzurichten.

Konkret könnte das Problem hier daraus resultieren, dass beim ersten Start das Define HM_SENSOR_RELAY nicht gesetzt war. Dadurch werden die internen Peerings nicht eingerichtet und die Taster schalten nicht.
Das der 4. Cannel immer nach dem Start On war, lag bestimmt am PowerUpAction-Regsiter. Mit diesem Resgister kann eingestellt werden, wie der Status nach dem Start sein soll.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Brasletti

OK, werd ich mir merken! Ich löt nochmal ein Board zusammen und gib Ihm noch ne Chance ;) Mal schauen was sich tut. Config Taster 6 Sekunden drücken während dem Hochfahren oder einfach 6 Sekunden gedrückt halten? Als ich das Board an der Seriellen Konsole hatte erkannte er das als Longpress.

papa

Einfach 6 Sekunden drücken, bis es anfängt schnell zu blinken. Auf der Console kommt auch die Ausgabe RESET.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Brasletti

So, alles gut!!! Genau wie papa vermutet hat. Und ich war schon auf dem Weg zum Mülleimer :)

Wie ist das mit dem HMSerial ? Muss ich für jedes RelaisModul eine neue Firmware kompilieren? Bei mir melden sich die Module immer mit dem HMSerial aus dem Sketch und nicht der vom Bootloader.

Dann hätte ich noch ne Frage zum WDS-10-TH-O, Irgendwo hab ich gelesen das man hier das Quarz benötigt, ist das so richtig? Wie sieht es dann mit den Fuses aus?

papa

Zitat von: Brasletti am 15 April 2018, 12:51:36
So, alles gut!!! Genau wie papa vermutet hat. Und ich war schon auf dem Weg zum Mülleimer :)
Na wäre doch Schade drum gewesen.
Zitat von: Brasletti am 15 April 2018, 12:51:36
Wie ist das mit dem HMSerial ? Muss ich für jedes RelaisModul eine neue Firmware kompilieren? Bei mir melden sich die Module immer mit dem HMSerial aus dem Sketch und nicht der vom Bootloader.
Du musst USE_OTA_BOOTLOADER definieren. Dann werden HMID, Type und Serial aus dem Bootloader gelesen.
Zitat von: Brasletti am 15 April 2018, 12:51:36
Dann hätte ich noch ne Frage zum WDS-10-TH-O, Irgendwo hab ich gelesen das man hier das Quarz benötigt, ist das so richtig? Wie sieht es dann mit den Fuses aus?
Ja -das Beispiel verwendet den Timer2 als RTC. Dazu muss ein 32,768kHz Quarz angeschlossen sein. Die Fuses werden durch das flash.sh immer richtig gesetzt. Dort wird grundsätzlich der Systemtakt auf den internen Taktgeber umgestellt.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Brasletti


Fixel2012

Hallo miteinander,

ich lese schon ca. seit einem halben Jahr gespannt mit, meine Bauteile warten auch schon seit 3 Monaten verarbeitet zu werden. Nun will ich die Gelegenheit nutzen und gerne Fhem meinen Türöffner surren lassen. Um beim vergessen des Schlüssels etc. bequem mit meinem Handy die Tür zu öffnen.

Ich habe bisher noch nicht viel Erfahrung mit Mikrocontrollern gesammelt und auch das SMD löten ist noch verbesserungswürdig. Ich würde mich allerdings trotzdem gerne mit ein wenig Hilfe eurerseits in die Materie einarbeiten.

Der selbstgebaute HomeMatic Aktor müsste dann also ein (Ich schätze max 12 Volt) Stromkabel der Klingel durchschleifen und ebenso wieder unterbrechen können.

Wie Realisiere ich dies am besten Hardware Technisch? Kann ich den Aktor anschließend mit einem 12 Volt Netzteil betreiben? Schätze ich brauche dann einen Stepdown? Oder doch lieber Batterien, obwohl 12 Volt (und ebenso etwas weiter weg 5V) vor Ort liegen?

Welcher Sketch eignet sich am besten und welche Bauteile muss ich wo anlöten?


Sorry für die blöden Fragen!  ::)

-Felix
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

Brasletti

Mein I2C Board gibt die ersten Zeichen von sich  :)

Momentan hänge ich jedoch etwas in der Luft mit dem TSL2561, der liefert mir immer nur den Wert 64512. (wenigstens kommt was aus raus, bei dem Hatte ich so meine Bedenken beim Löten.

Mein HM-WDS-TH-O Sketch sieht so aus:

//- -----------------------------------------------------------------------------------------------------------------------
// 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 <Register.h>
#include <MultiChannelDevice.h>
//#include <OneWire.h>
//#include <sensors/Ds18b20.h>
#include <sensors/Tsl2561.h>
//#include <sensors/Bh1750.h>
#include <sensors/Bmp180.h>
#include <sensors/Sht10.h>
//#include <sensors/Dht.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

// all library classes are placed in the namespace 'as'
using namespace as;

// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
    {0x34,0x56,0x78},       // Device ID
    "papa111111",           // Device Serial
    {0x00,0x3d},            // Device Model
    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 StatusLed<4> LedType;
typedef AskSin<LedType,BatterySensor,RadioType> BaseHal;
class Hal : public BaseHal {
public:
  void init (const HMID& id) {
    BaseHal::init(id);
    // init real time clock - 1 tick per second
    rtc.init();
    // measure battery every 1h
    battery.init(60UL*60,rtc);
    battery.low(22);
    battery.critical(19);
  }

  bool runready () {
    return rtc.runready() || BaseHal::runready();
  }
} hal;

class WeatherEventMsg : public Message {
public:
  void init(uint8_t msgcnt, int16_t temp, uint16_t pressure, uint8_t humidity, uint16_t brightness, 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] = (pressure >> 8) & 0xff;
      pload[1] = pressure & 0xff;
     
      // humidity
      pload[2] = humidity;
     
      // brightness (Lux)
      pload[3] = (brightness >> 8) & 0xff;
      pload[4] = brightness & 0xff;
   }
};

DEFREGISTER(WeatherRegsList0,MASTERID_REGS,DREG_BURSTRX)
typedef RegList0<WeatherRegsList0> WeatherList0;


class WeatherChannel : public Channel<Hal,List1,EmptyList,List4,PEERS_PER_CHANNEL,WeatherList0>, public Alarm {

  uint16_t        millis;
//  Dht<6,DHT11>      dht11;
  Sht10<A4,A5>    sht10;
  Bmp180          bmp180;
  Tsl2561<TSL2561_ADDR_LOW>       tsl2561;
//  Bh1750<>        bh1750;
//  Ds18b20         ds18b20;
//  OneWire         ow;

public:
//  WeatherChannel () : Channel(), Alarm(5), millis(0), ow(6) {}
  WeatherChannel () : Channel(), Alarm(5), millis(0) {}
  virtual ~WeatherChannel () {}

  virtual void trigger (__attribute__ ((unused)) AlarmClock& clock) {
    // wait also for the millis
    if( millis != 0 ) {
      tick = millis2ticks(millis);
      millis = 0; // reset millis
      sysclock.add(*this); // millis with sysclock
    }
    else {
      uint8_t msgcnt = device().nextcount();
      measure();
      WeatherEventMsg& msg = (WeatherEventMsg&)device().message();
//      msg.init(msgcnt,dht11.temperature(),dht11.humidity(),device().battery().low());
      msg.init(msgcnt,sht10.temperature(),bmp180.pressure(),sht10.humidity(),tsl2561.brightness(),device().battery().low());
//      msg.init(msgcnt,0,0,device().battery().low());
      device().sendPeerEvent(msg,*this);
//      device().send(msg,device().getMasterID());

      // reactivate for next measure
      HMID id;
      device().getDeviceID(id);
      uint32_t nextsend = delay(id,msgcnt);
      tick = nextsend / 1000; // seconds to wait
      millis = nextsend % 1000; // millis to wait
      rtc.add(*this);
    }
  }

  // here we do the measurement
  void measure () {
    DPRINTLN("Measure...  ");
//    dht11.measure();
//    DPRINT("T: ");DDEC(dht11.temperature());DPRINT("  H: ");DDECLN(dht11.humidity());
    sht10.measure();
    DPRINT("T: ");DDEC(sht10.temperature());DPRINT("  H: ");DDECLN(sht10.humidity());
    bmp180.measure();
    DPRINT("T: ");DDEC(bmp180.temperature());DPRINT("  P: ");DDECLN(bmp180.pressure());
    tsl2561.measure();
    DPRINT("H: ");DDECLN(tsl2561.brightness());
//    bh1750.measure();
//    DPRINT("H: ");DDECLN(bh1750.brightness());
//    ds18b20.measure();
//    DPRINT("T: ");DDECLN(ds18b20.temperature());
  }

  // here we calc when to send next value
  uint32_t delay (const HMID& id,uint8_t msgcnt) {
    uint32_t value = ((uint32_t)id) << 8 | msgcnt;
    value = (value * 1103515245 + 12345) >> 16;
    value = (value & 0xFF) + 480;
    value *= 250;

    DDEC(value / 1000);DPRINT(".");DDECLN(value % 1000);

    return value;
  }

  void setup(Device<Hal,WeatherList0>* dev,uint8_t number,uint16_t addr) {
    Channel::setup(dev,number,addr);
    tick = 5;
    rtc.add(*this);
//    dht11.init();
    sht10.init();
    bmp180.init();
    tsl2561.init();
//    bh1750.init();
//    Ds18b20::init(ow, &ds18b20, 1);
  }

  uint8_t status () const {
    return 0;
  }

  uint8_t flags () const {
    return 0;
  }

};


typedef MultiChannelDevice<Hal,WeatherChannel,1,WeatherList0> 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();
}

void loop() {
  bool worked = hal.runready();
  bool poll = sdev.pollRadio();
  if( worked == false && poll == false ) {
    hal.activity.savePower<SleepRTC>(hal);
  }
}


Die Lötbrücke für die Adresse habe ich gegen GND geschlossen.

Auf der Seriellen Konsole kommen bei den anderen beiden Sensoren die richtigen Werte nur bei der Übertragung hab ich wohl noch etwas übersehen
(Serielle Konsole)
Temperatur vom SHT10 bzw. vom BMP180 scheinen korrekt zu sein wenn man ein Stelle für das Komma einfügt.
Luftfeuchtigkeit des SHT10 ist auch plausiebel mit 45 [%]
Luftdruck des BMP180 mit 974 [mBar] auch.

(eventMonitor)
2018-04-16 22:41:00 CUL_HM HM_003D01 battery: ok
2018-04-16 22:41:00 CUL_HM HM_003D01 humidity: 3
2018-04-16 22:41:00 CUL_HM HM_003D01 T: 22.8 H: 3
2018-04-16 22:41:00 CUL_HM HM_003D01 temperature: 22.8

Vieleicht kann mir jemand beim TSL2561 noch auf die Sprünge helfen.

Viele Grüße

Tom Major

ZitatMomentan hänge ich jedoch etwas in der Luft mit dem TSL2561, der liefert mir immer nur den Wert 64512. (wenigstens kommt was aus raus, bei dem Hatte ich so meine Bedenken beim Löten.

Du meinst der Wert 64512 kommt immer über die serielle Konsole an dieser Stelle, also bereits direkt nach tsl2561.measure() ?

tsl2561.measure();
DPRINT("H: ");DDECLN(tsl2561.brightness());


Wird der Sensor korrekt initialisiert? Mach z.B. mal eine Debug Ausgabe in deine Tsl2561.h hinter diese Zeile
if( (_present = _tsl.begin()) == true ) {
um zu sehen ob init erfolgreich ist.
Hier kannst Du das beispielhaft sehen:
https://github.com/TomMajor/AskSinPP_Examples/blob/master/HB-UNI-Sensor1/Sensors/Sens_Tsl2561.h
Zeile 35
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

chipmunk

Hallo Fixel2012
Den Türöffner betätigst du am Besten mittels Relais.
Suche als erstes den Klingeltrafo und schau' dir die Ausgangsspannung und den max. Strom an.
Wenn du keinen findest, miß VORSICHTIG, ob da nicht doch 230V verwendet werden. (Ist zwar unüblich, gibt es aber doch manchmal, speziell beim Türöffner)
Für die Versorgung der Schaltung wirst du ziemlich sicher mehr als einen Stepdownregler brauchen, da Klingel und Türöffner normalerweise mit Wechselspannung versorgt werden.
Also ist zumindest noch ein Gleichrichter nötig, sonst demolierst du die Schaltung.
Es kann auch sein, dass der Öffner die Spannung recht stark einbrechen läßt und damit die Schaltung unterversorgt wird, das solltest du auch messen.
Du musst einmal ausmessen, wie Klingel und Öffner verschaltet sind, dann kannst du überlegen, wie das Ganze zu realisieren ist.
Sonst könnte es sein, dass beim Öffnen jedesmal die Klingel läutet :)

Chipmunk
RasPi3, HM, HUE, div 433MHz Baumarktdosen über Sende- und Empfangsmodule von C*, Ediplug

pc1246

Zitat von: Fixel2012 am 16 April 2018, 18:03:40
Hallo miteinander,

ich lese schon ca. seit einem halben Jahr gespannt mit, meine Bauteile warten auch schon seit 3 Monaten verarbeitet zu werden. Nun will ich die Gelegenheit nutzen und gerne Fhem meinen Türöffner surren lassen. Um beim vergessen des Schlüssels etc. bequem mit meinem Handy die Tür zu öffnen.

Ich habe bisher noch nicht viel Erfahrung mit Mikrocontrollern gesammelt und auch das SMD löten ist noch verbesserungswürdig. Ich würde mich allerdings trotzdem gerne mit ein wenig Hilfe eurerseits in die Materie einarbeiten.

Der selbstgebaute HomeMatic Aktor müsste dann also ein (Ich schätze max 12 Volt) Stromkabel der Klingel durchschleifen und ebenso wieder unterbrechen können.

Wie Realisiere ich dies am besten Hardware Technisch? Kann ich den Aktor anschließend mit einem 12 Volt Netzteil betreiben? Schätze ich brauche dann einen Stepdown? Oder doch lieber Batterien, obwohl 12 Volt (und ebenso etwas weiter weg 5V) vor Ort liegen?

Welcher Sketch eignet sich am besten und welche Bauteile muss ich wo anlöten?


Sorry für die blöden Fragen!  ::)

-Felix
Moin
Es gab hier auch mal ein Relais-Bausatz HM, der wuerde das gewuenschte erfuellen.
Gruss Christoph
HP T610
Onkyo_AVR;Enigma2; SB_Server; SB_Player; HM-USB; PhilipsTV; harmony hub; Jeelink mit PCA301; Somfy; S7-300; LGW; HUE; HM-IP auf Charly; div

Brasletti

@Tom Major: so wie es ausschaut wird er initialisiert.
AskSin OTA Bootloader V0.7.0

Start App
AskSin++ V2.1.5 (Apr 17 2018 15:31:30)
Success: found TSL2561 sensor
Address Space: 32 - 73
CC init1
CC Version: 14
- ready
Bat: 30
Measure... 
T: 239  H: 36
T: 243  P: 978
H: 64512
<- 0C 01 A0 70 003D01 616264 00 EF 03  - 2256
waitAck: 00
<- 0C 01 A0 70 003D01 616264 00 EF 03  - 2891
waitAck: 00
<- 0C 01 A0 70 003D01 616264 00 EF 03  - 3528
waitAck: 00
<- 0C 01 A0 70 003D01 616264 00 EF 03  - 4165
waitAck: 00
<- 0C 01 A0 70 003D01 616264 00 EF 03  - 4800
waitAck: 00
<- 0C 01 A0 70 003D01 616264 00 EF 03  - 5437
waitAck: 00
123.250


Die geänderte TSL2561.h schaut jetzt so aus
//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2018-04-03 papa Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
//- -----------------------------------------------------------------------------------------------------------------------

#ifndef __SENSORS_TSL2561_h__
#define __SENSORS_TSL2561_h__

#include <Sensors.h>
#include <Wire.h>
#include <TSL2561.h>

namespace as {

// https://github.com/adafruit/TSL2561-Arduino-Library
template <int ADDRESS=TSL2561_ADDR_LOW>
class Tsl2561 : public Brightness {
  ::TSL2561   _tsl;
  bool        _x16;
public:
  Tsl2561 () : _tsl(ADDRESS), _x16(true) {}
  void init () {
    if( (_present = _tsl.begin()) == true ) {
      _tsl.setGain(TSL2561_GAIN_16X);
      _tsl.setTiming(TSL2561_INTEGRATIONTIME_402MS);
   DPRINTLN("Success: found TSL2561 sensor");
    }
  }
  void measure (__attribute__((unused)) bool async=false) {
    if( present() == true ) {
      uint16_t b = _tsl.getLuminosity(TSL2561_VISIBLE);
      if( b > 63000 && _x16 == true ) {
        _x16 = false;
        _tsl.setGain(TSL2561_GAIN_0X);
        b = _tsl.getLuminosity(TSL2561_VISIBLE);
      }
      else if ( b < 500 && _x16 == false ) {
        _x16 = true;
        _tsl.setGain(TSL2561_GAIN_16X);
        b = _tsl.getLuminosity(TSL2561_VISIBLE);
      }
      _brightness = b;
    }
  }
};

}

#endif



Ich hab auch schon einen zweiten TSL2561 aufgelötet, weil ich dachte dass der erste vieleicht nen Schuss hat ;)

Tom Major

Hmm, die Debug Ausgabe in init() war ein Test zur Fehlereingrenzung. Darin liegt es also nicht.
Der zweite TSL2561 gibt genauso 64512 wie der erste aus? Auf den ersten Blick sehe ich nichts weiter in Deinem sketch woran das liegen könnte.
Verwendest Du 8MHz Quarz?

Bevor ich bei mir im Universalsensor https://github.com/TomMajor/AskSinPP_Examples/tree/master/HB-UNI-Sensor1 den TSL2561 eingebunden habe hatte ich einen kurzen Test für jeden Sensor gemacht, der für den TSL2561 sah so aus:

#include <Wire.h>
#include "TSL2561.h"

// Example for demonstrating the TSL2561 library - public domain!

// connect SCL to analog 5
// connect SDA to analog 4
// connect VDD to 3.3V DC
// connect GROUND to common ground
// ADDR can be connected to ground, or vdd or left floating to change the i2c address

// The address will be different depending on whether you let
// the ADDR pin float (addr 0x39), or tie it to ground or vcc. In those cases
// use TSL2561_ADDR_LOW (0x29) or TSL2561_ADDR_HIGH (0x49) respectively
TSL2561 tsl(TSL2561_ADDR_FLOAT);


void setup(void) {
 
  //cc1101_powerdown();
 
  Serial.begin(57600);
 
  if (tsl.begin()) {
    Serial.println("Found sensor");
  } else {
    Serial.println("No sensor?");
    while (1);
  }
   
  // You can change the gain on the fly, to adapt to brighter/dimmer light situations
  //tsl.setGain(TSL2561_GAIN_0X);         // set no gain (for bright situtations)
  tsl.setGain(TSL2561_GAIN_16X);      // set 16x gain (for dim situations)
 
  // Changing the integration time gives you a longer time over which to sense light
  // longer timelines are slower, but are good in very low light situtations!
  //tsl.setTiming(TSL2561_INTEGRATIONTIME_13MS);  // shortest integration time (bright light)
  tsl.setTiming(TSL2561_INTEGRATIONTIME_101MS);  // medium integration time (medium light)
  //tsl.setTiming(TSL2561_INTEGRATIONTIME_402MS);  // longest integration time (dim light)
 
  // Now we're ready to get readings!
}

void loop(void) {
  // Simple data read example. Just read the infrared, fullspecrtrum diode
  // or 'visible' (difference between the two) channels.
  // This can take 13-402 milliseconds! Uncomment whichever of the following you want to read
  //uint16_t x = tsl.getLuminosity(TSL2561_VISIBLE);     
  //uint16_t x = tsl.getLuminosity(TSL2561_FULLSPECTRUM);
  //uint16_t x = tsl.getLuminosity(TSL2561_INFRARED);
  //Serial.println(x, DEC);

  // More advanced data read example. Read 32 bits with top 16 bits IR, bottom 16 bits full spectrum
  // That way you can do whatever math and comparisons you want!
  uint32_t lum = tsl.getFullLuminosity();
  Serial.println(lum, HEX);
  uint16_t ir, full;
  ir = lum >> 16;
  full = lum & 0xFFFF;
  Serial.print("IR: "); Serial.print(ir);   Serial.print("\t\t");
  Serial.print("Full: "); Serial.print(full);   Serial.print("\t");
  Serial.print("Visible: "); Serial.print(full - ir);   Serial.print("\t");
 
  Serial.print("Lux: "); Serial.println(tsl.calculateLux(full, ir));
 
  delay(2000);

  //LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);   
}


Das könntest Du testweise probieren. Du musst natürlich TSL2561_ADDR_FLOAT an Deine Verdrahtung anpassen.
Library verwende ich diese https://github.com/adafruit/TSL2561-Arduino-Library (habe nicht geprüft ob Du die gleiche hast).
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

Horti

Zitat von: pc1246 am 17 April 2018, 07:45:04
Es gab hier auch mal ein Relais-Bausatz HM, der wuerde das gewuenschte erfuellen.

Genau, das Ding ist prädestiniert dafür:
https://wiki.fhem.de/wiki/Relaisplatine-Homebrew-MySensors

Brasletti

@TomMajor: Irgendwie kommt es mir so vor, wenn ich einpaar Bilder vergleiche, als hätten mir die Chinesen  einen TSL2591 geschickt.
Dein Testsketch liefert auch keine plausiblen Daten. Vielleicht spuckt er ja was mit der Lib vom 2591er aus.