Отправка уведомлений с помощью SMS
Добавлено: Пн окт 15, 2012 4:09 pm
Обсуждение страницы Отправка уведомлений с помощью SMS
Так не получилось. В поле temp постоянно 0.sergejey писал(а):Надо тогда добавить ещё вызов метода в код, который выполняется при обновлении значения 1-wire:
callMethod("объект.tempChanged");
Т.е. получается, что связанное свойство обновляется, но метод сам по себе не вызовется -- его нужно вызвать принудительно.
Код: Выделить всё
<?php
/**
* Title
*
* Description
*
* @access public
*/
function sendSMS($phone, $text, $pass_server='000000') {
$phone=preg_replace('/^\+/', '', $phone);
if (substr(php_uname(), 0, 7) == "Windows")
{
$address = gethostbyname ('127.0.0.1'); //IP Ђ¤аҐб ў 襣® Є®¬ЇмовҐа
$service_port=8000; //Џ®ав
//$pass_server='000000'; //Џ а®«м
$socket = socket_create (AF_INET, SOCK_STREAM, 0);
if ($socket < 0) {
echo "socket create failed reason: " . socket_strerror ($socket) . "\n";
}
$result = socket_connect ($socket, $address, $service_port);
if ($result < 0) {
echo "socket connect failed.\nReason: ($result) " . socket_strerror($result) . "\n";
}
$text = iconv("UTF-8","Windows-1251",$text);
$in = base64_encode($pass_server."#SENDSMS#[TYPE]0[NUMBER]".$phone."[TEXT]".$text); //ЏаЁ¬Ґа ®вЇа ўЄЁ б¬б
//$in = base64_encode($pass_server."#CMD#[USSD]*102#"); //ЏаЁ¬Ґа § Їа®б USSD Є®¬ ¤л
$out = '';
socket_write ($socket, $in, strlen ($in));
//echo "Response:\n\n";
$res='';
while ($out = socket_read ($socket, 2048)) {
$res.=$out;
}
socket_close ($socket);
$res = iconv("Windows-1251","UTF-8",$res);
}
else
{
$comand = 'LANG=ru_RU.utf8; echo "'.$text.'" | gnokii --sendsms +'.$phone;
$res = shell_exec($comand);
}
return $res;
}
function sendUSD($text, $pass_server='000000') {
$phone=preg_replace('/^\+/', '', $text);
if (substr(php_uname(), 0, 7) == "Windows")
{
$address = gethostbyname ('127.0.0.1'); //IP Ђ¤аҐб ў 襣® Є®¬ЇмовҐа
$service_port=8000; //Џ®ав
//$pass_server='000000'; //Џ а®«м
$socket = socket_create (AF_INET, SOCK_STREAM, 0);
if ($socket < 0) {
echo "socket create failed reason: " . socket_strerror ($socket) . "\n";
}
$result = socket_connect ($socket, $address, $service_port);
if ($result < 0) {
echo "socket connect failed.\nReason: ($result) " . socket_strerror($result) . "\n";
}
$text = iconv("UTF-8","Windows-1251",$text);
$in = base64_encode($pass_server."#CMD#[USSD]".$text); //ЏаЁ¬Ґа ®вЇа ўЄЁ б¬б
//$in = base64_encode($pass_server."#CMD#[USSD]*102#"); //ЏаЁ¬Ґа § Їа®б USSD Є®¬ ¤л
$out = '';
socket_write ($socket, $in, strlen ($in));
//echo "Response:\n\n";
$res='';
while ($out = socket_read ($socket, 2048)) {
$res.=$out;
}
socket_close ($socket);
$res = iconv("Windows-1251","UTF-8",$res);
if (preg_match('/USSD-RESPONSE\[.+?\]:(.+)/is', $res, $m)) {
$res=$m[1];
}
}
else
{
$port = "/dev/ttyUSB0"; //указать куда смонтировался модем
$f = fopen ($port, "rw+");
//Чтобы послать USSD запрос на номер *100#, команда должна выглядеть так:
//AT+CUSD=1,"AA180C3602",15 (двойные кавычки обязательны)
$text = "AT+CUSD=1,\"".encodePDU($phone)."\",15\r\n";
fputs($f, $text);
while ($s = fgets($f)) {
if (substr($s, 0, 5) == "+CUSD") {
$codetext = substr(trim($s), 10, -4);
$res = decodePDU($codetext);
if (strpos($res, "1 - Dalee") !== false) {
fputs($f, "AT+CUSD=1,".encodePDU("1").",15\r\n");
}
else
break;
}
}
fclose($f);
}
return $res;
}
function decodePDU($in) {
$command = "echo ".$in." | perl -ne '@a = m/([0-9A-F]{4})/g; map { eval \"print \\\"\\\\x{\$_}\\\"\"; } @a;' 2>/dev/null";
$out = shell_exec ($command);
return $out;
}
function encodePDU($in) {
$out = "";
for ($i = 0; $i < (strlen($in)-1); $i++) {
$t = $i%8+1;
if ($t == 8) continue;
$c = ord($in[$i])>>($i%8);
$oc = $c;
$b = ord($in[$i+1]) & ((1 << $t)-1);
$c = ($b << (8-$t)) | $c;
$out .= strtoupper(str_pad(dechex($c), 2, '0', STR_PAD_LEFT));
}
return $out;
}
?>
Код: Выделить всё
<?php
$ROOT = '/var/www/';
include_once($ROOT.'lib/hardware/smsgw.php');
$res=sendUSD("*100#", "Parol");
if (preg_match('/(\d+,\d+)/is',$res,$m)) {
$balance=floatval(str_replace(",",".",$m[1]));
echo $balance;
}
?>
Код: Выделить всё
chmod a+s /usr/bin/perl
chmod a+s /usr/bin/gnokii
Код: Выделить всё
chmod 777 /dev/ttyUSB0