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

Hallo Enno,

da kommen jetzt zwei Dinge zusammen:

1. Du hast einen Fehler in der Definition - Kommentare müssen mit zwei ## gemacht werden - so wie es ist dürftest du sogar Fehler im Logfile finden (von DOIF selbst)
2. Ich hatte zwar einen "Fallback" auf uiState vorgesehen (wenn es kein uiTable gibt), aber nie getestet - ging natürlich nicht.

Für Punkt zwei habe ich den Fallback in GitHub jetzt repariert und außerdem den Parameter "state" eingebaut der die Verwendung von uiState statt uiTable erzwingt.

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

enno

Moin Jörg,

den Kommentar im DOIF habe ich gelöscht. Hatte keine Fehlermeldung deshalb und hat eigentlich immer angezeigt ist aber überflüssig, hatte ich nur vergessen zu löschen. Deine neue Version habe ich eingebaut. Jetzt klappt es. Super! Danke!

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC

Adimarantis

Version 3.5 eingecheckt und im Wiki dokumentiert.

Installer mit "experimental" Option auf signal-cli 0.10.2 geupdated. Sollte jetzt auch eigentlich für alle üblichen Systeme funktionieren.
Wegen der Spezial Java17 Installation bleibt aber 0.9.2 die offizielle Version. Die Version 0.9.0 wird jetzt nicht mehr unterstützt.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

andies

Gibt es irgendwo Tipps, wie man Text mit Hervorhebungen/Kursiv/Code etc versendet? Telegram hatte so eine API, da konnte man den HTML-Mode auswählen. Hier habe ich nichts dergleichen gefunden, auch nicht in der Beschreibung des Devices.
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

Siehe Wiki:

Tipp zu den Formatierungen: Auf z.B. https://yaytext.com/ kann man sich seine UTF8 Kodierungen erstellen und nach FHEM per copy&paste einfügen. Vorrausetzung dürfte sein, dass die "locale" des Systems auf UTF8 eingestellt ist
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

andies

Das hatte ich gelesen - aber das gilt ja nur für statischen Text, der während der Programmierung bereits feststeht. Wenn ich zB Logeinträge senden will, wie kann ich die etwa im Codestil formatieren, wenn sie ursprünglich nicht in diesem Stil vorliegen?
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

Hast du ein Beispiel wie du das bei Telegram machst? Hab jetzt auf die schnelle im Wiki nichts dazu gefunden.
signal-cli hat keinen html mode den ich hier nutzen könnte, das müsste man mit Utf-8 simulieren.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

andies

Ich habe eine Variable $nachricht erzeugt, in der die zehn letzten Logeinträge stehen und sende dann
fhem("set TelegramBot silentmsg <code>".$nachricht."</code> ")
Die werden dann in Codeformatierung dargestellt.
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

Dies scheint ein Telegram spezifisches Feature zu sein - habe jetzt im Code von TelegramBot nichts gefunden, dass darauf schliessen lässt, das es bereits dort umgewandelt wird.
Für Signal gab es wohl mal Diskussionen Markdown wie *bold* oder 'code' zu unterstützen, das ist aber wohl (noch) nicht implementiert. Auch von signal-cli ist mir keine Unterstützung bekannt, habe aber mal im Projekt nachgefragt.

Ich habe jetzt auf Anhieb auch keine Perl library gefunden die html->unicode oder markdown->unicode konvertiert. Wenn da jemand Ideen hat, kann ich mir das gerne anschauen.
Das selber "from scratch" zu implementieren, wäre zu viel Aufwand und mir fehlt da auch das Detailwissen.
D.h. aktuell sehe ich keinen Weg das zu unterstützen.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

andies

Ich wusste nicht, dass das seit sechs Jahren (!) diskutiert wird:
https://community.signalusers.org/t/font-styling-for-signal-messages-e-g-using-markdown/612
Sieht nach einem echten Problem aus.

<edit> Also wenn man das in Perl hinbekommt, dann sendet Signal den Text im richtigen Format, siehe Bild.
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

Es gibt irgendein Problem beim Senden der uiDOIF-Bilder,
(process:19447): librsvg-WARNING **: 12:44:12.220: RsvgHandle could not read or parse the SVG; did you check for errors
during the loading stage?

(process:19447): GdkPixbuf-CRITICAL **: 12:44:12.220: gdk_pixbuf_save_to_callbackv: assertion 'GDK_IS_PIXBUF (pixbuf)' failed

