IPS und Whatsapp

Also bei mir scheiterts leider immer noch schon beim senden.

Wenn ich hiermit sende

//Config Script ermitelln
$SELF = IPS_GetObject($IPS_SELF);
$ID_Config = $SELF['ParentID'];
$DateiNa_Config = IPS_GetScriptFile($ID_Config);

include($DateiNa_Config);
require $Whatsapi;


$w = new WhatsProt($userPhone, $userName, $debug);
$w->Connect();
$w->LoginWithPassword($password);

$w->pollMessage();
$msgs = $w->GetMessages();


$to = '4917xxxxxxxx';
$txt = "test";


$w->sendMessage($to,$txt );

bekomme ich immer ein

Fatal error:  Call to undefined function socket_create() in C:\IPS2\scripts\src\whatsprot.class.php on line 480
Abort Processing during Fatal-Error: Call to undefined function socket_create()
   Error in Script C:\IPS2\scripts\src\whatsprot.class.php on Line 480

Das passiert auch mit meinen „alten“ Scripten.
Wo liegt da der Hund begraben?

Hat es da evtl. mal eine neuere whatsprot.class.php gegeben?

Danke u. Grüße,
Doc

Hallo Doc,

ich arbeite mit der Whatapp-Api vom 26.10.2015. Funktioniert mit dem Senden einwandfrei. Bilder, Texte alles kein Problem.
Nur das Empfangen macht mir Kopfzerbrechen. Ich krieg den Body einfach nicht entschlüsselt.

Hallo jevico,

wie ich sehe arbeitest Du mit events beim Empfang der Nachrichten. Ich sehe aber in deinen Scripten nicht wo du den Eventmanager einschaltest. Hab das auch schon versucht. Aber aus irgend einem Grund springt er nicht in die Funktionen beim Empfang hinein. Z. B. wird das onMessage nie ausgeführt.:mad:
Kannst du mir doch ein paar Tipps geben?

Hallo Normi,

kannst du mir dein komplettes Script zum Senden und dein src Verzeichnis zur Verfügung stellen, damit ich das mal testen kann.
Ich weiss immer noch nicht, ob ich wirklich ein Problem mit dem Script oder mit WA selber habe.

Danke u. Grüße,
Doc

Hallo normi,

ich rufe das Script einfach über einen Timer alle 5 Sekunden auf. Es werden dann die Nachrichten abgeholt. Wenn eine da ist, springt er in die onMessage Methode.

WhatsAPI-master.rar (920 KB)

Hallo jevico,

dein Verarbeitungsscript bekomme ich nicht ans laufen. ich denke da sind noch einige Sachen unklar, z.B. HelperFunctions usw.

Mit deiner whatsprot.class.php funktioniert aber das Senden von Nachrichten wieder.
Somit müssen die Zugangsdaten stimmen.
Beim Empfangen wird auch die Nummer ausgewertet aber der Body wird nur leer aktualisiert.

Siehst du da evtl. den Grund im Script. Habe das mal mit deinem verglichen, kann aber keine Ursache dafür finden.

//Config Script ermitelln
$SELF = IPS_GetObject($IPS_SELF);
$ID_Config = $SELF['ParentID'];
$DateiNa_Config = IPS_GetScriptFile($ID_Config);

include($DateiNa_Config);
require $Whatsapi;


$w = new WhatsProt($userPhone, $userIdentity, $userName, $debug);
//$w = new WhatsProt($userPhone, $userName, $debug);
$w->Connect();
$w->LoginWithPassword($password);

$w->pollMessage();
$msgs = $w->GetMessages();

//Arary zerlegen
if( !empty( $msgs ) )
{

    foreach($msgs as $m){
       $attri = $m->getAttributes();
       $from = str_replace("@s.whatsapp.net", "",$attri['from']);
       $time = date("m/d/Y H:i",$attri['t']);
       foreach (($m->getChildren()) as $child) {
               if (($child->getTag()) == "body")
                    {
                         //Nachricht auslesen und Großschreibung entfernen
                   $body = strtolower($child->getData());
               }
               else if (($child->getTag()) == "notify")
                    {
                   $name = $child->getAttribute('name');
               }
        }
    }


    SetValueString($ID_Temp_Nr, $from);
    SetValueString($ID_Temp_Mess, $body);

    //Config Switch
    $Ret = Antwort($body);
    //Sende Array
    //0 = Text Nachricht
    //1 = Antort Nummer
    //2 = Foto Senden TRUE FALSE
    //3 = Ort des Fotos
    //Antworten
    if ($Ret[1] == $from)
    {
      $w->sendMessage($Ret[1], $Ret[0]);
      if ($Ret[2] == True)
      {
         $URL = $w->uploadFile('D:\Current.jpg');
         echo $URL;
         $w->sendMessageImage($Ret[1], $URL, false);

      }
    }


}

