Fragen zu Sketchen und Allgemein (z.B. HB-UNI-Sensor1)

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Allodo
Beiträge: 85
Registriert: 27.04.2018, 21:48
Hat sich bedankt: 7 Mal

Fragen zu Sketchen und Allgemein (z.B. HB-UNI-Sensor1)

Beitrag von Allodo » 17.06.2020, 14:44

Hallo,

ich habe endlich meinen BH1750 mit Abdeckung bekommen (so wie im HM-Sen-LI-O Nachbau) und diesen auf eine HB-UNI-SENS-BATT-Platine gepackt, sowie einen BME280. Dann habe ich mich an das Tutorial von Technikkram gehalten und in die Arduino IDE die entsprechenden Bibliotheken für BME280 und BH1750 installiert.

Leider kenne ich mich mit Thema Arduino-Sketche nicht sonderlich gut aus :(

Denn ich weiß nicht, wie ich den BH11750 integriere, also dachte ich mir nimmst Du den Sketch vom HB-UNI-Sensor1, darin sind beide Sensoren enthalten.
Allerdings wusste ich nicht, wo genau die SENS_BH1750.h und SENS_BME280.h. Also habe ich alles mal irgendwohin gepackt und der Compiler scheint es gefressen zu haben.

Nur leider bekomme ich einen Compile-Fehler: #error INVALID CLOCK OPTION.

Ich habe mir die Doku auf Github schon ein paarmal durchgelesen, nur leider steht dort nicht, wohin man die *.h-Files genau hinpacken sollte.

In dem Thread viewtopic.php?t=43887 habe ich einen Sketch gefunden, den ich compilieren konnte. Anlernen an die CCU lief auch ohne Probleme, nur habe ich LUX-Werte von über 67000 und das in einem dunklen Zimmer, sowie die Temperatur stimmt nicht (15 Grad in der CCU und 23 mittels Xiaomi Temperatursensor).

Irgendwie renne ich bei allem vor die Wand. Der Eine Sketch lässt sich nicht compilieren und der Andere liefert falsche Werte :(

Oder sollte es doch einfacher gehen, die Sensoren BME280 und BH1750 mit korrekten Werten zu bekommen? Welcher Sketch?

Ich hoffe ihr könnt mir helfen, denn ich habe das Gefühl ich bin in ein Labyrinth gelaufen :(

Vielen Dank im voraus :)

Hier mal die Logausgabe beim compilieren vom HB-UNI-Sensor1.ino von der Github-Seite:

Code: Alles auswählen

Arduino: 1.8.12 (Windows 10), Board: "Arduino Pro or Pro Mini, ATmega328P (3.3V, 8 MHz)"

D:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware D:\Program Files (x86)\Arduino\hardware -tools D:\Program Files (x86)\Arduino\tools-builder -tools D:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries D:\Program Files (x86)\Arduino\libraries -libraries C:\Users\user\Documents\Arduino\libraries -fqbn=arduino:avr:pro:cpu=8MHzatmega328 -ide-version=10812 -build-path C:\Users\user\AppData\Local\Temp\arduino_build_877577 -warnings=none -build-cache C:\Users\user\AppData\Local\Temp\arduino_cache_482711 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -verbose G:\Homebrew_Homematic_Sketche\HB-Uni-Sensor1\HB-Uni-Sensor1.ino
D:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware D:\Program Files (x86)\Arduino\hardware -tools D:\Program Files (x86)\Arduino\tools-builder -tools D:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries D:\Program Files (x86)\Arduino\libraries -libraries C:\Users\user\Documents\Arduino\libraries -fqbn=arduino:avr:pro:cpu=8MHzatmega328 -ide-version=10812 -build-path C:\Users\user\AppData\Local\Temp\arduino_build_877577 -warnings=none -build-cache C:\Users\user\AppData\Local\Temp\arduino_cache_482711 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -verbose G:\Homebrew_Homematic_Sketche\HB-Uni-Sensor1\HB-Uni-Sensor1.ino
Using board 'pro' from platform in folder: D:\Program Files (x86)\Arduino\hardware\arduino\avr
Using core 'arduino' from platform in folder: D:\Program Files (x86)\Arduino\hardware\arduino\avr
Detecting libraries used...
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_877577\\sketch\\HB-Uni-Sensor1.ino.cpp" -o nul
Alternatives for EnableInterrupt.h: [EnableInterrupt@1.1.0]
ResolveLibrary(EnableInterrupt.h)
  -> candidates: [EnableInterrupt@1.1.0]
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_877577\\sketch\\HB-Uni-Sensor1.ino.cpp" -o nul
Alternatives for AskSinPP.h: [AskSinPP-master@4.1.3 AskSinPP-4@4.0.3]
ResolveLibrary(AskSinPP.h)
  -> candidates: [AskSinPP-master@4.1.3 AskSinPP-4@4.0.3]
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_877577\\sketch\\HB-Uni-Sensor1.ino.cpp" -o nul
Alternatives for LowPower.h: [Low-Power-master@1.6]
ResolveLibrary(LowPower.h)
  -> candidates: [Low-Power-master@1.6]
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_877577\\sketch\\HB-Uni-Sensor1.ino.cpp" -o nul
Alternatives for tmBattery.h: [Sensors]
ResolveLibrary(tmBattery.h)
  -> candidates: [Sensors]
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Sensors" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_877577\\sketch\\HB-Uni-Sensor1.ino.cpp" -o nul
Error while detecting libraries included by C:\Users\user\AppData\Local\Temp\arduino_build_877577\sketch\HB-Uni-Sensor1.ino.cpp
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Sensors" "C:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master\\AlarmClock.cpp" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Sensors" "C:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master\\Globals.cpp" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Sensors" "C:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master\\HMID.cpp" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Sensors" "C:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master\\Led.cpp" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Sensors" "C:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master\\PhaseCut.cpp" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Sensors" "C:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master\\aes128_dec.cpp" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Sensors" "C:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master\\aes128_enc.cpp" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Sensors" "C:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master\\aes_dec.cpp" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Sensors" "C:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master\\aes_enc.cpp" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Sensors" "C:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master\\aes_invsbox.c" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Sensors" "C:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master\\aes_keyschedule.cpp" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Sensors" "C:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master\\aes_sbox.c" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Sensors" "C:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master\\gf256mul.S" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Sensors" "C:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master\\gf256mul.cpp" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Sensors" "C:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master\\LowPower.cpp" -o nul
Generating function prototypes...
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10812 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\EnableInterrupt" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\AskSinPP-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Low-Power-master" "-IC:\\Users\\user\\Documents\\Arduino\\libraries\\Sensors" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_877577\\sketch\\HB-Uni-Sensor1.ino.cpp" -o "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_877577\\preproc\\ctags_target_for_gcc_minus_e.cpp"
HB-Uni-Sensor1:111:2: error: #error INVALID CLOCK OPTION

 #error INVALID CLOCK OPTION

  ^~~~~

Mehrere Bibliotheken wurden für "AskSinPP.h" gefunden
 Benutzt: C:\Users\user\Documents\Arduino\libraries\AskSinPP-master
 Nicht benutzt: C:\Users\user\Documents\Arduino\libraries\AskSinPP-4
Bibliothek EnableInterrupt in Version 1.1.0 im Ordner: C:\Users\user\Documents\Arduino\libraries\EnableInterrupt  wird verwendet
Bibliothek AskSinPP-master in Version 4.1.3 im Ordner: C:\Users\user\Documents\Arduino\libraries\AskSinPP-master  wird verwendet
Bibliothek Low-Power-master in Version 1.6 im Ordner: C:\Users\user\Documents\Arduino\libraries\Low-Power-master  wird verwendet
Bibliothek Sensors im Ordner: C:\Users\user\Documents\Arduino\libraries\Sensors (legacy) wird verwendet
exit status 1
#error INVALID CLOCK OPTION
Ach ja, was ich auch verwirrend finde, auf der einen Seite steht, man sollte die Asksinpp-master nehmen, auf der Githubseite steht aber, man soll die V4 nehmen. Wie denn nu? Das verwirrt vollends, wenn man, wie ich gerade in die Thematik einsteigt ;)

TomMajor
Beiträge: 1790
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 175 Mal
Danksagung erhalten: 399 Mal
Kontaktdaten:

Re: Fragen zu Sketchen und Allgemein (z.B. HB-UNI-Sensor1)

Beitrag von TomMajor » 17.06.2020, 15:06

Das mit master und V4 verwirrt mich auch, ich nehme seit längerem immer den master.

Wenn du den HB-UNI-Sensor1 downloadest brauchst du auch die beiden Verzeichnisse /Sensors und /Cfg dort wo auch der HB-UNI-Sensor1.ino liegt. Du hast Recht, dieses Detail fehlt in der Beschreibung, trage ich bei Gelegenheit nach.

Du brauchst keine extra .h Dateien irgendwo hinkopieren, alle liegen bereits unter /Sensors.
In /Cfg wählst du eine Datei aus, z.B. Device_Example.h und passt die an deine Bedürfnisse an. Dort wird auch u.a. die Clock Option konfiguriert. Die Optionen sind dort alle gut beschrieben bilde ich mir ein.

Diese cfg Datei wird dann hier im sketch inkludiert:
https://github.com/TomMajor/SmartHome/b ... r1.ino#L43

Hoffe das hilft,

Code: Alles auswählen

//---------------------------------------------------------
// Alle Device Parameter werden aus einer .h Datei (hier im Beispiel Cfg/Device_Example.h) geholt um mehrere Geräte ohne weitere Änderungen des
// Sketches flashen zu können. Für mehrere Geräte einfach mehrere .h Dateien anlegen und dort die Unterschiede zwischen den Geräten definieren. Die
// konfigurierbaren Device Parameter in der .h Datei sind im Einzelnen:
// - Device ID und Device Serial
// - Aktivierung der verwendeten Sensoren
// - Pin Definitionen Allgemein
// - Pin und Address Definitionen der Sensoren
// - Clock Definition
// - Schaltungsvariante und Pins für Batteriespannungsmessung
// - Schwellwerte für Batteriespannungsmessung
#include "Cfg/Device_Example.h"
Viele Grüße,
Tom

jp112sdl
Beiträge: 12084
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: Fragen zu Sketchen und Allgemein (z.B. HB-UNI-Sensor1)

Beitrag von jp112sdl » 17.06.2020, 15:17

TomMajor hat geschrieben:
17.06.2020, 15:06
Das mit master und V4 verwirrt mich auch, ich nehme seit längerem immer den master.
V4 ist "stable", hat aber nicht alle neuesten Features. Zugegeben, der V4 hängt etwas hinterher.
Master ist der Branch, in dem neue Features einfließen, die aber nicht unbedingt komplett durchgetestet sind

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Allodo
Beiträge: 85
Registriert: 27.04.2018, 21:48
Hat sich bedankt: 7 Mal

Re: Fragen zu Sketchen und Allgemein (z.B. HB-UNI-Sensor1)

Beitrag von Allodo » 17.06.2020, 15:31

@TomMajor
Danke für die Hilfe :)
Ich habe jetzt mal in den Ordner, wo die HB-Uni-Sensor1.ino liegt einen Ordner Sensors und Cfg angelegt.

