Modul 98_Matrix zur Kopplung von FHEM an den Matrix-Chat

Begonnen von mBielemeier, 30 Oktober 2022, 18:12:12

Vorheriges Thema - Nächstes Thema

mBielemeier

    Moin an alle,

    ich habe seit gefühlten Ewigkeiten FHEM im Einsatz und jetzt neu auch Matrix, was bei mir Telegram als Meldungszentrale ablösen soll. Ich bin dabei einen Bot als FHEM-Modul aufzubauen der sowohl Meldungen absetzen kann als auch Befehle empfangen kann.

    Das funktioniert mit Access-Token, Refresh-Token und sync auch schon ganz gut. Aktuelles Highlight ist Start und Beobachten einer Umfrage zur Reaktion auf Alarmmeldungen von FHEM.

    Das Modul enthält allerdings noch viele Tests und Machbarkeitsstudien und ist noch nicht für "Endbenutzer" geeignet. Im Moment ist es eher für interessierte Developer und sehr Neugierige geeignet. Ich poste hier trotzdem schon mal, da ich noch sehr wenig zum Thema Matrix-Chat gefunden habe. Nicht das mehrere Entwicklungen parallel laufen.

    Zu meinem Ziel: Der FHEM-Matrix-Bot soll natürlich Meldungen in eine oder mehrere Gruppen posten können. Er soll aber auch ständig verbunden bleiben um Nachrichten und Befehle jederzeit empfangen zu können. Und da Befehle tippen im Chat zu umständlich ist experimentiere ich mit den Umfragen, bei deren Auswahl dann entsprechende Befehle empfangen werden. Auf Serverseite gibt es nur eine Einschränkung: Es müssen unverschlüsselte Gruppen zugelassen sein. Die Gruppe kann aber auf jedem beliebigen öffentlich vorhandenen oder einem eigenen Matrix-Server angelegt werden.

    Der Einfachheit empfehle ich folgendes Vorgehen wenn jemand schon testen will:

    • einen Matrix-Client für FHEM anlegen und den User registrieren Das geht unter Windows einfach mit dem installierten Matrix-Element-Client indem der Link kopiert wird und beim Aufruf ("Ziel") "--profile fhem" angehängt wird. Damit wird eine unabhängige Instanz erzeugt. Mein Vorgehen habe ich mit Element duchgeführt, es geht natürlich mit vielen anderen Matrix-Chatclients auch aber dann passt die Anleitung vielleicht nicht ganz. Mein Bot heißt jetzt "myFhemBot"
    • Wenn der Benutzer angelegt ist wird ein unverschlüsselter Raum benötigt:

      • Dazu neben Räume auf das "+" klicken ("Raum hinzufügen") und dann "Neuer Raum"
      • Jetzt kann ein Name vergeben werden, z.B "Fhem-Nachrichten", der Raum sollte privat bleiben und ganz wichtig: "Ende-zu-Ende-Verschlüsselung aktivieren" muss unbedingt deaktiviert werden. Jetzt "Raum erstellen" drücken.
      • Nun sich selbst und alle in den Raum einladen, die Meldungen von Fhem sehen sollen und Meldungen an Fhem schicken sollen.
    • Das Modul 98_Matrix.pl aus Github in das FHEM-Verzeichnis kopieren und die Bibliothek Matrix.pl in lib/FHEM/Devices/Matrix.
      Jetzt ein device anlegen:

      • z.B. device matrixBot Matrix <server> myFhemBot
      • attr matrixBot matrixPoll 1 bereitet die Dauerschleife zum Empfangen vor.
      • set matrixBot password 1234 speichert das Passwort im Hintergrund. Natürlich muss statt 1234 das echte Passwort hier eingegeben serden
      • set matrixBot login bereitet die Dauerschleife zum Empfangen vor. Jetzt sollte als Status sync - 200 erscheinen.
    • Nach den Aktualisieren der Seite erscheint neben dem Namen des angelegten Raums auch die ID des Raums !...@server
    • Diese Raum-ID in die Attribut MatrixMessage und MatrixRoom eintragen
    • Alle Benutzer, die etwas senden dürfen, in das Attribut matrixUser eintragen.

    Nachrichten an den vorbereiteten Raum werden versendet mit
set matrixBot msg <Nachrichtentext>.

Jetzt können Fragen mit festen Antworten=Befehlen vorbereitet werden.

  • Fragen werden als Attribut unter einer beliebigen Nummer eingegeben, entweder direkt in der Befehlszeile

    • attr matrixBot matrixQuestion_1 Frage:Antwort 1:Antwort 2:Antwort 3 (bis zu 20 Antworten sind möglich), oder über die Attribut-Auswahl
    • attr matrixBot matrixQuestion_ 2 Frage:Antwort (mindestens eine Antwort muss sein)
  • Passend zu den Antworten werden Befehle als Attribut unter der gleichen Nummer wie die Frage eingegeben, wieder entweder direkt in der Befehlszeile

    • attr matrixBot matrixAnswer_1 Befehl 1:Befehl 2:Befehl 3 (Alle Befehle die mit fhem() ausgeführt werden sind möglich)
    • attr matrixBot matrixAnswer_ 2 Befehl (mindestens eine Antwort muss sein)

Empfangene Nachrichten erscheinen unter dem Reading "message" und passend dazu gibt es das Reading "sender" welches den Absender der aktuellen Nachricht enthält. Sonderregel für freie Nachrichten in dem Raum:

  • attr matrixBot matrixQuestion_ 99 Nachricht 1:Nachricht 2 (beliebig viele Nachrichten die bei Empfang geprüft werden)
  • attr matrixBot matrixAnswer_ 99 Befehl 1:Befehl 2 (Ergibt eine Nachricht eine Übereinstimmung, wird der passende Befehl ausgeführt)


Einschränkungen und Fehler:
Die Empfangs-Schleife bricht noch selten und unregelmäßig ab und muss dann mit set matrixBot login neu gestartet werden.

Die jeweils aktuelle Version gibt es bei Github unter https://github.com/Man-fred/matrix

Und nun wünsche ich mir eine rege Diskussion und hoffe, das ich nicht allein bin mit dem Wunsch nach einem Matrix-Bot.

Viele Grüße
Manfred[/list]
FHEM 6.1 Raspberry 4, CUL868+CUL433 auf ESP8266-Basis, FS20, IT-Steckdosen, ESP8266-MQTT, Zigbee, Shelly

rob

Hi Manfred.

Ich finde Deine Initiative klasse  8) 8)
FHEM lässt viele Dinge einbinden wie Alexa, Google-Krams, Facebook (WhatsApp) uvm. Doch offene Alternativen kommen für meinen Geschmack oft zu kurz/ sind komplizierter (Stichwort Sprachsteuerung). Selbst FHEM-nahe App-Entwicklungen werden nicht/ kaum über F-Droid angeboten (was imho aber der Vertrauenswürdigkeit zugute käme).
Telegram und Co. machen es einem wirklich leicht/ schmackhaft und die Verwendung mit FHEM lässt kaum Wünsche offen. Nur leider handelt es sich um Insel-Services. Wenig transparent und imho nur bedingt vertrauenswürdig.
Matrix ist da eher wie E-Mail: unabhängig und eben kein Insel-Service der uns auf genau einen Anbieter festnagelt etc. (Mastodon wäre auch eine schöne Alternative für Twitter-ähnliche Anwendungen).

Meine Erfahrung: wer Transparenz, Unabhängigkeit u. Datenschutz möchte, muss eigentlich immer zurückstecken und viele Kröten schlucken. So fehlt mir bei einschlägigen Messenger Alternativen wie Signal oder in diesem Fall Elements/Riot(?) was Telegram imho so besonders macht: die "inline keyboards".
Hat wohl weniger mit dem Protokoll an sich als mehr mit der Umsetzung in der App zu tun. Ich möchte damit nur sagen, dass eine Umsetzung für Matrix richtig klasse wäre - der Umstieg von z.B. Telegram im Detail doch ggf. schwierig, da mit Verzicht verbunden (wie so oft).

Dennoch: Sobald Dein Projekt soweit ist, nehme ich das gerne in meinen Zoo auf :) . Lass Dich also auch bei Skepsis oder zurückhaltenden Rückmeldungen nicht beirren  - der richtige Weg ist immer steinig :D (hoffentl. klingt das nicht zu pathetisch ...)

Kannst Du für interessierte Tester zum Punkt 2.) ggf. eine Art best practise empfehlen?

VG
rob


mehr über Matrix: https://matrix.org/faq/
OT und dennoch passend: eine Übersicht an Messangern und deren Eigenschaften: https://www.messenger-matrix.de/

mBielemeier

Hallo,

heute habe ich noch ein paar Fehler ausgemerzt und morgen versuche ich mal die Beschreibung der Attribute und Set's in Form zu bringen. Dann liefere ich auch meinen Weg der Einrichtung mit.

Viele Grüße
Manfred
FHEM 6.1 Raspberry 4, CUL868+CUL433 auf ESP8266-Basis, FS20, IT-Steckdosen, ESP8266-MQTT, Zigbee, Shelly

mBielemeier

Moin,

ich habe die Beschreibung oben ergänzt und eine aktuelle Version in Github geladen. Prinzipiell funktioniert das Modul schon, Fragen und Abstimmungen gehen auch, die Beschreibung kommt dann morgen.

