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/matrixUnd 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]
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/ (https://matrix.org/faq/)
OT und dennoch passend: eine Übersicht an Messangern und deren Eigenschaften: https://www.messenger-matrix.de/ (https://www.messenger-matrix.de/)
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
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
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 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]
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.
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 (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.
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
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.
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
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
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
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
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
Hallo CoolTux,
danke für die ausführlichen Anregungen im Github. Ich habe alles übernommen.
Jetzt bin ich am Grübeln mit den packages: kommen 98_Matrix.pl und /lib/FHEM/Devices/Matrix/Matrix.pl in das gleiche package oder ist vorgesehen, dass jede Datei ein eigenes package bekommt?
Viele Grüße
Manfred
Hallo Manfred,
Ich habe schon gelesen. Nicht jede Datei bekommt ihr eigenes Package, sondern jedes Modul bekommt im normal Fall sein eigenes package. Das ist keine pflicht, aber in der Perl Welt seit Jahren Gang und Gebe.
Ausserdem sagt man das ein Modul immer eine Datei ist. Also steht dem zu Folge dann am Ende doch wieder jede Datei bekommt ein package. Dein package package FHEM::Matrix; für die Datei lib/FHEM/Devices/Matrix/Matrix.pm past also nicht. Hier muss tatsächlich package FHEM::Devices::Matrix; hin
Zitat von: Beta-User am 03 November 2022, 15:05:17
@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)
Bin ich dran.
Ich habe das Matrix etwas überarbeitet und meine Arbeiten Manfred zukommen lassen. Er wird sicherlich etwas brauchen bis er es in seinen master branch führt.
Moin,
ich war leider 3 Wochen ausgefallen und musste jetzt erst mal die Arbeit im Job erledigen. Danke dass du dich so intensiv damit beschäftigst und ich dadurch das Gefühl bekomme, wie FHEM-Module intern arbeiten.
Jetzt habe ich die Änderungen eingelesen. Mein Merge sagte allerdings 497 Änderungen in client.pm die ich jetzt nicht einzeln kontrolliert habe. Ich aktiviere die neue Version in meinem Testsystem und werde sie testen.
Viele Grüße, Manfred
Dadurch das ich viel von Deinem Code in einzelne kleine Funktionen ausgelagert habe kommen wohl die vielen Änderungen zu stande.
Hallo,
arbeitet Ihr im Hintergrund noch an diesem Modul oder ist es vorläufig eingestellt?
Ich habe mir die Datein von GitHub installiert, bekomme aber beim define immer nur "unknown modul Matrix" als Antwort.
Die Datei sind auch viel größer als in der "controls_Matrix.txt" steht.
Wenn ich die 70_Matrix.pm mit nano lese gibt es keine Zeilenumbrüche, alles steht in einer Zeile.
Ich fange gerade mit Matrix an. Der Server läuft und dieses Modul wäre jetzt das Nice-to-have.
Gruß
Volker
Hallo Volker,
Du kannst in FHEM Web ein
update add https://git.cooltux.net/FHEM/mod-matrix/raw/branch/dev/controls_Matrix.txt
Dann ein
update
Danach ein
shutdown restart
Und dann die Definition
Vielen lieben Dank.
So funktioniert es.
;D
Oh, da habt ihr aber etwas feines gebastelt. Dafür ein herzliches Dankeschön. 💟👍
Ich kann Nachrichten in einen Raum senden und daraus empfangen. Mehr brauche ich (eigentlich ;D ) nicht.
Kann mir noch jemand erklären, wie das mit den Fragen (matrixQuestion_ ) und Antworten (matrixAnswer_ ) funktioniert? Ich habe gelesen wie ich sie anlege, aber nicht verstanden, wie ich die dann verschicke.
Gruß
Volker
Das kann Dir nur der Manfred (mBielemeier) so richtig beantworten.
Zitat von: CoolTux am 09 Dezember 2023, 07:48:31Das kann Dir nur der Manfred (mBielemeier) so richtig beantworten.
Oder mensch schaut einfach nochmal genau in die Device-Hilfe *facepalm*
Fragen funktionieren also auch ;D
Die Setlist ist nicht ganz vollständig. Laut Device-Help sollten da mehr Einträge drin stehen.
Hi, ich bin gerade auf der Suche nach einer Möglichkeit, Telegram durch Matrix abzulösen, auf diesen Thread gestoßen. Ich habe mal in den Code geschaut - sehe ich es richtig, dass man mit diesem Modul keine Dateien (Fotos/Grafiken) verschicken kann?
Gruß, Christian
Das siehst Du richtig.