Bei mir stürzt FHEM sofort ab, startet neu und dabei erscheinen beim Starten keine Fehlermeldungen. Das Bild, das ich senden will, kann ich aber sehen:
Internals:
   DEF        ##
   FUUID      61f572ec-f33f-1115-d518-121fa3a93e31674a
   FVERSION   98_DOIF.pm:0.253860/2021-12-28
   MODEL      FHEM
   NAME       uiDOIF
   NOTIFYDEV  BresserTemeo_1,global,Viessmann2,Wasserzaehler_IEC_01
   NR         477
   NTFY_ORDER 50-uiDOIF
   STATE      initialized
   TYPE       DOIF
   VERSION    25386 2021-12-28 22:19:25
   READINGS:
     2022-01-30 12:41:54   cmd             0
     2022-01-30 12:41:54   mode            enabled
     2022-01-30 12:41:54   state           initialized
   Regex:
     accu:
     collect:
       BresserTemeo_1:
         collect:
           temperature_at ^BresserTemeo_1$:^temperature_at:
       Viessmann2:
         collect:
           Durchschnitt_WW ^Viessmann2$:^Durchschnitt_WW:
       Wasserzaehler_IEC_01:
         collect:
           Verbrauch  ^Wasserzaehler_IEC_01$:^Verbrauch:
     uiTable:
       BresserTemeo_1:
         uiDOIF_uiTable_c_0_0_0_0:
           temperature_at ^BresserTemeo_1$:^temperature_at:
       Viessmann2:
         uiDOIF_uiTable_c_1_0_0_0:
           Durchschnitt_WW ^Viessmann2$:^Durchschnitt_WW:
       Wasserzaehler_IEC_01:
         uiDOIF_uiTable_c_2_0_0_0:
           Verbrauch  ^Wasserzaehler_IEC_01$:^Verbrauch:
   collect:
     BresserTemeo_1 temperature_at:
       24:
         dim        72
         hours      24
         last_v     5.0
         max_value  6.5
         max_value_slot 25
         max_value_time 1643488296
         min_value  5.0
         min_value_slot 71
         min_value_time 1643543217
         name       BresserTemeo_1
         reading    temperature_at
         time       1643543217
         value      5.0
         times:
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           1643488296
           1643488932
           undef
           1643491904
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           1643519429
           undef
           undef
           undef
           undef
           undef
           undef
           1643527488
           undef
           1643529982
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           1643542658
           1643543217
         values:
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           6.5
           6.3
           undef
           5.0
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           5.0
           undef
           undef
           undef
           undef
           undef
           undef
           5.0
           undef
           5.0
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           5.0
           5.0
     Viessmann2 Durchschnitt_WW:
       12:
         dim        72
         hours      12
         last_v     56.1
         max_value  56.75
         max_value_slot 58
         max_value_time 1643535433
         min_value  30.85
         min_value_slot 66
         min_value_time 1643540177
         name       Viessmann2
         reading    Durchschnitt_WW
         time       1643543297
         value      55.85
         times:
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           1643519477
           1643520017
           1643520617
           1643521397
           1643521852
           1643522597
           1643523557
           1643523677
           1643524757
           1643525357
           1643525957
           1643526257
           1643526797
           1643527298
           1643528237
           1643528777
           1643529377
           1643529982
           1643530637
           1643531297
           1643531837
           1643532437
           1643533157
           1643533614
           1643534297
           1643534897
           1643535433
           1643536157
           1643536697
           1643537357
           1643537957
           1643538377
           1643538617
           1643539665
           1643540177
           1643540875
           1643541437
           undef
           1643542694
           1643543297
         values:
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           34.35
           31.95
           31.95
           32.05
           32
           31.9
           32.05
           31.95
           34
           44.45
           52.05
           55
           54.05
           53.45
           52.75
           47.1
           54.45
           55.4
           54.4
           53.7
           53.05
           52.35
           51.2
           50.8
           41.3
           54.4
           56.75
           56.3
           54.95
           44.9
           31.15
           30.9
           31.15
           31.25
           30.85
           39.6
           40.15
           undef
           56.1
           55.85
     Wasserzaehler_IEC_01 Verbrauch:
       24:
         dim        72
         hours      24
         last_v     0
         max_value  29
         max_value_slot 63
         max_value_time 1643534151
         min_value  0
         min_value_slot 70
         min_value_time 1643542658
         name       Wasserzaehler_IEC_01
         reading    Verbrauch
         time       1643543316
         value      1
         times:
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           1643488497
           1643489844
           1643490114
           1643491904
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           1643519479
           1643520054
           1643521279
           1643522476
           1643524208
           1643524967
           1643526426
           1643528381
           1643528663
           1643530102
           1643530856
           1643532817
           1643534151
           1643534592
           1643536187
           1643537379
           1643538417
           1643540352
           1643541356
           1643542658
           1643543316
         values:
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           0
           7
           0
           0
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           1
           0
           0
           0
           1.0099999999984
           0
           0.990000000001601
           15
           0
           1
           0
           12
           29
           0
           6
           27.0099999999984
           0
           4
           25
           0
           1
   helper:
     DEVFILTER  ^global$|^Viessmann2$|^BresserTemeo_1$|^Wasserzaehler_IEC_01$
     NOTIFYDEV  global|Viessmann2|BresserTemeo_1|Wasserzaehler_IEC_01
     globalinit 1
     last_timer 0
     sleeptimer -1
   perlblock:
   uiTable:
     dev        Wasserzaehler_IEC_01
     header     
     package    package ui_Table;
     reading    Verbrauch
     table:
       0:
         0:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'uiDOIF_uiTable_c_0_0_0_0',card(::ReadingValDoIf($hash,'BresserTemeo_1','temperature_at','','col24'),"Außen",undef,-10,45,undef,undef,"°C",\&temp_hue,"1","130,,,,,1,200"),"")
       1:
         0:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'uiDOIF_uiTable_c_1_0_0_0',card(::ReadingValDoIf($hash,'Viessmann2','Durchschnitt_WW','','col12'),"Warmwasser",undef,20,65,undef,undef,"°C",\&warmwasser_hue,"1","130,,,,,1,200"),"")
       2:
         0:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'uiDOIF_uiTable_c_2_0_0_0',card(::ReadingValDoIf($hash,'Wasserzaehler_IEC_01','Verbrauch','','col24'),"Wasser,fill:darkblue",undef,0,undef,240,240,"l",undef,"1","130,,1,,,1,200"),"")