Viele Grüße,
Manfred
FHEM 6.1 Raspberry 4, CUL868+CUL433 auf ESP8266-Basis, FS20, IT-Steckdosen, ESP8266-MQTT, Zigbee, Shelly

CoolTux

Morgen Manfred,

Nicht wundern wenn keiner antwortet, die meisten lesen still mit. Vielen Dank für Deine Arbeit, ich schaue es mir gerne bei Gelegenheit einmal an.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

#5
Hallo Manfred,

Zitat
  • Das Modul 98_Matrix.pl aus Github in das FHEM-Verzeichnis kopieren und ein device anlegen:
    device matrixBot Matrix <server> myFhemBot <passwort><br>Achtung:Das Passwort ist noch im define sichtbar, ich muss noch lernen wie das in Fhem versteckt wird.
kannst Du Dir im FritzboxModul anschauen ;)
setKeyValue getKeyValue schreibt / liest ein Werte Paar https://wiki.fhem.de/wiki/DevelopmentModuleAPI#setKeyValue

Im FritzboxModul wird zusätzlich noch verschlüsselt.

Gruß Otto[/list]
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux

Zitat von: Otto123 am 03 November 2022, 09:44:20
Hallo Manfred,
kannst Du Dir im FritzboxModul anschauen ;)
setKeyValue getKeyValue schreibt / liest ein Werte Paar https://wiki.fhem.de/wiki/DevelopmentModuleAPI#setKeyValue

Im FritzboxModul wird zusätzlich noch verschlüsselt.

Gruß Otto

Bitte nicht das Fritzbox Modul als Basis nehmen.
Es gibt mittlerweile ein Modul Namens Passwords
https://svn.fhem.de/trac/browser/trunk/fhem/lib/FHEM/Core/Authentication
Das bitte zum Speichern verwenden. Das Gardena Modul oder auch das TeslaPowerwall Modul verwenden das bereits.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Beta-User

Zitat von: CoolTux am 03 November 2022, 14:30:42
Bitte nicht das Fritzbox Modul als Basis nehmen.
Es gibt mittlerweile ein Modul Namens Passwords
https://svn.fhem.de/trac/browser/trunk/fhem/lib/FHEM/Core/Authentication
Das bitte zum Speichern verwenden. Das Gardena Modul oder auch das TeslaPowerwall Modul verwenden das bereits.
Kannst du mal schauen, ob das ggf. Probleme macht, wenn man es im main-Kontext verwendet? Es gab in https://forum.fhem.de/index.php/topic,127724.0.html ein Problem damit, das allerdings auch andere Ursachen haben könnte...

