IPS und Whatsapp

Kann keiner helfen? Es haben doch schon einige von euch gemacht?! Wäre für jeden Hinweis sehr dankbar.

Habe mal eine andere Frage: ich nutze WApp für meine Alarmanlage. Wenn jetzt kurzfristig (in ms) mehrere Nachrichten an mein Handy geschickt werden, erhalte ich nicht alle. Erst wenn ich eine Verzögerung in meinen eigenen Scripten mit IPS_Sleep ergänze, erhalte ich alle. Ist das eine Limitierung von WApp, dass zwischen dem Versand von zwei oder mehr Nachrichten eine gewisse Zeitspanne liegen muss?

Hallo Zusammen,
erstmal eine sehr nützliche Erweiterung. Nun habe ich aber mit den neusten Sourcen der WhatsApp API ein Thema wo ich nicht weiter komme.

Fatal error:  Call to undefined function openssl_random_pseudo_bytes() in E:\IP-Symcon\scripts\WhatsAppAPI\whatsprot.class.php on line 2246
Abort Processing during Fatal-Error: Call to undefined function openssl_random_pseudo_bytes()
   Error in Script E:\IP-Symcon\scripts\WhatsAppAPI\whatsprot.class.php on Line 2246

Ich habe mir nun mal die LOGs von IP-Symcon angeschaut und folgenden herausgefunden:

Open SLL Version: >OpenSSL #1: 1.0.1
Versuch DLL laden: >Erweiterung php_openssl.dll nicht geladen. Nicht nutzbar in Verbindung mit OpenSSL 1.0.1

Hat jemand ne Idee oder eine Funktionierende Version der whatsprot.class.php für mich?

Problem gefunden …
Nun klapps auch mit dem Senden

Openssl mal wieder

Ich hoffe die neue IP-Symcon Version schafft hier endlich Abhilfe.

Und ich komme leider noch immer nicht weiter [emoji22]

Hi,

ich bin jetzt also komplett verwirrt, seid ihr nicht mehr auf php_5.4.x ???
Ich bekomme auch obigen Fehler:

Fatal error:  Call to undefined function openssl_random_pseudo_bytes() in C:\IP-Symcon\scripts\whatsapiofficial\whatsprot.class.php on line 2290
Abort Processing during Fatal-Error: Call to undefined function openssl_random_pseudo_bytes()
   Error in Script C:\IP-Symcon\scripts\whatsapiofficial\whatsprot.class.php on Line 2290

Im LOg steht:

Im log steht die PHP 5.4.x:
11.07.2015 11:41:35.724 |     0 | MESSAGE | ScriptEngine         | Benutze PHP 5.4.24
11.07.2015 11:41:35.771 |     0 | MESSAGE | ScriptEngine         | >OpenSSL #1: 1.0.1
11.07.2015 11:41:35.771 |     0 | MESSAGE | ScriptEngine         | >OpenSSL #1: 1.0.1
11.07.2015 11:41:35.771 |     0 | MESSAGE | ScriptEngine         | >Erweiterung: php_curl.dll
11.07.2015 11:41:35.771 |     0 | MESSAGE | ScriptEngine         | >Erweiterung: php_gd2.dll
11.07.2015 11:41:35.771 |     0 | MESSAGE | ScriptEngine         | >Erweiterung: php_gettext.dll
11.07.2015 11:41:35.771 |     0 | MESSAGE | ScriptEngine         | >Erweiterung: php_mbstring.dll
11.07.2015  11:41:35.771 |     0 | MESSAGE | ScriptEngine         | >Erweiterung  php_openssl.dll nicht geladen. Nicht nutzbar in Verbindung mit OpenSSL  1.0.1
11.07.2015 11:41:35.771 |     0 | MESSAGE | ScriptEngine         | >Erweiterung: php_pdo_sqlite.dll

Ich bin auf der aktuellen BETA.

Gruß
herbert

Hi!

Klingt nach dem üblichen Problem…du musst wohl die OpenSSL 0.9.8 verwenden. Beim Update wird die SSL Version immer mit der neuen Version, welche bei IPS immer aktuell dabei ist, überschrieben.

Grüße,
Chris