Grüße,
Doc

Hi Doc,

ich habe das selbe Problem. Senden kann ich, aber empfangen funktioniert nicht.
Bei mir wird die Nachricht, welche ich vom Smartphone gesendet habe, nicht mal als gelesen gekennzeichnet. Der Status „zul. online“ wird aber aktualisiert sobald ich pollMessage ausführe.
Woran kann das liegen? Vor einigen Tagen sah ich wenigstens die blauen Häkchen noch als Bestätigung dass die Nachricht gelesen wurde. Aber nicht mal das kommt. :mad:

Hey,

Hatte das gleiche Problem, hast du mal einen Ort oder ein Bild an die Nummer geschickt?
Das hängt dann in der Warteschleife Sodas IPS die neuen Nachrichten nicht abrufen kann.

Ich habe denn Account Komplett gelöscht (per Handy WhatsApp )und dann Neu angelegt über WART.

Musst allerdings etwas warten einen Tag oder so, damit du ihn neu Registrieren kannst oder ne andere Nummer nehmen.

Danach Klappte es Problemlos wieder bei mir.

LG
Sven

Hier einmal mein Script in Anhang. Der IPS_Sleep Befehl verhindert das Nachrichten Gar nicht oder Doppelt abgeholt werden, und die Doppelten Empfangshaken sind auch viel zuverlässiger.

LG
Sven


<?
//Whatsapp Einstellungen
$userPhone        = '';      //Handynummer ohne + einfach 4917...
$userIdentity     = '';    //Imei Nummer
$userName         = 'IPS Home';               //User Name
$password         = '';   //Passwort Whatsapp per WART Herausfinden
$debug            = false;
////////////////////////

//Variablen
$ID_Temp_Mess = 39286 /*[WhatsAPP\Massage]*/ ; //ID der Zwischenspeichers(String)
$ID_Temp_Nr = 23345 /*[WhatsAPP\Nummer]*/ ; //ID der Zwischenspeichers(String)

//Whatsapi Speicherotz
$Whatsapi = 'C:\IP-Symcon\scripts\src\whatsprot.class.php';
require $Whatsapi;


$w = new WhatsProt($userPhone, $userIdentity, $userName, $debug);
$w->Connect();
$w->LoginWithPassword($password);

$w->PollMessage();
IPS_Sleep(200);
$msgs = $w->GetMessages();
//Arary zerlegen
if( !empty( $msgs ) ) {

    foreach($msgs as $m){
       $attri = $m->getAttributes();
       $from = str_replace("@s.whatsapp.net", "",$attri['from']);
       $time = date("m/d/Y H:i",$attri['t']);
       print_r ($m->getChildren());
       foreach (($m->getChildren()) as $child) {
               if (($child->getTag()) == "body")
                    {
                         //Nachricht auslesen und Großschreibung entfernen
                   $body = strtolower($child->getData());
               }
               else if (($child->getTag()) == "notify")
                    {
                   $name = $child->getAttribute('name');
               }
        }
    }


    SetValue($ID_Temp_Nr, $from);
    SetValue($ID_Temp_Mess, $body);

}





?>

Hallo Doc,

wie schon Sven geschrieben hat, dachte ich mir, dass es was mit der Registrierung zu tun hat. Also habe ich noch mal mein BlueStack angeworfen. Dort sagte mir WhatsApp, dass ich mich neu registrieren muss, da ich wohl auf einem anderen Handy (IPS :rolleyes:) registriert bin. Also habe ich das gemacht. Den ganzen Zirkus mit zusenden einer SMS, (was ja bei Festnetz nicht geht) dann ruft WhatsApp aber an und ich konnte mich aktivieren. Getestet in BlueStack funktioniert.

Nun über WART das Passwort extrahieren und in die Scripte eintragen. Die letzten Scripte, welche ich verwendetet waren die von jevico, samt zugehöriger WhatsApi-master. Leider funktionierte es damit nicht. Nun reaktivierte ich meine letzte API und siehe da es geht :D. Hier mal meine einfachen Scripte zum senden und empfangen, ohne Auswertung u.s.w. sowie die API, welche ich verwende. Ich hoffe es klappt bei Dir.

Sendescript



$userPhone        = '49*************';                          //Festnetznummer + einfach 4917...
$userIdentity     = '%e9%10%f7%c4%95a%007%ce%aec%8b%fb%2c%85xo%0eq%10';    //Imei Nummer
$userName         = 'IPS Home';                           //User Name
$password         = 'I4hL5EGhXSrIgyOq***********';   //Passwort Whatsapp per WART Herausfinden
$debug            = false;
$to                     = "491********8";
$cam_Einfahrt     = 45487 /*[Webcams\Snapshots\Einfahrt\Einfahrt]*/;      // Objekt-ID der Webcam in der Einfahrt
$cam_Kueche       = 54296 /*[Webcams\Snapshots\Küche\Image]*/;      // Objekt-ID der Webcam in der Küche
require 'C:\IP-Symcon\scripts\whatsappapi2\whatsprot.class.php';
require 'C:\IP-Symcon\scripts\Whatsappapi2\events\MyEvents.php';

    $whatsapp = new WhatsProt($userPhone, $userName, $debug);    
    $whatsapp->Connect();    
    $loginResult = $whatsapp->LoginWithPassword($password);

     //Sende eine Textnachricht mit Smiley     