Attributes:
   uiTable    {package ui_Table;
    sub warmwasser_hue {
    my($farbe)=@_;
    return ($farbe > 39 ? 0 : 240);
}
}
card([BresserTemeo_1:temperature_at:col24],"Außen",undef,-10,45,undef,undef,"°C",\&temp_hue,"1","130,,,,,1,200")
card([Viessmann2:Durchschnitt_WW:col12],"Warmwasser",undef,20,65,undef,undef,"°C",\&warmwasser_hue,"1","130,,,,,1,200")
card([Wasserzaehler_IEC_01:Verbrauch:col24],"Wasser,fill:darkblue",undef,0,undef,240,240,"l",undef,"1","130,,1,,,1,200")

Sieht jemand, was ich falsch mache?
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

Es scheint an den leeren Komma Feldern im letzten Parameter zu liegen:
card([Viessmann2:Durchschnitt_WW:col12],"Warmwasser",undef,20,65,undef,undef,"°C",\&warmwasser_hue,"1","130,,,,,1,200")
Wenn ich da immer eine 0 reinschreibe, dann geht es.
Ich kann dir nicht sagen warum. Das SVG schaut in beiden Fällen OK aus und wird ja angezeigt. Allerdings ist die Library zum Umwandeln schon ewig alt - vielleicht verträgt die etwas nicht, das offziell erlaubt ist.

Der FHEM Neustart ist natürlich auch nicht schön. Da fehlt noch ein Fehlercheck, das baue ich noch ein.

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

andies

Hmm, hat bei mir nicht gereicht. Ich habe jetzt
card([BresserTemeo_1:temperature_at:col24],"Außen",undef,-10,45,undef,undef,"°C",\&temp_hue,"1","130,0,0,0,0,1,200")
card([Viessmann2:Durchschnitt_WW:col12],"Warmwasser",undef,20,65,undef,undef,"°C",\&warmwasser_hue,"1","130,0,0,0,0,1,200")
card([Wasserzaehler_IEC_01:Verbrauch:col24],"Wasser,fill:darkblue",undef,0,undef,240,240,"l",undef,"1","130,0,1,0,0,1,200")

und dennoch einen Absturz.
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

Ja, hab auch noch weiter probiert und irgendwie immer noch Probleme mit deinen Beispielen.
Irgendwie scheint es trotzdem an dem letzten Parameter zu liegen. Wenn ich den weglasse, dann geht es.
card([BresserTemeo_1:temperature_at:col24],"Außen",undef,-10,45,undef,undef,"°C",\&temp_hue,"1")
Für weitere Experimente nimmt bitte die Version von GitHub
https://github.com/bublath/FHEM-Signalbot/blob/main/50_Signalbot.pm
Da sollte es zumindest keinen FHEM Restart mehr geben, sondern eine Fehlermeldung
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

andies

In der Tat
Error: Converting SVG to PNG for package ui_Table;card(::ReadingValDoIf($hash,'BresserTemeo_1','temperature_at','','col24'),"Außen",undef,-10,45,undef,undef,"°C",\&temp_hue,"1","130,0,0,0,0,1,200");
Da versuche ich mal weiter zu spielen.
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