Neues Modul für "(Si)gnal - (Si)cherer Messenger" [32_SiSi.pm]

Begonnen von Quantum, 26 Februar 2018, 14:32:42

Vorheriges Thema - Nächstes Thema

phoenix-anasazi

Guten Morgen Simon,

ich habe die alte Version gelöscht und die neue aus dem git reinkopiert. Habe allerdings FHEM auch auf einem Raspi 4 laufen, da musste ich mir signal-cli selber bauen, dass die Unterstützung für die neuen Gruppenfunktionen funktioniert (für was auch immer die gut sind  :D ).

VG
Sascha

memento_10

Danke nochmal @Sascha!

Nach dem Wechsel auf 0.7.4 klappt auch das Empfangen wunderbar!

LG
Simon
FHEM auf Rpi4, OpenWRT auf Netgear Nighthawk, CUL868, FHT80, Tradfri, CUL433, tbot, alexa-fhem, ESP8266, Shelly 1+2, homebridge, Klingelerkennung über ESP, Anwesenheit per OpenWRT

Kohle77

Hi,
mal noch eine blöde Frage. Wenn ich in der FHEM GUI eingebe
Zitatversion 32_SiSi.pm
bekomme ich keine Version angezeigt.
Soll oder ist das so?

Gruß
Christian

BAfH

Guten Morgen,

ich würde auch gerne auf SiSi umsteigen, klingt gut. Mein Problem ist nur, ich nutze FHEM in Docker.
Den Forum Eintrag habe ich gefunden, nur jetzt verlassen mich die Geister, wo ich die Dateien finde.

Meine Docker
Zitat von: Quantum am 12 April 2019, 20:57:24
Hallo drhirn,

leider fehlt mir die Zeit, das Modul offiziell zu betreuen. Sollte sich jemand bereit erklären dies zu übernehmen, hab ich nichts dagegen. Ansonsten ist dies vorerst nicht geplant.

Hallo Axxl,

ich betreibe das Modul schon seit längerem in einem Dockercontainer. Ich nutze dazu den offiziellen Container und leite meinen daraus ab. Kannst dich aus den Dateien bedienen.
Das nachfolgende tut für meine zwecke seinen Dienst. Ist eigentlich nicht für andere bestimmt. Sollte etwas nicht funktionieren, leiste ich für die Dateien keinen support!

Dockerfile:

    ARG BASE_IMAGE="fhem/fhem"
    ARG BASE_IMAGE_TAG="latest"
    FROM ${BASE_IMAGE}:${BASE_IMAGE_TAG}

    ARG L_SIGNAL_CLI="0.6.2"

    # Install base environment
    RUN DEBIAN_FRONTEND=noninteractive apt-get update \
        && DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends \
            cpanminus \
            build-essential \
            wget \
            shared-mime-info \
          dbus \
          default-jre-headless \
          libunixsocket-java \
            lirc \
            net-tools \
            hping3 \
            wakeonlan \
            \
        && cpanm \
          Net::DBus \
          Lirc::Client \
            Crypt::Cipher::AES \
        && rm -rf /root/.cpanm \
        && sed -i s,/dev/lircd,/var/run/lirc/lircd,g /usr/local/share/perl/5.24.1/Lirc/Client.pm \
        && wget https://github.com/AsamK/signal-cli/releases/download/v${L_SIGNAL_CLI}/signal-cli-${L_SIGNAL_CLI}.tar.gz \
        && tar xf signal-cli-${L_SIGNAL_CLI}.tar.gz -C /opt \
        && ln -sf /opt/signal-cli-${L_SIGNAL_CLI}/bin/signal-cli /usr/local/bin/ \
        && apt-get purge -qqy \
            build-essential \
            cpanminus \
            subversion \
        && apt-get autoremove -qqy && apt-get clean \
        && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

    COPY ./src/pre-start.sh /pre-start.sh
    COPY ./src/000_fhem-nopasswd /etc/sudoers.d/
    COPY ./src/org.asamk.Signal.service /usr/share/dbus-1/system-services/
    COPY ./src/org.asamk.Signal.conf /etc/dbus-1/system.d/
    ADD https://raw.githubusercontent.com/Quantum1337/32_SiSi.pm/master/FHEM/32_SiSi.pm /fhem/FHEM/32_SiSi.pm
    RUN mkdir /run/dbus && mkdir /run/lirc
    RUN mkdir /opt/signal-cli && mkdir /opt/lirc
    RUN chmod +x /pre-start.sh

    VOLUME [ "/opt/signal-cli" ]
    VOLUME [ "/opt/lirc" ]