Wie lade ich den komplette Ordner von Github herunter. Kenne das dort ein Button Download als ZIP oder so angeboten wird. der fehlt hier aber?

Ich habe also per Hand die *.h-Files in den Ordner Sensors abgelegt und in Cfg die Datei "Device_UniSensor_Aussen.h".
Bekomme aber immer noch den Compile-Fehler :(

Ehrlich gesagt habe ich mir die Device_Example.h mal mit Notepad++ angeschaut und werde da gar nicht schlau raus. Das ist doch reine XML-Notation, wieso also die Dateiendung .h?

Wollte jetzt auf der CCU auch "hb-tm-devices-addon.tgz" installieren. Hatte vorher schon eine Version installiert, allerdings < 2.50, und wegen dem Eintrag in Github deinstalliert, aber nach der Installation sehe ich gar nix mehr unter Addons. Das Gerät ist auch aus der Liste verschwunden, wahrscheinlich, weil das Addon fehlt.

Sorry, für die für euch evtl. "blöden" Fragen, aber aller Anfang ist manchmal schwer :roll:

Hier mal die HB-Uni-Sensor1.ino von mir:

Code: Alles auswählen

//---------------------------------------------------------
// HB-UNI-Sensor1
// Version 1.18
// (C) 2018-2020 Tom Major (Creative Commons)
// https://creativecommons.org/licenses/by-nc-sa/4.0/
// You are free to Share & Adapt under the following terms:
// Give Credit, NonCommercial, ShareAlike
// +++
// AskSin++ 2016-10-31 papa Creative Commons
//---------------------------------------------------------

//---------------------------------------------------------
// !! NDEBUG sollte aktiviert werden wenn die Sensorentwicklung und die Tests abgeschlossen sind und das Gerät in den 'Produktionsmodus' geht.
// Zum Beispiel bei aktiviertem BME280 und MAX44009 werden damit ca. 2,6 KBytes Flash und 100 Bytes RAM eingespart.
// Insbesondere die RAM-Einsparungen sind wichtig für die Stabilität / dynamische Speicherzuweisungen etc.
// Dies beseitigt dann auch die mögliche Arduino-Warnung 'Low memory available, stability problems may occur'.
//
//#define NDEBUG

//---------------------------------------------------------
// 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 <MultiChannelDevice.h>
#include <Register.h>
#include "Sensors/tmBattery.h"

//---------------------------------------------------------
// Alle Device Parameter werden aus einer .h Datei (hier im Beispiel Cfg/Device_Example.h) geholt um mehrere Geräte ohne weitere Änderungen des
// Sketches flashen zu können. Für mehrere Geräte einfach mehrere .h Dateien anlegen und dort die Unterschiede zwischen den Geräten definieren. Die
// konfigurierbaren Device Parameter in der .h Datei sind im Einzelnen:
// - Device ID und Device Serial
// - Aktivierung der verwendeten Sensoren
// - Pin Definitionen Allgemein
// - Pin und Address Definitionen der Sensoren
// - Clock Definition
// - Schaltungsvariante und Pins für Batteriespannungsmessung
// - Schwellwerte für Batteriespannungsmessung
//#include "Device_Example.h"
#include "Cfg/Device_UniSensor_Aussen.h"


// number of available peers per channel
#define PEERS_PER_CHANNEL 6

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

//#ifdef SENSOR_DS18X20
//#include "Sensors/Sens_DS18X20.h"    // HB-UNI-Sensor1 custom sensor class
//#endif

#ifdef SENSOR_BME280
#include "Sensors/Sens_BME280.h"    // HB-UNI-Sensor1 custom sensor class
#endif

//#ifdef SENSOR_BMP180
//#include "Sensors/Sens_BMP180.h"    // HB-UNI-Sensor1 custom sensor class
//#endif

//#ifdef SENSOR_MAX44009
//#include "Sensors/Sens_MAX44009.h"    // HB-UNI-Sensor1 custom sensor class
//#endif

//#ifdef SENSOR_TSL2561
//#include "Sensors/Sens_TSL2561.h"    // HB-UNI-Sensor1 custom sensor class
//#endif

#ifdef SENSOR_BH1750
#include "Sensors/Sens_BH1750.h"    // HB-UNI-Sensor1 custom sensor class
#endif

//#ifdef SENSOR_SHT31
//#include "Sensors/Sens_SHT31.h"    // HB-UNI-Sensor1 custom sensor class
//#endif

//#ifdef SENSOR_SHT21
//#include "Sensors/Sens_SHT21.h"    // HB-UNI-Sensor1 custom sensor class
//#endif

//#ifdef SENSOR_SHT10
//#include "Sensors/Sens_SHT10.h"    // HB-UNI-Sensor1 custom sensor class
//#endif

#ifdef SENSOR_DIGINPUT
#include "Sensors/Sens_DIGINPUT.h"    // HB-UNI-Sensor1 custom sensor class
Sens_DIGINPUT digitalInput;           // muss wegen Verwendung in loop() global sein (Interrupt event)
#endif

//#ifdef SENSOR_VEML6070
//#include "Sensors/Sens_VEML6070.h"    // HB-UNI-Sensor1 custom sensor class
//#endif

//#ifdef SENSOR_VEML6075
//#include "Sensors/Sens_VEML6075.h"    // HB-UNI-Sensor1 custom sensor class
//#endif

#ifdef CLOCK_SYSCLOCK
#define CLOCK sysclock
#define SAVEPWR_MODE Sleep<>
#elif defined CLOCK_RTC
#define CLOCK rtc
#define SAVEPWR_MODE SleepRTC
#undef seconds2ticks
#define seconds2ticks(tm) (tm)
#else
#error INVALID CLOCK OPTION
#endif

// define all device properties
// Bei mehreren Geräten des gleichen Typs (HB-UNI-Sensor1) muss Device ID und Device Serial unterschiedlich sein!
// Device ID und Device Serial werden aus einer .h Datei (hier im Beispiel Cfg/Device_Example.h) geholt um mehrere Geräte ohne weitere Änderungen des
// Sketches flashen zu können.
const struct DeviceInfo PROGMEM devinfo = {
    cDEVICE_ID,        // Device ID
    cDEVICE_SERIAL,    // Device Serial
    { 0xF1, 0x03 },    // Device Model
    // Firmware Version
    // die CCU Addon xml Datei ist mit der Zeile <parameter index="9.0" size="1.0" cond_op="E" const_value="0x13" />
    // fest an diese Firmware Version gebunden! cond_op: E Equal, GE Greater or Equal
    // bei Änderungen von Payload, message layout, Datenpunkt-Typen usw. muss die Version an beiden Stellen hochgezogen werden!
    0x13,
    as::DeviceType::THSensor,    // Device Type
    { 0x01, 0x01 }               // Info Bytes
};

// Configure the used hardware
typedef AvrSPI<10, 11, 12, 13>                 SPIType;
typedef Radio<SPIType, 2>                      RadioType;
typedef StatusLed<LED_PIN>                     LedType;
typedef AskSin<LedType, BAT_SENSOR, RadioType> BaseHal;

class Hal : public BaseHal {
public:
    void init(const HMID& id)
    {
        BaseHal::init(id);
#ifdef CLOCK_RTC
        rtc.init();    // init real time clock - 1 tick per second
#endif
        // measure battery every 12h
        battery.init(seconds2ticks(12UL * 60 * 60), CLOCK);
        battery.low(BAT_VOLT_LOW);
        battery.critical(BAT_VOLT_CRITICAL);
    }

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

class WeatherEventMsg : public Message {
public:
    void init(uint8_t msgcnt, int16_t temp, uint16_t airPressure, uint8_t humidity, uint32_t brightness, uint8_t digInputState,
              uint16_t batteryVoltage, bool batLow, uint16_t customData)
    {

        uint8_t t1 = (temp >> 8) & 0x7f;
        uint8_t t2 = temp & 0xff;
        if (batLow == true) {
            t1 |= 0x80;    // set bat low bit
        }

        // als Standard wird BCAST gesendet um Energie zu sparen, siehe Beschreibung unten.
        // Bei jeder 20. Nachricht senden wir stattdessen BIDI|WKMEUP, um eventuell anstehende Konfigurationsänderungen auch
        // ohne Betätigung des Anlerntaster übernehmen zu können (mit Verzögerung, worst-case 20x Sendeintervall).
        uint8_t flags = BCAST;
        if ((msgcnt % 20) == 2) {
            flags = BIDI | WKMEUP;
        }
        Message::init(23, msgcnt, 0x70, flags, t1, t2);

        // Message Length (first byte param.): 11 + payload
        //  1 Byte payload -> length 12
        // 12 Byte payload -> length 23
        // max. payload: 17 Bytes (https://www.youtube.com/watch?v=uAyzimU60jw)

        // BIDI|WKMEUP: erwartet ACK vom Empfänger, ohne ACK wird das Senden wiederholt
        // LazyConfig funktioniert, d.h. eine anstehende Conf.Änderung von der CCU wird nach dem nächsten Senden übernommen. Aber erhöhter
        // Funkverkehr wegen ACK
        //
        // BCAST: ohne ACK zu Erwarten, Standard für HM Sensoren.
        // LazyConfig funktioniert nicht, d.h. eine anstehende Conf.Änderung von der CCU muss durch den Config Button am Sensor übernommen
        // werden!!

        // papa:
        // BIDI - fordert den Empfänger auf ein Ack zu schicken. Das wird auch zwingend für AES-Handling gebraucht. BCAST - signalisiert
        // eine Broadcast-Message. Das wird z.B. verwendet, wenn mehrere Peers vor einen Sensor existieren. Es wird dann an einen Peer
        // gesndet und zusätzlich das BCAST-Flag gesetzt. So dass sich alle die Nachrricht ansehen. Ein Ack macht dann natürlich keinen Sinn
        // - es ist ja nicht klar, wer das senden soll.
        //
        // WKMEUP - wird für LazyConfig verwendet. Ist es in einer Message gesetzt, so weiss
        // die Zentrale, dass das Geräte noch kurz auf weitere Nachrichten wartet. Die Lib setzt diese Flag für die StatusInfo-Message
        // automatisch. Außerdem bleibt nach einer Kommunikation der Empfang grundsätzlich für 500ms angeschalten.

        // airPressure
        pload[0] = (airPressure >> 8) & 0xff;
        pload[1] = airPressure & 0xff;

        // humidity
        pload[2] = humidity;

        // brightness (Lux)
        pload[3] = (brightness >> 24) & 0xff;
        pload[4] = (brightness >> 16) & 0xff;
        pload[5] = (brightness >> 8) & 0xff;
        pload[6] = (brightness >> 0) & 0xff;

        // digInputState
        pload[7] = digInputState;

        // batteryVoltage
        pload[8] = (batteryVoltage >> 8) & 0xff;
        pload[9] = batteryVoltage & 0xff;

        // user custom data
        pload[10] = (customData >> 8) & 0xff;
        pload[11] = customData & 0xff;
    }
};

// die "freien" Register 0x20/21 werden hier als 16bit memory für das Update
// Intervall in Sek. benutzt siehe auch hb-uni-sensor1.xml, <parameter
// id="Sendeintervall"> .. ausserdem werden die Register 0x22/0x23 für den
// konf. Parameter Höhe benutzt
DEFREGISTER(Reg0, MASTERID_REGS, DREG_LEDMODE, DREG_LOWBATLIMIT, DREG_TRANSMITTRYMAX, 0x20, 0x21, 0x22, 0x23)
class SensorList0 : public RegList0<Reg0> {
public:
    SensorList0(uint16_t addr)
        : RegList0<Reg0>(addr)
    {
    }

    bool     updIntervall(uint16_t value) const { return this->writeRegister(0x20, (value >> 8) & 0xff) && this->writeRegister(0x21, value & 0xff); }
    uint16_t updIntervall() const { return (this->readRegister(0x20, 0) << 8) + this->readRegister(0x21, 0); }

    bool     altitude(uint16_t value) const { return this->writeRegister(0x22, (value >> 8) & 0xff) && this->writeRegister(0x23, value & 0xff); }
    uint16_t altitude() const { return (this->readRegister(0x22, 0) << 8) + this->readRegister(0x23, 0); }

    void defaults()
    {
        clear();
        ledMode(1);
        lowBatLimit(BAT_VOLT_LOW);
        transmitDevTryMax(6);
        updIntervall(600);
        altitude(0);
    }
};

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

    WeatherEventMsg msg;

    int16_t  temperature10;
    uint16_t airPressure10;
    uint8_t  humidity;
    uint32_t brightness100;
    uint8_t  digInputState;
    uint16_t customData;
    uint16_t batteryVoltage;
    bool     regularWakeUp;

#ifdef SENSOR_DS18X20
    Sens_DS18X20 ds18x20;
#endif
#ifdef SENSOR_BME280
    Sens_BME280 bme280;
#endif
#ifdef SENSOR_BMP180
    Sens_BMP180 bmp180;
#endif
#ifdef SENSOR_MAX44009
    Sens_MAX44009<MAX44009_ADDR> max44009;
#endif
#ifdef SENSOR_TSL2561
    Sens_TSL2561<TSL2561_ADDR> tsl2561;
#endif
#ifdef SENSOR_BH1750
    Sens_BH1750<BH1750_ADDR> bh1750;
#endif
#ifdef SENSOR_SHT31
    Sens_SHT31<SHT31_ADDR> sht31;
#endif
#ifdef SENSOR_SHT21
    Sens_SHT21 sht21;
#endif
#ifdef SENSOR_SHT10
    Sens_SHT10<SHT10_DATAPIN, SHT10_CLKPIN> sht10;
#endif
#ifdef SENSOR_VEML6070
    Sens_VEML6070<> veml6070;
#endif
#ifdef SENSOR_VEML6075
    Sens_VEML6075 veml6075;
#endif

public:
    WeatherChannel()
        : Channel()
        , Alarm(seconds2ticks(60))
        , temperature10(0)
        , airPressure10(0)
        , humidity(0)
        , brightness100(0)
        , digInputState(0)
        , customData(0)
        , batteryVoltage(0)
        , regularWakeUp(true)
    {
    }
    virtual ~WeatherChannel() {}

    virtual void trigger(AlarmClock& clock)
    {
#ifdef SENSOR_DIGINPUT
        digitalInput.disableINT();    // digitalInput Interrupt abschalten, dieser könnte beim Senden ausgelöst werden (bei PIR aufgetreten)
#endif
        measure();
        uint8_t msgcnt = device().nextcount();
        msg.init(msgcnt, temperature10, airPressure10, humidity, brightness100, digInputState, batteryVoltage, device().battery().low(), customData);
        if (msg.flags() & Message::BCAST) {
            device().broadcastEvent(msg, *this);
        } else {
            device().sendPeerEvent(msg, *this);
        }
        // reactivate for next measure
        uint16_t updCycle = this->device().getList0().updIntervall();
        set(seconds2ticks(updCycle));
        clock.add(*this);
#ifdef SENSOR_DIGINPUT
        if (regularWakeUp) {             // bei Senden nach regulären WakeUp den digitalInput Interrupt sofort wieder einschalten
            digitalInput.enableINT();    // andernfalls erst nach Entprellen in forceSend()
        }
#endif
        regularWakeUp = true;
    }

    void forceSend()
    {
        CLOCK.cancel(*this);
        regularWakeUp = false;    // Verhindert enableINT in trigger()
        trigger(CLOCK);           // Messen/Senden
        delay(250);               // Verzögerung für wiederholtes Senden bzw. digitalInput Entprellen
#ifdef SENSOR_DIGINPUT
        digitalInput.enableINT();
#endif
    }

    void measure()
    {
        // Messwerte mit Dummy-Werten vorbelegen falls kein realer Sensor für die Messgröße vorhanden ist
        // zum Testen der Anbindung an HomeMatic/RaspberryMatic/FHEM
#if !defined(SENSOR_DS18X20) && !defined(SENSOR_BME280) && !defined(SENSOR_BMP180) && !defined(SENSOR_SHT31) && !defined(SENSOR_SHT21)               \
    && !defined(SENSOR_SHT10)
        temperature10 = 188;    // 18.8C (scaling 10)
#endif
#if !defined(SENSOR_BME280) && !defined(SENSOR_SHT31) && !defined(SENSOR_SHT21) && !defined(SENSOR_SHT10)
        humidity = 88;    // 88%
#endif
#if !defined(SENSOR_BME280) && !defined(SENSOR_BMP180)
        airPressure10 = 10880;    // 1088 hPa (scaling 10)
#endif
#if !defined(SENSOR_MAX44009) && !defined(SENSOR_TSL2561) && !defined(SENSOR_BH1750)
        brightness100 = 8800000;    // 88000 Lux (scaling 100)
#endif

// Entweder BME280 oder BMP180 für Luftdruck/Temp, ggf. für anderen Bedarf anpassen
#ifdef SENSOR_BME280
        uint16_t altitude = this->device().getList0().altitude();
        bme280.measure(altitude);
        temperature10 = bme280.temperature();
        airPressure10 = bme280.pressureNN();
        humidity      = bme280.humidity();
#elif defined SENSOR_BMP180
        uint16_t altitude = this->device().getList0().altitude();
        bmp180.measure(altitude);
        temperature10 = bmp180.temperature();
        airPressure10 = bmp180.pressureNN();
#endif

// Falls DS18X20 vorhanden, dessen Temp der BME280/BMP180 Temp vorziehen
#ifdef SENSOR_DS18X20
        ds18x20.measure();
        temperature10 = ds18x20.temperature();
#endif

// Feuchte/Temp vom SHT31/21/10 falls kein BME280 vorhanden
#ifndef SENSOR_BME280
#ifdef SENSOR_SHT31
        sht31.measure();
        temperature10 = sht31.temperature();
        humidity      = sht31.humidity();
#elif defined SENSOR_SHT21
        sht21.measure();
        temperature10 = sht21.temperature();
        humidity      = sht21.humidity();
#elif defined SENSOR_SHT10
        sht10.measure();
        temperature10 = sht10.temperature();
        humidity      = sht10.humidity();
#endif
#endif

// Entweder MAX44009 oder TSL2561 oder BH1750 für Helligkeit, ggf. für anderen Bedarf anpassen
#ifdef SENSOR_MAX44009
        max44009.measure();
        brightness100 = max44009.brightnessLux();
#elif defined SENSOR_TSL2561
        tsl2561.measure();
        brightness100 = tsl2561.brightnessLux();
#elif defined SENSOR_BH1750
        bh1750.measure();
        brightness100 = bh1750.brightnessLux();
#endif

#ifdef SENSOR_DIGINPUT
        digInputState = digitalInput.pinState();
#endif

#ifdef SENSOR_VEML6070
        veml6070.measure();
        // Beispiel custom payload, 4bit für UV-Index (integer 0..11)
        uint8_t uvi = veml6070.uvIndex();
        customData &= 0xFFF0;
        customData |= (uvi & 0x0F);
#endif

#ifdef SENSOR_VEML6075
        veml6075.measure();
        // Beispiel custom payload, 8bit für UV-Index * 10 (integer 0..110, 1 Kommastelle)
        uint8_t uvi10 = veml6075.uvIndex10();
        customData &= 0xFF00;
        customData |= uvi10;
#endif

        batteryVoltage = device().battery().current();    // BatteryTM class, mV resolution
    }

    void initSensors()
    {
#ifdef SENSOR_DS18X20
        ds18x20.init(ONEWIRE_PIN);
#endif
#ifdef SENSOR_BME280
        bme280.init();
#endif
#ifdef SENSOR_BMP180
        bmp180.init();
#endif
#ifdef SENSOR_MAX44009
        max44009.init();
#endif
#ifdef SENSOR_TSL2561
        tsl2561.init();
#endif
#ifdef SENSOR_BH1750
        bh1750.init();
#endif
#ifdef SENSOR_SHT31
        sht31.init();
#endif
#ifdef SENSOR_SHT21
        sht21.init();
#endif
#ifdef SENSOR_SHT10
#if defined SENSOR_BME280 || defined SENSOR_BMP180 || defined SENSOR_MAX44009 || defined SENSOR_TSL2561 || defined SENSOR_BH1750                     \
    || defined SENSOR_VEML6070 || defined SENSOR_VEML6075
        sht10.i2cEnableSharedAccess();    // falls I2C Sensoren vorhanden dies dem SHT10 mitteilen
#endif
        sht10.init();
#endif
#ifdef SENSOR_DIGINPUT
        digitalInput.init(DIGINPUT_PIN);
#endif
#ifdef SENSOR_VEML6070
        veml6070.init();
#endif
#ifdef SENSOR_VEML6075
        veml6075.init();
#endif
        DPRINTLN(F("Sensor setup done"));
        DPRINT(F("Serial: "));
        DPRINTLN(cDEVICE_SERIAL);
#ifdef CLOCK_SYSCLOCK
        DPRINTLN(F("Clock SYSCLOCK"));
#elif defined CLOCK_RTC
        DPRINTLN(F("Clock RTC"));
#endif
    }

    void setup(Device<Hal, SensorList0>* dev, uint8_t number, uint16_t addr)
    {
        Channel::setup(dev, number, addr);
        initSensors();
        set(seconds2ticks(5));    // first message in 5 sec.
        CLOCK.add(*this);
    }

    void configChanged()
    {
        // DPRINTLN(F("Config changed: List1"));
    }

    uint8_t status() const { return 0; }

    uint8_t flags() const { return 0; }
};

class SensChannelDevice : public MultiChannelDevice<Hal, WeatherChannel, 1, SensorList0> {
public:
    typedef MultiChannelDevice<Hal, WeatherChannel, 1, SensorList0> TSDevice;
    SensChannelDevice(const DeviceInfo& info, uint16_t addr)
        : TSDevice(info, addr)
    {
    }
    virtual ~SensChannelDevice() {}

    virtual void configChanged()
    {
        TSDevice::configChanged();
        DPRINTLN(F("Config Changed: List0"));

        uint8_t ledMode = this->getList0().ledMode();
        DPRINT(F("ledMode: "));
        DDECLN(ledMode);

        uint8_t lowBatLimit = this->getList0().lowBatLimit();
        DPRINT(F("lowBatLimit: "));
        DDECLN(lowBatLimit);
        battery().low(lowBatLimit);

        uint8_t txDevTryMax = this->getList0().transmitDevTryMax();
        DPRINT(F("transmitDevTryMax: "));
        DDECLN(txDevTryMax);

        uint16_t updCycle = this->getList0().updIntervall();
        DPRINT(F("updCycle: "));
        DDECLN(updCycle);

        uint16_t altitude = this->getList0().altitude();
        DPRINT(F("altitude: "));
        DDECLN(altitude);
    }
};

SensChannelDevice               sdev(devinfo, 0x20);
ConfigButton<SensChannelDevice> 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) {
#ifdef SENSOR_DIGINPUT
        if (digitalInput.notifyEvent()) {
            digitalInput.resetEvent();
            DPRINTLN(F("DIGINPUT change"));
            sdev.channel(1).forceSend();
        }
#endif
        // deep discharge protection
        // if we drop below critical battery level - switch off all and sleep forever
        if (hal.battery.critical()) {
            // this call will never return
            hal.activity.sleepForever(hal);
        }
        // if nothing to do - go sleep
        hal.activity.savePower<SAVEPWR_MODE>(hal);
    }
}

