NEWS
Драйвер Mqtt + Arduino
-
Спасибо, с новой версией все работает как надо.
-
Добрый день.
Есть какие ограничение по количеству клиентов iobrokera ?
Есть 2 ESP8266 отсылают данные на CloudMQTT
Дома iobroker подключен как клиент и забирает данные с CloudMQTT
Все нормально работает.
Появилась задача поставить iobroker на работе и забирать данные с CloudMQTT.
Но при подключении происходит один раз считывание данных и все, дальше молчит пока не перезагрузишь mqtt и опять все повторяется.
И по моему дома перестает принимать тоже. (это еще не точно сегодня проверю еще раз)
-
Сегодня проверил - дома перестал принимать данные от mqtt как раз в тот момент когда я пытался настроить iobroker на работе.
Для тестов поставил iobroker на второй комп дома.
Провел пару тестов, результат один и тот же.
Как только подключаешься двумя iobroker к одному MQTT брокеру CloudMQTT, то оба перестают принимать данные с брокера (CloudMQTT)
Попробовал создать вторую учетку на CloudMQTT и соединил две учетки мостом, а iobroker-ы подключается каждый к своей учетки.
Пока полет нормальный, данные принимают оба, управление тоже присутствует.
-
Всем привет!
Пытаюсь подружить "Sonoff" с ioBroker через MQTT, на немецкой стороне форума интерес не проявляется. http://forum.iobroker.net/viewtopic.php?f=20&t=2656
Альтернативную прошивку залил через Arduino IDE (USB-TTL), объекты в ioBroker прописываются но релюшка не переключается. Причём если щёлкать кнопочкой на сомом Sonoff то ioBroker-у состояние передаётся.
Прошивку залил вот эту https://github.com/arendst/Sonoff-MQTT-OTA-Arduino
Подскажите где проблема?
-
Всем привет!
Пытаюсь подружить "Sonoff" с ioBroker через MQTT, на немецкой стороне форума интерес не проявляется. http://forum.iobroker.net/viewtopic.php?f=20&t=2656
Альтернативную прошивку залил через Arduino IDE (USB-TTL), объекты в ioBroker прописываются но релюшка не переключается. Причём если щёлкать кнопочкой на сомом Sonoff то ioBroker-у состояние передаётся.
Прошивку залил вот эту https://github.com/arendst/Sonoff-MQTT-OTA-Arduino
Подскажите где проблема? `
А вот эту прошивку не пробовали? https://wifi-iot.com Я себе собрал управляемую розетку на esp + реле на 15А, работает и переключается. Правда MQTT клиент входит в платную подписку, но она блага стоит копейки. -
А вот эту прошивку не пробовали? https://wifi-iot.com Я себе собрал управляемую розетку на esp + реле на 15А, работает и переключается. Правда MQTT клиент входит в платную подписку, но она блага стоит копейки. `
Пробывал. Там что-то тоже засада.. вот что в логе:
` > mqtt-0 2016-04-21 17:15:03 error Cannot parse {"system":{"hostname":"ESP000CD343","uptime":3,"rssi":-57,"freemem":33720},"sensors":},"gpio":{"12":0,"13":0}}
mqtt-0 2016-04-21 17:15:03 info Client [ESP8266000cd343] subscribes on topic "timestamp"
mqtt-0 2016-04-21 17:15:03 info publishOnSubscribe send all known states
mqtt-0 2016-04-21 17:15:03 info Client [ESP8266000cd343] subscribes on "ESP000CD343.#" with regex /^mqtt.0.ESP000CD343..*/
mqtt-0 2016-04-21 17:15:03 info Client [ESP8266000cd343] subscribes on "ESP000CD343.#" with regex /^ESP000CD343..*/
mqtt-0 2016-04-21 17:15:03 info Client [ESP8266000cd343] connected
mqtt-0 2016-04-21 17:11:51 info Starting MQTT server on port 1883
mqtt-0 2016-04-21 17:11:50 info starting. Version 0.5.0 in /opt/iobroker/node_modules/iobroker.mqtt `
В настройка wifi-Iоt только пины GPIO прописывается и включается клиент mqtt, в ioBroker-е не прописывается заголовок на переключение релюшки.
-
-
А какое SDK используете и как давно прошивку собирали? И чип памяти там на сколько? Сегодня проверил прошивку на SDK 1.3.0 с 2 подключенными GPIO проблем не возникает, все в MQTT создалось и на вкладке "объекты" и "состояние" доступны. `
На SDK 1.5.1 собирал (последнюю, вчера). Чип на 1мб.
Вчера наткнулся на один проект https://github.com/h42i/sonoff-switch/b … sonoff.cpp прошил и сним нормально релюшка переключает, единственный минус при переключении на самом Sonoff не отсылается состояние на MQTT сервер, а так вполне работоспособный вариант.
-
Сегодня проверил прошивку на SDK 1.3.0 с 2 подключенными GPIO проблем не возникает, все в MQTT создалось и на вкладке "объекты" и "состояние" доступны. `
Вчера проверил с SDK 1.4.0 >> полёт нормальный, ошибок в логе нет, все переменныe создались, релюшка переключается. Спасибо за подсказку :)
-
добрый вечер всем нашёл этот скетч и обрадовался потому что это то что я и хотел но не тут было ни как не могу скомпилировать этот скетч , постоянно какие то ошибки сначала с библиотеками были вроде решил потом со строками
EthernetClient ethClient; //ЗДЕСЬ КОМЕНТИРУЮ И КОПИРУЮ В ДРУГОЕ МЕСТО НИЖЕ
PubSubClient client(server, 1883, callback, ethClient);
перенёс их ниже как подсказали эта ошибка исчезла и вот теперь уже несколько дней мучаюсь с ошибкой 58 строка
DHT DHT; ошибка no matching function for call to 'DHT::DHT()'
я думаю что проблема с библиотекой но я несколько установил проблема не исчезла . IDE 16.6
но пробовал и другие если кому не сложно выложите библиотеку DHT с которой этот скетч компилируется ну и заодно свой скетч и версию IDE. сейчас у меня ват такой скетч
! #include <spi.h>// Ethernet shield
! #include <ethernet.h>// Ethernet shield
! #include <pubsubclient.h>// MQTT
! #include <servo.h>#include <dht.h>#include <onewire.h>#include <dallastemperature.h>Servo servo;
! byte mac[] = { 0xC1, 0x7C, 0x38, 0x41, 0x89, 0x12 };
! byte server[] = { 192, 168, 1, 190 }; //IP Брокера
! byte ip[] = { 192, 168, 1, 167 }; //IP Клиента (Arduino)
! //EthernetClient ethClient; //ЗДЕСЬ КОМЕНТИРУЮ И КОПИРУЮ В ДРУГОЕ МЕСТО НИЖЕ
! //PubSubClient client(server, 1883, callback, ethClient);
! #define id_connect "myhome-kitchen"
! #define Prefix_subscribe "myhome/Kitchen/"
! ///////////////Объявляем порты ввода-вывода
! #define ServoPin 3 //Порт к которому подключен сервопривод
! const int start_DI_pin [] = {2, 4, 5}; // Порты Ввода
! int n_DI_pin = sizeof(start_DI_pin) / sizeof(start_DI_pin[0]) - 1; //Вычисляем длинну массива
! const int start_DO_pin [] = {6, 7}; //Порты Вывода
! int n_DO_pin = sizeof(start_DO_pin) / sizeof(start_DO_pin[0]) - 1; //Вычисляем длинну массива
! int DI[] = {0, 0, 0};
! int old_DI[] = {0, 0};
! ///////////////////////////Переменные для работы с освещением//////////////////////////////////////
! int ServoAngle = 100; //Угол сервопривода при включении
! int flag = 0;
! int flag2 = 0;
! int pause = 0;
! //–----------------------------------------- Sensors -------------------------------------------//
! const int MQ7_Pin = A0; // Куда подключили MQ7
! //int MQ7Value = 0;
! int MQ7Value = analogRead(MQ7_Pin);
! const int foto_Pin = A1; // устанавливаем входную ногу для Фоторезистора
! //unsigned int fotoValue = 0; // цифровое значение фоторезистора
! unsigned int fotoValue = analogRead(foto_Pin);
! #define ONE_WIRE_BUS 8
! OneWire oneWire(ONE_WIRE_BUS);
! DallasTemperature DS_sensors(&oneWire);
! // 28 FF F2 5C 53 15 2 97
! DeviceAddress addr_T1 = { 0x28, 0xFF, 0xF2, 0x5C, 0x53, 0x15, 0x02, 0x97 };
! float T1 = 0;
! DHT DHT;
! #define DHT22_PIN 9
! float Hout = 0;
! float Tout = 0;
! //#define DHTPIN 2 // Номер пина, к которому подсоединен датчик
! //#define DHTTYPE DHT22 // Задаём тип DHT датчика
! //DHT dht(DHTPIN, DHTTYPE);
! ////////////////////////////////////////////////////////////////////////////
! void callback(char* topic, byte* payload, unsigned int length) {
! payload[length] = '\0';
! // Serial.print(topic);
! // Serial.print("=");
! String strTopic = String(topic);
! String strPayload = String((char*)payload);
! // Serial.println(strPayload);
! callback_iobroker(strTopic, strPayload);
! }
! EthernetClient ethClient; //ЗДЕСЬ КОМЕНТИРУЮ И КОПИРУЮ В ДРУГОЕ МЕСТО НИЖЕ
! PubSubClient client(server, 1883, callback, ethClient);
! ////////////////////////////////////////////////////////////////////////////
! void setup() {
! //Serial.begin(57600);
! // Serial.println("start");
! //Объявляем порты Digital inputs/outputs
! for (int i = 0 ; i <= n_DI_pin; i++) {
! pinMode (start_DI_pin __, INPUT);
! }
! digitalWrite(5, HIGH); //Окно
! digitalWrite(4, HIGH); //Объемник
! for (int i = 0 ; i <= n_DO_pin; i++) {
! pinMode (start_DO_pin __, OUTPUT);
! }
! Ethernet.begin(mac, ip);
! if (client.connect(id_connect)) {
! getSensors();
! control();
! // client.publish("myhome/Kitchen/Change_Counter", "0");
! // client.publish("myhome/Kitchen/Temp_room", "0");
! // client.publish("myhome/Kitchen/Humidity_room", "0");
! // client.publish("myhome/Kitchen/Temp_radiator", "0");
! // client.publish("myhome/Kitchen/Temp_in", "0");
! // client.publish("myhome/Kitchen/Lux", "0");
! // client.publish("myhome/Kitchen/Servo", "0");
! // client.publish("myhome/Kitchen/MQ7", "0");
! client.subscribe("myhome/Kitchen/#");
! }
! }
! /////////////////////////////////////////////////////////////////////////
! void loop() {
! client.loop();
! control();
! getSensors();
! if (!client.connected()) {
! if (client.connect(id_connect)) {
! control();
! getSensors();
! client.subscribe("myhome/Kitchen/#");
! }
! }
! }____</dallastemperature.h></onewire.h></dht.h></servo.h></pubsubclient.h></ethernet.h></spi.h> __и отдельно Functions! /////////////////////////////////От Брокера//////////////////////////////////////////////
! void callback_iobroker(String strTopic, String strPayload){
! if (strTopic == "myhome/Kitchen/Servo"){
! ServoAngle=strPayload.toInt();
! if (ServoAngle >= 0 && ServoAngle <= 255){
! servo.attach(ServoPin);
! //delay(200); //ждем 2 секунды
! servo.write(ServoAngle); //ставим вал под 0
! delay(1000); //ждем 2 секунды
! //client.publish("myhome/Kitchen/Servo", b);
! servo.detach();
! }
! }
! }
! ////////////////////////////////////Брокеру/////////////////////////////////////
! void control(){
! if(digitalRead(5)==HIGH && flag==0) { //если окно открыто
! client.publish("myhome/Kitchen/Window", "1");
! flag=1;
! }
! if(digitalRead(5)==LOW && flag==1){//если окно закрыто
! client.publish("myhome/Kitchen/Window", "0");
! flag=0;//обнуляем переменную flag
! }
! if(digitalRead(4)==HIGH && flag2==0) { // Если есть движение
! client.publish("myhome/Kitchen/Motion", "1");
! flag2=1;
! }
! if(digitalRead(4)==LOW && flag2==1){// Если нет движения
! client.publish("myhome/Kitchen/Motion", "0");
! flag2=0;//обнуляем переменную flag
! }
! }
! ///////////////////////////////Данные сенсоров////////////////////////////////////
! void getSensors () {
! MQ7Value = analogRead(MQ7_Pin);
! fotoValue = analogRead(foto_Pin); // считываем значение с фоторезистора
! // ServoAngle = analogRead(2);
! //Обработка данных датчика DHT22. Подключение к порту цифровому P9 Arduino
! //Глобальные переменные Hout и Tout типа флоат - влажность (%) и температура (град. С)
! if (DHT.read22(DHT22_PIN)== DHTLIB_OK) {
! Hout = DHT.humidity;
! Tout = DHT.temperature;
! }
! if (Hout == 0 || Tout == 0){
! delay (1000);
! if (DHT.read22(DHT22_PIN)== DHTLIB_OK) {
! Hout = DHT.humidity;
! Tout = DHT.temperature;
! }
! }
! //Обработка данных цифровых датчиков температуры типа DS18B20.
! //Шина 1-Wire на цифровой пин P8 Arduino.
! //Подключено 2 датчика температуры, адреса задаются в секции глобальных констант "Sensors"
! //Три значение температуры T1, T2, типа float (град. С).
! DS_sensors.requestTemperatures();
! T1 = DS_sensors.getTempC(addr_T1);
! ///////////////////////Паблик данных сенсоров////////////////////////
! if (pause == 50 || pause == 0){
! char b[5];
! String char_Hout = String(Hout);
! char_Hout.toCharArray(b,5);
! client.publish("myhome/Kitchen/Humidity_room", b);
! String char_Tout = String(Tout);
! char_Tout.toCharArray(b,5);
! client.publish("myhome/Kitchen/Temp_room", b);
! String char_T1 = String(T1);
! char_T1.toCharArray(b,5);
! client.publish("myhome/Kitchen/Temp_radiator", b);
! String char_fotoValue = String(fotoValue);
! char_fotoValue.toCharArray(b,4);
! client.publish("myhome/Kitchen/Lux", b);
! String char_ServoAngle = String(ServoAngle);
! char_ServoAngle.toCharArray(b,4);
! client.publish("myhome/Kitchen/Servo", b);
! String char_MQ7Value = String(MQ7Value);
! char_MQ7Value.toCharArray(b,4);
! client.publish("myhome/Kitchen/MQ7", b);
! pause = 1;
! }
! else pause++;
! } Заранее всем спасибо жду ответов__ -
> я думаю что проблема с библиотекой но я несколько установил проблема не исчезла .проблема не в библиотеке. Перепиши код под свою библиотеку -
> я думаю что проблема с библиотекой но я несколько установил проблема не исчезла .проблема не в библиотеке. Перепиши код под свою библиотеку `спасибо за ответ я попробовал по разному но у меня все ошибки начинаются с самого начала когда я библиотеку
#include ````начинаю переименовывать в```` #include ````потому что у меня просит библиотеку именно с большими буквами поэтому я и прошу дать библиотеку которая написана с маленькими буквами. Потому что после переименования библиотеки пропадает ошибка инициализации библиотеки но она тянет за собой кучу других ошибок. Буду признателен за dht библиотеку прописанную в этом скетче -
переименовал в самой библиотеке файл DHT.h в dht.h теперь исчезла ошибка по библиотеке но появились много других которые я думаю связаны друг с другом выкладываю мои ошибки может кто подскажет что можно сделать
Arduino: 1.6.6 (Windows 10), Плата:"Arduino/Genuino Uno" Kitchen_Mqtt:56: error: 'dht' does not name a type dht DHT; ^ C:\Users\User\Downloads\Kitchen_Mqtt_HAUS\Kitchen_Mqtt\functions.ino: In function 'void getSensors()': functions:48: error: expected primary-expression before '.' token if (DHT.read22(DHT22_PIN)== DHTLIB_OK) { ^ functions:48: error: 'DHTLIB_OK' was not declared in this scope if (DHT.read22(DHT22_PIN)== DHTLIB_OK) { ^ functions:49: error: expected primary-expression before '.' token Hout = DHT.humidity; ^ functions:50: error: expected primary-expression before '.' token Tout = DHT.temperature; ^ functions:54: error: expected primary-expression before '.' token if (DHT.read22(DHT22_PIN)== DHTLIB_OK) { ^ functions:54: error: 'DHTLIB_OK' was not declared in this scope if (DHT.read22(DHT22_PIN)== DHTLIB_OK) { ^ functions:55: error: expected primary-expression before '.' token Hout = DHT.humidity; ^ functions:56: error: expected primary-expression before '.' token Tout = DHT.temperature; ^ exit status 1 'dht' does not name a type Это сообщение будет содержать больше информации чем "Отображать вывод во время компиляции" включено в Файл > Настройкився надежда на вас instalator или на других желающих помочь . этот скетч как будто написан под мои запросы мне надо передавать данные в majordomo по MQTT так что прошу вашего внимания. Заранее спасибо
-
переименовал в самой библиотеке файл DHT.h в dht.h теперь исчезла ошибка по библиотеке но появились много других которые я думаю связаны друг с другом выкладываю мои ошибки может кто подскажет что можно сделать
Arduino: 1.6.6 (Windows 10), Плата:"Arduino/Genuino Uno" Kitchen_Mqtt:56: error: 'dht' does not name a type dht DHT; ^ C:\Users\User\Downloads\Kitchen_Mqtt_HAUS\Kitchen_Mqtt\functions.ino: In function 'void getSensors()': functions:48: error: expected primary-expression before '.' token if (DHT.read22(DHT22_PIN)== DHTLIB_OK) { ^ functions:48: error: 'DHTLIB_OK' was not declared in this scope if (DHT.read22(DHT22_PIN)== DHTLIB_OK) { ^ functions:49: error: expected primary-expression before '.' token Hout = DHT.humidity; ^ functions:50: error: expected primary-expression before '.' token Tout = DHT.temperature; ^ functions:54: error: expected primary-expression before '.' token if (DHT.read22(DHT22_PIN)== DHTLIB_OK) { ^ functions:54: error: 'DHTLIB_OK' was not declared in this scope if (DHT.read22(DHT22_PIN)== DHTLIB_OK) { ^ functions:55: error: expected primary-expression before '.' token Hout = DHT.humidity; ^ functions:56: error: expected primary-expression before '.' token Tout = DHT.temperature; ^ exit status 1 'dht' does not name a type Это сообщение будет содержать больше информации чем "Отображать вывод во время компиляции" включено в Файл > Настройкився надежда на вас instalator или на других желающих помочь . этот скетч как будто написан под мои запросы мне надо передавать данные в majordomo по MQTT так что прошу вашего внимания. Заранее спасибо ` смогу только завтра часов в 6 московского глянуть
-
вся надежда на вас instalator или на других желающих помочь . этот скетч как будто написан под мои запросы мне надо передавать данные в majordomo по MQTT так что прошу вашего внимания. Заранее спасибо `
….пожалуйста
266_dht.rar
266_kitchen_mqtt.rar -
спасибо огромное с вашей библиотекой сразу всё скомпилипровалось сейчас попробую сбросить на ардуинку и буду тестировать
-
залил на ардуино но данные никакие не поступают дело в том что я пользуюсь Mosquitto а не IBroker может быть из за этого. Просто до этого я пользовался только одним DHT вот этим скетчем````
*
//Скетч для вывода в Монитор порта теспературы в Цельсиях и Влажности
// с датчика DHT22 и отправки их по MQTT в брокер и MajorDoMo.
*/#include <spi.h> // Библиотека SPI шины
#include <ethernet.h> // Ethernet библиотека
#include <pubsubclient.h> // Библиотека MQTT
#include <dht.h> // Библиотека для датчиков DHT11/22#define DHTPIN 2 // Номер пина, к которому подсоединен датчик
#define DHTTYPE DHT22 // Задаём тип DHT датчика
DHT dht(DHTPIN, DHTTYPE);// Задаём mac и ip адреса в Локальной сети
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip{192, 168, 1, 74}; //ip Адрес Ethernet Shild'a Arduino
IPAddress server{192, 168, 1, 3}; //ip Адрес для MQTT Брокера// Шапка Функции Callback (обратный вызов)
void callback(char* topic, byte* payload, unsigned int length);EthernetClient ethClient; //Инициализируем Ethernet клиент
PubSubClient client(server, 1883, callback, ethClient); //Инициализируем MQTT клиент// Функция Callback
void callback(char* topic, byte* payload, unsigned int length)
{
// Выделяем необходимое кол-во памяти для копии payload
byte* p = (byte*)malloc(length);
// Копирование payload в новый буфер
memcpy(p, payload, length);
client.publish("home/data/status/sensor", p, length);
// Освобождаем память
free(p);
}void setup()
{
// 1 бод равно 0.8 бит/сек
// 1 бит/сек равно 1.25 бод
Serial.begin(9600); // Задаём скорость порта в БОД'ах.
Serial.println("DHT22 test!"); // Тестовое сообщ. при откр. Монитора портаdht.begin();
Ethernet.begin(mac, ip); // Инициализируем mac, ip
}
void loop() {
int h = dht.readHumidity(); // Переменная типа int для Влажности
int t = dht.readTemperature(); // Переменная типа int для Температуры// Преобразуем переменные для отправки в MQTT в Брокер
static char char_temp[7]; // Переменная для перевода из int в char
dtostrf(t, 3, 0, char_temp); // Перевод из int в charstatic char char_hum[7];
dtostrf(h, 3, 0, char_hum);if (client.connect("DHTClient")) //Если DHTClient подкл., то выполняется код...
{
if (isnan(t) || isnan(h)) // Проверка удачно ли прошло считывание с DHT22
{
Serial.println("Failed to read from DHT22"); // Не удалось прочитать DHT22
} else {
// Отправка данных в Монитор порта при удачной проверке
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");//Отправка данных по MQTT в Брокер client.publish("home/data/status/sensor/temp", char_temp); //Температура client.publish("home/data/status/sensor/hum", char_hum); //Влажность delay(5000); // Отправка данных в Брокер раз в 5 секунд }} else {
client.disconnect(); // иначе отключиться
}
}</dht.h></pubsubclient.h></ethernet.h></spi.h>я взял с этого скетча всё что касается MQTT и перекинул в ваш скетч и всё заработало пока тестирую -
почему то в myhome/Kitchen/Temp_radiator пишет значение -127 тоесть значение с минусом я так понимаю это значение с датчика DS1820 ONE_WIRE_BUS 8 и он подключен к пину 8 похоже что он не видит мой датчик пока не могу понять от чего и ещё кое что у меня не так home/data/status/sensor а так же myhome/Kitchen/MQ7 имеют одно значение и меняются вместе похоже что то с подключением . если есть какие то идеи подскажите
-
почему то в myhome/Kitchen/Temp_radiator пишет значение -127 тоесть значение с минусом я так понимаю это значение с датчика DS1820 ONE_WIRE_BUS 8 и он подключен к пину 8 похоже что он не видит мой датчик пока не могу понять от чего и ещё кое что у меня не так home/data/status/sensor а так же myhome/Kitchen/MQ7 имеют одно значение и меняются вместе похоже что то с подключением . если есть какие то идеи подскажите `
DS1820 - нужна подтяжка примерно 4.7кОм к 5В.MQ7 - использывать аналоговый выход.
-
почему то в myhome/Kitchen/Temp_radiator пишет значение -127 тоесть значение с минусом я так понимаю это значение с датчика DS1820 ONE_WIRE_BUS 8 и он подключен к пину 8 похоже что он не видит мой датчик пока не могу понять от чего и ещё кое что у меня не так home/data/status/sensor а так же myhome/Kitchen/MQ7 имеют одно значение и меняются вместе похоже что то с подключением . если есть какие то идеи подскажите `
ID датчика в коде указал свой?DeviceAddress addr_T1 = { 0x28, 0xFF, 0xF2, 0x5C, 0x53, 0x15, 0x02, 0x97 };
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden