Weiter zum Inhalt

Skripten / Logik

16.6k Themen 214.5k Beiträge

Hilfe zu JavaScript, Blockly, TypeScript, Node-RED, Scenes und text2command

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    3k 49k
    3k Themen
    49k Beiträge
    P
    Hi @Schimi , danke für das Skript. Ich glaube, es gibt einen kleinen Bug bei den stündlichen Daten. Die Werte für die ersten beiden Stunden des Tages werden falsch zugeordnet. Zum Debuggen habe ich das Skript angepasst und den Datenpunkt "from" mitschreiben lassen. Da ergibt sich folgendes Bild: 0_userdata.0.wetter_com.day_0.hourly.23.from = 2026-04-25T21:00:00Z 0_userdata.0.wetter_com.day_1.hourly.00.from = 2026-04-26T22:00:00Z 0_userdata.0.wetter_com.day_1.hourly.01.from = 2026-04-26T23:00:00Z 0_userdata.0.wetter_com.day_1.hourly.02.from = 2026-04-26T00:00:00Z Die TImestamps sind ja UTC, also 2h Versatz zu Deutschland. Die Uhrzeiten sind alle ok, aber bei 00:00 und 01:00 Uhr stimmt das Datum nicht. Da müsste als Tag der 25. drin stehen.
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    M
    Gestern war bei VolMax 3,54V Ladeende 100%, das Entladen stoppt halt dann doch relativ bald wenn ich bei Volmin 3,16V stoppe, aber wird wohl Sinn machen. Damit es ein bisschen hinausgezögert wird habe ich aber aktuell schon von 40% (500W) bis 10% verlaufend das Entladelimmit bis zu nur noch maximal 200W runtergesetzt.
  • Hilfe für Skripterstellung mit Node-RED

    955 13k
    955 Themen
    13k Beiträge
    mickymM
    @Tontechniker Man kann solche Filter aber auch OHNE neue Nodes zu installieren mit einfachen Standard-Switch Nodes realisieren: [image: 1776865319208-af3cab3c-2716-43f4-b7df-7f74e8bf051b-image.jpeg] ggf. einfach nochmal meinen alten Thread anschauen: https://forum.iobroker.net/topic/50086/datum-und-zeitverarbeitung-mit-nodered
  • Typescript: Debugging und Import (Skriptausführung: 6.0.0)

    2
    2
    0 Stimmen
    2 Beiträge
    248 Aufrufe
    M
    Ich hab's jetzt nochmal hin und her probiert. Mit der Version 5.8.10 klappt das debuggen noch, mit 6.0.0 nicht mehr. Bei dem Import kann mir keiner helfen?
  • Hallo Jens ... wenn ich mich einlogge

    7
    0 Stimmen
    7 Beiträge
    442 Aufrufe
    M
    @dr-pie Alternativ kannst du auch den Fully-Kiosk-Browser einsetzen. Der hat eine text-to-Speech Option integriert. Allerdings ist Fully-Kiosk-Browser pro Gerät kostenpflichtig (einmalig). Einen entsprechenden Adapter für ioBroker gibt es auch schon ( https://github.com/arteck/ioBroker.fullybrowser ), mit dem entsprechenden DP [image: 1659913019129-e75c7986-64b8-4b94-8973-47b8517e5196-image.png] Dort schreibt man dann seinen Text rein und die eingestellte Dame liest diesen Satz (Begrüßung, ...) vor. Aber man kann damit noch vieles mehr machen.
  • [gelöst] Schedule Zyklus auslesen

    2
    0 Stimmen
    2 Beiträge
    136 Aufrufe
    M
    @ben1983 https://mcuiobroker.gitbook.io/jarvis-infos/tipps/scripte-blockly-javascript/javascript/functions-commands#schedule-list
  • Zigbee Response aus JS oder Blockly schicken?

    15
    0 Stimmen
    15 Beiträge
    2k Aufrufe
    M
    @newpaint2 Hallo. Dürfte ich eine Frage stellen. Habe auch das Alarmpaneel. Also die Anmeldung bei Bewegung funktiniert. Wenn ich einen Modus ändere bekomme ich immer einen Timout und die LED Leuchtet rot. Funktniert bei dir die Eingabe. Vielen Dank 15:40:18.207 info javascript.0 (31092) script.js.Sicherheit.Alarm: Tastatur Wert :{"type":"commandGetPanelStatus","data":{},"linkquality":83,"groupID":0,"cluster":"ssIasAce","meta":{"zclTransactionSequenceNumber":49,"manufacturerCode":null,"frameControl":{"frameType":1,"manufacturerSpecific":false,"direction":0,"disableDefaultResponse":false,"reservedBits":0}},"endpoint_id":1} 15:40:18.207 info javascript.0 (31092) script.js.Sicherheit.Alarm: Tastatur Kanal ID: zigbee.0.ec1bbdfffe715503 15:40:18.208 info javascript.0 (31092) script.js.Sicherheit.Alarm: Tastatur Seqenz: 49 15:40:18.208 info javascript.0 (31092) script.js.Sicherheit.Alarm: CommadnGetPaneelStatus 15:40:18.209 info javascript.0 (31092) script.js.Sicherheit.Alarm: sendTo(adapter=zigbee.0, cmd=sendToZigbee, msg={"id":"ec1bbdfffe715503","ep":"1","cid":"ssIasAce","cmd":"getPanelStatusRsp","cmdType":"functionalResp","zclSeqNum":49,"zclData":{"panelstatus":"1","secondsremain":"30","audiblenotif":"1","alarmstatus":"1"}})
  • Shuttercontrol - Regenschutz bei offenem Fenster

    1
    0 Stimmen
    1 Beiträge
    199 Aufrufe
    Niemand hat geantwortet
  • (gelöst) Blockly konvertiert boolean nicht nach Zahl ??

    5
    2
    0 Stimmen
    5 Beiträge
    506 Aufrufe
    M
    @paul53 ok.. das erklärt es...
  • Blockly langsam und speichert oft nicht

    9
    0 Stimmen
    9 Beiträge
    354 Aufrufe
    HomoranH
    @djmarc75 geht doch um die Bearbeitung im Editor
  • Abfrage der Erreichbarkeit der Sensoren

    blockly
    25
    0 Stimmen
    25 Beiträge
    3k Aufrufe
    H
    @htrecksler ich habe das mal ein bisschen überarbeitet. Der createState war nicht korrekte und das Log hat Fehler geworfen. Das Objekt was angelegt wurde war nur Read Only. Hier die angepasste Version: //Das Script überprüft regelmässig die Datenpunkte auf Aktualisierung //Angabe des Datenpunkts= Datenpunkt der Überwacht werden soll //StateBezeichnung= Unter pfad_javascript.StateBezeichung wird ein State angelegt; True = Daten sind aktuell / False = Daten veraltet //Zeit in Sekunden = Zeit die vergangen sein darf seit der letzen Aktualisierung des Datenpunkts (0 = default Zeit wird genommen). schedule("*/3 * * * *" , function () { // Angabe des Datenpunkts;StateBezeichnung;Zeit in Sekunden var ueberwachung = ['mqtt.0.Wetterstation.Batterie;Wetterstation;440']; var default_zeit = 400; var pfad_userdata ='0_userdata.0.watchdog.'; // !Punkt nicht vergessen am Ende! //------------------------------------------------------------------ //Ab hier nichts mehr Ändern //------------------------------------------------------------------ var zeit= Math.floor(Date.now() / 1000); var differenz, lchange; var daten, tchange; ueberwachung.forEach(function(item, index, array) { // Array Splitten daten = item.split(";"); //Datenpunkt erstellen wenn nicht vorhanden createState(pfad_userdata + daten[1], { read: true, write: true, name: "Watchdog " + daten[1], type: "boolean", def: false } ) //Differenz Zeit default oder manuell? differenz = parseInt(daten[2]); if (differenz == 0) differenz=default_zeit; //Zeitstempel abfragen in Sekunden tchange=parseInt(getState(daten[0]).ts / 1000); //Vergleichen der Zeitstempel if ((zeit-tchange)>differenz) { setState(pfad_userdata + daten[1], false); //setState("telegram.0.communicate.response", daten[1] + ' - ' + "Info: Sensor nicht erreichbar"); //console.log(daten[1] + " ist älter als " + differenz + " Sekunden", 'warn'); } else { setState(pfad_userdata + daten[1], true); //console.log(daten[1] + " ist jünger als " + differenz + " Sekunden"); } }); });
  • Shuttercontrol Sonnenschutz funktioniert nicht (Homematic)

    5
    6
    0 Stimmen
    5 Beiträge
    498 Aufrufe
    E
    Ok, danke. Das scheint das Problem gelöst zu haben. Ich danke euch für eure Tipps.
  • Vorstellung meines Bewohnerstatus

    blockly javascript
    5
    1
    2 Stimmen
    5 Beiträge
    2k Aufrufe
    EisteeE
    @rtwl Ich verwende Bewegungsmelder. Und ja wir leben zu zweit mit Hund und ja der Bewegungsmelder im Schlafzimmer sieht auch wenn man sich im Bett bewegt. Aber ich habe den Bewegungsmelder halt so mit Bedingungen verknüpft das er nur das schlafen gehen anstößt (gotosleep) und damit Lichtscene dunkles zu Bett geh Licht. Das Schlafend (asleep) steuert dann Licht aus und kommt automatisch nach 10 Minuten oder durch einen Schalter am Bett mit dem man bei bedarf das Licht auch wieder an schalten kann. Der Bewegungsmelder Schaltet bei Dämmerung das Licht für eine Dauer an wenn der Status home gesetzt ist. Wenn gotosleep oder asleep gesetzt sind macht der Bewegungsmelder kein Licht an. Da steuert das gotosleep und asleep dann direkt das Licht. Bedingung zum schlafen gehen (gotosleep) bei mir: Uhrzeit 22:00-04:00Uhr und beide Harmony Hubs (Beamer / Fernsehr in verschiedenen Räumen) melden Aus. Getriggert durch Bewegungsmelder Schlafzimmer oder Bewegungsmelder Bad Im Bild die Bedingungen und ich stehe immer zuerst auf deshalb setzt mich der Bad Bewegungsmelder wieder wach.[image: 1659084363562-screenshot-2022-07-29-104455.png]
  • Zähle Datenpunkte innerhalb eines Verzeichnis

    3
    0 Stimmen
    3 Beiträge
    390 Aufrufe
    C
    @paul53 sagte in Zähle Datenpunkte innerhalb eines Verzeichnis: $('Verzeichnis-ID.*').length Danke schonmal. length gibt mir dann die Länge der Zeichen von der Verzeichnis-ID aus. Edit: Vergiss es. Hab das Dollar-Zeichen vergessen. Passt. Danke dir :)
  • RGB Lampe mit XY Wert füttern

    9
    0 Stimmen
    9 Beiträge
    257 Aufrufe
    mickymM
    @gluecksmann du könntest ja mal versuchen, ob die von @DJMarc75 erwähnten r,g,b Datenpunkte funktionieren oder bissi googeln. Hier mal Farben in dem von Dir gewünschten Format: https://www.enigmaticdevices.com/philips-hue-lights-popular-xy-color-values/ Außerdem kann man vielleicht in dem colormode, der auf xy steht, diesen auf rgb oder hsl umstellen.. EDIT: So wie ich verstanden habe, kann die HUE Bridge nur xy Color Werte, aber das sollte nach meinem Verständnis automatisch umrechnen, da der die entsprechende API zur Konvertierung eingebaut hat. So habe ich diesen Thread hier verstanden: https://forum.iobroker.net/topic/1510/iobroker-hue-mit-hue-bridge-2
  • Blockly warten mit Bedingung

    27
    1
    0 Stimmen
    27 Beiträge
    2k Aufrufe
    rtwlR
    @cainam sagte in Blockly warten mit Bedingung: Meine Idee war mal zB den Wert Stromverbrauch zu überwachen. Dh beim Runtergehen ist dieser auf >50W. sobald dieser wieder auf 0ist würde dann der Befehl auf 66% ausgelöst. doch schaff ich das nicht Ich zitiere mal deine Idee aus Beitrag #1. Selbe Idee hatte ich auch und konnte es so lösen. Keine Ahnung ob du es mittlerweile geschafft hast, aber vielleicht hilfts dennoch: [image: 1658868743136-523ec876-bf0c-45a3-9a15-c7a99266ff2b-image.png] Raff_Position bzw Raff_Power sind die jeweiligen Datenpunkte der Shellys. Sobald Position 0 angefahren wird, wird eine Minute lang (60 Wiederholungen) jede Sekunde (Pause 1000ms) geprüft ob der Stromverbrauch kleiner als 5W ist. Falls ja, wird auf Position 2 gefahren und die Schleife abgebrochen.
  • Shelly Bulbs gruppieren und RGBW per Alexa steuern

    10
    1
    0 Stimmen
    10 Beiträge
    626 Aufrufe
    da_WoodyD
    @reutli hehe, gerne doch! die farbtemperatur in weiß hab ich nicht geschafft. da muss ich noch text üben... ;) effekte konnte ich auch nicht schalten. wie gesagt, hufe in horizontallage für heute. wurde heute um 06:12 von einem blitzeinschlag ganz nahe geweckt...
  • IOBroker Anfänger-Problem Aquara Cube & Philips Hue

    4
    4
    0 Stimmen
    4 Beiträge
    214 Aufrufe
    HomoranH
    @planetcom sagte in IOBroker Anfänger-Problem Aquara Cube & Philips Hue: Der Trigger wird ausgelöst. du bist ja sogar schon im falls! also ist auch das korrekt
  • Rolläden zusammen fahren oder getrennt

    7
    0 Stimmen
    7 Beiträge
    622 Aufrufe
    D
    Okay, versuch ich es mal. Ich habe zuerst einen extra Datenpunkt unter den Objekten im user.data angelegt. Eine Zahl. [image: 1658756274059-objekt.png] Dieser Datenpunkt wird einfach durch den Schiebregler "Wohn-Esszimmer" mit einer Zahl zwischen 1-100 beschrieben. [image: 1658756408155-screen.png] So und dies kleine Blockly Script steuert jetzt bei einer Änderung dieses Datenpunktes die beiden Positionseinträge der Shellys mit dem Wert. Folge: die beiden Shellys lassen die Rolläden auf die Position fahren. [image: 1658756626710-position.png] Wenn ich jetzt mit den einzelnen Regler andere Werte für die Rolläden einstelle bleiben sie trotzdem unabhängig von einander. Erst wenn ich den gemeinsamen Regler wieder verstelle laufen sie wieder die gleiche Position an. Ich finde typische Fall von "wenn man weiß wie, ganz einfach" Kein Gemeckere wegen dem Design des Views, ist noch in Arbeit ;-)
  • GPIO Status Wemos d1 mini an iobroker senden

    193
    0 Stimmen
    193 Beiträge
    27k Aufrufe
    B
    @tt-tom Hat schon. #include <ESP8266WiFi.h> #include <ArduinoOTA.h> #include <PubSubClient.h> #include <AccelStepper.h> #include <Adafruit_NeoPixel.h> #ifndef STASSID #define STASSID "msg2" #define STAPSK "1629969423743097" #endif #define MotorStatus D2 // Steppermotor aktivieren/deaktivieren #define LEDpin D7 // Umgesteuerter GPIO für die NEO-Led #define NUMPIXELS 1 // Anzal der LEDs const char* ssid = STASSID; const char* password = STAPSK; char* mqtt_client_id = "Essig_Innen"; const char* mqtt_server = "192.168.49.38"; const int mqtt_port = 1886; const char* mqtt_user = "mqttuser"; const char* mqtt_password = "Beowolf503588"; const byte Pegelschalter = D6; // Pegelschalter für Essigvorrat const byte RelaisVentil = D5; // Relais für Wasserzufuhrventil // const long SchritteUmdrehung = 200; // Schritte des Schrittmotors für 360 Grad der Tür const unsigned int Essigdosis = 20000; int lebenszeichen_zaehler = 0; // Zähler um Lebenzeichen an MQTT Broker zusenden int lebenszeichen_interval = 10; // interval für MQTT Broker in sek int messung_interval = 10; // interval für Pegelmessung in sek long led_takt = 500; // Zeittakt (ms) für die LED ##takt## long led_zeit; // Letzter Durchlauf (ms) für die LED ##takt## long lebenszeichen_takt = lebenszeichen_interval * 1000; // Zeittakt (ms) ##takt## long lebenszeichen_zeit; // Letzter Durchlauf (ms) ##takt## long lebenszeichen_ein_aus = 0; // ##takt## long messung_takt = messung_interval *1000; // Zeittakt (ms) long messung_zeit; //Letzter Durchlauf (ms) WiFiClient espClient; PubSubClient mqttClient(espClient); AccelStepper stepper(1, D3, D4); //Pins für den Steppermotor STEP , DIR Adafruit_NeoPixel pixels = Adafruit_NeoPixel(2, LEDpin, NEO_GRB + NEO_KHZ800); void setup() { pinMode(LEDpin, OUTPUT); // NEO-LED pinMode(Pegelschalter, INPUT_PULLUP); // Pegelschalter für Essigtank pinMode(RelaisVentil, OUTPUT); // Relais für Wasserzufuhrventil pinMode(MotorStatus, OUTPUT); // Enable Motor 1 pinMode(LED_BUILTIN, OUTPUT); // Board-LED nutzen stepper.setMaxSpeed(1000); stepper.setAcceleration(1500); digitalWrite(MotorStatus, HIGH); //Motor deaktiviert Serial.begin(9600); // while(!Serial){ // ; // wartet bis die serielle Schnittstelle eine Verbindung hergestellt hat. Wird für natives USB benötigt // } // Per WLAN mit dem Netzwerk verbinden Serial.print("Verbinden mit "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } /////////////////////////////////////////// // Anfang Update über Wlan /////////////////////////////////////////// ArduinoOTA.onStart([]() { String type; if (ArduinoOTA.getCommand() == U_FLASH) { type = "sketch"; } else { // U_FS type = "filesystem"; } // NOTE: if updating FS this would be the place to unmount FS using FS.end() Serial.println("Start updating " + type); }); ArduinoOTA.onEnd([]() { Serial.println("\nEnd"); }); ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { Serial.printf("Progress: %u%%\r", (progress / (total / 100))); }); ArduinoOTA.onError([](ota_error_t error) { Serial.printf("Error[%u]: ", error); if (error == OTA_AUTH_ERROR) { Serial.println("Auth Failed"); } else if (error == OTA_BEGIN_ERROR) { Serial.println("Begin Failed"); } else if (error == OTA_CONNECT_ERROR) { Serial.println("Connect Failed"); } else if (error == OTA_RECEIVE_ERROR) { Serial.println("Receive Failed"); } else if (error == OTA_END_ERROR) { Serial.println("End Failed"); } }); ArduinoOTA.begin(); /////////////////////////////////////////// // Ende Update über Wlan /////////////////////////////////////////// // Die IP vom Webserver auf dem seriellen Monitor ausgeben Serial.println(""); Serial.println("WLAN verbunden."); Serial.println("IP Adresse: "); Serial.println(WiFi.localIP()); // MQTT Brocker // Mit ioBroker Mqtt verbinden mqttClient.setServer(mqtt_server, mqtt_port);//MQTT Server, - Port mqttClient.setCallback(callback); // NEO_Pixel Start pixels.begin(); // This initializes the NeoPixel library. lebenszeichen_zeit = millis(); // ##takt## led_zeit = millis(); // ##takt## messung_zeit = millis(); Serial.println("Programmanfang"); } //ende Setup ////////////////////////////////////////////////////////////////////////////////// void loop() { ArduinoOTA.handle(); ArduinoOTA.setHostname("Essig_Innen"); Pegelstand_lesen(); Essigdosierer_deaktivieren(); lebenszeichen(); stepper.run(); // MQTT Broker mqttClient.loop(); if (!mqttClient.connected()) { reconnectToMQTT(); } } //ende loop ///////////////////////////////////////////////////////////////////////////////// void Pegelstand_lesen() { long current_time = millis(); if (messung_zeit <= current_time) { if (digitalRead(Pegelschalter)) { mqttClient.publish("HH_Frischwasser/Innen/Essigpegel", "1"); } else { mqttClient.publish("HH_Frischwasser/Innen/Essigpegel", "0"); } while (messung_zeit <= current_time) messung_zeit += messung_takt; } } // MQTT Funktion // ************* void reconnectToMQTT() { if (mqttClient.connect(mqtt_client_id , mqtt_user, mqtt_password)) { Serial.println("Per MQTT mit ioBroker verbunden"); mqttClient.publish("HH_Frischwasser/Innen/alive", "0"); mqttClient.subscribe("HH_Frischwasser/Innen/Frischwasserventil"); mqttClient.subscribe("HH_Frischwasser/Innen/Essigdosierer"); } else { Serial.print("mqtt-Verbindung fehlgeschlagen "); Serial.print(mqttClient.state()); Serial.println(" versuchen es in 5 Sekunden erneut"); // Wait 5 seconds before retrying delay(5000); } } // MQTT Callback void callback(char* topic, byte* payload, unsigned int length) { payload[length] = '\0'; String strTopic = String(topic); String strPayload = String((char * ) payload); Serial.print("Nachricht angekommen ["); Serial.print(strTopic); Serial.print("----"); Serial.print(strPayload); Serial.print("] "); Serial.println(); if (strTopic == "HH_Frischwasser/Innen/Frischwasserventil") { // Pumpe Start if (strPayload == "false") { Serial.println("Frischwasserventil geöffnet über IoBroker"); digitalWrite(RelaisVentil, HIGH); pixels.setPixelColor(0, pixels.Color(0, 0, 255)); //LED Farbe blau pixels.show(); } // Pumpe Stop if (strPayload == "true") { Serial.println("Frischwasserventil geschlossen über IoBroker"); digitalWrite(RelaisVentil, LOW); pixels.setPixelColor(0, pixels.Color(0, 255, 0)); //LED Farbe grün pixels.show(); } } if (strTopic == "HH_Frischwasser/Innen/Essigdosierer") { // Essigdosierer Start if (strPayload == "true") { Serial.println("Start Essigdosierer über IoBroker"); digitalWrite(MotorStatus, LOW); //Motor aktiviert stepper.move(Essigdosis); pixels.setPixelColor(1, pixels.Color(255, 127, 0)); //LED Farbe gelb pixels.show(); } } } void Essigdosierer_deaktivieren() { // Essigdosierer Stopp if (stepper.currentPosition() == Essigdosis) { Serial.println(stepper.currentPosition()); mqttClient.publish("HH_Frischwasser/Innen/Essigdosierer", "false"); Serial.println("Essigdosierer gestoppt"); pixels.setPixelColor(1, pixels.Color(0, 255, 0)); //LED Farbe grün pixels.show(); stopp(); } } void stopp() { stepper.setCurrentPosition(0); stepper.stop(); digitalWrite(MotorStatus, HIGH); //Motor deaktiviert } void lebenszeichen() { // ##takt## --> long current_time = millis(); // LED auf dem Board blinken lassen if (led_zeit <= current_time) { if (digitalRead(LED_BUILTIN) == HIGH) digitalWrite(LED_BUILTIN, LOW); else digitalWrite(LED_BUILTIN, HIGH); while (led_zeit <= current_time) led_zeit += led_takt; } if (lebenszeichen_zeit <= current_time) { if (lebenszeichen_ein_aus == 0) { mqttClient.publish("HH_Frischwasser/Innen/alive", "1"); lebenszeichen_ein_aus = 1; } else { mqttClient.publish("HH_Frischwasser/Innen/alive", "0"); lebenszeichen_ein_aus = 0; } while (lebenszeichen_zeit <= current_time) lebenszeichen_zeit += lebenszeichen_takt; } // ##takt## <-- }
  • Wled per Blocklyscript für Garagentorzustände steuern

    20
    2
    0 Stimmen
    20 Beiträge
    1k Aufrufe
    paul53P
    @spidermike sagte: wenn ich mit 2 Timeout arbeiten will [image: 1658684546909-bild_2022-07-24_194226382.png]
  • Umlaut im Javascript Namen - wie ändern?

    13
    1
    0 Stimmen
    13 Beiträge
    347 Aufrufe
    hg6806H
    So, habe es hinbekommen. Nach der Spiegelung habe ich es dort gelöscht und noch einmal in den Objekten. Jetzt geht wieder alles . Danke euch allen!
  • [gelöst] Webseite anlassbezogen auslesen

    5
    0 Stimmen
    5 Beiträge
    383 Aufrufe
    T
    @paul53 Spitze! Ich habe fürs nachbauen sicher länger gebraucht wie du fürs erstellen. Wenn mans dann sieht, klingt alles ganz logisch. Selbst draufgekommen wäre ich niemals. Besten Dank für die schnelle Hilfe. Schöne Grüße Tom

510

Online

32.8k

Benutzer

82.8k

Themen

1.3m

Beiträge