Hi,
Ich habe eine SenseBox home und dazu die Sensoren für Feinstaub, Feuchtigkeit, Schallpegel und UV gekauft. Im Rahmen einer Bachelorarbeit möchte ich damit beweisen dass sich LoRa dazu eignet Feinstaubbelastungen an Hauptstraßen in Berlin zu messen.
Ich verwende dazu die LoRa Anbindung.
Ich bin die Anleitung sehr oft von vorne bis hinten durch gegangen und habe Accounts bei TTN erstellt und mir Code von der Sensemap erstellen lassen und die Devide EUI, Application EUI und Application Key in die drei Klammern um Code eingefügt. Die ersten beiden im lsf Format und den App key im man Format so wie in der Anleitung beschrieben.
Es funktioniert einfach nicht. Im TTN kamen noch nie Daten an. Ich wohne in Schöneweide in Berlin und müsste perfekten Empfang haben da ich in Nähe meiner Hochschule (HTW Berlin) wohne wo eine sendeeinheit installiert ist. Ansonsten sind auch im TTN Mapper durchgängig verfügbare andere Sender an meinem Standort angeheizt am Empfang kann es also nicht liegen.
Mir läuft nach so langem herum probieren jetzt Die Zeit davon um meine Messungen für die BA durchführen zu können. Kann mir jemand bei meinem Problem helfen?
Vielen Dank schon mal!!!
Moin @Nino,
kannst du mal checken ob Daten bei TTN ankommen wenn du den Feinstaubsensor vor dem Start der Box aussteckst? Hier Keine Daten bei Start mit angeschlossenem Feinstaubsensor gab es ein ähnliches Problem. Es könnte ggf. am USB-Kabel liegen (warum genau wissen wir selber noch nicht) und wenn du noch andere MicroUSB Kabel hast, dann probiere die gerne mal aus.
Falls das nichts bringt, könntest du vielleicht noch andere Standorte draußen ausprobieren. Man kann sich nicht immer 100%ig auf den TTN Mapper verlassen, vor allem in Gebäuden schwankt die Sendeleistung.
Viele Grüße
Felix
Hi Felix,
ich habe schon verschiedene USB Kabel ausprobiert und auch schon Code erstellen lassen der nur für Feuchtigkeitssensor und UV Sensor gilt und den Schall und Feinstaubsensoren den Stecker gezogen.
Ich bin jetzt 200 meter vom LoRa Sender im freien entfernt und sitze neben einem Bienenstock der eine LoRa Sensebox hat die auch empfang hat.
Das hier ist der Quellcode der mir von der Opensensemap generiert wurde den nutze ich im Moment (Ohne Feinstaub und Schallpegelsensor):
/*
senseBox:home - Citizen Sensingplatform
Version: lorav2.0.0
Date: 2018-09-11
Homepage: https://www.sensebox.de https://www.opensensemap.org
Author: Reedu GmbH & Co. KG
Note: Sketch for senseBox:home LoRa MCU Edition
Model: homeV2lora
Email: support@sensebox.de
Code is in the public domain.
https://github.com/sensebox/node-sketch-templater
*/
#include <LoraMessage.h>
#include <lmic.h>
#include <hal/hal.h>
#include <SPI.h>
#include <senseBoxIO.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_HDC1000.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_BME680.h>
#include <Makerblog_TSL45315.h>
#include <VEML6070.h>
#include <SDS011-select-serial.h>
#include <SparkFun_SCD30_Arduino_Library.h>
// Uncomment the next line to get debugging messages printed on the Serial port
// Do not leave this enabled for long time use
// #define ENABLE_DEBUG
#ifdef ENABLE_DEBUG
#define DEBUG(str) Serial.println(str)
#else
#define DEBUG(str)
#endif
// Connected sensors
// Temperatur
#define HDC1080_CONNECTED
// rel. Luftfeuchte
#define HDC1080_CONNECTED
// Beleuchtungsstärke
#define TSL45315_CONNECTED
// UV-Intensität
#define VEML6070_CONNECTED
// Number of serial port the SDS011 is connected to. Either Serial1 or Serial2
#ifdef SDS011_CONNECTED
#define SDS_UART_PORT (Serial1)
#endif
//Load sensors / instances
#ifdef HDC1080_CONNECTED
Adafruit_HDC1000 HDC = Adafruit_HDC1000();
float temperature = 0;
float humidity = 0;
#endif
#ifdef BMP280_CONNECTED
Adafruit_BMP280 BMP;
double pressure;
#endif
#ifdef TSL45315_CONNECTED
uint32_t lux;
Makerblog_TSL45315 TSL = Makerblog_TSL45315(TSL45315_TIME_M4);
#endif
#ifdef VEML6070_CONNECTED
VEML6070 VEML;
uint16_t uv;
#endif
#ifdef SDS011_CONNECTED
SDS011 SDS(SDS_UART_PORT);
float pm10 = 0;
float pm25 = 0;
#endif
#ifdef SMT50_CONNECTED
#define SOILTEMPPIN 0
#define SOILMOISPIN 1
#endif
#ifdef SOUNDLEVELMETER_CONNECTED
#define SOUNDMETERPIN 0
#endif
#ifdef BME680_CONNECTED
Adafruit_BME680 BME;
#endif
#ifdef WINDSPEED_CONNECTED
#define WINDSPEEDPIN 0
#endif
#ifdef SCD30_CONNECTED
SCD30 SCD;
#endif
// This EUI must be in little-endian format, so least-significant-byte (lsb)
// first. When copying an EUI from ttnctl output, this means to reverse
// the bytes.
static const u1_t PROGMEM DEVEUI[8]= { 0xB3, 0xA8, 0xF1, 0x43, 0x1A, 0xB4, 0x68, 0x00 } ;
void os_getDevEui (u1_t* buf) { memcpy_P(buf, DEVEUI, 8);}
// This EUI must be in little-endian format, so least-significant-byte (lsb)
// first. When copying an EUI from ttnctl output, this means to reverse
// the bytes. For TTN issued EUIs the last bytes should be 0xD5, 0xB3,
// 0x70.
static const u1_t PROGMEM APPEUI[8]= { 0xF7, 0xAF, 0x03, 0xD0, 0x7E, 0xD5, 0xB3, 0x70 };
void os_getArtEui (u1_t* buf) { memcpy_P(buf, APPEUI, 8);}
// This key should be in big endian format (msb) (or, since it is not really a
// number but a block of memory, endianness does not really apply). In
// practice, a key taken from ttnctl can be copied as-is.
// The key shown here is the semtech default key.
static const u1_t PROGMEM APPKEY[16] = { 0x99, 0xB0, 0x2E, 0x11, 0xC8, 0x86, 0xA4, 0xC8, 0xFA, 0x53, 0xFE, 0x78, 0x12, 0x8F, 0x68, 0xA8 };
void os_getDevKey (u1_t* buf) { memcpy_P(buf, APPKEY, 16);}
static osjob_t sendjob;
// Schedule TX every this many seconds (might become longer due to duty
// cycle limitations).
const unsigned TX_INTERVAL = 60;
// Pin mapping
const lmic_pinmap lmic_pins = {
.nss = PIN_XB1_CS,
.rxtx = LMIC_UNUSED_PIN,
.rst = LMIC_UNUSED_PIN,
.dio = {PIN_XB1_INT, PIN_XB1_INT, LMIC_UNUSED_PIN},
};
void onEvent (ev_t ev) {
senseBoxIO.statusGreen();
DEBUG(os_getTime());
switch(ev) {
case EV_SCAN_TIMEOUT:
DEBUG(F("EV_SCAN_TIMEOUT"));
break;
case EV_BEACON_FOUND:
DEBUG(F("EV_BEACON_FOUND"));
break;
case EV_BEACON_MISSED:
DEBUG(F("EV_BEACON_MISSED"));
break;
case EV_BEACON_TRACKED:
DEBUG(F("EV_BEACON_TRACKED"));
break;
case EV_JOINING:
DEBUG(F("EV_JOINING"));
break;
case EV_JOINED:
DEBUG(F("EV_JOINED"));
// Disable link check validation (automatically enabled
// during join, but not supported by TTN at this time).
LMIC_setLinkCheckMode(0);
break;
case EV_RFU1:
DEBUG(F("EV_RFU1"));
break;
case EV_JOIN_FAILED:
DEBUG(F("EV_JOIN_FAILED"));
break;
case EV_REJOIN_FAILED:
DEBUG(F("EV_REJOIN_FAILED"));
break;
case EV_TXCOMPLETE:
DEBUG(F("EV_TXCOMPLETE (includes waiting for RX windows)"));
if (LMIC.txrxFlags & TXRX_ACK)
DEBUG(F("Received ack"));
if (LMIC.dataLen) {
DEBUG(F("Received "));
DEBUG(LMIC.dataLen);
DEBUG(F(" bytes of payload"));
}
// Schedule next transmission
os_setTimedCallback(&sendjob, os_getTime()+sec2osticks(TX_INTERVAL), do_send);
break;
case EV_LOST_TSYNC:
DEBUG(F("EV_LOST_TSYNC"));
break;
case EV_RESET:
DEBUG(F("EV_RESET"));
break;
case EV_RXCOMPLETE:
// data received in ping slot
DEBUG(F("EV_RXCOMPLETE"));
break;
case EV_LINK_DEAD:
DEBUG(F("EV_LINK_DEAD"));
break;
case EV_LINK_ALIVE:
DEBUG(F("EV_LINK_ALIVE"));
break;
default:
DEBUG(F("Unknown event"));
break;
}
}
void do_send(osjob_t* j){
// Check if there is not a current TX/RX job running
if (LMIC.opmode & OP_TXRXPEND) {
DEBUG(F("OP_TXRXPEND, not sending"));
} else {
LoraMessage message;
//-----Temperature-----//
//-----Humidity-----//
#ifdef HDC1080_CONNECTED
DEBUG(F("Temperature: "));
temperature = HDC.readTemperature();
DEBUG(temperature);
message.addUint16((temperature + 18) * 771);
delay(2000);
DEBUG(F("Humidity: "));
humidity = HDC.readHumidity();
DEBUG(humidity);
message.addHumidity(humidity);
delay(2000);
#endif
//-----Pressure-----//
#ifdef BMP280_CONNECTED
float altitude;
pressure = BMP.readPressure()/100;
altitude = BMP.readAltitude(1013.25); //1013.25 = sea level pressure
DEBUG(F("Pressure: "));
DEBUG(pressure);
message.addUint16((pressure - 300) * 81.9187);
delay(2000);
#endif
//-----Lux-----//
#ifdef TSL45315_CONNECTED
DEBUG(F("Illuminance: "));
lux = TSL.readLux();
DEBUG(lux);
message.addUint8(lux % 255);
message.addUint16(lux / 255);
delay(2000);
#endif
//-----UV intensity-----//
#ifdef VEML6070_CONNECTED
DEBUG(F("UV: "));
uv = VEML.getUV();
DEBUG(uv);
message.addUint8(uv % 255);
message.addUint16(uv / 255);
delay(2000);
#endif
//-----PM-----//
#ifdef SDS011_CONNECTED
uint8_t attempt = 0;
while (attempt < 5) {
bool error = SDS.read(&pm25, &pm10);
if (!error) {
DEBUG(F("PM10: "));
DEBUG(pm10);
message.addUint16(pm10 * 10);
DEBUG(F("PM2.5: "));
DEBUG(pm25);
message.addUint16(pm25 * 10);
break;
}
attempt++;
}
#endif
//-----Soil Temperature & Moisture-----//
#ifdef SMT50_CONNECTED
float voltage = analogRead(SOILTEMPPIN) * (3.3 / 1024.0);
float soilTemperature = (voltage - 0.5) * 100;
message.addUint16((soilTemperature + 18) * 771);
voltage = analogRead(SOILMOISPIN) * (3.3 / 1024.0);
float soilMoisture = (voltage * 50) / 3;
message.addHumidity(soilMoisture);
#endif
//-----dB(A) Sound Level-----//
#ifdef SOUNDLEVELMETER_CONNECTED
float v = analogRead(SOUNDMETERPIN) * (3.3 / 1024.0);
float decibel = v * 50;
message.addUint16(decibel * 10);
#endif
//-----BME680-----//
#ifdef BME680_CONNECTED
BME.setGasHeater(0, 0);
if( BME.performReading()) {
message.addUint16((BME.temperature-1 + 18) * 771);
message.addHumidity(BME.humidity);
message.addUint16((BME.pressure/100 - 300) * 81.9187);
}
delay(100);
BME.setGasHeater(320, 150); // 320*C for 150 ms
if( BME.performReading()) {
uint16_t gasResistance = BME.gas_resistance / 1000.0;
message.addUint8(gasResistance % 255);
message.addUint16(gasResistance / 255);
}
#endif
//-----Wind speed-----//
#ifdef WINDSPEED_CONNECTED
float voltageWind = analogRead(WINDSPEEDPIN) * (3.3 / 1024.0);
float windspeed = 0.0;
if (voltageWind >= 0.018){
float poly1 = pow(voltageWind, 3);
poly1 = 17.0359801998299 * poly1;
float poly2 = pow(voltageWind, 2);
poly2 = 47.9908168343362 * poly2;
float poly3 = 122.899677524413 * voltageWind;
float poly4 = 0.657504127272728;
windspeed = poly1 - poly2 + poly3 - poly4;
windspeed = windspeed * 0.2777777777777778; //conversion in m/s
}
message.addUint16(windspeed * 10);
#endif
//-----CO2-----//
#ifdef SCD30_CONNECTED
message.addUint16(SCD.getCO2());
#endif
// Prepare upstream data transmission at the next possible time.
LMIC_setTxData2(1, message.getBytes(), message.getLength(), 0);
DEBUG(F("Packet queued"));
}
// Next TX is scheduled after TX_COMPLETE event.
}
void setup() {
#ifdef ENABLE_DEBUG
Serial.begin(9600);
#endif
delay(3000);
// RFM9X (LoRa-Bee) in XBEE1 Socket
senseBoxIO.powerXB1(false); // power off to reset RFM9X
delay(250);
senseBoxIO.powerXB1(true); // power on
// Sensor initialization
DEBUG(F("Initializing sensors..."));
#ifdef VEML6070_CONNECTED
VEML.begin();
delay(500);
#endif
#ifdef HDC1080_CONNECTED
HDC.begin();
#endif
#ifdef BMP280_CONNECTED
BMP.begin(0x76);
#endif
#ifdef TSL45315_CONNECTED
TSL.begin();
#endif
#ifdef SDS011_CONNECTED
SDS_UART_PORT.begin(9600);
#endif
#ifdef BME680_CONNECTED
BME.begin(0x76);
BME.setTemperatureOversampling(BME680_OS_8X);
BME.setHumidityOversampling(BME680_OS_2X);
BME.setPressureOversampling(BME680_OS_4X);
BME.setIIRFilterSize(BME680_FILTER_SIZE_3);
#endif
#ifdef SCD30_CONNECTED
Wire.begin();
SCD.begin();
#endif
DEBUG(F("Sensor initializing done!"));
DEBUG(F("Starting loop in 3 seconds."));
delay(3000);
// LMIC init
os_init();
// Reset the MAC state. Session and pending data transfers will be discarded.
LMIC_reset();
// Start job (sending automatically starts OTAA too)
do_send(&sendjob);
}
void loop() {
os_runloop_once();
}
Gibt es da vielleicht einen Fehler?
Ich habe auch in der Arduino IDE einen TTN_test durchgeführt da kommt als Meldung:
Test TTN
Packet queued
330867: EV_TXCOMPLETE (includes waiting for RX windows)
Und das wiederholt sich immer…
In der TTN Console steht immer „never seen“.
Dein Code sieht auf dem ersten Blick okay aus und auch die Keys sehen plausibel aus. Kannst du mal schauen was auf der Konsole erscheint wenn du bei deinem Code #define ENABLE_DEBUG
einkommentierst? Vielleicht kommen wir damit weiter.
Hast du sonst auch mal testweise Blockly ausprobiert? Also einen einfachen LoRa Sketch generieren und online kompilieren? Da könntest du auch mal von OTAA zu ABP wechseln.
Hi Felix,
wenn ich #define ENABLE_DEBUG
einkommentiere kommt genau das selbe unten in der Konsole heraus. Da ändert sich nichts. In beiden Fällen kommt das hier:
WARNUNG: Bibliothek SDS011-select-serial behauptet auf esp8266, avr Architektur(en) ausgeführt werden zu können und ist möglicherweise inkompatibel mit Ihrem derzeitigen Board, welches auf samd Architektur(en) ausgeführt wird.
Der Sketch verwendet 38188 Bytes (14%) des Programmspeicherplatzes. Das Maximum sind 262144 Bytes.
Globale Variablen verwenden 4168 Bytes des dynamischen Speichers.
Erzwinge Reset durch öffnen/schließen mit 1200 bps auf dem Port COM3
PORTS {COM3, } / {} => {}
PORTS {} / {COM4, } => {COM4, }
Found upload port: COM4
C:\Users\Giulianorödiger\AppData\Local\Arduino15\packages\arduino\tools\bossac\1.7.0-arduino3/bossac.exe -i -d --port=COM4 -U true -i -e -w -v C:\Users\GIULIA~1\AppData\Local\Temp\arduino_build_362984/sketch_jan06a.ino.bin -R
Set binary mode
readWord(addr=0)=0x20002b40
readWord(addr=0xe000ed00)=0x410cc601
readWord(addr=0x41002018)=0x10010305
version()=v1.1 [Arduino:XYZ] May 1 2018 15:45:18
chipId=0x10010005
Connected at 921600 baud
readWord(addr=0)=0x20002b40
readWord(addr=0xe000ed00)=0x410cc601
readWord(addr=0x41002018)=0x10010305
Atmel SMART device 0x10010005 found
write(addr=0x20004000,size=0x34)
writeWord(addr=0x20004030,value=0x10)
writeWord(addr=0x20004020,value=0x20008000)
Device : ATSAMD21G18A
readWord(addr=0)=0x20002b40
readWord(addr=0xe000ed00)=0x410cc601
readWord(addr=0x41002018)=0x10010305
Chip ID : 10010005
version()=v1.1 [Arduino:XYZ] May 1 2018 15:45:18
Version : v1.1 [Arduino:XYZ] May 1 2018 15:45:18
Address : 8192
Pages : 3968
Page Size : 64 bytes
Total Size : 248KB
Planes : 1
Lock Regions : 16
Locked : readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
none
readWord(addr=0x41004018)=0
Security : false
Boot Flash : true
readWord(addr=0x40000834)=0x7000a
BOD : true
readWord(addr=0x40000834)=0x7000a
BOR : true
Arduino : FAST_CHIP_ERASE
Arduino : FAST_MULTI_PAGE_WRITE
Arduino : CAN_CHECKSUM_MEMORY_BUFFER
Erase flash
chipErase(addr=0x2000)
done in 0.881 seconds
Write 38196 bytes to flash (597 pages)
write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x2000, size=0x1000)
[=== ] 10% (64/597 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x3000, size=0x1000)
[====== ] 21% (128/597 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x4000, size=0x1000)
[========= ] 32% (192/597 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x5000, size=0x1000)
[============ ] 42% (256/597 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x6000, size=0x1000)
[================ ] 53% (320/597 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x7000, size=0x1000)
[=================== ] 64% (384/597 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x8000, size=0x1000)
[====================== ] 75% (448/597 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x9000, size=0x1000)
[========================= ] 85% (512/597 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0xa000, size=0x1000)
[============================ ] 96% (576/597 pages)write(addr=0x20005000,size=0x540)
writeBuffer(scr_addr=0x20005000, dst_addr=0xb000, size=0x540)
[==============================] 100% (597/597 pages)
done in 0.304 seconds
Verify 38196 bytes of flash with checksum.
checksumBuffer(start_addr=0x2000, size=0x1000) = fb5b
checksumBuffer(start_addr=0x3000, size=0x1000) = 5810
checksumBuffer(start_addr=0x4000, size=0x1000) = 45c0
checksumBuffer(start_addr=0x5000, size=0x1000) = f91
checksumBuffer(start_addr=0x6000, size=0x1000) = 2f7c
checksumBuffer(start_addr=0x7000, size=0x1000) = e0ed
checksumBuffer(start_addr=0x8000, size=0x1000) = fba9
checksumBuffer(start_addr=0x9000, size=0x1000) = a22e
checksumBuffer(start_addr=0xa000, size=0x1000) = 73c5
checksumBuffer(start_addr=0xb000, size=0x534) = 9a27
Verify successful
done in 0.058 seconds
CPU reset.
readWord(addr=0)=0x20002b40
readWord(addr=0xe000ed00)=0x410cc601
readWord(addr=0x41002018)=0x10010305
writeWord(addr=0xe000ed0c,value=0x5fa0004)
Zu deiner zweiten Frage:
Ich habe vorhin mal einen sketch mit Blockly erstellt und dann versucht von OTAA zu ADR zu wechseln, aber in beiden Fällen kommt die Meldung:
C:\Users\Giulianor�diger\AppData\Local\Arduino15\packages\sensebox\hardware\samd\1.3.3\libraries\WiFi101\src\WiFiMDNSResponder.cpp:24:10: fatal error: avr/pgmspace.h: No such file or directory
#include <avr/pgmspace.h>
^~~~~~~~~~~~~~~~
compilation terminated.
exit status 1
Fehler beim Kompilieren für das Board senseBox MCU.
Ich meinte eigentlich den Serial Monitor der Arduino IDE, vielleicht kannst du da nochmal schauen nachdem der Code übertragen wurde.
Ansonsten versuche bitte mal einen einfachen LoRaWAN Code mit Blockly zu erstellen, trage deine entsprechenden Keys ein (für OTAA oder ABP) und lasse dir diesen online Kompilieren:
Die .bin Datei kannst du dann auf deine MCU ziehen. So können wir erstmal checken ob das Problem an der Hardware liegt oder nicht.
Ich habe eben mal das Blockly Programm auf deinem Foto nachgemacht (ABP) und es kam ein Signal im TTN an!
Wenn ich den Befehl #define ENABLE_DEBUG in den Quellcode einbaue (noch in dem Code von der opensensemap) dann kommt im seriellen Monitor:
Initializing sensors…
Ich habe es jetzt geschafft die Box mit Blockly über den Cayenne Standard per LoRa auf die Opensensemap zu bringen.
Die Sensoren für Helligkeit, Temperatur und Luftfeuchtigkeit funktionieren.
Jetzt bekomme ich es nur nicht hin das Soundlevel meter und den Feinstaubsensor mit Blockly zu programmieren damit die Daten auch auf die Map geladen werden.
Welche Puzzleteile muss ich zusammenfügen damit die Daten auch per Cayenne übertragen werden?
Feinstaub und Lautstärke könntest du als Analogen Wert oder auch als Helligkeitswert verschicken. Als Helligkeit werden die Daten mit 3 Bytes verschickt, somit bist du da etwas sicherer unterwegs als wenn du Analoger Wert nimmst (2 Bytes).
Denk aber daran, dass du den Kanal entsprechend ändern musst. Wenn du 3x Helligkeit versendest musst du 3 verschiedene Kanäle nutzen (0, 1, 2) damit du die Daten später wieder zuordnen kannst
Hi Felix,
vielen Dank für deinen Support es funktioniert jetzt alles!!
Lg