Neues Modul: Signalbot (Integration für den Signal Messenger) via signal-cli

Begonnen von Adimarantis, 31 Januar 2021, 19:16:19

Vorheriges Thema - Nächstes Thema

Adimarantis

Ich glaubt ich habs: Es ist der Halbring
# <hring>: 1 für Halbringdarstellung,

Ich kann nur vermuten das dafür SVG Befehle verwendet werden, die die alte Library nicht verdaut.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

andies

FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Zitat von: andies am 30 Januar 2022, 11:04:09
<edit> Also wenn man das in Perl hinbekommt, dann sendet Signal den Text im richtigen Format, siehe Bild.
Ich habe ein wenig gespielt. An sich ist das einfach, wenn man den tr-Befehl nimmt. In die erste Klammer den Logfile im Original, in der zweiten Klammer dieselben Buchstaben im Monospace,
$nachricht =~ tr/abcdefghijklmnopqrstuvwyz 01456789= -:ABCDEFGHIKLMPQRSTUVW/𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝚒𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚢𝚣 0𝟷𝟺𝟻𝟼𝟽𝟾𝟿= -:𝙰𝙱𝙲𝙳𝙴𝙵𝙶𝙷𝙸𝙺𝙻𝙼𝙿𝚀𝚁𝚂𝚃𝚄𝚅𝚆/;
fhem("set SignalBot send \@Andreas ".$nachricht."");

Blöderweise klappt das nicht vollumfänglich  :P
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Adimarantis

Ich glaube das gibt ein Problem damit, dass der erste Teil deines tr normale characters (8-Bit) sind und der zweite Teil Unicode (16-bit).
Das verdaut er nicht richtig und macht Unsinn. Sieht man auch an der Fehlermeldung:
PERL WARNING: Replacement list is longer than search list
So scheint er das besser auf die Reihe zu kriegen:
$nachricht =~ tr/a-zA-Z0-9/\x{1D68A}-\x{1D6A3}\x{1D670}-\x{1D689}\x{1D7F6}-\x{1D7FF}/;

Jörg

Edit: Mit Zahlen
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

andies

Hm, bei mir erscheint das nicht. Wenn ich das ausgebe, sehe ich den Fonts im Web (siehe Screenshot), aber er kommt bei mir in Signal nicht an.

<edit> Das scheinen die Zeilenvorschübe in $nachricht zu sein. Wenn ich nur die erste Zeile herausnehme, klappt es. Die müssen also anscheinend maskiert werden? Komisch, beim normalen Fonts war das nicht nötig. Wie ersetze ich die denn?</edit>
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Merkwürdig. Wenn ich den Text ohne Fontsänderung voranstelle, geht es durch, siehe Screenshot. Das ist ja wie bei irgendwelchen Ausgrabungen, man  probiert und schaut und mal findet man was.

<edit> Einfach eine \n an den Anfang und es geht durch. Danke!!</edit>
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Adimarantis

Thema Schriftarten nochmal - hab da mal folgendes gebaut. Kann zum Testen nach myUtils, dann einfach mit toUnicode("bold","Dies ist ein Test") aufrufen. Ansatz war das möglichst generisch zu lösen und im Source Code selbst nur ASCII zu verwenden.

Überlege das in Signalbot einzubauen, die Frage ist nur mit welcher Syntax.
Eher html Tags wie <b>bold</b> <code>monospace</code> ....
oder so Markdowns wie _bold_ 'code'

oder einfach nur als API um es in eigenen Scripten/DOIF aufzurufen
my $nachricht = toUnicode("italic","Dies ist ein Test 123");
fhem("set SignalBot reply $nachricht ok?");


#Converts normal ASCII into unicode with a special font or style
sub toUnicode {
my ($font,$str) = @_;

if ($font eq "underline") {
$str =~ s/./$&\x{332}/g;
return $str;
}
if ($font eq "strikethrough") {
$str =~ s/./$&\x{336}/g;
return $str;
}


my %uc = (
"bold" => [0x1d41a,0x1d400,0x1d7ce],
"italic" => [0x1d44e,0x1d434,0x30],
"bold-italic" => [0x1d482,0x1d468,0x30],
"script" => [0x1d4b6,0x1d49c,0x30],
"fraktur" => [0x1d51e,0x1d504,0x30],
"square" => [0x1f130,0x1f130,0x30],
"mono" => [0x1d68a,0x1d670,0x30],
);

#Special handling for characters missing in some fonts
my %sp = (
0x1d455 => 0x1d629, #italic h -> italic sans-serif h
0x1d4ba => 0x1d452, #script e -> serif e
);

return undef if (! defined $uc{$font});

my $rep=chr($uc{$font}[0])."-".chr($uc{$font}[0]+25).chr($uc{$font}[1])."-".chr($uc{$font}[1]+25).chr($uc{$font}[2])."-".chr($uc{$font}[2]+9);
$_=$str;
eval "tr/a-zA-Z0-9/$rep/";
return undef if $@;
my $rep2="";
$rep="";
foreach my $val (keys %sp) {
$rep.=chr($val);
$rep2.=chr($sp{$val});
}
eval "tr/$rep/$rep2/";
return undef if $@;
print $_."\n";
return $_;
}
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

andies

Solange sich die Leute von Signal selbst nicht einig sind, würde ich kein Markup o.Ä. verwenden, das muss dann am Ende wieder aufwendig rückgängig gemacht werden. Allerdings bin ich auch kein Profi und weiß nicht wie solche Sachen üblicherweise laufen.
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Adimarantis