pre-start.sh:

#!/bin/bash
export NUMBER="${NUMBER:-"undef"}"
export SLEEPTIME="${SLEEPTIME:-"10s"}"
export LIRC="${LIRC:-"no"}"

if [ $NUMBER != "undef" ]; then

   if [ -s /var/run/dbus/pid ]; then
      rm /var/run/dbus/pid
   fi
     
   echo "Starting DBus System Daemon"
   dbus-daemon --system --address=unix:path=/run/dbus/system_bus_socket

   echo "Starting signal-cli"
   /usr/local/bin/signal-cli -u $NUMBER --config /opt/signal-cli daemon --system &

   echo "Wait $SLEEPTIME to give signal-cli time to come up"
   sleep $SLEEPTIME
fi

if [ "$LIRC" = "yes" ]; then

   if [ ! -d "/var/run/lirc" ]; then
      mkdir "/var/run/lirc"
   fi
   echo "Starting lircd"
   /usr/sbin/lircd -O /opt/lirc/lirc_options.conf /opt/lirc/lircd.conf
fi



docker-compose:


services:
  fhem:
    image: XXX/fhem:latest
    privileged: true
    restart: always
    network_mode: "host"
    ports:
      - "7072:7072"
      - "8083:8083"
    volumes:
      - "./fhem/data:/opt/fhem/"
      - "./fhem/lirc:/opt/lirc/"
      - "./fhem/signal-cli:/opt/signal-cli"
    devices:
      - "/dev/lirc0:/dev/lirc0"
    environment:
      NUMBER: "+49XXXX
      SLEEPTIME: "5"


Kann mir da jemand einen Tipp geben oder nutzt jemand SiSi in Docker. Oder wie ich wo was ändern müsste.
meine docker-compose.yml    fhem:
        image: fhem/fhem:latest
        restart: always
        ports:
            - "8083:8083"
            - "8084:8084"
            - "7072:7072"
            - "8090:8090"
        volumes:
         - /etc/localtime:/etc/localtime:ro
         - /etc/timezone:/etc/timezone:ro
         - ./fhem/core/:/opt/fhem/
        network_mode: host
#
#        networks:
#            - fhem-network
        devices:
            - "/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0:/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0"
            - "/dev/ttyUSB0:/dev/ttyUSB0"
            - "/dev/ttyUSB1:/dev/ttyUSB1"
        environment:
            FHEM_UID: 1000
            FHEM_GID: 1000
            # User root           
            #FHEM_UID: 0
            #FHEM_GID: 0
            TIMEOUT: 10
            RESTART: 1
            TELNETPORT: 7072
            TZ: Europe/Berlin
        depends_on:
            - "mysql"
            - "mqtt"

Danke und bleibt gesund
Gruß Thorben
mit sonnige Grüße aus Schönow

drhirn


BAfH

Gruß Thorben
mit sonnige Grüße aus Schönow

drhirn

Naja, selber erstellen und den Inhalt von Quantums Post rein kopieren. Damit erstellst du dir dann aber halt ein neues FHEM-Image. Du müsstest deine docker-compose.yml somit entsprechend anpassen.

BAfH

Okay, Danke ich werde es mal im Testsystem durchführen.
Gruß Thorben
mit sonnige Grüße aus Schönow

Init