jp112sdl
Beiträge: 12084
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: Fragen zu Sketchen und Allgemein (z.B. HB-UNI-Sensor1)

Beitrag von jp112sdl » 17.06.2020, 15:36

Allodo hat geschrieben:
17.06.2020, 15:31
Wie lade ich den komplette Ordner von Github herunter. Kenne das dort ein Button Download als ZIP oder so angeboten wird. der fehlt hier aber?
Das geht nur auf oberster Ebene des Repositories:
https://github.com/TomMajor/SmartHome

Wenn du den "Download als ZIP" nutzen willst, musst du das komplette Repo runterladen
https://github.com/TomMajor/SmartHome/a ... master.zip

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Allodo
Beiträge: 85
Registriert: 27.04.2018, 21:48
Hat sich bedankt: 7 Mal

Re: Fragen zu Sketchen und Allgemein (z.B. HB-UNI-Sensor1)

Beitrag von Allodo » 17.06.2020, 15:46

Danke euch, habe jetzt mal das Repo runter geladen und den Sketch erstmal grob angepasst (Auskommentieren von für mich unnötigen Sensoren). Wurde erfolgreich compiliert :)

Jetzt bleibt erstmal noch das Problem, dass die CCU das Addon nicht akzeptieren will :(
Muss ich evtl. die Hardware neu starten (Odroid C2 mit PiVCCU)?


EDIT:
Habe PiVCCU jetzt mal auf Kommandozeilenebene neu gestartet und jetzt sehe ich das Addon :)

