mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-02-26 17:04:59 +00:00
displayattr command added
git-svn-id: https://svn.fhem.de/fhem/trunk@3601 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
2bdb3e39d0
commit
a96e1d1416
@ -1,5 +1,6 @@
|
|||||||
# Add changes at the top of the list. Keep it in ASCII
|
# Add changes at the top of the list. Keep it in ASCII
|
||||||
- SVN
|
- SVN
|
||||||
|
- feature: displayattr command added
|
||||||
- feature: SYSSTAT: allow (remote) monitoring system uptime
|
- feature: SYSSTAT: allow (remote) monitoring system uptime
|
||||||
- feature: new module 98_openweathermap.pm added (betateilchen)
|
- feature: new module 98_openweathermap.pm added (betateilchen)
|
||||||
- feature: WeatherAsHtmlH(), WeatherAsHtmlD() added to 59_Weather.pm (Boris)
|
- feature: WeatherAsHtmlH(), WeatherAsHtmlD() added to 59_Weather.pm (Boris)
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
<a href="#delete">delete</a>
|
<a href="#delete">delete</a>
|
||||||
<a href="#deleteattr">deleteattr</a>
|
<a href="#deleteattr">deleteattr</a>
|
||||||
<a href="#deletereading">deletereading</a>
|
<a href="#deletereading">deletereading</a>
|
||||||
|
<a href="#displayattr">displayattr</a>
|
||||||
<a href="#fheminfo">fheminfo</a>
|
<a href="#fheminfo">fheminfo</a>
|
||||||
<a href="#get">get</a>
|
<a href="#get">get</a>
|
||||||
<a href="#getstate">getstate</a>
|
<a href="#getstate">getstate</a>
|
||||||
@ -250,6 +251,7 @@ A line ending with \ will be concatenated with the next one, so long lines
|
|||||||
The commands
|
The commands
|
||||||
<a href="#attr">attr</a>,
|
<a href="#attr">attr</a>,
|
||||||
<a href="#deleteattr">deleteattr</a>,
|
<a href="#deleteattr">deleteattr</a>,
|
||||||
|
<a href="#displayattr">displayattr</a>,
|
||||||
<a href="#delete">delete</a>,
|
<a href="#delete">delete</a>,
|
||||||
<a href="#get">get</a>,
|
<a href="#get">get</a>,
|
||||||
<a href="#list">list</a>,
|
<a href="#list">list</a>,
|
||||||
@ -569,6 +571,7 @@ A line ending with \ will be concatenated with the next one, so long lines
|
|||||||
<br>
|
<br>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<a name="deletereading"></a>
|
<a name="deletereading"></a>
|
||||||
<h3>deletereading</h3>
|
<h3>deletereading</h3>
|
||||||
<ul>
|
<ul>
|
||||||
@ -589,6 +592,33 @@ A line ending with \ will be concatenated with the next one, so long lines
|
|||||||
<br>
|
<br>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<a name="displayattr"></a>
|
||||||
|
<h3>displayattr</h3>
|
||||||
|
<ul>
|
||||||
|
<code>displayattr <devspec> [<attrname>]</code> <br>
|
||||||
|
<br>
|
||||||
|
Display either the value of a single attribute (see the <a href="#attr">attr</a> command)
|
||||||
|
or all attributes for a device (if no <attrname> is defined).
|
||||||
|
See the <a href="#devspec">Device specification</a> section for details on
|
||||||
|
<devspec>.<br>
|
||||||
|
If more then one device is specified, then the device name will also included
|
||||||
|
in the output.
|
||||||
|
<br>
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
<ul>
|
||||||
|
<code>
|
||||||
|
fhem> di WEB<br>
|
||||||
|
menuEntries AlarmOn,/fhem?cmd=set%20alarm%20on<br>
|
||||||
|
room Misc.<br>
|
||||||
|
fhem> di WEB room<br>
|
||||||
|
Misc.<br>
|
||||||
|
</code>
|
||||||
|
</ul>
|
||||||
|
<br>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<a name="get"></a>
|
<a name="get"></a>
|
||||||
<h3>get</h3>
|
<h3>get</h3>
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -201,8 +201,7 @@ telnet-Prompt eingegeben werden:
|
|||||||
SHELL-Kommandos werden im Hintergrund ausgeführt,
|
SHELL-Kommandos werden im Hintergrund ausgeführt,
|
||||||
PERL-Ausdrücke und FHEM-Kommandos werden im Haupt-"thread" ausgeführt. Um
|
PERL-Ausdrücke und FHEM-Kommandos werden im Haupt-"thread" ausgeführt. Um
|
||||||
PERL-Ausdrücke leichter eingeben zu können, sind einige Spezialfunktionen und
|
PERL-Ausdrücke leichter eingeben zu können, sind einige Spezialfunktionen und
|
||||||
Variablen verfügbar. Lesen Sie sich bitte die Abschnitte
|
Variablen verfügbar. Lesen Sie sich bitte die Abschnitte <a href="#perl">
|
||||||
<a href="file:///C:/Inetpub/wwwroot/www.fhem.de/commandref_frame_DE.html#perl" style="color: #278727; text-decoration: underline; text-underline: single">
|
|
||||||
Perl special</a> zum besseren Verständnis durch.</p>
|
Perl special</a> zum besseren Verständnis durch.</p>
|
||||||
<p>Um FHEM-Befehle in einen SHELL-Script zu triggern (dies ist
|
<p>Um FHEM-Befehle in einen SHELL-Script zu triggern (dies ist
|
||||||
eine "andere" Möglichkeit), benutzen Sie bitte die oben beschriebene Client-Form
|
eine "andere" Möglichkeit), benutzen Sie bitte die oben beschriebene Client-Form
|
||||||
@ -251,16 +250,13 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.</p>
|
|||||||
<a name="devspec"></a>
|
<a name="devspec"></a>
|
||||||
<h3>Geräte-Spezifikation (devspec)</h3>
|
<h3>Geräte-Spezifikation (devspec)</h3>
|
||||||
<ul>
|
<ul>
|
||||||
Die Befehle
|
Befehle wie
|
||||||
<a href="#attr">attr</a>,
|
<a href="#attr">attr</a>,
|
||||||
<a href="#deleteattr">deleteattr</a>,<a href="#delete">delete</a>,
|
|
||||||
<a href="#get">get</a>,
|
|
||||||
<a href="#list">list</a>,
|
|
||||||
<a href="#set">set</a>,
|
<a href="#set">set</a>,
|
||||||
<a href="#setstate">setstate</a>,<a href="file:///C:/Inetpub/wwwroot/www.fhem.de/commandref_frame_DE.html#setstate"><span style="text-decoration: underline">
|
<a href="#get">get</a>, usw.
|
||||||
</span></a>können eine komplexere
|
können eine komplexere Gerätespezifikation als Argumente enthalten,
|
||||||
Gerätespezifikation als Argumente enthalten, die auch eine Anzahl von Geräten
|
die auch eine Anzahl von Geräten betreffen kann. Eine
|
||||||
betreffen kann. Eine Gerätespezifikation (Kurzfassung) kann z.B. so aussehen:
|
Gerätespezifikation (Kurzfassung) kann z.B. so aussehen:
|
||||||
<ul>
|
<ul>
|
||||||
<li>ein einzelner Gerätename. Dies ist der
|
<li>ein einzelner Gerätename. Dies ist der
|
||||||
meist vorkommende Fall.</li>
|
meist vorkommende Fall.</li>
|
||||||
@ -322,11 +318,15 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.</p>
|
|||||||
<code>attr <devspec> <attrname> [<value>] </code><br>
|
<code>attr <devspec> <attrname> [<value>] </code><br>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
Dieser Befehl setzt ein Attribut für ein Gerät welches mit <a href="#define">define</a> definiert wurde. Sie können auch
|
Dieser Befehl setzt ein Attribut für ein Gerät welches mit <a
|
||||||
Ihre eigenen Attribute definieren, um sie in anderen Applikationen anzuwenden.
|
href="#define">define</a> definiert wurde. Sie können auch Ihre eigenen
|
||||||
Geben Sie "<attr <name> ?" ein, um eine Liste verfügbarer Attribute
|
Attribute definieren, um sie in anderen Applikationen anzuwenden. Geben Sie
|
||||||
anzuzeigen. Bitte lesen Sie das Kapitel <a href="#devspec">Device specification</a>
|
"<attr <name> ?" ein, um eine Liste verfügbarer Attribute
|
||||||
um Detail-Informationen zu <devspec> zu erhalten.
|
anzuzeigen.
|
||||||
|
|
||||||
|
Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a>
|
||||||
|
für Details der <devspec>.<br>
|
||||||
|
|
||||||
<p>Attribute, die für
|
<p>Attribute, die für
|
||||||
alle Geräte anwendbar sind: </p>
|
alle Geräte anwendbar sind: </p>
|
||||||
<ul>
|
<ul>
|
||||||
@ -553,13 +553,14 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.</p>
|
|||||||
<ul>
|
<ul>
|
||||||
<code>delete <devspec></code> <br>
|
<code>delete <devspec></code> <br>
|
||||||
<br>
|
<br>
|
||||||
Löscht etwas was mit dem <a href="#define">define</a> Befehl erstellt worden
|
Löscht etwas was mit dem <a href="#define">define</a> Befehl erstellt
|
||||||
ist.
|
worden ist.<br>
|
||||||
Lesen Sie sich bitte den Abschnitt <a href="#devspec">Device specification</a> für
|
|
||||||
Details von
|
Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a>
|
||||||
<devspec> durch.<br>
|
für Details der <devspec>.<br>
|
||||||
Nach dem löschen, wird das globale Ereignis "DELETED" erzeugt. Lesen Sie bitte
|
|
||||||
den Abschnitt zu "notify" für genauere Informationen durch.<br>
|
Nach dem löschen, wird das globale Ereignis "DELETED" erzeugt.<br>
|
||||||
|
|
||||||
Beispiel:
|
Beispiel:
|
||||||
<ul>
|
<ul>
|
||||||
<code>delete lamp</code><br>
|
<code>delete lamp</code><br>
|
||||||
@ -572,12 +573,11 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.</p>
|
|||||||
<ul>
|
<ul>
|
||||||
<code>deleteattr <devspec> [<attrname>]</code> <br>
|
<code>deleteattr <devspec> [<attrname>]</code> <br>
|
||||||
<br>
|
<br>
|
||||||
Löscht entweder ein einzelnes Attribut (siehe Abschnitt <a href="#attr">attr</a> )
|
Löscht entweder ein einzelnes Attribut (siehe Abschnitt <a
|
||||||
oder alle Attribute eines Gerätes (falls kein <attrname> angegeben
|
href="#attr">attr</a> ) oder alle Attribute eines Gerätes (falls
|
||||||
wird).
|
kein <attrname> angegeben wird).<br>
|
||||||
Lesen Sie bitte den <a href="#devspec">Device specification</a>
|
Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a>
|
||||||
Abschnitt für
|
für Details der <devspec>.<br>
|
||||||
<devspec> durch.<br>
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
Beispiele:
|
Beispiele:
|
||||||
@ -593,14 +593,18 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.</p>
|
|||||||
<ul>
|
<ul>
|
||||||
<code>deletereading <devspec> <readingname></code> <br>
|
<code>deletereading <devspec> <readingname></code> <br>
|
||||||
<br>
|
<br>
|
||||||
Delete the reading <readingname>
|
Entfernt das Reading <readingname> für das spezifizierte
|
||||||
for a device. <readingname> is a perl regular expression that must match the whole name of the reading.
|
Gerät. <readingname> ist ein perl Regular-Expression, was den
|
||||||
Use with greatest care! FHEM might crash if you delete vital readings of a device.
|
vollständigen Namen des Readings erfassen muss.
|
||||||
See the <a href="#devspec">Device specification</a> section for details on
|
|
||||||
<devspec>.<br>
|
Mit größter Sorgfalt verwenden! FHEM kann abstürzen, falls
|
||||||
|
man lebenswichtige Readings entfernt.<br>
|
||||||
|
|
||||||
|
Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a>
|
||||||
|
für Details der <devspec>.<br>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
Examples:
|
Beispiele:
|
||||||
<ul>
|
<ul>
|
||||||
<code>deletereading mySensor temp1</code><br>
|
<code>deletereading mySensor temp1</code><br>
|
||||||
<code>deletereading mySensor temp\d+</code><br>
|
<code>deletereading mySensor temp\d+</code><br>
|
||||||
@ -608,6 +612,34 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.</p>
|
|||||||
<br>
|
<br>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<a name="displayattr"></a>
|
||||||
|
<h3>displayattr</h3>
|
||||||
|
<ul>
|
||||||
|
<code>displayattr <devspec> [<attrname>]</code> <br>
|
||||||
|
<br>
|
||||||
|
Zeigt entweder den Wert eines Attributes an (falls <attrname>
|
||||||
|
spezifiziert wurde) oder alle Attribute eines Gerätes.
|
||||||
|
|
||||||
|
Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a>
|
||||||
|
für Details der <devspec>.<br>
|
||||||
|
|
||||||
|
Falls mehrere Geräte spezifiziert wurden, dann enthält die Ausgabe
|
||||||
|
den Namen der Geräte.
|
||||||
|
<br>
|
||||||
|
|
||||||
|
Beispiele:
|
||||||
|
<ul>
|
||||||
|
<code>
|
||||||
|
fhem> di WEB<br>
|
||||||
|
menuEntries AlarmOn,/fhem?cmd=set%20alarm%20on<br>
|
||||||
|
room Misc.<br>
|
||||||
|
fhem> di WEB room<br>
|
||||||
|
Misc.<br>
|
||||||
|
</code>
|
||||||
|
</ul>
|
||||||
|
<br>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<a name="get"></a>
|
<a name="get"></a>
|
||||||
<h3>get</h3>
|
<h3>get</h3>
|
||||||
<ul>
|
<ul>
|
||||||
@ -617,10 +649,8 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.</p>
|
|||||||
Antwort. Eine allgemeine Liste möglicher Paramter erhalten Sie mit<ul>
|
Antwort. Eine allgemeine Liste möglicher Paramter erhalten Sie mit<ul>
|
||||||
<code>get <device> ?</code>
|
<code>get <device> ?</code>
|
||||||
</ul>
|
</ul>
|
||||||
Lesen Sie den Abschnitt <a href="#devspec">Device specification</a> für
|
Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a>
|
||||||
Details zu
|
für Details der <devspec>.<br>
|
||||||
<devspec> durch.<br>
|
|
||||||
<br>
|
|
||||||
Jedes Gerät hat unterschiedliche "get"-Parameter. Lesen Sie Details bitte im
|
Jedes Gerät hat unterschiedliche "get"-Parameter. Lesen Sie Details bitte im
|
||||||
zugehörigen Abschnitt nach.<br>
|
zugehörigen Abschnitt nach.<br>
|
||||||
<br>
|
<br>
|
||||||
@ -685,13 +715,13 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.</p>
|
|||||||
<code>list [devspec] [value]</code>
|
<code>list [devspec] [value]</code>
|
||||||
<br><br>
|
<br><br>
|
||||||
Auflistung aller "definitions", "notify" und "at"-Definitionen. Dies ist eines
|
Auflistung aller "definitions", "notify" und "at"-Definitionen. Dies ist eines
|
||||||
der wenigen Befehle, die im Normalfall eine Zeichenkette ausgeben. Bitte lesen
|
der wenigen Befehle, die im Normalfall eine Zeichenkette ausgeben.<br>
|
||||||
Sie den Abschnitt <a href="#devspec">Device specification</a> für Details zu
|
Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a>
|
||||||
<devspec>.
|
für Details der <devspec>.<br>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
Wenn value angegeben ist, der von ( DEF, TYPE, usw) oder
|
Wenn value angegeben ist, der von ( DEF, TYPE, usw) oder reading (actuator,
|
||||||
reading (actuator, measured-temp) für alle Geräte die in devspec angegeben
|
measured-temp) für alle Geräte die in devspec angegeben sind.
|
||||||
sind.
|
|
||||||
<br><br>
|
<br><br>
|
||||||
Beispiel:
|
Beispiel:
|
||||||
<pre><code> fhem> list
|
<pre><code> fhem> list
|
||||||
@ -870,9 +900,10 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.</p>
|
|||||||
<ul>
|
<ul>
|
||||||
<code>set <name> ?</code>
|
<code>set <name> ?</code>
|
||||||
</ul>
|
</ul>
|
||||||
Lesen Sie bitte den Abschnitt <a href="#devspec">Device specification</a>
|
Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a>
|
||||||
für Details zu <devspec>. Der "set"-Befehl gibt nur bei
|
für Details der <devspec>.<br>
|
||||||
Fehler einen Wert zurück.
|
|
||||||
|
Der "set"-Befehl gibt nur bei Fehler einen Wert zurück.
|
||||||
<br><br>
|
<br><br>
|
||||||
Jedes Gerät hat verschiedene Parameter die mit "set" gesetzt
|
Jedes Gerät hat verschiedene Parameter die mit "set" gesetzt
|
||||||
werden können. Lesen Sie bitte den entsprechenden Abschnitt für
|
werden können. Lesen Sie bitte den entsprechenden Abschnitt für
|
||||||
@ -936,11 +967,10 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.</p>
|
|||||||
Der Befehl setzt den "STATUS" für <code><name></code> , wie im Befehl
|
Der Befehl setzt den "STATUS" für <code><name></code> , wie im Befehl
|
||||||
<a href="#list">list</a> beschrieben, auf den Wert <code><value></code>
|
<a href="#list">list</a> beschrieben, auf den Wert <code><value></code>
|
||||||
ohne an das Gerät ein Signal zu senden. Dieser Befehl wird auch im <a href="#statefile">statefile</a>
|
ohne an das Gerät ein Signal zu senden. Dieser Befehl wird auch im <a href="#statefile">statefile</a>
|
||||||
benutzt.
|
benutzt.<br>
|
||||||
Lesen Sie bitte den Abschnitt <a href="#devspec">Device specification</a> für
|
Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a>
|
||||||
Details zu
|
für Details der <devspec>.<br>
|
||||||
<devspec>.
|
<br>
|
||||||
<br><br>
|
|
||||||
Examples:
|
Examples:
|
||||||
<ul>
|
<ul>
|
||||||
setstate lamp on
|
setstate lamp on
|
||||||
@ -975,10 +1005,10 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.</p>
|
|||||||
<ul>
|
<ul>
|
||||||
<code>trigger <devspec> <state></code>
|
<code>trigger <devspec> <state></code>
|
||||||
<br><br>
|
<br><br>
|
||||||
Triggert eine <a href="#notify">notify</a> Definition.
|
Triggert eine <a href="#notify">notify</a> Definition.<br>
|
||||||
Siehe <a href="#devspec">Geräte-Spezifikation (devspec)</a>
|
Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a>
|
||||||
für Details zu <devspec>.
|
für Details der <devspec>.<br>
|
||||||
<br><br>
|
<br>
|
||||||
Beispiel:
|
Beispiel:
|
||||||
<ul>
|
<ul>
|
||||||
<code>trigger btn3 on</code>
|
<code>trigger btn3 on</code>
|
||||||
|
38
fhem/fhem.pl
38
fhem/fhem.pl
@ -231,6 +231,8 @@ $readingFnAttributes = "event-on-change-reading event-on-update-reading ".
|
|||||||
Hlp=>"<devspec> [<attrname>],delete user defined reading for <devspec>" },
|
Hlp=>"<devspec> [<attrname>],delete user defined reading for <devspec>" },
|
||||||
"delete" => { Fn=>"CommandDelete",
|
"delete" => { Fn=>"CommandDelete",
|
||||||
Hlp=>"<devspec>,delete the corresponding definition(s)"},
|
Hlp=>"<devspec>,delete the corresponding definition(s)"},
|
||||||
|
"displayattr"=> { Fn=>"CommandDisplayAttr",
|
||||||
|
Hlp=>"<devspec> [attrname],display attributes" },
|
||||||
"get" => { Fn=>"CommandGet",
|
"get" => { Fn=>"CommandGet",
|
||||||
Hlp=>"<devspec> <type dependent>,request data from <devspec>" },
|
Hlp=>"<devspec> <type dependent>,request data from <devspec>" },
|
||||||
"help" => { Fn=>"CommandHelp",
|
"help" => { Fn=>"CommandHelp",
|
||||||
@ -1490,6 +1492,42 @@ CommandDeleteAttr($$)
|
|||||||
return join("\n", @rets);
|
return join("\n", @rets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#############
|
||||||
|
sub
|
||||||
|
CommandDisplayAttr($$)
|
||||||
|
{
|
||||||
|
my ($cl, $def) = @_;
|
||||||
|
|
||||||
|
my @a = split(" ", $def, 2);
|
||||||
|
return "Usage: displayattr <name> [<attrname>]\n$namedef" if(@a < 1);
|
||||||
|
|
||||||
|
my @rets;
|
||||||
|
my @devspec = devspec2array($a[0]);
|
||||||
|
|
||||||
|
foreach my $sdev (@devspec) {
|
||||||
|
|
||||||
|
if(!defined($defs{$sdev})) {
|
||||||
|
push @rets, "Please define $sdev first";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $ap = $attr{$sdev};
|
||||||
|
next if(!$ap);
|
||||||
|
my $d = (@devspec > 1 ? "$sdev " : "");
|
||||||
|
|
||||||
|
if(defined($a[1])) {
|
||||||
|
push @rets, "$d$ap->{$a[1]}" if(defined($ap->{$a[1]}));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
push @rets, map { "$d$_ $ap->{$_}" } sort keys %{$ap};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return join("\n", @rets);
|
||||||
|
}
|
||||||
|
|
||||||
#############
|
#############
|
||||||
sub
|
sub
|
||||||
CommandDeleteReading($$)
|
CommandDeleteReading($$)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user