Zitat von: BAfH am 21 Januar 2021, 09:09:49
Guten Morgen,

ich würde auch gerne auf SiSi umsteigen, klingt gut. Mein Problem ist nur, ich nutze FHEM in Docker.
Den Forum Eintrag habe ich gefunden, nur jetzt verlassen mich die Geister, wo ich die Dateien finde.

Meine Docker
Kann mir da jemand einen Tipp geben oder nutzt jemand SiSi in Docker. Oder wie ich wo was ändern müsste.
meine docker-compose.yml    fhem:
        image: fhem/fhem:latest
        restart: always
        ports:
            - "8083:8083"
            - "8084:8084"
            - "7072:7072"
            - "8090:8090"
        volumes:
         - /etc/localtime:/etc/localtime:ro
         - /etc/timezone:/etc/timezone:ro
         - ./fhem/core/:/opt/fhem/
        network_mode: host
#
#        networks:
#            - fhem-network
        devices:
            - "/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0:/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0"
            - "/dev/ttyUSB0:/dev/ttyUSB0"
            - "/dev/ttyUSB1:/dev/ttyUSB1"
        environment:
            FHEM_UID: 1000
            FHEM_GID: 1000
            # User root           
            #FHEM_UID: 0
            #FHEM_GID: 0
            TIMEOUT: 10
            RESTART: 1
            TELNETPORT: 7072
            TZ: Europe/Berlin
        depends_on:
            - "mysql"
            - "mqtt"

Danke und bleibt gesund

Hallo Thorben,

ich glaube, wir haben gerade ein ähnliches Problem.

Ich versuche auch gerade auf SiSi umzusteigen und habe hierbei div. Probleme.

Hier https://forum.fhem.de/index.php/topic,84996.msg1123368.html#msg1123368 habe ich schon diesbezüglich eine Frage gestellt, aber bislang noch keine Antwort erhalten. Es gibt zurzeit Problme mit dbus.

Und hier https://forum.fhem.de/index.php/topic,89745.msg1123349.html#msg1123349 habe ich noch eine Frage zum Docker-Image gestellt, da ich beim Erstellen des Containers Fehler beim Laden der APT packages habe. Dies ist aber nicht wirklich schlimm, da ich die Paket auch in der pre-start.sh holen kann, wenn diese noch nicht vorhanden sind.

Ich könnte dir folgende Dateien zur Verfügung stellen:

Vielleicht kommst du damit ja weiter als ich.

Mit signal-cli selbst kann ich jedenfalls Nachrichten versenden, aber es gibt halt noch dbus Probleme im Docker-Container.

VG
Marc

xl:bk

Hi Jamo,

ZitatBei mir gehts so mit Zeilenumbruch:

danke dir. Das werde ich bei Gelegenheit mal ausprobieren.
FHEM auf Raspberry PI 3+, Stribel Eltron THZ 403sol Wärmepumpe

mhill

#175
Zitat von: Quantum am 08 März 2018, 22:04:47
hab gerade die Änderungen der letzten Tage gepushed

Neue Features:
-> Senden von Gruppennachrichten
-> Es werden Internals über den Status und den Inhalt der letzten Nachricht gesetzt.

Änderungen:
-> die Bedienung der set Kommandos send|msg|_msg|message wurde verändert. Verhält sich nun ähnlich wie TelegramBot

Bugfixes:
-> GruppenIds werden nun richtig angezeigt

Für nähere Informationen siehe: https://github.com/Quantum1337/32_SiSi.pm

Weitere Wünsche und konstruktive Kritik gerne gesehen !

Freundliche Grüße
Quantum

Zunächst Danke für dieses Modul. Super Arbeit.
Nach den momentanen Sicherheitsbedenken bei Telegram möchte ich auf Signal umsteigen.

Das Einrichten hat mit der Anleitung im WIKI super funktioniert.
Ich habe eine Festnetznummer für FHEM eingerichtet. Damit kann ich auch einwandfrei aus FHEM an ein oder mehrere Nummern Senden, auch mit Anhang.