Wenn Signal das nativ einführen sollte, dann widerspricht sich das erstmal nicht.
Ich würde ja den Text vorher parsen und in Unicode umwandeln und so schicken - ist das selbe wie copy&paste - das funktioniert auch noch wenn Signal das einführt.
Komisch wird es nur wenn Signal was anderes einführt und sich das widerspricht, dann wären neue Nutzer verwirrt warum manches anders aussieht.
Und wenn man es wieder entfernt (das ist an sich kein Problem) dann sind alte Nutzer verwirrt, weil die Sachen plötzlich anders rauskommen.

Ist wahrscheinlich ein Grund warum da seit 6 Jahren diskutiert wird - es gibt keinen Standard und je nachdem von welchem anderen Programm man kommt, ist man andere Dinge gewohnt.
Zum Beispiel GitHub: https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax
Und Whatsapp: https://faq.whatsapp.com/general/chats/how-to-format-your-messages/?lang=de
Wogegen Telegram eher auf html style geht: https://core.telegram.org/api/entities
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Adimarantis

So, ich mache jetzt einfach mal einen Vorschlag - Testversion dazu https://github.com/bublath/FHEM-Signalbot

Ich hab das jetzt mal optional gemacht. Es gibt ein Attribut "formatting" mit folgenden Optionen:
none - keine Ersetzungen
html - Nur Ersetzungen mit html-artigen tags (<b>text</b>)
markdown - Nur Ersetzungen mit markdown-artigen tags (_text_)
both - Beide Ersetzungen aktiv

Achtung: Markdown braucht vor und nachdem Wort ein Leerzeichen um versehentliche Ersetzungen zu verhindern (also "dies ist _underlined_ !" - dagegen "dies ist _underlined_!" geht nicht. Eine Variante wäre das mit doppelten Zeichen zu machen __underline__ **bold** dann ist das Risiko einer Fehlersetzung geringer

Syntax/Beispiele:

U̲n̲t̲e̲r̲s̲t̲r̲i̲c̲h̲e̲n̲e̲r̲ ̲T̲e̲x̲t̲ ̲1̲2̲3̲ - <u>text</u> / _text_
D̶u̶r̶c̶h̶g̶e̶s̶t̶r̶i̶c̶h̶e̶n̶e̶r̶ ̶T̶e̶x̶t̶ ̶1̶2̶3̶ - <s>text</s> / ~text~
𝐅𝐞𝐭𝐭𝐞𝐫 𝐓𝐞𝐱𝐭 𝟏𝟐𝟑 - <b>text</b> / *bold*
𝐾𝑢𝑟𝑠𝑖𝑣𝑒𝑟 𝑇𝑒𝑥𝑡 𝘩 123 - <i>text</i>
𝑭𝒆𝒕𝒕𝒆𝒓 𝒌𝒖𝒓𝒔𝒊𝒗𝒆𝒓 𝑻𝒆𝒙𝒕 123 - <bi>text</bi>
𝓢𝓬𝓻𝓲𝓹𝓽 𝓣𝓮𝔁𝓽 123 - <script>text</script>
𝕱𝖗𝖆𝖐𝖙𝖚𝖗 𝕿𝖊𝖝𝖙 123 - <fraktur>text</fraktur>
🅂🅀🅄🄰🅁🄴 🅃🄴🅇🅃 123 - <square>text</square>
𝙼𝚘𝚗𝚘𝚜𝚙𝚊𝚌𝚎 𝚃𝚎𝚡𝚝 123 - <code>text</code> / ``text``

Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

enno

Zitat von: Adimarantis am 01 Februar 2022, 18:37:03
html - Nur Ersetzungen mit html-artigen tags (<b>text</b>)

ich teste mal mit dieser Einstellung....
Einfacher FHEM Anwender auf Intel®NUC

enno

Moin,

wenn ich eine Nachricht mit dem Zeilenumbruch \n schicken möchte, geht es nicht. Ohne \n klappt es. Einen Zeilenumbruch <br> mag er auch nicht....

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC

andies

Setze mal einen einfachen Text vor den Zeilenumbruch oder gar als erstes einen Zeilenumbruch, dann ging es bei mir durch
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Vorschlag zur Hilfe:

<li><b>formatting</b><br>
<a id="Signalbot-attr-formatting"></a>
The "formatting" attribute has the following four options that allow highlighting:
<ul>
<li>none - no replacements </li>
<li>html - replacements are enabled here with HTML-type tags (e.g. for bold &lt;b&gt; is bold &lt;/b&gt;)</li>
<li>markdown - replacements are enabled by markdown-like tags (e.g. _for italic_)</li>
<li>both - both methods are possible here</li>
</ul>
It must be noted that markdowns require a space before and after the word to prevent accidental replacements (so possible is "this is _underlined_ !", but not "this is _underlined_!").
</li>
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Adimarantis

Das mit dem Zeilenumbruch:

Ist das in einem DOIF? Da muss man es nämlich escapen (\\n). Habt ihr ein spezfisches Beispiel was nicht geht? Ich kann das jetzt nicht nachvollziehen.
Das mit dem <br> als \n Alternative werde ich noch einbauen (für den html mode) - dann gibt es wegen escapen auch keine Probleme mehr
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)