Allodo
Beiträge: 85
Registriert: 27.04.2018, 21:48
Hat sich bedankt: 7 Mal

Re: Fragen zu Sketchen und Allgemein (z.B. HB-UNI-Sensor1)

Beitrag von Allodo » 17.06.2020, 16:20

Sketch ist aufgespielt und in der CCU wurde das Gerät erfolgreich gefunden. Soweit, so gut :)

Nun habe ich jedoch keine LUX-Werte. Temperatur sieht scheinbar okay aus.

TomMajor
Beiträge: 1790
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 175 Mal
Danksagung erhalten: 399 Mal
Kontaktdaten:

Re: Fragen zu Sketchen und Allgemein (z.B. HB-UNI-Sensor1)

Beitrag von TomMajor » 17.06.2020, 19:37

jp112sdl hat geschrieben:
17.06.2020, 15:17
TomMajor hat geschrieben:
17.06.2020, 15:06
Das mit master und V4 verwirrt mich auch, ich nehme seit längerem immer den master.
V4 ist "stable", hat aber nicht alle neuesten Features. Zugegeben, der V4 hängt etwas hinterher.
Master ist der Branch, in dem neue Features einfließen, die aber nicht unbedingt komplett durchgetestet sind
Problem ist glaub ich das nicht mehr alle Sketche mit der V4 kompilieren, hatten wir das Problem nicht schon ein paar mal hier in diesem Forum?
Viele Grüße,
Tom