Jetzt habe ich mit dem Handy eine Gruppe angelegt und die Familie und FHEM eingeladen.

Und hier habe ich
--> Problem 1:  Wie kann ich in FHEM die Gruppe bestätigen? Am Handy ist das ja kein Problem.
Und
--> Problem 2: Wo finde ich die GruppenID

Hier würde ich mir eine Erweiterung des WIKI freuen.

Zum Vollständigen ablösen von Telegram brauche ich noch eine Lösung für SSCam dort können Snapshots direkt durch anlagen des
Attributes   snapTelegramTxt
tbot => teleBot, peers => , subject => Bewegung bei $CAM. Es wurde $CTIME der Schnappschuss $FILE erstellt
mit Telegram versendet werden. Kennt jemand eine Lösung um das dann mit Signal zu tun?

signal-cli ist      Version 0.7.4
32_SiSi.pm ist  Version 1.1.1

Viele Grüße und bleibt alle gesund
Markus


lupoo

#176
Hallo Thorben,

ich nutze selbst SiSi in Docker.
Ich bin zwar noch unerfahren im Forum, aber ich versuche es mal ;-)

Das Dockerfile will folgende Dateien zum Kopieren bereitgestellt bekommen:

COPY ./src/pre-start.sh /pre-start.sh
COPY ./src/000_fhem-nopasswd /etc/sudoers.d/
COPY ./src/org.asamk.Signal.service /usr/share/dbus-1/system-services/
COPY ./src/org.asamk.Signal.conf /etc/dbus-1/system.d/


Zudem ist natürlich die aktuelle Version der signal-cli anzupassen:
ARG L_SIGNAL_CLI="0.7.2"


Die Datei pre-start.sh habe ich ein wenig abgeändert, da ich kein lirc nutze:


#!/bin/bash
export NUMBER="${NUMBER:-"undef"}"
export SLEEPTIME="${SLEEPTIME:-"10s"}"

if [ $NUMBER != "undef" ]; then

   if [ -s /var/run/dbus/pid ]; then
      rm /var/run/dbus/pid
   fi

   echo "Starting DBus System Daemon"
   dbus-daemon --system --address=unix:path=/run/dbus/system_bus_socket

   echo "Starting signal-cli"
   /usr/local/bin/signal-cli -u $NUMBER --config /opt/signal-cli daemon --system &

   echo "Wait $SLEEPTIME to give signal-cli time to come up"
   sleep $SLEEPTIME
fi



Die Datei 000_fhem-nopasswd nutze ich nicht.
Ich habe sie im Dockerfile auskommentiert.


In der org.asamk.Signal.service steht:


[D-BUS Service]
Name=org.asamk.Signal
Exec=/bin/false
SystemdService=dbus-org.asamk.Signal.service
User=root



Einer meiner Fehler war, dass ich in der org.asamk.Signal.conf den user nicht auf root umgestellt hatte.


<?xml version="1.0"?> <!--*-nxml-*-->
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
        "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">

<busconfig>
        <policy user="root">
                <allow own="org.asamk.Signal"/>
                <allow send_destination="org.asamk.Signal"/>
                <allow receive_sender="org.asamk.Signal"/>
        </policy>

        <policy context="default">
                <allow send_destination="org.asamk.Signal"/>
                <allow receive_sender="org.asamk.Signal"/>
        </policy>
</busconfig>



Ein Auszug meiner docker-compose.yml

    fhem:
        container_name: fhem
        restart: always
        ports:
            - "8083:8083"
            - "7072:7072"
        build: fhem
        privileged: true
   
        volumes:
          - /dorfplatz/fhem/:/opt/fhem/
          - /dorfplatz/fhem/signal-cli:/opt/signal-cli

        networks:
            - fhem-network
        environment:
            FHEM_UID: 1000
            FHEM_GID: 1000
            TIMEOUT: 10
            RESTART: 1
            TELNETPORT: 7072
            TZ: Europe/Berlin
            NUMBER: "+49xxxxxxxxxx"
            SLEEPTIME: "5"


