Skip to content

Skripten / Logik

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

16.4k Themen 211.8k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 48k
    2k Themen
    48k Beiträge
    A
    @as Welches Diagramm verwendest du? Es gibt drei Diagramme, eins für heute, eins für Morgen und eins wo beide Tage drauf sind. Das Skript berücksichtig beide Tage.
  • Hilfe für Skripterstellung mit Blockly

    6k 78k
    6k Themen
    78k Beiträge
    M
    @paul53 Vielen lieben Dank für Deine Hilfe. Mit GET läufts perfekt. Ich dachte das GET für "abholen" von Werten verwendet wird und POST für das Senden von Befehlen. Nochmal vielen Dank lg Michael
  • Hilfe für Skripterstellung mit Node-RED

    952 13k
    952 Themen
    13k Beiträge
    HomoranH
    @fiddle sagte in [Gelöst]: Adapter per {Node Red | JS} (de)aktivieren: Ok, nicht als "Wert" schreiben, sondern als "Befehl". Dann scheint ihn das zu beeindrucken. du zeigst ja nichts, aber es geht mit true/false [image: 1763416200051-screenshot_20251117-224854_firefox.jpg] gesteuert über eigenen DP vom typ Bool
  • IPad und Script Editor…

    Verschoben
    11
    0 Stimmen
    11 Beiträge
    3k Aufrufe
    S
    Hallo zusammen und Danke für Eure Meinungen. Nur um das klarzustellen, mit diesem Fred ging es mir nicht um den Sinn oder Unsinn mit dem iPad eine View zu erstellen. Das ist sicher auf einem Pc mit Maus und Tastatur effektiver! Es geht mir um die schlechte Unterstützung des iPad im Script Editor des Javascript-Adapters! Der "Rest" von iobroker ist m.M. gut mit dem iPad zu bedienen, nur irgendwie hakt es im besagten Editor. Lg
  • [Gelöst] [Frage] Scripten mit Blockly

    Verschoben
    4
    1
    0 Stimmen
    4 Beiträge
    2k Aufrufe
    apollon77A
    Prüfe -> (A=B) Falls wahr -> Text "passt" oder 1 oder "WeRt von Objekt X" Fallls unwahr -> Text "doch nicht" oder 1 oder "WeRt von Objekt X" und du dockst das dort an wo du den Wert weiterverarbeiten willst. Falls das nicht reicht muss ich Screenshots machen und Bilder schnippeln :)
  • Wert aus Unterfunktion übergeben?

    Verschoben
    14
    0 Stimmen
    14 Beiträge
    2k Aufrufe
    paul53P
    @roland: Wie kann ich in dem sendto Befehl Parameter für die Callbackfunktion übergeben? ` :?: @roland: Wenn das Programm wie oben, gestartet wird, wird die Funktion SQLAbfrage nicht nach 5,10 und 15 s gestartet, sondern alle 3 nach 5 s. ` Ja, gleiche Verzögerung = gleiche Ausführungszeit. In meinem Vorschlag oben hatte ich deshalb auch unterschiedliche Verzögerungszeiten angegeben. setTimeout(function() {SQLAbfrage(id,h);}, 5000); setTimeout() startet einen Timer und übergibt diesem die Referenz und die Parameter zur callback-Funktion SQLAbfrage(id,h), die nach Ablauf der Verzögerungszeit ausgeführt werden soll.
  • [gelöst] script mit 2 Auslösern

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    2k Aufrufe
    L
    Morgen, Gestern Abend gleich probiert und es funktioniert wie es soll :D :D So langsam versteht man immer mehr beim Scripten. Vielen lieben Dank an euch zwei. 8-) Gruß Sven
  • DEBUG in Scripten

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    5k Aufrufe
    M
    Ja genau ich meinte die Scripte im Javascript Adapter. Was ist mit console.log gemeint? Kann ich Stoppunkte setzten ect.? Michael
  • [gelöst]schedule -> Aufruf alle x Stunden

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    2k Aufrufe
    S
    Prima…funktioniert....vielen Dank :)
  • [Gelöst] Javascript Variablen löschen

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    M
    HAllo ich möchte nun noch die VAriablen Zeitgesteuert zurücksetzen. Ich hab es mal so versucht, aber klappt nicht. In diesem beispiel wollte ich den Zähler um 11:51 Uhr zurücksetzen //Zähler zurücksetzen schedule("51 11 * * *", function () { setState("fritzbox.0.calls.missedCount",0); setState("fritzbox.0.history.allTableHTML"," "); });
  • Wertberechnung für 16-fach-LED-Statusanzeige in Javascript?

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    2k Aufrufe
    P
    Hier die oben in der Grafik sichtbaren Widgets. Leider ist der Code 240 Tausend Zeichen lang und deshalb viermal länger, als das Forum erlaubt. [image: 261_led16widgets.txt] Gruß Pix
  • [gelöst] javascript Hilfe gesucht - Fehler "State undefined not found"

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    1k Aufrufe
    etvE
    Liebe Leute, sodala - Fehler gefunden - es war eine falsche Klammer beim "on"-Befehl - da war eine zuviel ;) hab dann noch die Tipps von pix benutzt und alles ein wenig optimiert (glaub ich zumindest :D ) anbei das Script - ev. eine Idee für Kollegen hier im Forum. Schöne Grüße Tom ! // ! // USV-Warnungen via Pushbullet - V 1.1 - 10.08.2016 ! // ! // Variablen angelgen ! var id_status_usv_office = "nut.0.ups.status"; ! var id_status_usv_wohn_1 = "nut.1.ups.status"; ! var id_charge_usv_office = "nut.0.battery.charge"; ! var id_charge_usv_wohn_1 = "nut.1.battery.charge"; ! var id_r_time_usv_office = "nut.0.battery.runtime"; ! var id_r_time_usv_wohn_1 = "nut.1.battery.runtime"; ! // Reaktion auf Statusänderungen ! // Büro ! // Stromausfall ! on ({id: id_status_usv_office, val: "OB DISCHRG", oldValNe: "OB DISCHRG"}, function() { ! var ladung_s = getState(id_charge_usv_office).val; ! var restzeit_s = ((getState(id_r_time_usv_office).val)/60).toFixed(0); ! send_message("Stromausfall!","angesprungen.",ladung_s,restzeit_s,"Büro"); ! }); ! // tiefer Ladestand ! on ({id: id_r_time_usv_office, valLe: 600}, function() { ! var ladung_s = getState(id_charge_usv_office).val; ! var restzeit_s = ((getState(id_r_time_usv_office).val)/60).toFixed(0); ! send_message("Ladung kritisch!","noch immer vom Netz getrennt und hat einen kritischen Ladezustand erreicht.",ladung_s,restzeit_s,"Büro"); ! }); ! // Strom wieder retour ! on ({id: id_status_usv_office, val: "OL", oldValNe: "OL"}, function() { ! var ladung_s = getState(id_charge_usv_office).val; ! var restzeit_s = ((getState(id_r_time_usv_office).val)/60).toFixed(0); ! send_message("Strom wieder OK!","wieder ans Netz gegangen.",ladung_s,restzeit_s,"Büro"); ! }); ! // Wohnzimmer ! // Stromausfall ! on ({id: id_status_usv_wohn_1, val: "OB DISCHRG", oldValNe: "OB DISCHRG"}, function() { ! var ladung_s = getState(id_charge_usv_wohn_1).val; ! var restzeit_s = ((getState(id_r_time_usv_wohn_1).val)/60).toFixed(0); ! send_message("Stromausfall!","angesprungen.",ladung_s,restzeit_s,"Wohnzimmer"); ! }); ! // tiefer Ladestand ! on ({id: id_r_time_usv_wohn_1, valLe: 600}, function() { ! var ladung_s = getState(id_charge_usv_wohn_1).val; ! var restzeit_s = ((getState(id_r_time_usv_wohn_1).val)/60).toFixed(0); ! send_message("Ladung kritisch!","noch immer vom Netz getrennt und hat einen kritischen Ladezustand erreicht.",ladung_s,restzeit_s,"Wohnzimmer"); ! }); ! // Strom wieder retour ! on ({id: id_status_usv_wohn_1, val: "OL", oldValNe: "OL"}, function() { ! var ladung_s = getState(id_charge_usv_wohn_1).val; ! var restzeit_s = ((getState(id_r_time_usv_wohn_1).val)/60).toFixed(0); ! send_message("Strom wieder OK!","wieder ans Netz gegangen.",ladung_s,restzeit_s,"Wohnzimmer"); ! }); ! // Send Pushbullet Message ! function send_message(betreff_r,text_r,ladung_r,restzeit_r,raum_r){ ! var jetzt = new Date(); ! var Stunde = (jetzt.getHours()).toString(); ! var Minute = (jetzt.getMinutes()).toString(); ! if (Minute <= 9) { ! Minute = "0" + Minute; ! } ! sendTo("pushbullet",{ ! message: "Die USV im " + raum_r + " ist kurz vor " + Stunde + ":" + Minute +" Uhr " + text_r + " Die aktuelle Ladunge beträgt " + ladung_r + "% und die Restlaufzeit beträgt " + restzeit_r + " Minuten.", ! title: betreff_r, ! type: "note", ! receiver: "Thomas.Exel@gmail.com" ! }) ! }
  • LaCrosse Sensoren TX29DTH-IT

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    1k Aufrufe
    Niemand hat geantwortet
  • Variable Heizzeiten über VIS einstellen

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    744 Aufrufe
    Niemand hat geantwortet
  • [Gelöst] Kombination von Festtext und Varibale

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    1k Aufrufe
    htreckslerH
    Aber vorsicht… Diese Funktion ist nicht nur mächtig, sondern frisst meiner Meinung nach auch mächtig Performance.
  • Anfängerfrage: Fürs Log wie erhalte ich den Wert einer CCU SV

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    645 Aufrufe
    P
    Ist das noch aktuell? Die Zeile var idAnzahlTageMonat = "hm-rega.0.10382"/*eAnzahlTageMonat*/; ````aus der Funktion raus und zB nach ganz oben schreiben. Dann gilt sie für das ganze Skript, inkl. Funktion. Dann in die Zeile statt log('SV ' + idAnzahlTageMonat); log('SV ' + getState(idAnzahlTageMonat).val); Pix
  • Mit Türklingel TV umschalten

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    1k Aufrufe
    I
    Hallo homefesch, das script wird in Biobroker ausgeführt. Aktuell ist an dem HDMI (noch) nichts, geplant ist ein raspberry welches das Kamerabild streamt…
  • Abfrage ob eine Variable leer ist

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    3k Aufrufe
    paul53P
    @Fitti: TypeError: Cannot read property 'val' of null ` Diese Meldung zeigt, dass getState(id) null liefert, also zu dieser id keine Zustände (states) vorhanden sind. Es ist so die Prüfung möglich, ohne dass es zu der Fehlermeldung kommt: if (getState("javascript.0.meineVariable")) x = getState("javascript.0.meineVariable").val; Stattdessen wird ein Warning-Log erzeugt und die JS-Variable x wird nicht verändert (bleibt so wie sie deklariert wurde).
  • [gelöst] Registrierte Bewegung in einer bestimmten Zeit an Pushover schicken

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    2k Aufrufe
    A
    @nobody: Vielen Dank, das hat soweit funktioniert! Hier nochmal die Lösung: [image: bewegungsmelder2.jpg]~~![](</s><URL url=)http://www.a-flow.de/bilder/bewegungsmelder2.jpg" /> ! ```` [ { "id": "d5634222.be50f", "type": "ioBroker in", "z": "71a2a5f6.8bf87c", "name": "Bewegungsmelder-Front.MOTION", "topic": "hm-rpc.0.LEQ0988078.1.MOTION", "payloadType": "value", "onlyack": true, "func": "all", "gap": "", "x": 176, "y": 53, "wires": [ [ "60f1edfd.5f52a4" ] ] }, { "id": "60f1edfd.5f52a4", "type": "switch", "z": "71a2a5f6.8bf87c", "name": "Prüft, ob Bewegung stattgefunden hat", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "true", "vt": "str" } ], "checkall": "true", "outputs": 1, "x": 510, "y": 53, "wires": [ [ "cb9fb890.0116a8" ] ] }, { "id": "7c08c425.e50acc", "type": "change", "z": "71a2a5f6.8bf87c", "name": "Pushover Nachricht", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "Bewegung an der Hausfront registriert!", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 964, "y": 53, "wires": [ [ "36000dca.323892", "d5eaa2a.f318b6" ] ] }, { "id": "36000dca.323892", "type": "pushover", "z": "71a2a5f6.8bf87c", "name": "Pushover Nachricht senden", "device": "", "title": "Bewegung registriert!", "priority": "0", "sound": "pushover", "x": 1206, "y": 53, "wires": [] }, { "id": "d5eaa2a.f318b6", "type": "debug", "z": "71a2a5f6.8bf87c", "name": "Debug", "active": true, "console": "true", "complete": "payload", "x": 1136, "y": 91, "wires": [] }, { "id": "3911cccf.0cfe04", "type": "inject", "z": "71a2a5f6.8bf87c", "name": "Tester", "topic": "", "payload": "true", "payloadType": "str", "repeat": "", "crontab": "", "once": false, "x": 268, "y": 98, "wires": [ [ "60f1edfd.5f52a4" ] ] }, { "id": "5ae98076.35458", "type": "ioBroker in", "z": "71a2a5f6.8bf87c", "name": "Bewegungsmelder-Parkplatz.MOTION", "topic": "hm-rpc.0.LEQ0988097.1.MOTION", "payloadType": "value", "onlyack": true, "func": "all", "gap": "", "x": 171, "y": 180, "wires": [ [ "fffa844.051c678" ] ] }, { "id": "fffa844.051c678", "type": "switch", "z": "71a2a5f6.8bf87c", "name": "Prüft, ob Bewegung stattgefunden hat", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "true", "vt": "str" } ], "checkall": "true", "outputs": 1, "x": 513, "y": 180, "wires": [ [ "8a95704e.108fe" ] ] }, { "id": "ca582c0a.c22dd", "type": "change", "z": "71a2a5f6.8bf87c", "name": "Pushover Nachricht", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "Bewegung auf dem Parkplatz registriert!", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 969, "y": 179, "wires": [ [ "fe49114a.2a857", "ab4a6710.f59e18" ] ] }, { "id": "fe49114a.2a857", "type": "pushover", "z": "71a2a5f6.8bf87c", "name": "Pushover Nachricht senden", "device": "", "title": "Bewegung registriert!", "priority": "0", "sound": "pushover", "x": 1211, "y": 179, "wires": [] }, { "id": "ab4a6710.f59e18", "type": "debug", "z": "71a2a5f6.8bf87c", "name": "Debug", "active": true, "console": "true", "complete": "payload", "x": 1141, "y": 217, "wires": [] }, { "id": "27418c59.926714", "type": "inject", "z": "71a2a5f6.8bf87c", "name": "Tester", "topic": "", "payload": "true", "payloadType": "str", "repeat": "", "crontab": "", "once": false, "x": 271, "y": 225, "wires": [ [ "fffa844.051c678" ] ] }, { "id": "a12bc594.284ae8", "type": "ioBroker in", "z": "71a2a5f6.8bf87c", "name": "Bewegungsmelder-Stichstraße.MOTION", "topic": "hm-rpc.0.MEQ0246964.1.MOTION", "payloadType": "value", "onlyack": true, "func": "all", "gap": "", "x": 165, "y": 300, "wires": [ [ "eaffdb09.1b7bd8" ] ] }, { "id": "eaffdb09.1b7bd8", "type": "switch", "z": "71a2a5f6.8bf87c", "name": "Prüft, ob Bewegung stattgefunden hat", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "true", "vt": "str" } ], "checkall": "true", "outputs": 1, "x": 515, "y": 300, "wires": [ [ "53a78a93.35acb4" ] ] }, { "id": "67ed4203.0f017c", "type": "change", "z": "71a2a5f6.8bf87c", "name": "Pushover Nachricht", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "Bewegung in der Stichstraße registriert!", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 971, "y": 347, "wires": [ [ "73d671e4.ddbbd", "b64d1a62.f86848" ] ] }, { "id": "73d671e4.ddbbd", "type": "pushover", "z": "71a2a5f6.8bf87c", "name": "Pushover Nachricht senden", "device": "", "title": "Bewegung registriert!", "priority": "0", "sound": "pushover", "x": 1213, "y": 347, "wires": [] }, { "id": "b64d1a62.f86848", "type": "debug", "z": "71a2a5f6.8bf87c", "name": "Debug", "active": true, "console": "true", "complete": "payload", "x": 1143, "y": 385, "wires": [] }, { "id": "57ced1e6.cd7ea", "type": "inject", "z": "71a2a5f6.8bf87c", "name": "Tester", "topic": "", "payload": "true", "payloadType": "str", "repeat": "", "crontab": "", "once": false, "x": 274, "y": 345, "wires": [ [ "eaffdb09.1b7bd8" ] ] }, { "id": "53a78a93.35acb4", "type": "time-range-switch", "z": "71a2a5f6.8bf87c", "name": "Zeituhr", "lat": "50.12", "lon": "8.07", "startTime": "sunrise", "endTime": "sunset", "x": 769, "y": 299, "wires": [ [ "607a888a.f1f0a8" ], [ "67ed4203.0f017c" ] ] }, { "id": "f00537f7.379438", "type": "debug", "z": "71a2a5f6.8bf87c", "name": "Debug", "active": true, "console": "true", "complete": "payload", "x": 1142, "y": 295, "wires": [] }, { "id": "607a888a.f1f0a8", "type": "change", "z": "71a2a5f6.8bf87c", "name": "Pushover Nachricht", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "Zeitraum nicht aktiv", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 970, "y": 294, "wires": [ [ "f00537f7.379438" ] ] }, { "id": "8a95704e.108fe", "type": "time-range-switch", "z": "71a2a5f6.8bf87c", "name": "Zeituhr", "lat": "50.12", "lon": "8.07", "startTime": "sunrise", "endTime": "sunset", "x": 771, "y": 182, "wires": [ [], [ "ca582c0a.c22dd" ] ] }, { "id": "cb9fb890.0116a8", "type": "time-range-switch", "z": "71a2a5f6.8bf87c", "name": "Zeituhr", "lat": "50.12", "lon": "8.07", "startTime": "sunrise", "endTime": "sunset", "x": 766, "y": 54, "wires": [ [], [ "7c08c425.e50acc" ] ] } ]
  • Ladesteckdose abhängig von aktuellen Solarertrag einschalten

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    699 Aufrufe
    P
    Hallo thomassch, habe leider keine Zeit für das ganze Skript, aber ich würde das so angehen: Solarleistung überwachen und nach Hysterese eine Variable "Solarstrom_nutzen" einschalten oder verzögert ausschalten on(solarleistung, function (data) { if (data.state.val > 3kW) setState(Solarstrom_nutzen, true); if (data.state.val < 1kW && getState(Solarstrom_nutzen).val) setStateDelayed(Solarstrom_nutzen, false, 10 * 60 * 1000); // 10minuten } Dann Variable Solarstrom_nutzen überwachen und Schaltsteckdose oder/und andere Geräte/Anzeigen damit schalten on(idSolastrom_nutzen, idSchaltsteckdose); "Hysterese" einfach mal hier im Forum suchen. Paul53 hat dazu Spitzenbeispiele! Die Zeitverzögerung ist sinnvoll, kann auch noch verfeinert werden. Gruß Pix
  • OWL Intuition mit Node-RED einlesen

    Verschoben
    30
    5
    0 Stimmen
    30 Beiträge
    8k Aufrufe
    R
    Kaum verzweifelt, den Fehler glaube ich gefunden… Ich musste den js.controller unter "hosts" neu starten. Nun scheint alles wieder zu funktionieren. Gruss Ritschi
  • Hilfe Umstellen CCU2 Programm zum ioBroker Skript

    Verschoben
    6
    1
    0 Stimmen
    6 Beiträge
    1k Aufrufe
    Z
    Erstmal danke an Jey Cee, Pix und Paul53. Super mit den Beispielen komme ich schonmal ein ganzes Stück weiter Hatte mit der Erklärung von Jey Cee soweit weiter gemacht das ich bei einer if Variante war, die aber nicht funktioniert hat. Habe dann Pix Vorschlag umgesetzt, muss mir das von Paul53 noch genauer anschauen. Pix, hast natürlich recht, die Fernbedienung ist ein RPC Element (Ich muss auf Anwesend Kurz prüfen, da ich mit der Taste Short eine Toogle Funktion zwischen An und Aus realisiert habe). Allerdings verstehe ich gerade noch nicht den Punkt mit STATE, da ich ja PRESS_SHORT verwenden muss (denke ich zumindest, ansonsten Scheiss mich zusammen. Hihi) Erster Teil Funktioniert und auch die Funktion starteAktion. Zweite Subscription funktioniert nicht (denke weil ich da was falsches eingegeben habe, werde ich noch weiter probieren) ` > /* Programm Abwesend Kurz Ablösen des CCU2 Programms Mit Hilfe von Jey Cee, Pix und Paul53 */ // Abfrage der Abwesenheit Kurz: var idAbwesendKurzVariable = 'hm-rega.0.2330'; // System Variable CCU2 Abwesend Kurz // lange, ausführliche Schreibweise on({ id: idAbwesendKurzVariable, // Datenpunkt der Überwachung change: 'ne' // auf Änderung }, function (obj) { // den neuen Wert der Änderung checken if (obj.state.val === true) { // wenn neuer Wert true // aktuelle Abfrage der zweiten Variable - also nur prüfen var anwesenheit = getState("hm-rega.0.950"/Anwesenheit/).val; // zur besseren Übersicht in eine lokale Variable geschrieben if (anwesenheit === true) { // wenn Anwesenheit auch wahr ist starteAktion(); // Funktion aufrufen } } }); var idAbwesendKurzTaster = "hm-rpc.0.MEQ0670647.2.PRESS_SHORT" /Funk-Fernbedienung mit D. Abw.KurzAn/Aus:2.PRESS_SHORT/ /Abwesenheit kurz Taster/; // STATE muss mit rein beim Taster, ist wohl eher ein hm-rpc.0.***.STATE Datenpunkt // zweite subscription auf die Fernbedienung in kurzer Schreibweise (change: 'ne' ist Standard, es kann "===true" weggelassen werden und einzeilige Anweisungen nach if brauchen keine geschweiften Klammern) on(idAbwesendKurzTaster, function (obj) { if (obj.state.val && getState(idAbwesendKurzVariable).val) starteAktion(); }); // Ausführung function starteAktion () { setState("hm-rpc.0.MEQ0484756.1.STATE", false); // Taster Deckenlicht Arbeitszimmer setState("hm-rpc.0.NEQ0018993.2.SUBMIT","0.7,1,108000,20"); // weitere Aktionen einfügen } ` nochmals danke Gruß Zippolighter
  • [Erledigt] Scriptgesteuerte ausführen des MP3 Funkgongs mit Signalleuchte

    Verschoben
    3
    2
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    Z
    Super, hat so geklappt Danke Gruß Zippolighter

858

Online

32.4k

Benutzer

81.5k

Themen

1.3m

Beiträge