TomMajor
Beiträge: 1790
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 175 Mal
Danksagung erhalten: 399 Mal
Kontaktdaten:

Re: Fragen zu Sketchen und Allgemein (z.B. HB-UNI-Sensor1)

Beitrag von TomMajor » 17.06.2020, 19:37

Allodo hat geschrieben:
17.06.2020, 16:20
Sketch ist aufgespielt und in der CCU wurde das Gerät erfolgreich gefunden. Soweit, so gut :)

Nun habe ich jedoch keine LUX-Werte. Temperatur sieht scheinbar okay aus.
Dann zeig mal den kompletten seriellen Log des Gerätes.
Viele Grüße,
Tom

Allodo
Beiträge: 85
Registriert: 27.04.2018, 21:48
Hat sich bedankt: 7 Mal

Re: Fragen zu Sketchen und Allgemein (z.B. HB-UNI-Sensor1)

Beitrag von Allodo » 17.06.2020, 20:09

Ich habe das mit der Config-Datei jetzt auch verstanden. Das lag an einem Darstellungsproblem in Notepad++.
Habe das Ganze mal mit dem Firefox geöffnet und anschließend wurde es in Notepad++ leserlich dargestellt.

Habe den Sketch dann erneut aufgespielt, ohne etwas daran geändert zu haben. Abgesehen von #include "Cfg/Device_Garten.h"