Hier noch mein Dockerfile:
ARG BASE_IMAGE="fhem/fhem"
ARG BASE_IMAGE_TAG="latest"
FROM ${BASE_IMAGE}:${BASE_IMAGE_TAG}

ARG L_SIGNAL_CLI="0.7.2"

# Install base environment
RUN DEBIAN_FRONTEND=noninteractive apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends \
        cpanminus \
        build-essential \
        wget \
        shared-mime-info \
        dbus \
        default-jre-headless \
        libunixsocket-java \
        net-tools \
        hping3 \
        wakeonlan \
    && cpanm \
        Net::DBus \
        Lirc::Client \
        Crypt::Cipher::AES \
    && rm -rf /root/.cpanm \
    && wget https://github.com/AsamK/signal-cli/releases/download/v${L_SIGNAL_CLI}/signal-cli-${L_SIGNAL_CLI}.tar.gz \
    && tar xf signal-cli-${L_SIGNAL_CLI}.tar.gz -C /opt \
    && ln -sf /opt/signal-cli-${L_SIGNAL_CLI}/bin/signal-cli /usr/local/bin/ \
    && apt-get purge -qqy \
        build-essential \
        cpanminus \
        subversion \
    && apt-get autoremove -qqy && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

COPY ./src/pre-start.sh /pre-start.sh
#COPY ./src/000_fhem-nopasswd /etc/sudoers.d/
COPY ./src/org.asamk.Signal.service /usr/share/dbus-1/system-services/
COPY ./src/org.asamk.Signal.conf /etc/dbus-1/system.d/
ADD https://raw.githubusercontent.com/Quantum1337/32_SiSi.pm/master/FHEM/32_SiSi.pm /fhem/FHEM/32_SiSi.pm
RUN mkdir /run/dbus
RUN mkdir /opt/signal-cli

VOLUME [ "/opt/signal-cli" ]


Zudem ist es wichtig, dass du bei der Konfiguration der Telefonnummer und anderen "manuellen" signal-cli aufrufen, immer den Operator --config /opt/signal-cli nutzt. z.B.:

signal-cli --config /opt/signal-cli -u <Telefonnummer> verify <VerificationCode>

Ich hoffe, ich konnte dir ein wenig weiterhelfen.

Grüße
Michel

oelkanne

#177
Hallo,

Ich habe ein Problem, mein DOIF zu Sisi zu gestalten. Es gelingt mir nicht, ein Komma oder einen Zeilenumbruch zu generieren.
Habe schon versucht, das Komma zu quoten, in Klammern zu setzten, den Zeilenumbruch mir <br>, mit \n usw. aber nichts geht.
Wie generiere ich den Text am beiliegenden Beispiel?

defmod myNotifications DOIF ([07:30|Mo Di Mi Do Fr] or [08:30|Sa So])\
(set Signal msg @+49173xxxxx  texttext, text text, text zeilenumbruch text text)


Verzweiflung pur!

lupoo

#178
Zitat von: Jamo am 19 Januar 2021, 21:28:44
Hallo xl:bk,Bei mir gehts so mit Zeilenumbruch:

my $menu = "C00 = Schalter0\nC01 = Schalter1\nC02 = Schalter2\nC03 = Schalter3";
fhem('set '.$NAME.' msg @'.$sender.' '.$menu);

liefert im Signal messenger ($NAME durch den Signal device name und $sender durch deine Nummer ersetzten):
C00 = Schalter0
C01 = Schalter1
C02 = Schalter2
C03 = Schalter3


Zitatsignal-cli itself doesn't do any unescaping, you need to pass the newline directly.

https://github.com/AsamK/signal-cli/issues/105


Adimarantis

Hallo,

ich war schon dabei mein eigenes Modul zu schreiben, weil ich nichts gefunden hatte. Nunja - offiziell ist dies ja noch nicht und "Signal" ist leider ein ziemlich übler Suchbegriff.

