Weiter zum Inhalt

Skripten / Logik

16.7k Themen 215.8k Beiträge

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

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    3k 50k
    3k Themen
    50k Beiträge
    Murphy 0M
    @maxclaudi super Sache, Cloudfree ohne Neustart vom Hyper ist eine echte Verbesserung. Sollte man den Hyper mit neuester Firmware Cloudfree betreiben wäre die ultimative Lösung mit so einer Software zurück auf unverschlüsseltem Datentransfer zum mqtt Server stellen zu können. 😁
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    paul53P
    @warp735 [sagte]: Wert vom aktuellen Tag Alle 15 Minuten den zur Uhrzeit passenden Wert: [image: 1785862108462-blockly_temp.jpg] "+02:00" gilt nur während der Sommerzeit. Evtl. muss man die aktuelle lokale Uhrzeit in die UTC-Zeit wandeln.
  • Hilfe für Skripterstellung mit Node-RED

    962 13k
    962 Themen
    13k Beiträge
    Marc BergM
    @Thomas-Braun sagte: In der Konfigurationsdatei von Node Red, also in der settings.js, kann durch hinzufügen der Zeitzone das Problem behoben werden. Wenn man den Adapter nutzt, werden Änderungen in der settings.js immer wieder überschrieben. Das bringt nichts. @taddy81 Was konkret ist denn das Problem? Lösen die inject Nodes falsch aus? Oder geht es nur um diese Meldung, bei der niemand weiß, woher sie kommt? @Taddy81 sagte: Auszug: 7/26/2026, 11:15:23 AMnode: debug 3msg.payload : string[24]
  • [Blocky] Änfängerfragen, Nachricht bei Fenstern auf

    Verschoben
    2
    1
    0 Stimmen
    2 Beiträge
    363 Aufrufe
    K
    Hallo zusammen, ich habe es jetzt hinbekommen. :D [image: 1297_blocky-fenster_2.jpg]
  • Phlilips Luftbefeuchter und Reiniger

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    461 Aufrufe
    Niemand hat geantwortet
  • Xiaomi Aqara Bewegungsmelder in Blockly

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    2k Aufrufe
    K
    bei mir sehen die einzelnen Position bei Objekten anders aus ( auch Aqara Bewegungsmelder )… Ich trigger auf "occupancy" .... Geht aber Aqara bedingt nur alle 60 Sekunden... 17246_aqara.png
  • Allgemeine Logikfrage zu blockly

    Verschoben
    4
    1
    0 Stimmen
    4 Beiträge
    601 Aufrufe
    Dr. BakteriusD
    Die anderen Bedingungen wurden nicht geprüft, weil die erste nicht zutreffend war (und auch nicht sein konnte). Aber schön, dass es jetzt funktioniert. Es sind oft nur so kleine Fehler. Vielleicht markierst du das Thema noch als [gelöst]…
  • Change Node & JSONata

    Verschoben
    13
    4
    0 Stimmen
    13 Beiträge
    3k Aufrufe
    G
    @rewenode: Angeblich ja (v0.20). Aber wer weis schon wie da die Prioritäten liegen. Vielleicht wird's ja doch erst zur v20.0 :lol: ` O.K. erwischt. :mrgreen: Mit der Version kann es noch dauern. @rewenode: Mit viel langer Weile geht auch so was :lol: :lol: :lol: ` Funktioniert absolut fehlerfrei.
  • Node module installieren unter iobroker

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    2k Aufrufe
    K
    Wie gesagt ich habe jetzt alle Erweiterungen von Node Red entfernt. Zusätzliche NPM-Module gebe ich im Instanz Fenster an. Zunächst mal alle enfternen, damit sie gelöscht sind und dann nochmal eintragen. Im Log sehe ich keine Aktion dass etwas installiert wird. Und wenn ich das NPM Paket als user unter /opt/iobroker/node_modules/iobroker.node-red installiere, kommt es nicht unter Node Red.
  • [Gelöst] Aktion wenn: Wert hat sich geändert und ist X Minuten im Zustand geblieben

    Verschoben
    3
    1
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    siggi85S
    @Xyolyp: Wenn du an deinem "falls"-Block oben links auf das Zahnrad klickst und einen "sonst"-Block anfügst kannst du in dem "sonst"-Block das Timeout wieder stoppen und somit verhindern, dass eine Aktion ausgeführt wird. ` Danke, das wars! :) [image: 9874_blockly_wert-bleibt_solved.png]
  • Wärme LED Leuchte dem Tageslicht anpassen

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    253 Aufrufe
    AlCalzoneA
    Ich habe ein skript welches morgens die farbtemperatur meiner tradfris langsam auf kaltweiß fadet und abends auf warmweiß. Kann ich dir aber erst nächstes Wochenende posten wegen Urlaub. Gesendet von unterwegs
  • Blockly temperatur schalten

    Verschoben
    29
    0 Stimmen
    29 Beiträge
    8k Aufrufe
    D
    :-) muss erst den T-sensor bauen …. teile sind schon da.
  • Node Red + Zigbee2Mqtt Beleuchtung Dimmen

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    620 Aufrufe
    Niemand hat geantwortet
  • Exec pihole enable wird nicht ausgeführt

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    886 Aufrufe
    smartboartS
    Habe pi hole auch auf nem extra system laufen..spiele mit dem gedanken das auf nem iobroker host mitlaufen zu lassen… Wie sind da die erfahrungen oder macht das jemand? Gesendet von meinem CLT-L09 mit Tapatalk
  • Mehrer Lampen mit einem Schalter schalten abhängig vom Zustand

    Verschoben
    3
    1
    0 Stimmen
    3 Beiträge
    571 Aufrufe
    K
    geht ! , allerdings muss man "falls Objekt Zigbee… wurde geändert " ändern auf "falls Objekt Zigbee... ist wahr"... Und dann läuft´s .. ! DANKE
  • [gelöst] Ausfzählung von Lichtern mit Skript erfasst nicht alle Lichter

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    491 Aufrufe
    crunchipC
    Hat jemand nen Hinweis, wie ich die Namen meiner Shelly´s angezeigt bekomme? Anzahl der Lichter und Räume funktioniert, fehlt nur noch der Name der einzelnen Lampen Das gesamt script /* Status Zahl Lichter zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich Daten kommen vom Gewerk "licht" erstellt: 17.06.2015 nach diesem Vorbild: viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564 23.06.2015 globale Variablendefinition zählen_Lichter.textLichterAn fehlte und wurde hinzugefügt Log Ausgabe auskommentiert 05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php ... t=20#p9267 24.03.2016 keine Anzeigen von virtuellen Kanälen mehr (in Abhängigkeit der Abfrage des Namens) 06.05.2016 Datenpunkt für Ansagen zugefügt 02.07.2016 abgeschaltet, da Fehler 03.07.2016 Zähl-Funktion getrennt nach Schalter und Dimmer search statt indexOf und RegEx für Suche nach Virtuellen Kanälen 27.11.2016 Verschoben in Status Code optimiert 23.12.2016 Räume eingebaut */ var logging = true; var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein', idAnzahl = 'javascript.0.Status.Lichter.Anzahl', idText = 'javascript.0.Status.Lichter.Text', idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU idAnsage = 'javascript.0.Status.Lichter.Ansage'; // Ab hier nix mehr ändern createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter type: 'number', name: 'Anzahl aller Lichter', min: 0, def: 0, role: 'value' }); createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen type: 'number', name: 'Anzahl der eingeschalteten Lichter', min: 0, def: 0, role: 'value' }); createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen type: 'string', name: 'Eingeschaltete Lichter', desc: 'Namen der eingeschalteten Lichter', def: ' ', role: 'value' }); createState(idAnsage, { type: 'string', name: 'Eingeschaltete Lichter (Ansage)', desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)', def: ' ', role: 'value' }); createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU type: 'string', name: 'Räume mit eingeschalteten Lichter', desc: 'Namen der Räume, in denen Lichter eingeschaltet sind', def: ' ', role: 'value' }); var cacheSelectorState = $('channel[state.id=*.STATE](functions="licht")'); // Gewerk licht var cacheSelectorLevel = $('channel[state.id=*.level](functions="licht")'); var cacheSelectorPOWER = $('channel[state.id=*.POWER](functions="licht")'); // Sonoff Lampen (müssen im Gewerk Licht sein) //var cacheSelectorHue = $('channel[state.id=*.ON](functions="Licht")'); // HUE Lampen (müssen im Gewerk Licht sein) var cacheSelectorHue = $('state[id=*.on](functions=Licht)[role=switch.light]'); var cacheSelectorSwitch = $('channel[state.id=*.Switch](functions="licht")'); // Shelly function checkDevices(obj) { // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk licht auf 0 var anzahlLichterAn = 0; var anzahlLichter = 0; var textLichterAn = []; var textRaum = []; if (logging) { log('++++++ Lichter Anzahl ++++ '); log('#### SCHALTER ##### '); } cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element) var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen var raumname = getObject(id, "rooms"); // <---- NEU // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen) // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { /* if (logging) { log('-------'); log('Kanal: ' + name); log('Status: ' + status); } */ if (status) { // wenn Zustand = true, dann wird die Anzahl der Lichter hochgezählt ++anzahlLichterAn; textLichterAn.push(devicename); // Zu Array hinzufügen textRaum.push(raumname.enumNames); // <---- NEU } ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status // } // ENDE VK-Abfrage }); if (logging) log('#### DIMMER ##### '); cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element) var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen var raumname = getObject(id, "rooms"); // <---- NEU // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen) // if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten /* if (logging) { log('-------'); log('Kanal: ' + name); log('Status: ' + status + '%'); } */ if (parseFloat(status) > 0) { // Wenn Dimmwert über 0 ++anzahlLichterAn; textLichterAn.push(devicename); // Zu Array hinzufügen textRaum.push(raumname.enumNames); // <---- NEU } ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status // } // Ende Abfrage VK }); if (logging) { log('++++++ Lichter Anzahl ++++ '); log('#### SCHALTER ##### '); } cacheSelectorPOWER.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element) var devicename = name.substring(0, name.indexOf("POWER")); //.state aus Text entfernen var raumname = getObject(id, "rooms"); // <---- NEU // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen) // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { /* if (logging) { log('-------'); log('Kanal: ' + name); log('Status: ' + status); } */ if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt ++anzahlLichterAn; textLichterAn.push(devicename); // Zu Array hinzufügen textRaum.push(raumname.enumNames); // <---- NEU } ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status // } // ENDE VK-Abfrage }); cacheSelectorHue.each(function(id, i) { // Schleife für jedes gefundenen Element *.ON im Gewerk Licht var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.ON abfragen (jedes Element) var devicename = name.substring(0, name.indexOf(".on")); //.state aus Text entfernen var raumname = getObject(id, "rooms"); // <---- NEU // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen) // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { if (logging) { log('-------'); log('Kanal: ' + name); log('Status: ' + status); } if (status) { // wenn Zustand = true, dann wird die Anzahl der Lichter hochgezählt ++anzahlLichterAn; textLichterAn.push(devicename); // Zu Array hinzufügen textRaum.push(raumname.enumNames); // <---- NEU } ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status // } // ENDE VK-Abfrage }); if (logging) log('#### DIMMER ##### '); cacheSelectorLevel.each(function(id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element) var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen var raumname = getObject(id, "rooms"); // <---- NEU // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen) // if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten if (logging) { log('-------'); log('Kanal: ' + name); log('Status: ' + status + '%'); } if (parseFloat(status) > 0) { // Wenn Dimmwert über 0 ++anzahlLichterAn; textLichterAn.push(devicename); // Zu Array hinzufügen textRaum.push(raumname.enumNames); // <---- NEU } ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status // } // Ende Abfrage VK }); if (logging) { log('++++++ Lichter Anzahl ++++ '); log('#### SCHALTER ##### '); } cacheSelectorSwitch.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element) var devicename = name.substring(0, name.indexOf(".Switch")); //.state aus Text entfernen var raumname = getObject(id, "rooms"); // <---- NEU // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen) // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { /* if (logging) { log('-------'); log('Kanal: ' + name); log('Status: ' + status); } */ if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt ++anzahlLichterAn; textLichterAn.push(devicename); // Zu Array hinzufügen textRaum.push(raumname.enumNames); // <---- NEU } ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status // } // ENDE VK-Abfrage }); // Array mit Lichternamen sortieren textLichterAn.sort(); textRaum.sort(); // <---- NEU // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben if (logging) log("Text: " + textLichterAn); if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn); // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS) setState(idText, textLichterAn.join(', ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht // setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU } // Trigger cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk licht if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); cacheSelectorHue.on(function(obj) { // bei Zustandänderung *.ON von HUE Lampen im Gewerk Licht if (logging) log('Auslösende HUE: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); cacheSelectorSwitch.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); function main() { setTimeout(function(){ if (logging) log('Auslöser Skriptstart'); checkDevices(); }, 2000); } main(); // Skriptstart-Auslöser // Aufbereitung für Ansage function strip_tags(data) { var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " "); return(rueckgabe); } on(idText, function (obj) { var text = obj.state.val; text = (getState(idAnzahl).val > 0 ) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter ausgeschaltet'; setState(idAnsage, text); }); folgendes habe ich hinzugefügt var cacheSelectorSwitch = $('channel[state.id=*.Switch](functions="licht")'); // Shelly if (logging) { log('++++++ Lichter Anzahl ++++ '); log('#### SCHALTER ##### '); } cacheSelectorSwitch.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element) var devicename = name.substring(0, name.indexOf(".Switch")); //.state aus Text entfernen var raumname = getObject(id, "rooms"); // <---- NEU // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen) // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { /* if (logging) { log('-------'); log('Kanal: ' + name); log('Status: ' + status); } */ if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt ++anzahlLichterAn; textLichterAn.push(devicename); // Zu Array hinzufügen textRaum.push(raumname.enumNames); // <---- NEU } ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status // } // ENDE VK-Abfrage cacheSelectorSwitch.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); [image: Opera-Momentaufnahme-2019-01-25-222457-192-168-178-90.png]![](</s><URL url=)<link_text text="https://i.ibb.co/wY42dfn/Opera-Momentau ... 178-90.png">https://i.ibb.co/wY42dfn/Opera-Momentaufnahme-2019-01-25-222457-192-168-178-90.png</link_text>" />
  • [doch nicht gelöst]Heizung regeln über Blockly funktioniert nicht

    Verschoben
    9
    2
    0 Stimmen
    9 Beiträge
    823 Aufrufe
    T
    @umbm: Wenn du in der fritzbox einen Zeitplan für die Thermostate erstellt hast, haben die Vorrang und überschreiben die anderen Werte. ` Ich hatte die Zeitschaltung in der Fritzbox nicht erstellt, sie war von anfang an da, ich habe sie nur komplett auf 24std Spartemperatur eingestellt. Es hat ja bis heute Vormittag funktioniert und nachdem ich den Adapter Fritzdect neu gestartet habe funktioniert es ja auch wieder so wie ich es möchte.
  • Script zum Fenster zählen (Fibaro)

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    318 Aufrufe
    Niemand hat geantwortet
  • Konvertierung mit Blockly

    Verschoben
    17
    1
    0 Stimmen
    17 Beiträge
    2k Aufrufe
    H
    Okay, hab's jetzt auch mal so getestet. Input muss im Format "MM DD YYY" sein. Output als Text geht gar nicht. Nur DD, MM, YY und YYYY als Zahl. Müsste also den Input erst mal umformatieren und die Zahl als Output dann nochmal explizit in Text umwandeln. Puh… :( Jetzt wäre es mal interessant, zu erfahren, ob das nur in Blockly so ist.
  • GetObject nach setObject zum Hinzufügen von Members in Aufzählung (enums) schlägt fehl

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    510 Aufrufe
    paul53P
    @0.L.L.1.: Ein Javascript Funktion addObjectToEnum gibts es auch nicht, oder? ` Nein, kenne ich nicht. @0.L.L.1.: Ich bin doch nicht der Einzige, der Objekte zu Enums nicht immer manuell hinzufügen möchte ` Bisher wahrscheinlich doch.
  • Änderung vs. Aktualisierung

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    429 Aufrufe
    paul53P
    @skorpil: Mir fallen keine Änderungen ein, die das verursacht haben könnten- außer eben dem Update des Adapters. ` Das kann die Ursache sein, dass sich der Adapter jetzt anders verhält.
  • Akku Zustand und weitere Daten vom Windows Gerät

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    1k Aufrufe
    wendy2702W
    Hallo, habt ihr mittlerweile eine Lösung gefunden? Danke und Gruß
  • [gelöst/workaround] Blockly Astro Verzögerung aus Datenobjekt

    Verschoben
    2
    3
    0 Stimmen
    2 Beiträge
    255 Aufrufe
    K
    Da ich ja sowieso für meine VIS die genau Uhrzeit habe (z.B. Sonnenuafgang minus 30 Miunten), habe ich diese Uhrzeit in Stunde und Minute zerlegt und nehem als Trigger cron statt Sonnenaufgang. [image: 3467_trigger.png]

470

Online

33.0k

Benutzer

83.5k

Themen

1.3m

Beiträge