Device_Garten.h:

Code: Alles auswählen

//---------------------------------------------------------
// Device_Example.h
// 2019-10-09 Tom Major (Creative Commons)
// https://creativecommons.org/licenses/by-nc-sa/4.0/
// You are free to Share & Adapt under the following terms:
// Give Credit, NonCommercial, ShareAlike
// +++
// AskSin++ 2016-10-31 papa Creative Commons
//---------------------------------------------------------

// clang-format off

#ifndef _DEVICE_CFG_H_
#define _DEVICE_CFG_H_


//---------------------------------------------------------
// Definition von Device ID und Device Serial
// Bei mehreren Geräten des gleichen Typs (HB-UNI-Sensor1) muss Device ID und Device Serial unterschiedlich sein!
#define cDEVICE_ID      { 0xA5, 0xA5, 0x10 }
#define cDEVICE_SERIAL  "UNISENS010"


//---------------------------------------------------------
// Aktivierung der verwendeten Sensoren
// Über diese defines werden die real angeschlossenen Sensoren aktiviert.
// Andernfalls verwendet der Sketch Dummy-Werte als Messwerte (zum Testen der Anbindung an HomeMatic/RaspberryMatic/FHEM)
//
//#define SENSOR_DS18X20    // ONEWIRE_PIN define weiter unten muss zur HW passen!
#define SENSOR_BME280       // BME280 Library (finitespace) verwendet I2C Addr. 0x76, für 0x77 die Library anpassen!
//#define SENSOR_BMP180
//#define SENSOR_MAX44009     // MAX44009_ADDR define weiter unten muss zur HW passen!
//#define SENSOR_TSL2561    // TSL2561_ADDR define weiter unten muss zur HW passen!
#define SENSOR_BH1750     // BH1750_ADDR define weiter unten muss zur HW passen!
//#define SENSOR_SHT31      // SHT31_ADDR define weiter unten muss zur HW passen!
//#define SENSOR_SHT21
//#define SENSOR_SHT10      // SHT10_DATAPIN / SHT10_CLKPIN define weiter unten muss zur HW passen!
//#define SENSOR_DIGINPUT   // DIGINPUT_PIN define weiter unten muss zur HW passen!
//#define SENSOR_VEML6070
//#define SENSOR_VEML6075


//---------------------------------------------------------
// Pin Definitionen Allgemein
#define CONFIG_BUTTON_PIN   8
#define LED_PIN             4


//---------------------------------------------------------
// Pin und Address Definitionen Sensoren
//#define ONEWIRE_PIN       3
//#define MAX44009_ADDR       0x4A
//#define TSL2561_ADDR      TSL2561_ADDR_FLOAT
#define BH1750_ADDR       0x23    // 0x23 (ADDR connecting to Gnd) or 0x5C (ADDR connecting to Vcc)
//#define SHT31_ADDR        0x44    // by default its 0x44, you can also adjust the sensor for 0x45 and then pass that value in
//#define SHT10_DATAPIN     A4
//#define SHT10_CLKPIN      A5
//#define DIGINPUT_PIN      A1


//---------------------------------------------------------
// Über diese defines wird die Clock festgelegt
// CLOCK_SYSCLOCK: 8MHz Quarz an XTAL oder 8MHz int. RC-Oszillator, Sleep Strom ca. 4uA
// CLOCK_RTC:      8MHz int. RC-Oszillator, 32.768kHz Quarz an XTAL, Sleep Strom ca. 1uA
#define CLOCK_SYSCLOCK
//#define CLOCK_RTC


//---------------------------------------------------------
// Schaltungsvariante und Pins für Batteriespannungsmessung, siehe README
//------------
// 1) Standard: tmBattery, UBatt = Betriebsspannung AVR
//#define BAT_SENSOR tmBattery
//------------
// 2) für StepUp/StepDown: tmBatteryResDiv, sense pin A0, activation pin D9, Faktor = Rges/Rlow*1000, z.B. 470k/100k, Faktor 570k/100k*1000 = 5700
//#define BAT_SENSOR tmBatteryResDiv<A0, 9, 5700>
//------------
// 3) Echte Batteriespannungsmessung unter Last, siehe README und Thema "Babbling Idiot Protection"
// tmBatteryLoad: sense pin A0, activation pin D9, Faktor = Rges/Rlow*1000, z.B. 10/30 Ohm, Faktor 40/10*1000 = 4000, 200ms Belastung vor Messung
#define BAT_SENSOR tmBatteryLoad<A0, 9, 4000, 200>