Da hab ich gleich eine Anregung mitsamt Code für das Thema Gruppen. Diese kryptischen base64 Strings sind ja nicht wirklich benutzerfreundlich. Das erste was ich in meiner Version eingebaut habe, war ein decoding damit man die echten Gruppennamen verwenden kann.

Dazu hole ich mir zuerst die Liste der bekannten Gruppen in speichere diese zwischen. (Müsste man bei der Initialisierung, bei "unbekannte Gruppe" oder per "set" Befehl triggern:
sub Signalbot_Refreshgroups($@) {
    my ( $hash ) = @_;
Log3 $hash->{NAME}, 5, "Signalbot Refreshgroups called ";
my $bus = Net::DBus->system; #

my $service = $bus->get_service("org.asamk.Signal");
my $object = $service->get_object("/org/asamk/Signal");
my $grouplist="";
my $ret = $object->getGroupIds();
my @groups = @$ret;
foreach (@groups) {
my @group=@$_;
my $groupname = $object->getGroupName(\@group);
$hash->{helper}{groups}{$groupname}=join(" ",@group);
Log3 $hash->{NAME}, 5, "found group ".$groupname;
$grouplist=$grouplist." ".$groupname;
}
readingsSingleUpdate($hash, 'groups', $grouplist,0);
}


Jetzt enthält sowohl das Helperobject versteckt eine Liste der Gruppenids mit Echtnamen, sowie ein sichtbares Reading zeigt dem Anwender an in welchen Gruppen er ist. Die Liste wird als string mit Leerzeichen-separierten ints gespeichert, was ich am einfachsten zu handeln fand.

Bevor dann die eigentliche Nachricht verschickt wird, wird die Liste durchsucht ($rec enthält den Gruppennamen im Klartext):
my @arr="";
my $group=$hash->{helper}{groups}{$rec};
if (defined($group)) {
@arr=split(" ",$group);
} else {
#Automatically refresh and try again?
return "Unknown group ".$_." please check or refresh group list";
}


Dann entsprechend sendMessage mit \@arr

Und schon wird das ganze gleich viel Benutzerfreundlicher :)

Sonst bin ich mit meinem Versuch nicht signifkant über das Versenden von Nachrichten rausgekommen und beim Callback für die Receive messages steckengeblieben. Ich hatte da auch schon ein forking in Erwägung gezogen, weil es wohl ohne $reactor->run() nicht funktioniert, das aber FHEM angehalten hätte.

Ich hab übrigens gleich einen Stacktrace gekriegt, da ich den defaultPeer nicht gesetzt hab:
2021.01.24 17:32:12 1: PERL WARNING: Use of uninitialized value in split at ./FHEM/32_SiSi.pm line 143.
2021.01.24 17:32:12 1: stacktrace:
2021.01.24 17:32:12 1:     main::__ANON__                      called by ./FHEM/32_SiSi.pm (143)
2021.01.24 17:32:12 1:     main::SiSi_Set                      called by fhem.pl (3813)
2021.01.24 17:32:12 1:     main::CallFn                        called by fhem.pl (1919)
2021.01.24 17:32:12 1:     main::DoSet                         called by fhem.pl (1951)
2021.01.24 17:32:12 1:     main::CommandSet                    called by fhem.pl (1251)
2021.01.24 17:32:12 1:     main::AnalyzeCommand                called by ./FHEM/01_FHEMWEB.pm (2721)
2021.01.24 17:32:12 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (991)
2021.01.24 17:32:12 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (596)
2021.01.24 17:32:12 1:     main::FW_Read                       called by fhem.pl (3818)
2021.01.24 17:32:12 1:     main::CallFn                        called by fhem.pl (759)


Ich hab da noch paar andere Ideen, muss mir aber erstmal in Ruhe anschauen, was so alles schon implementiert ist.

Gruß
Jörg

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