$whatsapp->sendMessage( $to,  "Event ausgel\xc3\xb6st \xF0\x9F\x98\x84  \xF0\x9F\x91\x8D");
     //sende ein Kamerabiled    
$image = IPS_GetMedia($cam_Kueche);  // Bild von der Kamera holen    
 $imagePath = "../".$image['MediaFile'];   
$whatsapp->sendMessageImage($to, $imagePath);        //Video senden   
$videoPath="C:\IP-Symcon\webfront\user\webcam\Kueche\Kueche.avi";    
$whatsapp->sendMessageVideo($to, $videoPath, false);


Empfangsscript


$userPhone        = '49*************';                          //Festnetznummer + einfach 4917...
$userIdentity     = '%e9%10%f7%c4%95a%007%ce%aec%8b%fb%2c%85xo%0eq%10';    //Imei Nummer
$userName         = 'IPS Home';                           //User Name
$password         = 'I4hL5EGhXSrIgyOq***********';   //Passwort Whatsapp per WART Herausfinden
$debug            = false;



require 'C:\IP-Symcon\scripts\whatsappapi2\whatsprot.class.php';
require 'C:\IP-Symcon\scripts\Whatsappapi2\events\MyEvents.php';




function onMessage($mynumber, $from, $id, $type, $time, $name, $body)
    {
    print_r( "Message from $name:
$body

");
    SetValueString(33768 /*[Scripte\WhatsApp\receive-message\empf_Nr]*/, $name);
    SetValueString(42656 /*[Scripte\WhatsApp\receive-message\empf_Message]*/, $body);
    }


function onImage($mynumber, $from, $id, $type, $time, $name, $size, $url, $file, $mimetype, $filehash, $width, $height, $preview)
    {
    //print_r( "Message from $name:
$ $url $preview 

");
     SetValueString(35412 /*[Scripte\WhatsApp\receive-message\empf_image]*/, '<img src="'.$url.'">');
    }




$w = new WhatsProt($userPhone, $userName, $debug);
//$w = new WhatsProt($userPhone, $userIdentity, $userName);
//$w = new WhatsProt($userPhone, $userName, $debug);
$events = new MyEvents($w);
//$events->setEventsToListenFor($events->activeEvents); //You can also pass in your own array with a list of events to listen too instead.
$w->eventManager()->bind("onGetMessage", "onMessage");
$w->eventManager()->bind("onGetImage", "onImage");
$w->connect();
$w->loginWithPassword($password);
$w->pollMessage();
//$msgs = $w->getMessages();
//$w->pollMessage();
$w->getMessages();



whatsappapi2.zip (610 KB)

Hey Normi,

Habe grade mal die Arbeit gemacht und deine Scripts in der Aktuellen IPS Version 4.0 ausprobiert mit der Aktuellen Chat-API-master.
Funktioniert problemlos, allerdings musste ich einige PHP Extensionen Aktualisieren.

Allerdings bekomme ich beim Bilder Verschicken eine Fehler Meldung evtl. weißt du ja Abhilfe :confused::rolleyes:


<br />
<b>Warning</b>:  fsockopen(): unable to connect to ssl://mmi267.whatsapp.net:443 (Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?) in <b>C:\IP-Symcon\scripts\src\mediauploader.php</b> on line <b>9</b><br />
<br />
<b>Warning</b>:  fwrite() expects parameter 1 to be resource, boolean given in <b>C:\IP-Symcon\scripts\src\mediauploader.php</b> on line <b>11</b><br />

PS: Wusste gar nicht das WhatsApp die Bilder im netz Speichert :eek:

LG
Sven

Moin Sven!

Echt? Du solltest mal die AGB lesen :smiley: Da steht -frei erzählt- drin, dass WhatsApp sowohl mit deinen Texten als auch Bildern machen kann was sie möchten. Inklusive weiter verbreiten oder auch bearbeiten und verbreiten usw. usw. :smiley:

Also ALLES was du im WhatsApp machst/schreibst/sagst/… steht WhatsApp zur freien Verfügung und darf damit machen was es will :smiley:

Und bzgl. Bilder online speichern merkt man wunderbar daran, wenn man z.B. ein großes Bild oder ein Video im WhatsApp an jemand anderen mit WhatsApp weiterleitet, dass es dann ruck zuck verschickt wird…weil es eben nicht erst wieder ins Internet geladen werden muss, sondern direkt vom WhatsApp Server weitergeschickt wird :slight_smile:

Grüße,
Chris

Hey Bayaro,

In der heutigen Welt muss man damit rechnen und einverstanden sein :smiley:

Das mit den Bildern und Videos ist mir auch schon aufgefallen :wink:

Wer es sicher haben will kann sich ja mal mit Threema API beschäftigen, aber das finde ich zurzeit einfach total überteuern.

Sollen die doch bei WhatsApp wissen wie Kalt es draußen ist, oder wie oft ich mein Licht ein und aus Schalte: rolleyes:

PS: Der Bild versand klappt nun auch war ein OpenSSL Problem :smiley:

LG
Sven

Hallo zusammen,

das WA weiss wann ich mein Licht ausgeschaltet habe oder wie warm es draussen ist wäre wir auch egal.
Ich hatte das auch schon mal überlegt ein Foto zu versenden, wenn jemand klingelt.
Hier hätte ich aber schon etwas Bauchschmerzen jemanden ohne Erlaubnis zu fotografieren und dann das Bild noch im Netz zu verbreiten. Das WA damit machen kann was sie wollen, ist ja schon bekannt. Hätte da bedenken, dass das mal Ärger geben könnte.

Mit dem Löschen des Accounts und neu anlegen zum empfangen muss ich nochmal testen. Werde mir mal einen anderen Account anlegen, habe ja noch einige Festnetznummern zur Verfügung :smiley:

Grüße,
Doc

Jungs, das mit dem Bild senden geht immer noch nur über einen Webserver oder auch mittlerweilen endlich nur von einem lokalen Path?

Hallo swissboy.

Es geht definitiv von einem lokalen Pfad.
Meine Bilder sind zwar gut, aber durch die Entfernung und den Resize den ich vorher mache sind die Leute von Fremden nicht identifizierbar. Wir wissen aufgrund von Statue, Haltung etc. wer es ist bzw ob wir die Person kennen. Somit habe ich auch keine Bedenken diese Bilder per WhatsApp zu verschicken. Dennoch stimme ich Doc zu, dass man sich dabei im Klaren sein sollte, dass man Fotos von anderen Leuten „quasi“ ins Netz stellt. Das betrifft WhatsApp aber im allgemeinen. Übringens sind die Bilder nur für ein paar Tage unter der URL zu erreichen.

Grüße

jevico

Ebenso unzulässig. Ich beschäftige mich beruflich damit. Nicht identifizierbar heisst NICHT identifizierbar und nicht „Einige könnten drauf kommen“. Du kannst nicht wissen ob neben dir eine dir fremde Person diese gezeigte Person auch erkennen würde. Ausserdem sollten Bildausschnitte in denen noch Teile des Nachbargrundstücks oder öffendlicher Raum zu sehen ist schwarz überdeckt werden.

Im Prinzip macht das eine Überwachungskamera unsinnig. Darum müssen überall in überwachten Bereichen gut sichtbar Schilder montiert werden. Es hat schon findige Anwälte gegeben, die die Aufnahmen eines Einbruchs als unrechtmäßiges Beweismittel angefochten haben. Das muss man sich mal vorstellen…

Aber wo kein Kläger… :rolleyes:

Toni

ja, dass mit den Bildern versenden funktioniert wunderbar, auch ohne die Datei vorher ins I-Net geladen zu haben. siehe: meinen Beitrag von gestern IPS und Whatsapp - Seite 13 (Kamerabild senden)

Leider habe ich schon wieder ein Problem mit dem Empfang der Nachrichten in IPS. Während gestern alles noch problemlos lief, bekomme ich heute wieder kein gelesen für meine Nachrichten welche vom Smartphone an IPS gesendet wurden und somit natürlich auch keinen Statusbericht oder ein cam-Foto. Woran kann denn das nur liegen? An dem Script habe ich seit gestern nichts geändert. Es wird brav alle 20s ausgeführt und produziert auch keine Fehlermeldungen. Muss ich mich schon wieder neu bei WhatsApp registrieren.:confused: oder bin ich für den Empfang gesperrt - aber senden funktioniert nach wie vor.

Bin für jede Idee dankbar.

Bei mir geht das Senden auch schon wieder nicht, obwohl nichts verändert wurde.

Gibt es da keine vernünftige Alternative als mit dem Mist WhatsApp?

Grüße,
Doc

Und der Empfang funktioniert bei dir? Mit dem Senden habe ich überhaupt keine Probleme. Irgend was ist da sehr merkwürdig.

Nee, empfangen geht schon lange nicht mehr.
Senden war mir halt wichtig.
Habe mir gerade noch ein neues PW generieren lassen, geht aber auch nicht.

Gruß,
Doc