Gib mir bitte noch den TIPP. Mit 0.9.8 bekomme ich:

11.07.2015 12:01:55.651 |     0 | MESSAGE | ScriptEngine         | Benutze PHP 5.4.24
11.07.2015 12:01:55.682 |     0 | MESSAGE | ScriptEngine         | >OpenSSL #1: 1.0.1
11.07.2015 12:01:55.682 |     0 | MESSAGE | ScriptEngine         | >OpenSSL #1: 1.0.1
11.07.2015 12:01:55.682 |     0 | MESSAGE | ScriptEngine         | >Erweiterung libeay32.dll nicht geladen. Version stimmt nicht überein: PHP: 5.4.24, EXT: 0.9.8
11.07.2015 12:01:55.698 |     0 | MESSAGE | ScriptEngine         | >Erweiterung: php_curl.dll
...
11.07.2015 12:01:55.698 |     0 | MESSAGE | ScriptEngine         | >Erweiterung: php_sqlite3.dll
11.07.2015 12:01:55.698 |     0 | MESSAGE | ScriptEngine         | >Erweiterung ssleay32.dll nicht geladen. Version stimmt nicht überein: PHP: 5.4.24, EXT: 0.9.8

Irgendwie holt er sich die „OpenSSL #1: 1.0.1“
Muss jetzt erstmal Mittag kochen …

CIAO

Du musst die beiden SSL Dateien (libeay32.dll & ssleay32.dll) tauschen. Steht hier im Forum mehrfach beschrieben :wink:

http://www.ip-symcon.de/files/service/OpenSSL-0.9.8.zip
Openssl mal wieder

Und wie gesagt, werden bei jedem Update von IPS überschrieben, also danach immer brav wieder austauschen die beiden Dateien. Bis IPS auch endlich mit der neuen OpenSSL Version was anfangen kann.

Grüße,
Chris

Hallo ALLE,

VIELEN DANk geht wirklich klasse …

Zum Passwort herausfinden habe ich zwar einen meiner PIs benötigt, aber okay: Raspberry Pi Whatsapp installieren Anleitung» Raspberry Pi

Schönes WE noch

Herbert

Hallo,

Benutze das Script von Jannis


<?

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

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

$w = new WhatsProt($userPhone, $userIdentity, $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->connect();
$w->loginWithPassword($password);
$w->pollMessage();


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

");
    SetValue(50987 /*[Whatsapp\Name]*/, $name);
    SetValue(11315 /*[Whatsapp\Text]*/, $body);
    }



?>


Leider werden keine Nachrichten Empfangen
bekomme in IPS Folgende Meldung


tx  <stream:features>tx    <readreceipts></readreceipts>tx    <groups_v2></groups_v2>tx    <privacy></privacy>tx    <presence></presence>tx  </stream:features>
tx  <auth mechanism="WAUTH-2" user="492xxxx297971">¦
m‰49xxxxx297971@DŒ/–š¼d©ÞdÞ%bÖ´1437040483</auth>
rx  <start from="s.whatsapp.net"></start>
rx  <stream:features></stream:features>
rx  <challenge>íÁ¬ì£0™%¡4Ç»e¶õ7G3”</challenge>
tx  <response>0]mWûIwéÔx©}y´ö^6eÈx¢Êã™ÈevÝut³5</response>
rx  <success t="1437040484" props="4" kind="free" status="active" creation="143xxx0906" expiration="1468356906">ImJÍôü*%þ†”ŠR.Øsfz÷¼</success>
tx  <presence name="101646770367652"></presence>
rx  <message from="49xxxx27761@s.whatsapp.net" id="1437039946.--560" offline="0" type="text" t="1437039954" notify="LiVe">rx    <enc v="1" type="msg">3
!sWÐfòOˆ'’Â~Z€!¶È•Lïmw·9

Hat Jemand einen Tipp für mich?

Ich kann dir nicht helfen, aber den Code kann man so etwas besser lesen :slight_smile:

tx<stream:features>tx<readreceipts></readreceipts>tx<groups_v2></groups_v2>tx<privacy></privacy>tx<presence></presence>tx</stream:features>
tx<auth mechanism="WAUTH-2" user="492xxxx297971">І
m‰49xxxxx297971@D/–dЉd%b1437040483</auth>
rx<start from="s.whatsapp.net"></start>
rx<stream:features></stream:features>
rx<challenge>Ќ0™%4ЛeЖ7G3”</challenge>
tx<response>0]mWIwxЉ}y^6ex™evut5</response>
rx<success t="1437040484" props="4" kind="free" status="active" creation="143xxx0906" expiration="1468356906">ImJ*%†”R.sfz</success>
tx<presence name="101646770367652"></presence>
rx<message from="49xxxx27761@s.whatsapp.net" id="1437039946.--560" offline="0" type="text" t="1437039954" notify="LiVe">rx<enc v="1" type="msg">3
!sWfO'’~Zˆ!Ж•LmwЗ9

Grüße,
Chris

Stimmt hat was Danke :wink:

so wie es aussieht führt er einfach die Funktion
function onMessage($mynumber, $from, $id, $type, $time, $name, $body)

nicht aus, weil wenn ich dort z.B. ein echo „test Text“; rein schreibe wird der einfach nicht ausgegeben.

:eek:

Im Empfangsscript die Zeile
$w = new WhatsProt($userPhone, $userIdentity, $userName, $debug);
mit dieser ersetzen
$w = new WhatsProt($userPhone, $userName, $debug);

Das ist schon einmal Perfekt Danke dir :wink:

Jetzt habe ich aber noch ein Problem, onMessage ist ja eine Funktion wie ruft ihr die in PHP auf?

Oder braucht man diese nicht aufrufen? Auf Jeden fall Passiert bei mir erstmal nichts :wink:

LG
Sven

Hallo Leute,

ich quäle mich jetzt schon seit Tagen mit den WhatsApp-Scripten und bekomme die Empfangsfunktion einfach nicht zum laufen.
Ich habe beide im Thread angebotenen Scripte ausprobiert. Mit den Events komme ich überhaupt nicht zurecht. Da wird das Event onMessage scheinbar nicht ausgelöst. Bei dem 1. Empfangsscript bekomme ich zumindest ab und zu mal ein Array. Komischerweise ließt er die Messages aber nicht immer. Wenn ich etwas zurück bekomme, sieht das so aus:

Array(    [0] => ProtocolNode Object        (            
[tag:ProtocolNode:private] => message            
[attributeHash:ProtocolNode:private] => Array                (                    
[from] => 4917.......268@s.whatsapp.net                    
[type] => text                    
[id] => 3K1HqorMlnuA8                    
[offline] => 2                    
[t] => 1445361692                    
[notify] => Mein Name                )            
[children:ProtocolNode:private] => Array                (                    
[0] => ProtocolNode Object                        (                            
[tag:ProtocolNode:private] => enc                            
[attributeHash:ProtocolNode:private] => Array                                (                                    
[v] => 1                                    
[type] => msg                                )                            
[children:ProtocolNode:private] =>                             
[data:ProtocolNode:private] => 3!9û‰g^'’ì˜mÃÇ©MkN{ë”zá4þËëô¿p<

Da ist nie ein Body dabei. Kann es sein, dass der Text verschlüsselt in der letzten Zeile steht. Wie sieht das Array bei Euch aus. Kommen die Nachrichten verschlüsselt, oder im Klartext?

Hallo zusammen,

wollte mich mal wieder mit den WhatsApp Scripten beschäftigen, da diese schon eine ganze Weile nicht mehr laufen.

Wie schaut es da eigentlich in der Zwischenzeit aus, funktioniert das nach den vielen Updates seitens WA überhaupt noch.
Mir würde eigentlich das Senden im Moment schon reichen.

Jemand Infos darüber u. evtl. mal ein funktionierendes Sendescript?

Grüße v. Doc

Hi,

es sind zwar einige Sachen drin, die auf mich zugeschnitten sind, aber es funktioniert sehr gut :smiley:

Config Script:


<?
//WhatsApp settings
$userPhone        = '49xxxxxxx';      //Handynummer ohne + einfach 4917...
$userIdentity       = '';    //Imei Nummer
$userName         = 'SmartHome';           //User Name
$password          = '';   //Passwort Whatsapp per WART Herausfinden
$debug              = false ;


//Variablen
$ID_Temp_Mess = 31070 /*[Scripts\WhatsApp\Messages]*/  ; //ID der Zwischenspeichers(String)
$ID_Temp_Nr = 	 58727 /*[Scripts\WhatsApp\MsgNr]*/  ; //ID der Zwischenspeichers(String)

//Whatsapi Speicherotz
$Whatsapi = 'D:\IP-Symcon\scripts\WhatsAPI-master\src\whatsprot.class.php';



?>


Das Verarbeitungsscrip:


<?

define("c_LogId", "WhatsApp");
define("ID_INSTANCE_CAM_IMAGE", 19662 /*[Scripts\Cam\Image Grabber 7Links\Image]*/ );
define("ID_INSTANCE_CAM", 53529 /*[Scripts\Cam\Image Grabber 7Links]*/ );

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

include($DateiNa_Config);
require $Whatsapi;
require_once('HelperFunctions.ips.php');

function onDisconnected($mynumber, $socket) {
	IPSLogger_Not(c_LogId, "Logged out");
	IPS_SemaphoreLeave("WhatAppProcess");
	IPS_Sleep(2000);
}

function onImage($mynumber, $from, $id, $type, $time, $name, $size, $url, $file, $mimetype, $filehash, $width, $height, $preview) {
	//$whatsapp->PollMessage();
	IPSLogger_Not(c_LogId, "Received image. URL: ".$url);
   //print_r( "Message from $name:
$ $url $preview 

");
   SetValueString(38195 /*[Scripts\WhatsApp\Image]*/ , '<img src="'.$url.'" width="400" heigth="300">');
}

function onMessage($mynumber, $from, $id, $type, $time, $name, $body) {
	global $ID_Temp_Nr, $ID_Temp_Mess, $whatsapp;
	
	IPSLogger_Not(c_LogId, "Message from $name:
$body
From $from
");

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

   $Ret = Antwort(strtolower($body));
	//print_r($Ret);
    //Sende Array
    //0 = Text Nachricht
    //1 = Antwort Nummer
    //2 = Foto Senden TRUE FALSE
    //3 = Ort des Fotos
    //Antworten
    if ($Ret[1] == str_replace("@s.whatsapp.net", "", $from))
    {
      IPSLogger_Not(c_LogId, "Send response");
      $whatsapp->sendMessageComposing($Ret[1]);
      if ($Ret[2] == True)
      {
	      $imagePath = $Ret[3];
        	IPSLogger_Not(c_LogId, "Send image (URL: ".$imagePath.") an ".$Ret[1]);
         $result = $whatsapp->sendMessageImage($Ret[1], $imagePath);
         if ($result) {
				IPSLogger_Not(c_LogId, "Sent image");
			}
			else {
				IPSLogger_Not(c_LogId, "Could not send image");
				$whatsapp->sendMessage($Ret[1], "Sorry, konnte keine Foto schicken.");
			}
      }
      else {
         $whatsapp->sendMessage($Ret[1],$Ret[0]);
      }
    }
}


if (IPS_SemaphoreEnter("WhatAppProcess", 30000 /*[Objekt #30000 existiert nicht]*/)) {
	IPSLogger_Not(c_LogId, "Do login to WhatsApp network");
	$whatsapp = new WhatsProt($userPhone, $userIdentity, $userName, $debug);
	$whatsapp->eventManager()->bind("onGetMessage", "onMessage");
	$whatsapp->eventManager()->bind("onGetImage", "onImage");
	$whatsapp->eventManager()->bind("onDisconnect", "onDisconnected");
	$whatsapp->Connect();
	$loginResult = $whatsapp->LoginWithPassword($password);
	if ($loginResult === false) {
	   IPSLogger_Not(c_LogId, "Login failed");
	}
	else {
  		IPSLogger_Not(c_LogId, "Login was successful");
	}
	
	IPSLogger_Not(c_LogId, "Do logout of WhatsApp network");
	$whatsapp->disconnect();
}
else {
   	IPSLogger_Not(c_LogId, "Process running");
}

function Antwort($message)
{
	global $whatsapp;
	
   switch($message)
	{
      case "status garage": // false = closed
  			IPSLogger_Not(c_LogId, "Received command: ".$message);
         $Send_Mess = "Die Garage ist ".(GetValue(24110 /*[Homematic\Erdgeschoss\Garage\Tor\Garagentor Vorne.SHUTTER_CONTACT\STATE]*/ )==false ? "geschlossen" : "offen");
         $Send_To = '49176xxxxxxxxx';
         $Send_Pic = False;
         $Send_Path ="";
         break;
      case "kamera":
  			IPSLogger_Not(c_LogId, "Received command: ".$message);
  			IPSLogger_Not(c_LogId, "Update cam image");
			@IG_UpdateImage(ID_INSTANCE_CAM);
  			IPSLogger_Not(c_LogId, "Cam image updated");
	      $image = IPS_GetMedia(ID_INSTANCE_CAM_IMAGE);  // Bild von der Kamera holen
        	$imagePath = "../".$image['MediaFile'];
        	
        	$resizedImage = "../media/WhatsApp/resized.jpg";
       	resizeImage($imagePath, "../media/WhatsApp/resized.jpg");
       	IPSLogger_Not(c_LogId, "Image path: ".$resizedImage);
			$Send_Mess = "Foto";
         $Send_To = '49176xxxxxxxx';
         $Send_Pic = True;
         $Send_Path = $resizedImage;
         break;
		 default:
		 	$Send_Mess = "";
	    	$Send_To = "";
	    	$Send_Pic = "";
	    	$Send_Path = "";
    }


    $Ret[0] = $Send_Mess;
    $Ret[1] = $Send_To;
    $Ret[2] = $Send_Pic;
    $Ret[3] = $Send_Path;

    return $Ret;

}

function SendMsg($target, $type, $value)
{
	global $whatsapp;

	$whatsapp->sendMessageComposing($target);
	IPSLogger_Not(c_LogId, "Target: ".$target);
	IPSLogger_Not(c_LogId, "Type  : ".$type);
	IPSLogger_Not(c_LogId, "Value : ".$value);
    switch($type)
    {
       case "text":
          $result = $whatsapp->sendMessage($target,$value);
          break;
       case "image":
       		IPSLogger_Not(c_LogId, "Send image to ".$target);
       		$resizedImage = "../media/WhatsApp/resized.jpg";
       		resizeImage($value, "../media/WhatsApp/resized.jpg");
				IPSLogger_Not(c_LogId, "Image path: ".$resizedImage);
          	$result = $whatsapp->sendMessageImage($target,$resizedImage);
          	break;
		 default:
    }
    return $result;
}

function resizeImage($srcImage, $destImage) {
	// Datei und Faktor der Größenänderung
	$percent = 0.5;

	// Neue Größe berechnen
	list($width, $height) = getimagesize($srcImage);
	$newwidth = $width * $percent;
	$newheight = $height * $percent;

	// Bild laden
	$thumb = imagecreatetruecolor($newwidth, $newheight);
	$source = imagecreatefromjpeg($srcImage);

	// Skalieren
	imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

	// Ausgabe
	if (imagejpeg($thumb, $destImage)) {
		IPSLogger_Not(c_LogId, "Image resize successful");
	}
	else {
		IPSLogger_Not(c_LogId, "Image resize failed");
	}
		imagedestroy($thumb);
}

?>


Danke dir.

Sieht eigentlich so ähnlich aus, wie meine Scripte, die immer funktioniert hatten.
Habe gerade mal die SIM getestet, für die ich WA registriert hatte, die ist tot. Wurde verm. gesperrt, weil sie zu lange nicht genutzt wurde. Ob dass das problem ist?

Es gab doch mal einen Möglichkeit, WA auf die Festnetznummer zu registrieren?
Ist das noch möglich?

Grüße,
Doc

Ja, ist möglich. Kann ich nur empfehlen. Habe das vor 3-4 Monaten gemacht. Bin begeistert.
Ich muss nur das Wort Kamera an mein Haus senden und erhalte ein aktuelles Kamera Bild zu geschickt. Genau so wenn jemand klingelt.