ein einzeiler - fhem bot in der matrix

Begonnen von the ratman, 09 November 2026, 09:22:30

Vorheriges Thema - Nächstes Thema

the ratman

grüß euch.
ich habe wieder mal meinen haus- und hof-programmierer genötigt, mir was schönes zu basteln. vielleicht kann's ja noch wer brauchen.

ich wollte eine unabhängige möglichkeit, informationen an mein handy zu senden. angeboten hat sich die matrix. da gibts zwar schon module für, aber ich fand adolars (dies ist mein haus- und hof-programmierer *g*) lösung so herrlich einfach und unabhängig, dass ich sie euch nicht vorenthalten möchte.

1) wir brauchen einen raum in der matrix, der nicht end-zu-end verschlüsselt ist, und schreiben dessen raum-id (einstellungen - erweitert) für zukünftige untaten auf.

dazu gibt's einen stolperstein:
räume mit version < v12 haben immer einen server in der raum-id: %21RAUM-ID%3Amatrix.org
räume ab v12 haben nur eine raum id: %21RAUM-ID
bei einem raum, muss das "!" der originalen raum-id für gleich folgendes durch ein "%21" ersetzt werden!

2) wir brauchen einen bot. also wird ein neuer user angelegt, und vorzugsweise in obigen raum eingeladen.

3) in einer linux console wird nun folgender befehl abgesetzt:
jq -n --arg u 'USERNAME' --arg p 'PASSWORD' '{type:"m.login.password",identifier:{type:"m.id.user",user:$u},password:$p,initial_device_display_name:"FHEM"}' | curl -sS -X POST https://matrix.org/_matrix/client/v3/login -H "Content-Type: application/json" -d @-USERNAME und PASSWORD durch die daten des bots ersetzen
eventuell ist ein "sudo apt -y install jq" nötig

als ausgabe muss in etwas folgendes kommen:
{"access_token":"ACCESS_TOKEN","device_id":"xxxx","user_id":"@username:matrix.org"}
4) wir haben nun also eine raum-id und einen access_token, die wir in folgendes alias eintragen:
defmod mbot cmdalias mbot .* AS {HttpUtils_NonblockingGet({url=>"https://matrix.org/_matrix/client/v3/rooms/ROOM-ID/send/m.room.message/".time().int(rand(1e6)),method=>"PUT",timeout=>10,header=>"Authorization: Bearer ACCESS_TOKEN\r\nContent-Type: application/json",data=>toJSON({msgtype=>"m.text",body=>"$EVENT"}),callback=>sub($$$){} });;return ''}
das wars auch schon. ab nun müsste ein befehl "mbot was auch immer ich will" im matrix raum als "was auch immer ich will" erscheinen.
→do↑p!dnʇs↓shit←