Text2Command Telegram Bilder Überwachungskameras

  • Hallo in die Runde,

    bin gerade auf Text2Command gestossen und finde es eine coole Sache!

    Lampen schalten und Temperatur abfragen funktioniert schon mal sehr gut

    mit Telegram. Jetzt würde ich gerne in Telegram den Befehl "Fotos" senden

    und als Ergebnis einen Snapshot der beiden Überwachungskameras erhalten.

    Kann mir evtl jemand helfen, wie ich sowas realisieren kann? Die beiden Kameras

    hängen an zwei Raspberry Pi Zero W mit MotionEyeOS. Die Url für den Snap ist mir

    bekannt. Weiss leider nur nicht wie ein Skript ausschauen muss, um damit die Fotos

    in Telegram angezeigt zu bekommen.

    Danke schon mal für eure Zeit

    Mfg

    der-eine :)

  • Hier mal ein schneller Entwurf funktioniert aber:

    Neues Script anlegen (JavaScript) mit folgenden Inhalt:

    Code
    createState("javascript.0.webcam", 0); // Generiert beim starten den Datenpunkt, wenn nicht vorhanden
    
    on({
        id: "javascript.0.webcam",
        change: 'any'
    }, function(obj) {
    sendTo('telegram', 'http://smarthome.schimmer-media.de/images/styleLogo-7e7227f5904855ffafe6d1e8704cccd620ecc72a.png');
    });

    Die URL vom Code gegen deine Snap URL tauschen, und im Text2Command Adapter eine neue Regel erstellen.

    schimmer-media.de/attachment/2533/

    schimmer-media.de/attachment/2534/

  • Guten Morgen TeNNo2k5

    danke für die schnelle Antwort! Das Skript läuft aber ich bekomme nur den link geschickt von der

    Snapshot-URL und darauf wenn ich klicke erst das Bild. Weisst Du woran das liegen kann?

    Kann es sein, dass das Bild erst gespeichert werden muss um es danach zu verschicken?

    Danke und Gruß

  • Ok das Problem ist das die URL nicht direkt auf ein Bild verweist, da ich nicht weiß wie MotionEyeOS das Bild generiert wird es schwierig, aber du kannst es mal so probieren vorausgesetzt es wird nur ein Bild auf der HTML Seite generiert:

    Code
    createState("javascript.0.webcam", 0); // Generiert beim starten den Datenpunkt, wenn nicht vorhanden
    
    on({
        id: "javascript.0.webcam",
        change: 'any'
    }, function(obj) {
        exec('su pi -c "wget https://loremflickr.com/320/240 -O webcam.jpg -nd -A jpeg,jpg,bmp,gif,png"');
        sendTo('telegram', '/home/pi/webcam.jpg');
    });

    @homecineplexx vielleicht hilft das dir auch bei deiner Hikam A7 weiter.

    Wer mag kann das Script auch so verwenden um sich verschiedene Katzen Bilder per Telegram zusenden zu lassen ;) (Ich bin kein Katzen Fanatiker, das war nur der erste Treffer bei Google für Random Images)

    schimmer-media.de/attachment/2538/

    PS: Damit das Skript funktioniert muss in der Javascript Adapter Konfiguration das „exec“ Kommando erlaubt werden.

  • Hallo TeNNo2k5

    sieht jetzt wie folgt aus

    Mit diesem Skript schicke ich mir beim betätigen der Haustürklingel ein Bild über Telegram und es funktioniert. Kann es leider nicht alleine umbauen. Kannst Du evtl was damit anfangen? Leider finde ich den Post nicht mehr wo ich es rauskopiert habe und kann leider den Autor nicht loben! Hoffe es ist ok dies hier zu posten!? Danke für deine Arbeit!

    Hätte auch noch eine Frage und zwar, wie ändere ich den Namen im Skript oidBewmelderTuer in einen für mich passenden? Kann ich hier im Feld wo die URL der ersten Kamera angegeben ist auch gleich die zweite URL eingeben um beide Fotos gleichzeitig zu bekommen also getrennt durch "http://...; "http://...";

    Danke und Gruß

  • Hallo der-eine,

    Ich interpretiere durch den Screenshot das mein Script nicht funktioniert hat, die Snap URL sollte aber definitiv nicht per Telegram mitgesendet werden da scheint sich ein Fehler in der Anpassung des Scriptes eingeschlichen zu haben.

    - Hast du im Script auch nur dir URL also "https://loremflickr.com/320/240" durch deine Snap URL ersetzt?

    - Das „exec“ Kommando hast du im Javascript Adapter erlaubt?

    - Ich bin jetzt einfach mal davon ausgegangen das dein iobroker auf einem Raspberry PI installiert ist, ist dies korrekt?

    Zu dem Java Script:

    - Die Bezeichnung „oidBewmelderTuer“ finde ich im Script nicht, ich denke mal du meinst die Konstante „oidLichtBewmelderTuer“ wenn du den Namen ändern möchtest, sollte es reichen Ihn im Script überall dort zu ändern wo er vorkommt damit der Verweis funktioniert, in diesem Fall also zweimal, bitte aber keine Leerzeichen und Umlaute verwenden!

    - Wegen der zweiten URL denke ich das es nicht möglich ist, dieses Script kann ich dir leider auch nicht dafür anpassen da ich nur sehr wenig Kenntnis von Java Script habe, eventuell kann ein anderer User aus dem Forum hierbei helfen.

    Gruß

    TeNNo2k5

  • Hallo TeNNo2k5 ,

    Ja, richtig interpretiert. Leider funktioniert es nicht. Habe das exec Kommando aktiviert.

    Das ist richtig. IOBroker läuft auf einem RasPi 3B +.

    Genau diesen meinte ich. Hab ihn jetzt auch angepasst. Danke dafür.

    Hab das Skript nochmal neu erstellt und nur nach wget die URL zwischen den beiden “ “ geändert.

    Evtl meldet sich ja noch jemand der mir weiter helfen kann. Danke für Deine Hilfe!

    Gruß

    der-eine

  • Hallo, kommen hier nicht weiter:

    Als erstes hatte ich versucht:

    createState("javascript.0.webcam", 0); // Generiert beim starten den Datenpunkt, wenn nicht vorhanden

    on({

    id: "javascript.0.webcam",

    change: 'any'

    }, function(obj) {

    sendTo('telegram', 'http://192.168.1.150/oneshotimage.jpg');

    });

    Hier geschied aber nichts. Wenn ich den link aus dem Beispiel nehme bekomme ich aber das Bild.

    Im Browser und mit wget bekomme ich aber das Bild aber ohne Probleme.

    Als nächstes habe ich folgendes probiert aber leider auch nur mit Teilerfolg:


    createState("javascript.0.webcam", 0); // Generiert beim starten den Datenpunkt, wenn nicht vorhanden

    on({

    id: "javascript.0.webcam",

    change: 'any'

    }, function(obj) {

    exec('wget -O /tmp/oneshotimage.jpg "http://192.168.1.150/oneshotimage.jpg"');

    sendTo('telegram', '/tmp/oneshotimage.jpg');

    });

    Er legt das File unter /tmp an sendet es aber nicht. Wer eine Idee?

  • Hast du bei der Instanz Javascript unter den Einstellungen "sendToHost" aktiviert/erlaubt?

    Die letzten Worte vor dem Weltuntergang: "...das ist technisch völlig unmöglich..."

    aktuelle Projekte: <<< Magic Mirror +++ RMS +++ Wetterstation +++ Somfy Fernbedienung >>>

  • Bin schon weiter.

    Also

    exec('wget -q -O /tmp/oneshotimage.jpg "http://192.168.1.150/oneshotimage.jpg"');

    ohne sendTo('telegram', '/tmp/oneshotimage.jpg'); geht und

    sendTo('telegram', '/tmp/oneshotimage.jpg'); ohne

    exec('wget -q -O /tmp/oneshotimage.jpg "http://192.168.1.150/oneshotimage.jpg"');

    geht auch,

    nur nicht

    exec('wget -O /tmp/oneshotimage.jpg "http://192.168.1.150/oneshotimage.jpg"');

    sendTo('telegram', '/tmp/oneshotimage.jpg');

    zusammen.

    Fehlt da noch was ?

  • Eigentlich nicht und dein allererster Ansatz war auch schon richtig.

    Ev. hat er bei der zweigeteilten Version die JPG noch im Zugriff und verweigert einfach einen weiteren.

    Versuche es mal mit einem TimeOut:

    Code
    createState("javascript.0.webcam", 0); // Generiert beim starten den Datenpunkt, wenn nicht vorhanden
    
    function test() { sendTo('telegram', '/tmp/oneshotimage.jpg'); }
    
    on({ id: "javascript.0.webcam", change: 'any' }, function(obj) {
    exec('wget -O /tmp/oneshotimage.jpg "http://192.168.1.150/oneshotimage.jpg"');
    setTimeout(test, 3000); // 3000ms = 3 Sekunden Verzögerung
    });

    Die letzten Worte vor dem Weltuntergang: "...das ist technisch völlig unmöglich..."

    aktuelle Projekte: <<< Magic Mirror +++ RMS +++ Wetterstation +++ Somfy Fernbedienung >>>

  • Ich hab das ganze jetzt mal nachgestellt, wenn ich den gleichen Code nehme wie CyAltec Ihn verwendet hat funktioniert der Bild versand via Telegram nicht.

    Mit der TimeOut Anpassung von SBorg funktioniert es.

    Ich denke mal das Problem liegt hier bei dem verwendeten /tmp Ordner, da mein Script wenn es im Home Verzeichnis mit normalen Rechten (Pi User) ausgeführt wird ohne Timeout funktioniert.

  • Habe mich mal noch etwas belesen und es ist tatsächlich (fast) so. Ob das Script so funktioniert hängt hauptsächlich vom Rechner und der Umgebung ab und ist "Glückssache".

    "exec" ist kein echter Javascript-Befehl, nur eine Implementierung für den Broker wie bspw. setState usw.

    "exec" liefert einen Callback, also ein Ergebnis/Output des ausgeführten Befehls. Wenn man den Callback nicht benutzt, startet "exec" und der Befehlsprozessor läuft sofort weiter und will dann hier mit "sendTo" weitermachen. Ggf. ist aber "exec" noch nicht fertig und hat das Bild erzeugt, also hat sendTo auch nix zum schicken...

    Das wird durch den zusätzlichen Timeout verhindert, oder man nutzt bei "exec" einfach den Callback, dann wird erst "exec" kpl. verarbeitet bis der nächste Befehl ausgeführt wird :)

    Die letzten Worte vor dem Weltuntergang: "...das ist technisch völlig unmöglich..."

    aktuelle Projekte: <<< Magic Mirror +++ RMS +++ Wetterstation +++ Somfy Fernbedienung >>>

  • Super danke ja war das Timeout habe mir sowas schon fast gedacht.

    Bin beim iobroker noch am anfang. Komme von Fhem. Da ist das ganze ein wenig anders.

    Danke an alle

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!