Skip to content

Skripten / Logik

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

16.6k Themen 214.0k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Themen
    49k Beiträge
    RoddiEFR
    Ok dann warte ich lieber und fang eine frische Installation an wenn die neue Version fertig ist. Wäre es möglich beim aktuallisieren vom ersten Beitrag auch die Versionsnummern zu ändern wie schon jemand Vorgeschlagen hatte? Das macht das es einfacher wenn Änderungen anliegen. Thx
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    B
    @Murphy-0 Hatte noch nen kleinen Bug, jetzt sieht es schon viel besser aus.
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Themen
    13k Beiträge
    Marc BergM
    Es gibt in der Verson 1.3.0 einen neuen Node: iob-setObject (Stand 10.02.26 noch beta) Mit dem neuen Node kann man ioBroker-Objektdefinitionen (Metadaten) direkt schreiben und ändern. Hauptfunktionen: Instanz-Konfigurationen ändern - z.B. MQTT publish-Pattern, Intervalle, etc. Objekt-Eigenschaften aktualisieren - Namen, Rollen, Einheiten, Min/Max-Werte ändern es gibt zwei Modi: Merge-Modus : Ändert nur die angegebenen Eigenschaften, alle anderen bleiben erhalten Replace-Modus: Überschreibt das komplette Objekt Typischer Workflow: Objekt mit iob-getobject holen Mit Change-Node gewünschte Properties ändern Mit iob-setobject zurückschreiben
  • [gelöst] Wärmepumpe anbinden - Daten aus JSON einlesen

    Verschoben
    11
    0 Stimmen
    11 Beiträge
    2k Aufrufe
    khgK
    @mattgas: Danke paul, dein Vorschlag hat funktioniert: Ich werde nun versuchen, die Vairablen mit Datenpunkten zu verknüpfen…sollte ja nicht so schwierig sein :? . Vielen Dank für die schnelle und kompetente Unterstützung! Wenn ich fertig bin, stelle ich das Ergebnis hier zur Verfügung....im Forum hatten vor einger Zeit schonmal Leute nach einer Anbindung der Rotex HPSU gefragt, könnte also auch für andere interessant sein. ` Eine Anbindung der Rotex HPSU (nur zur Datendarstellung in iobroker) fehlt mir auch noch. Habe einen Raspi mit Canbus Interface und möchte darüber die Daten erfassen und für iobroker bereitstellen. Bin aber noch ganz am Anfang.
  • Müllabfuhr integrieren - Script erstellen

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    769 Aufrufe
    kmxakK
    Moin, cool. Ich probiere es im Januar mit der ICAL Datei und ansonsten muss ich mit dem Script nochmals auseinandersetzen.
  • Blockly-Rollladenscript funktioniert nicht

    Verschoben
    66
    1
    0 Stimmen
    66 Beiträge
    10k Aufrufe
    rasiegfrR
    hallo zusammen, wie ich zu anfang geschrieben habe, verfolge ich hier die ideen. nun ist es auch bei mir soweit dass die shellys verbaut sind. habe im wohnzimmer zurzeit einen xiaomi bewegungsmelder (sollen insgesamt drei werden) welche überpüfen sollen ob noch jemand aktiv ist. das ziel ist es wenn 30 minuten keine aktivität in einem gewissen zeitfenster ist, dass die rollos automatisch runtergefahren werden. dafür habe ich einen datenpunkt gesetzt (wz_rollos_bm_status) wo sämtlche bewegungsmelder bei erkannter bewegung ein "wahr" setzen. wenn dann 30 minuten keine bewegung erkannt wurde soll der wert auf "unwahr" gesetzt werden. wo ich nicht weiterkomme ist dass er ja den timer "30 minuten" hat und danach stumpf auf unwahr setzt. wie kann ich dort eine nachprüfung einbauen ob es zwischenzeitig eine neue aktivität gab und der timer dann wieder auf null gesetzt wird? komme an diesem punkt nicht weiter und wäre über hilfe dankbar. lg ralph <xml xmlns="http://www.w3.org/1999/xhtml"><block type="on_ext" id="tz;D9#.+4p*3?FtR{4?(" x="63" y="38"><mutation items="4"></mutation> <field name="CONDITION">any</field> <value name="OID0"><shadow type="field_oid" id=";T`833RRx:ZOmW)gCmQR"><field name="oid">Werte_zwischenspeicher.0.wz_rollos_bm_status</field></shadow></value> <value name="OID1"><shadow type="field_oid" id="2x{Slmg1.2E/~y,DoO8Q"><field name="oid">mihome.0.devices.sensor_motion_aq2_158d00029c019e.state</field></shadow></value> <value name="OID2"><shadow type="field_oid" id="Zd|t!]om|=mpim*iVi9a"><field name="oid">mihome.0.devices.sensor_motion_aq2_158d000276d226.state</field></shadow></value> <value name="OID3"><shadow type="field_oid" id="T+%NOoZQ,P(W4Bs^ck3r"><field name="oid">mihome.0.devices.sensor_motion_aq2_158d0002752318.state</field></shadow></value> <statement name="STATEMENT"><block type="controls_if" id="Y38R}w(/ZJE-Xao,=188"><value name="IF0"><block type="logic_operation" id="cY7X%s+VI:oWVnmOHVm6" inline="false"><field name="OP">OR</field> <value name="A"><block type="logic_operation" id="guHXnlf?.TTZa6nv:B~=" inline="false"><field name="OP">OR</field> <value name="A"><block type="logic_operation" id="IzMPn,@2t93WV=?3~DcQ" inline="false"><field name="OP">OR</field> <value name="A"><block type="logic_compare" id="i~{LKE2GRq!=CghO?bh="><field name="OP">EQ</field> <value name="A"><block type="get_value" id="_fg-3w|dQ,TjU6qZT6q9"><field name="ATTR">val</field> <field name="OID">mihome.0.devices.sensor_motion_aq2_158d00029c019e.state</field></block></value> <value name="B"><block type="logic_boolean" id="U(B.w*RkUPwV?ml,DFE1"><field name="BOOL">TRUE</field></block></value></block></value> <value name="B"><block type="logic_compare" id="a7{vPB`w5^]1+d8b:eQh"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="uVx6LOE|r0kvpIgHXW^D"><field name="ATTR">val</field> <field name="OID">mihome.0.devices.sensor_motion_aq2_158d0002752318.state</field></block></value> <value name="B"><block type="logic_boolean" id="MgbZ2ey!x(%IA`c3]S0L"><field name="BOOL">TRUE</field></block></value></block></value></block></value> <value name="B"><block type="logic_compare" id="j+CvzLb9q;N!0yP1WQ}6"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="Z3Jdw19D%#Xg4!*J=ljd"><field name="ATTR">val</field> <field name="OID">mihome.0.devices.sensor_motion_aq2_158d000276d226.state</field></block></value> <value name="B"><block type="logic_boolean" id="E+(%#YD5gMqiJhiOmv`p"><field name="BOOL">TRUE</field></block></value></block></value></block></value> <value name="B"><block type="logic_operation" id="@u9M]SIQ:4NUiHNgQA:B" inline="false"><field name="OP">OR</field></block></value></block></value> <statement name="DO0"><block type="control" id="U-;ov8(is!)A;b,}CWbu"><mutation delay_input="false"></mutation> <field name="OID">Werte_zwischenspeicher.0.wz_rollos_bm_status</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="a/hkdu[w8}W{Xk:McnL#"><field name="BOOL">TRUE</field></block></value></block></statement> <next><block type="comment" id="?g=#:O9,]UNw|6z3S/7z"><field name="COMMENT">Wert zurück setzen</field> <next><block type="controls_if" id="muP@A+k6JgyFmNX-Q/{B"><value name="IF0"><block type="logic_compare" id="qoO1CG_~v(ABV#(Xz_+K"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="/zdz!YCIQIy/j!l0k;+f"><field name="ATTR">val</field> <field name="OID">Werte_zwischenspeicher.0.wz_rollos_bm_status</field></block></value> <value name="B"><block type="logic_boolean" id="0Sh!Q~.?)GU)l#nuG._]"><field name="BOOL">TRUE</field></block></value></block></value> <statement name="DO0"><block type="control" id="L7Xg/A]..w(FY}Eqf^9X"><mutation delay_input="true"></mutation> <field name="OID">Werte_zwischenspeicher.0.wz_rollos_bm_status</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">30</field> <field name="UNIT">min</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="%w!NIlru[79Gn06b-Uk="><field name="BOOL">FALSE</field></block></value></block></statement></block></next></block></next></block></statement></block></xml> 9191_skript_rollo.jpg
  • Philips Hue Szenen

    Verschoben
    13
    0 Stimmen
    13 Beiträge
    3k Aufrufe
    A
    @siggi85: Kann man das Script zum Import der in der Bridge gespeicherten Szenen nicht auch in den Hue Adapter einbauen? Ich denke dass viele Leute so etwas gebrauchen können. ` Das denke ich auch! Ich nutze das Skript auch. Richtig super! Ich schalte damit bestimmte hie Szenen wenn ich an meiner harmony Aktionen starte oder stoppe. Funktioniert auch wie gewünscht. Gibt es eine Möglichkeit, die Szenen langsam über zu blenden? Also aktuell wird die neue Szene einfach eingeschaltet. Ich möchte gerne dass die aktuelle Einstellung in die neue Szene überblendet. Innerhalb z.B. 3 Sekunden.
  • Flow Optimieren

    Verschoben
    27
    0 Stimmen
    27 Beiträge
    2k Aufrufe
    D
    Japp genau, das mache ich dann kurz vorm Zerteilen in die einzelnen Flows.. jetzt für alles auf einmal war es einfacher in einem Flow. Ich muss die ganzen Link`s auch noch beschriften und dann kommen später die Comments ;-)
  • Aktuellen Heizölpreis anzeigen?

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    550 Aufrufe
    B
    Ich nehme jetzt dieses Skript. viewtopic.php?f=8&t=3455&p=31964#p31964 Grüße und Danke
  • Node-red Flow zum Steuern von tuya

    Verschoben
    20
    0 Stimmen
    20 Beiträge
    3k Aufrufe
    R
    Sieht eigentlich alles richtig aus. Welcher Kalender? Wie schaltet denn der Kalender die Steckdose? Kann mir eigentlich nur denken, dass der state nicht gesetzt wird. Häng doch mal den debug-node an den iobroker-in-node und lass per Kalender schalten. Dann kannst du sehen, on und wenn ja welches Signal am state anliegt.
  • Rollladensteuerung mit Blockly

    Verschoben
    16
    1
    0 Stimmen
    16 Beiträge
    4k Aufrufe
    N
    Servus, und danke! Mittlerweile funktioniert alles wie es soll und ja, es war tatsächlich die Laufzeit. ;-) Ich hatte die vom HM-IP Accesspoint einfach übernommen und in die CCU eingetragen. Das hat nur um den Betrag von 3sec eben nicht gepasst. Ein Problem was ich ab und zu noch habe ist, dass bei erkanntem "IS OPEN" vom Türsensor der Rolladen erst runterfährt wenn die Tür geschlossen ist, aber dann der CCU - Duty Cycle auf 99% nach oben schnellt. Wenn ich zu Hause bin poste ich mal das skript. Viele Grüße
  • [gelöst] Lichtsteuerung mit zwei Türsensoren

    Verschoben
    5
    1
    0 Stimmen
    5 Beiträge
    592 Aufrufe
    paul53P
    @kaputtzich: funktioniert soweit wie angedacht, ` Dann markiere bitte das Thema im Betreff des ersten Beitrags als [gelöst].
  • Heizungssteuerung

    Verschoben
    3
    1
    0 Stimmen
    3 Beiträge
    413 Aufrufe
    B
    Danke für die schnelle Antwort. Was du sagst macht natürlich Sinn. Hab es jetzt geändert, wie im Anhang. Habe auch ausprobiert, ob die Reihenfolge eine Rolle spielt, aber scheinbar ist es egal –> Perfekt! Danke für die Hilfe :-) Ich habe devolo Z-Wave Heizkörper Thermostate im Einsatz: Weiß jemand, ob man diese auch gezielt wecken kann? 12469_heizung_bad_test.png
  • Thermometer auf dem Dashboard

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    322 Aufrufe
    R
    Da reicht es nicht, das flow zu kopieren ;-) Wenn du Pete Scargills Beispiel verwenden wills, musst du auch seine Lib installieren. Siehe https://tech.scargill.net/thermometers/ Und seine Lib, die du benötigst findest du hier: https://canvas-gauges.com/download/ Und wenn es dann immer noch nicht tut, kannst du mit dem ersten Link Pete direkt fragen.
  • I2C-Bus auslesen

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    603 Aufrufe
    M
    Herzlichen Dank für deine ausführliche Info!
  • [Gelöst] Uhrzeit aus Sekunden errechnen

    Verschoben
    15
    0 Stimmen
    15 Beiträge
    1k Aufrufe
    T
    Danke, das war die Lösung. Jetzt läuft es.
  • [gelöst]Einschalten mit Nachlauf

    Verschoben
    12
    0 Stimmen
    12 Beiträge
    2k Aufrufe
    R
    Ist zwar schon länger her aber falls jemand hier mal drüber stolpert: Klar wird nur der zweite Aktor geschaltet - du überschriebst ja auch die Variable mit dem zweiten Statement: var idAktor = "hm-rpc.0.OEQ0098506.2.STATE"/Poolpumpe.STATE/ ; var idAktor = "hm-rpc.0.OEQ0098506.3.STATE"/Clorinator.STATE/ ; Du musst dem zweiten Aktor dann schon eine eigene Variable spendieren: var idAktor1 = "hm-rpc.0.OEQ0098506.2.STATE"/Poolpumpe.STATE/ ; var idAktor2 = "hm-rpc.0.OEQ0098506.3.STATE"/Clorinator.STATE/ ;
  • Möglichkeit im tr-64 den Rundruf abzufragen

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    287 Aufrufe
    M
    Hi, Leute hat keiner eine Idee?
  • Mqtt Username und Password undefined [gelöst]

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    2k Aufrufe
    W
    [glöst]vielen Dank für die Info. Kann ich denn die Client[Namen] im mqtt-adapter vergeben? Wenn ich im Client keinen Namen vergebe sehe ich im iobroker-Log nicht ob sich ein von welchen Cilent etwas kommt. oder liege ich da jetzt neben der Spur?
  • LG Smart TV - Kanal ändern

    Verschoben
    5
    1
    0 Stimmen
    5 Beiträge
    827 Aufrufe
    T
    Hi, ist zwar kein blocky script, aber theoretisch eine Möglichkeit das ganze umzusetzen (in der Theorie, konnte leider nicht testen ob es funtkioniert, weil ich keine TV Sender an meinem LGTV hab). In der Senderliste müssen die Namen eingetragen werden, in der Reihenfolge, wie sie eingespeichert sind. Da Alexa ARD als a. r. d. versteht, muss es 1:1 übernommen werden. Das scirpt prüft dann, ob die Schlagworte gefallen sind in der Alexa Summery. Ist das der Fall, prüft das Script, ob in der Summery auch der Sendername vorkam und sollte dann auf den richten Sender schalten. Die Liste kann man beliebig erweitern. Da Alexa Zahlen nur ausgeschrieben versteht, tippe ich drauf, dass sie RTL2 beispielweise als "r. t. l. zwei" verstehen wird. Kannst mir gerne schreiben, ob es läuft. Evtl hab ich das falsche State rausgesucht, aber wie gesagt, leider kann ichs nicht testen. `var Senderliste = ["a. r. d.", "z. d. f.", "s. w. r.", "r. t. l."]; on({id: 'alexa2.0.History.summary', change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("alexa2.0.History.summary").val.includes('fernseher') && getState("alexa2.0.History.summary").val.includes('schalt') && getState("alexa2.0.History.summary").val.includes('auf')) { for(i = 0; i < Senderliste.length; i++) { if (getState("alexa2.0.History.summary").val.includes(Senderliste[i])) { setState("lgtv.0.channel"/*Select Channel*/, (parseInt(i) + 1)); console.log('Benutzer sagt, schalte auf ' + Senderliste[i] + ' (' + (parseInt(i) + 1) + ')'); } } } });`[/i][/i]
  • [gelöst]Nur einmal im definierten Zeitraum auslösen? -Sonos Ansage

    Verschoben
    25
    0 Stimmen
    25 Beiträge
    4k Aufrufe
    6nfanatic6
    @Dutchman: @skorpil: Das ist sehr lieb, Dutchman. Ich probiere erstmal und werde das funktionsfähige Skript hier posten - wenn ich es hinkriege. ` :D so wieder am PC, hier hast du mal ein beispiel wie ich es gelöst habe zur inspieration ;) Blöcke: Screen Shot 2017-06-18 at 15.03.41.png Der generierte JavaCode sieht dan in etwa so aus: var Bedtime; // Activate Bed-Time Modus by TV off Bedtime = false; on({id: "harmony.0.Woonkamer.activities.currentStatus"/*activity:currentStatus*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; // Disable lights living room with delay of 15 seconds if (getState("harmony.0.Woonkamer.activities.currentStatus").val == 0 && getState("openhab.0.items.Woonkamer_Kast").val == true && compareTime("22:00", "6:00", "between")) { setStateDelayed("openhab.0.items.Woonkamer_Kast", false, 15000, false); } Bedtime = true; }); schedule({astro: "sunrise", shift: 0}, function () { if (compareTime(getAstroDate("sunrise", undefined, 0), null, "<", null) && Bedtime == true) { Bedtime = false; } }); In dem block setze ich eine variable auf falsch, danach die abfrage ob die variable false ist wen ja setze auf true. Bei nästen mal ist die variable true und wird nichts ausgeöst. Der zweite block setz per astro funtion den block wieder auf falsch (war in meinem fall praktisch kan aber auch anderer shedule usw sein). Da ich es mit variablen löse ist der wert nicht festgelegd, also adapter, script oder iobroker neustart fängt dan wieder bei NULL an. Dutch PS: wenn du diese blöcke probieren möchtest hier der code zum import: ! ..... ` Hey, ich habe mich an deinem Script orientiert da ich das ganze derzeit lerne :) Ich benutze das ganze für eine Guten-Morgen Routine. Irgendwie klappt es mit dem Flag aber nicht, kannst du sagen was ich falsch mache? <xml xmlns="http://www.w3.org/1999/xhtml"><block type="variables_set" id="xvs=nbv9z_Z)s;4Z!|#^" x="38" y="64"><field name="VAR">Wakeup</field> <value name="VALUE"><block type="logic_boolean" id="AjrYZTXBGz7w,~Vol6Wz"><field name="BOOL">TRUE</field></block></value> <next><block type="on" id="kPCG3bU;Fc7HHYySm@{Q"><field name="OID">node-red.0.hue-motion</field> <field name="CONDITION">ne</field> <statement name="STATEMENT"><block type="controls_if" id=";/djsW44X8,iQmkuZ!Uy"><value name="IF0"><block type="logic_operation" id="tgZjK(Z+ya7E2)fo1mjo"><field name="OP">AND</field> <value name="A"><block type="time_compare" id="epL2VT@^sVJ4VslQ-y_~"><mutation end_time="true"></mutation> <field name="OPTION">between</field> <field name="START_TIME">06:00</field> <field name="END_TIME">13:00</field></block></value> <value name="B"><block type="logic_compare" id="e]lW_ksSt7qU~^F8JsvJ"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="5G:,`TR:EOA4v2i!JuA-"><field name="ATTR">val</field> <field name="OID">node-red.0.hue-motion</field></block></value> <value name="B"><block type="logic_boolean" id="G|,)nJw[c=62.zDmB|`6"><field name="BOOL">TRUE</field></block></value></block></value></block></value> <statement name="DO0"><block type="control" id="Z5Mtuz[=Qey@=8+o9=LA"><mutation delay_input="false"></mutation> <field name="OID">alexa2.0.Echo-Devices.G090XXX70MLB.Commands.speak</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="text_join" id="PPs!%YASk!0_zaU20niI"><mutation items="5"></mutation> <value name="ADD0"><block type="text" id="-!?cr_WS}IK!;yZC2`!a"><field name="TEXT">Guten Morgen Chef. Ich hoffe du hast gut geschlafen. Dein Wagen hat noch</field></block></value> <value name="ADD1"><block type="get_value" id="bsS=yj1t~Vc2P0`jE5JR"><field name="ATTR">val</field> <field name="OID">bmw.0.XXXXX.dynamic.remaining_fuel</field></block></value> <value name="ADD2"><block type="text" id="vY3Y_`Q9y;q1]pt|WI;R"><field name="TEXT">Liter im Tank, was einer ungefähren Reichweite von</field></block></value> <value name="ADD3"><block type="get_value" id="MyW,AR!g!)-5`{p!n`^4"><field name="ATTR">val</field> <field name="OID">bmw.0.XXXXX.dynamic.kombi_current_remaining_range_fuel</field></block></value> <value name="ADD4"><block type="text" id="WMIilUe72b(P/%l1}6B="><field name="TEXT">Kilometer entspricht.</field></block></value></block></value> <next><block type="control" id="#~uPdO~TuVuqY;HL_TVW"><mutation delay_input="true"></mutation> <field name="OID">alexa2.0.Echo-Devices.G090XXX70MLB.Routines.4a56b499-87ff-4c8e-aae1-6e0d58d282fd</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">13</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="x=?;8Ck-h~K?+GPG?1Hw"><field name="BOOL">TRUE</field></block></value></block></next></block></statement> <next><block type="variables_set" id="=~tAtK@6owV.Uq`Br9MB"><field name="VAR">Wakeup</field> <value name="VALUE"><block type="logic_boolean" id="Ahp!B(;)WC+R#C`kAQ{K"><field name="BOOL">FALSE</field></block></value></block></next></block></statement> <next><block type="astro" id="nqQ4%f_iInvU{ytAz]47"><field name="TYPE">night</field> <field name="OFFSET">0</field> <statement name="STATEMENT"><block type="controls_if" id=";@|9?-X9ar]3sk+h`|1T"><value name="IF0"><block type="time_compare" id="o0C8kqnxjshVIy*`1v+2"><mutation end_time="false"></mutation> <field name="OPTION">></field> <field name="START_TIME">05:00</field></block></value> <statement name="DO0"><block type="variables_set" id=")eT.f,x+2V+ah|{H.g4d"><field name="VAR">Wakeup</field> <value name="VALUE"><block type="logic_boolean" id="5(v;8@2RzqpVe{BcM[sG"><field name="BOOL">TRUE</field></block></value></block></statement></block></statement></block></next></block></next></block></xml>
  • [Frage] Chromecaststeuerung

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    154 Aufrufe
    siggi85S
    Ich habe die Steuerung nun über FHEM und das Ansprechen der Aktionen mit dem FHEM Adapter gelöst. Meine ursprüngliche Intention hat sich also erledigt, obwohl eine Umsetzung in Node Red auch nett gewesen wäre. :)
  • Authentifizierung im Dashboard

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    405 Aufrufe
    H
    Ok, danke :)

445

Online

32.7k

Benutzer

82.5k

Themen

1.3m

Beiträge