//---------------------------------------------------------
// Schwellwerte für Batteriespannungsmessung
#define BAT_VOLT_LOW        21  // 2.1V
#define BAT_VOLT_CRITICAL   19  // 1.9V


#endif

// clang-format on
Log-File des Seriellen Monitors

Code: Alles auswählen

AskSin++ V4.1.3 (Jun 17 2020 19:19:01)
BME280 found
BH1750 found
Sensor setup done
Serial: UNISENS010
Clock SYSCLOCK
Address Space: 32 - 79
CC init1
CC Version: 14
 - ready
tmBatteryLoad Voltage: 4395
Battery set low:  21
Battery set crit: 19
Config Changed: List0
ledMode: 1
lowBatLimit: 21
Battery set low:  21
transmitDevTryMax: 6
updCycle: 600
altitude: 0
BME280 Temperature x10  : 215
BME280 Pressure x10     : 9973
BME280 PressureNN x10   : 9973
BME280 Humidity         : 62
BH1750 Brightness Lux x100: 34
<- 17 01 84 70 A5A510 000000 00 D7 26 F5 3E 00 00 00 22 00 11 2B 00 00  - 817
 debounce
 pressed
 released
<- 1A 02 80 00 A5A510 671983 13 F1 03 55 4E 49 53 45 4E 53 30 31 30 70 01 01 01  - 874

-> 10 01 A0 01 671983 A5A510 00 05 00 00 00 00 00  - 1064
<- 0A 01 80 02 A5A510 671983 00  - 1185
-> 13 0A A0 01 671983 A5A510 00 08 02 01 0A 67 0B 19 0C 83  - 1224
<- 0A 0A 80 02 A5A510 671983 00  - 1345
-> 0B 13 A0 01 671983 A5A510 00 06  - 1376
Config Changed: List0
ledMode: 1
lowBatLimit: 21
Battery set low:  21
transmitDevTryMax: 6
updCycle: 600
altitude: 0
<- 0A 13 82 02 A5A510 671983 00  - 1497
-> 10 1C A0 01 671983 A5A510 00 04 00 00 00 00 00  - 1533
<- 1A 1C A0 10 A5A510 671983 02 0A 67 0B 19 0C 83 05 40 12 15 14 06 20 02 21 58  - 1673
-> 0A 1C 80 02 671983 A5A510 00  - 1787
waitAck: 01
<- 10 1C 80 10 A5A510 671983 02 22 00 23 00 00 00  - 1822
-> 0B 25 A0 01 671983 A5A510 01 03  - 1853
<- 0E 25 80 10 A5A510 671983 01 00 00 00 00  - 1980
 debounce
 pressed
 released
<- 1A 03 80 00 A5A510 671983 13 F1 03 55 4E 49 53 45 4E 53 30 31 30 70 01 01 01  - 10362

-> 0A 03 80 02 671983 A5A510 00  - 10475
-> 10 0C A0 01 671983 A5A510 00 05 00 00 00 00 00  - 10506
<- 0A 0C 80 02 A5A510 671983 00  - 10625
-> 13 15 A0 01 671983 A5A510 00 08 02 01 0A 67 0B 19 0C 83  - 10663
<- 0A 15 80 02 A5A510 671983 00  - 10786
-> 0B 1E A0 01 671983 A5A510 00 06  - 10815
Config Changed: List0
ledMode: 1
lowBatLimit: 21
Battery set low:  21
transmitDevTryMax: 6
updCycle: 600
altitude: 0
<- 0A 1E 82 02 A5A510 671983 00  - 10936
ignore 0F 66 A2 5E 901235 671983 11 73 B5 00 68 2A  - 10960
ignore 0A 66 80 02 671983 901235 00  - 11081
ignore 0F A0 86 10 5FA45A 000000 0A B0 E7 0D 50 00  - 23955
AskSin++ V4.1.3 (Jun 17 2020 19:19:01)
BME280 found
BH1750 found
Sensor setup done
Serial: UNISENS010
Clock SYSCLOCK
Address Space: 32 - 79
CC init1
CC Version: 14
 - ready
tmBatteryLoad Voltage: 1026
Battery set low:  21
Battery set crit: 19
Config Changed: List0
ledMode: 1
lowBatLimit: 21
Battery⸮⸮⸮AskSin++ V4.1.3 (Jun 17 2020 19:19:01)
BME280 found
BH1750 found
Sensor setup done
Serial: UNISENS010
Clock SYSCLOCK
Address Space: 32 - 79
CC init1
CC Version: 14
 - ready
tmBatteryLoad Voltage: 1392
Battery set low:  21
Battery set crit: 19
Config Changed: List0
ledMode: 1
lowBatLimit: 21
Battery⸮AskSin++ V4.1.3 (Jun 17 2020 19:19:01)
BME280 found
BH1750 found
Sensor setup done
Serial: UNISENS010
Clock SYSCLOCK
Address Space: 32 - 79
CC init1
CC Version: 14
 - ready
tmBatteryLoad Voltage: 1452
Battery set low:  21
Battery set crit: 19
Config Changed: List0
ledMode: 1
lowBatLimit: 21
Battery
Dort ist Brightness vorhanden, aber nicht in der CCU

Wie sieht das eigentlich aus mit dem Senden von Einstellungen bei Homebrew-Geräten? Klappt das nicht? Bekomme jedes Mal sofort eine Servicemekdung.

Edit:
Das verstehe ich jetzt nicht. Plötzlich sind Luxwerte da..
Zuletzt geändert von Allodo am 17.06.2020, 20:49, insgesamt 1-mal geändert.

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“