@CoolTux: Hast du Kontakt zu Loredo? Evtl. würde es sich anbieten, das Modul gleich für die Verwendung im MSG-Kontext vorzubereiten bzw. die angrenzenden Arbeiten auch mit zu erledigen. (https://forum.fhem.de/index.php/topic,128285.0.html)

@mBielemeier
Vielleicht schaust du dir mal an, wie man "id"-Anker für die commandref verwendet. Gebe gerne Hilfestellung dazu, ein Beispiel (YAMAHA_AVR) wäre in https://svn.fhem.de/trac/changeset/26596/ zu finden.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

CoolTux

Zitat von: Beta-User am 03 November 2022, 15:05:17
Kannst du mal schauen, ob das ggf. Probleme macht, wenn man es im main-Kontext verwendet? Es gab in https://forum.fhem.de/index.php/topic,127724.0.html ein Problem damit, das allerdings auch andere Ursachen haben könnte...

@CoolTux: Hast du Kontakt zu Loredo? Evtl. würde es sich anbieten, das Modul gleich für die Verwendung im MSG-Kontext vorzubereiten bzw. die angrenzenden Arbeiten auch mit zu erledigen. (https://forum.fhem.de/index.php/topic,128285.0.html)

@mBielemeier
Vielleicht schaust du dir mal an, wie man "id"-Anker für die commandref verwendet. Gebe gerne Hilfestellung dazu, ein Beispiel (YAMAHA_AVR) wäre in https://svn.fhem.de/trac/changeset/26596/ zu finden.

Hallo,

Ich schaue mir Passwords heute Abend noch mal an ob es im main Kontext Probleme geben könnte.
Loredo ist aktuell raus, ob er je wieder kommt kann ich nicht sagen. Wenn was grobes mit seinen Modulen ist Versuche ich weitestgehend zu helfen.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Also bei der Codedurchsicht von Passwords und FRITZBOX ist mir jetzt nichts aufgefallen was zu etwaigen Störungen führen könnte. Heißt natürlich nicht das es dennoch dazu kommen kann. Kann es aber nicht erklären.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

mBielemeier

#10
Moin,
mit Packages zu arbeiten sieht gut aus aber da brauch ich wohl noch eine Lernphase. Password habe ich jetzt in main eingebunden mit der Anleitung aus Password.pm

use FHEM::Core::Authentication::Passwords qw(:ALL);

dann im Define()

our $hash->{helper}->{passwdobj} = FHEM::Core::Authentication::Passwords->new($hash->{TYPE});

Das "our" störte und erzeugte im Log
2022.11.03 20:12:27 1: PERL WARNING: "our" variable $hash masks earlier declaration in same scope at ./FHEM/98_Matrix.pm line 320, <$fh> line 4183.
2022.11.03 20:12:27 1: stacktrace:
2022.11.03 20:12:27 1:     main::__ANON__                      called by ./FHEM/98_Matrix.pm (320)
2022.11.03 20:12:27 1:     (eval)                              called by fhem.pl (2748)
2022.11.03 20:12:27 1:     (eval)                              called by fhem.pl (2747)
2022.11.03 20:12:27 1:     main::CommandReload                 called by fhem.pl (2061)
2022.11.03 20:12:27 1:     main::LoadModule                    called by fhem.pl (2126)
2022.11.03 20:12:27 1:     main::CommandDefine                 called by fhem.pl (1274)
2022.11.03 20:12:27 1:     main::AnalyzeCommand                called by fhem.pl (1125)
2022.11.03 20:12:27 1:     main::AnalyzeCommandChain           called by fhem.pl (1413)
2022.11.03 20:12:27 1:     main::CommandInclude                called by fhem.pl (626)


Aber ohne "our" startete das Modul ohne Fehler. Und auch setStorePassword() und getReadPassword() laufen.

Das neue commandref-Format habe ich glaube ich durchschaut und auch übernommen.

Danke für die Hinweise. Morgen werden dann auch die Aktionen eingebaut.

Viele Grüße
Manfred
FHEM 6.1 Raspberry 4, CUL868+CUL433 auf ESP8266-Basis, FS20, IT-Steckdosen, ESP8266-MQTT, Zigbee, Shelly

mBielemeier

Zitat von: CoolTux am 03 November 2022, 06:14:16
Morgen Manfred,

Nicht wundern wenn keiner antwortet, die meisten lesen still mit. Vielen Dank für Deine Arbeit, ich schaue es mir gerne bei Gelegenheit einmal an.


Grüße
Hallo CoolTux,

ich kenne das, und ich hab in den letzten 3 Jahren im Forum ja auch gerade mal 20 Posts geschrieben. Und die Jahre davor war ich noch nicht mal angemeldet. Immer nur Wissen rausgesaugt  ;)

Viele Grüße
FHEM 6.1 Raspberry 4, CUL868+CUL433 auf ESP8266-Basis, FS20, IT-Steckdosen, ESP8266-MQTT, Zigbee, Shelly

mBielemeier

Moin,

ich habe im Thread-Starter die Beschreibung ergänzt und eine neue Version in Github hochgeladen. Umstellung auf Package hat scheinbar funktioniert und die commandref mit id= ist jetzt auch drin.

Durch die Frage/Antwort-Möglichkeit in Element gibt es fast ein Tastaturfeeling wie bei Telegram. Ich habe als zweiten Chatclient mal Fluffychat getestet, dort sind Umfragen aber nicht sichtbar :( .

Viele Grüße
Manfred
FHEM 6.1 Raspberry 4, CUL868+CUL433 auf ESP8266-Basis, FS20, IT-Steckdosen, ESP8266-MQTT, Zigbee, Shelly

mBielemeier

Moin,
die aktuelle Version auf Github ist jetzt so stabil, dass ich in meiner Installation neben Telegram die gleichen Meldungen per Matrix absetze.

Ich habe die Hinweise hier und im Wiki zum Development versucht umzusetzen merke aber dass mir bei Perl doch noch einiges fehlt. Es gibt also bestimmt noch Verbesserungen. Auch bei der Aufteilung der zu speichernden Daten zwischen Internals, Readings und Attributen bin ich noch am optimieren.

Viele Grüße
Manfred
FHEM 6.1 Raspberry 4, CUL868+CUL433 auf ESP8266-Basis, FS20, IT-Steckdosen, ESP8266-MQTT, Zigbee, Shelly

CoolTux

Hallo Manfred,

Ich hatte schon einmal kurz in Dein Modul geschaut.
Was mir aufgefallen ist, im Modul 98_Matrix.pm steht

package FHEM::Devices::Matrix;

Das ist nicht korrekt. Der Package Name spiegelt den Pfad unterhalb von der Angabe in @INC wieder. Hier also FHEM/98_Matrix.pm.

package FHEM::Matrix;

Wenn ich dazu komme schaue ich die Tage mal etwas intensiver mit Dein Modul an. Der erste Eindruck war aber wirklich gut.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net