DD-WRT cheap 3g HSPA Router - SMS, USSD, проверка на мегабайти [НОВО: вариант и за OpenWRT]

Ако пускате тема за алтернативен фърмуер, задължително направете и друга тема с линк към тази в раздела за съответната марка рутер.
Публикувай отговор
Аватар
teou
Site Admin
Мнения: 2970
Регистриран на: 23 Ное 2012 19:57
Местоположение: Dreieich - Dreieichenhein (Hessen) / София / Синеморец
Обратна връзка:

DD-WRT cheap 3g HSPA Router - SMS, USSD, проверка на мегабайти [НОВО: вариант и за OpenWRT]

Мнение от teou »

Темата е дериват на TP-LINK TL-MR3220 cheap 3g HSPA Router - OpenWrt, SMS, USSD, проверка на мегабайти във версия за DD-WRT и с друг рутер. Препоръчвам запознаване и с другата тема, тъй като тук ще съм по-лаконичен в обясненията.

1) Въведение и цели

Целите са същите, както и в другия пакет - възможност за проверка на мегабайти или оставащ кредит на предплатени 3G дата карти на БГ мобилни оператори. С малки модификации скрипта ми може да се използва за всякакви услуги от всякакви оператори.

Наскоро се сдобих от Ebay с рутер TP-LINK WR703N ($21), който е китайската версия на продавания у нас MR3020 и реших този път за разнообразие да сложа DD-WRT (билд 21676 няма проблем със SSH, но един път ми разкачи вифито без причина). За съжаление обаче, ДД-врт се оказа доста голямо дърво. Разликата между него и ОпенВРТ е долу горе като между Линукс и Уиндоус - за всички глупости има графичен интерфейс, има маса неща, които са излишни, обаче опре ли се до къстомизация майка плаче.
И така с шок и ужас установих:
- на машини с до 4 мб флаш (а това са всички евтини тп-линкове) jffs е деактивирано
- като бъг-следствие от горното, е скапана и възможността за работа с пакетния мениджър, т.е. не може да инсталирате нищо дори и в рам-та
- поради доста стар и незакърпен секюрити бъг в уеб сървъра, CGI скриптинга на последния е деактивиран, поне за потребителски скриптове.

С други думи, пакета Баланс от ОпенВРТ нямаше да тръгне хем заради невъзможността да се инсталират необходимите зависимости, хем заради скопения уеб-сървър и невъзможността да се сложи друг. Съответно през изминалите 1-2 седмици се хванах да го пренапиша изцяло, специално за ДД-врт и така, че да се съхранява в единственото достъпно място - NVRAM. E, днес приключих. В момента пиша "инсталатора" и след малко ще го ъплоудна, надявам се.

едит 0ч40мин: Черешката на тортата се оказа липсата на uuencode в тази версия на ДДВРТ, така че скрипта не може да се зип-не коректно и остава 17к вместо 3. Това значи, че тази версия няма да е препоръчителна за рутери с до 32К NVRAM. За щастие в днешно време повечето машинки са с 64К. Все пак ако искате лесно можете да изрежете част от скрипта за тези оператори, които не са ви нужни, както и помощната информация, и да спестите 10к.
Утре продължавам, защото сега съм твърде уморен да дописвам темата.

Аватар
teou
Site Admin
Мнения: 2970
Регистриран на: 23 Ное 2012 19:57
Местоположение: Dreieich - Dreieichenhein (Hessen) / София / Синеморец
Обратна връзка:

Re: DD-WRT cheap 3g HSPA Router - SMS, USSD, проверка на мегабайти

Мнение от teou »

2) Инсталация на DD-WRT на wr703n през китайския фърмуер

703 e вариант, предназначен само за местния, китайски пазар, теоретично. За западните пазари платката е поставена в 2 см по-широка кутийка и са добавени 2-3 диода и едно безсмислено копче, за да изглежда по-внушително, и всичко това като "друг" модел. Следствие от това е, че в 703 фабричният фърмуер е само на китайски. При първо пускане е малко шок и ужас :), но всъщност подредбата е като на останалите продукти на ТП-линк. В интернет циркулират много картинки къде да се клика като тази
Изображение
, но всъщност те не са и нужни - достатъчно е просто да следите статус-бар лентата на вашия браузър, докато вървите с мишката по йероглифите - имената на скриптовете са си на английски :) И така, първа стъпка е да намерите нещо, в името на което се съдържа "time" или "ntp" - това е главното меню с настройките. Кликате го, разгъва се и после в подменюто търсите нещо като "update/upgrade/firmware" или нещо от сорта. Натам е лесно, избирате си файл с фърмуер с горният бутон, а от долните два левият ако не се лъжа е ОК, и чакате. Както вече споменах, билд 21676 изглежда като да работи, но не съм тествал подробно.

Самата настройка на ддврт за работа с 3г е елементарна - нужно е само да изберете 3г от падащото меню и да въведете апн - globul/inet-gprs.mtel.net , макар че по настоящем поне единият оператор коригира грешни настройки автоматично, даже и да объркате името на апн.
dd3g.jpg
dd3g.jpg (49.27 KiB) Преглеждано 8634 пъти
И разбира се, не забравяйте да сложите парола на безжичната мрежа.
ddwifi.jpg
ddwifi.jpg (50.04 KiB) Преглеждано 8634 пъти
Също така с оглед на следващите действия, ако желаете да ползвате SSH вместо телнет, уверете се, че от менюто Services, secure shell e на enabled.

Аватар
teou
Site Admin
Мнения: 2970
Регистриран на: 23 Ное 2012 19:57
Местоположение: Dreieich - Dreieichenhein (Hessen) / София / Синеморец
Обратна връзка:

Re: DD-WRT cheap 3g HSPA Router - SMS, USSD, проверка на мегабайти

Мнение от teou »

4) Допълнителен пакет за DD-wrt firmware за проверка на оставащите мегабайти

Представям на вашето внимание скрипта Balans 0.2 for DD-WRT.

Инструмента е изцяло конзолен и НЕ може да се ползва през уеб интерфейса за задаване на команди, имайте предвид!
baldd1.jpg
Както виждате, интерфейса е на английски. Подкарването на истинска кирилица щеше да е доста мъчно и с цената на много загубено място, затова пред алтернативата да ползвам шльокавица избрах английския - хем ако някой чужденец реши да осинови и доразвие проекта да му е по-лесно. От друга страна тук ще дам достатъчно подробни разяснения на български как се работи с програмата, така че незнанието на английски да не е проблем за никой.

а) Предварителни изисквания


- инсталирайте Putty и WinSCP
- изключете пин кода на сим картата, която ще ползвате, от компютър или мобилен телефон
- уверете се, че сте пуснали поне едното от двете - телнет или SSH от Services (тук ползвам SSH), проверете и наличното NVRAM място от Status-Router - желателно е да е над 20к, ако не е, трябва да изрежете част от сорса на скрипта и да го олекотите.

б) инсталация

Инсталирайте WinSCP, настройките за вход са 192.168.1.1, протокол SCP, порт 22.
scp.jpg
scp.jpg (41.91 KiB) Преглеждано 8633 пъти
Ще бъдете попитани за име и парола, името ВИНАГИ е root, даже и да сте го променили от уеб интерфейса. Същото важи и за Putty. Ако за първи път се свързвате с рутера, ще видите и съобщение за нов сертификат, приемете го. Ще видите и 1 или 2 грешки, натиснете ок, няма страшно.
Следващата стъпка е да прехвърлите двата файла - balans_source.sh и balans_installer.sh (прикачени към този пост в зип архив, разархивирайте си ги някъде) на рутера. Това става като засветите двата файла в левия панел (хард диска) и натиснете F5, а след това потвърдите с Copy. След което можете да гасите WinSCP.

Изображение

След това е време да стартирате Putty с аналогични настройки и име root:
putty.jpg
putty.jpg (66.86 KiB) Преглеждано 8633 пъти
След успешното логване ще видите голямото лого на ДДВРТ и командния промпт. Напишете следното и натиснете Еnter, за да направите инсталационния скрипт изпълним:

Код за потвърждение: Избери целия код

chmod +x ./balans_install.sh
Ако никога не сте работили с Пути, то знайте, че копирането в неговия прозорец става само с маркиране с мишката, а пействането - с кликане на десен бутон. Т.е. копирайте горната команда направо от форума, кликнете с десен бутон в прозореца на Пути и натиснете ентер.

След това стартирайте инсталационният скрипт с

Код за потвърждение: Избери целия код

./balans_install.sh
Ще се стартира инсталаторът. И почти веднага ще спре с въпрос дали сте сигурни, че искате да продължите и справка за текущото заето място. Текущата версия се нуждае от около 17кб място, т.е. горещо препоръчително е да имате поне 20000 bytes left. Ако това не е така, редактирайте на компютъра си balans_source.sh като изрежете редове 444-507 (хелп-а) и 180-404 (Глобул и Виваком) и повторете процедурата, вече ще са ви нужни само около 7кб. НЕ продължавайте, ако нямате място, а прекъснете с n !
Ако всичко е наред обаче, просто натиснете y и Enter. Скрипта ще довърши. Можете да рестартирате с командата

Код за потвърждение: Избери целия код

reboot
след което Баланс вече ще е достъпен като

Код за потвърждение: Избери целия код

/tmp/balans
Изписването само така без параметри ще покаже хелп-а, на английски, подробно описан и по-долу на български.

п.с. При редакцията на сорса, ако решите да поправяте нещо, винаги използвайте читав текстов редактор, например Notepad++, защото вграденият в Уиндоус ноутпад ще омаже формата на файла. Ако използвате Notepad ++, от меню Edit изберете EOL Conversion - UNIX format. Това е необходимо, защото за разлика от пълните компютърни линукс дистрибуции, орязаните рутерни такива невинаги са толерантни към текстови файлове, правени под уиндоус.
Прикачени файлове
ddwrt_balans_02.zip
(4.88 KiB) Свалено 375 пъти

Аватар
teou
Site Admin
Мнения: 2970
Регистриран на: 23 Ное 2012 19:57
Местоположение: Dreieich - Dreieichenhein (Hessen) / София / Синеморец
Обратна връзка:

Re: DD-WRT cheap 3g HSPA Router - SMS, USSD, проверка на мегабайти

Мнение от teou »

в) Употреба и настройка

Дърво на командата, с всички възможни опции:

Код за потвърждение: Избери целия код

balans  mtel        get credit/credit_s
                        mb/mb_s
                    set credit                 12345678912345
                        mb                     512/1500/1G/5G
        globul      get credit
                        mb/mb_s
                    set credit                 12345678901234
                        mb                     64/128/512/0.5G/1024/1G
        vivacom     get credit
                    set credit                 12345678901234
        sms         get
                    del
        signal
Примери:

/tmp/balans mtel get credit - показва оставащите пари в Дата Прима карта
/tmp/balans mtel get credit_s - същото, но връща отговор като входящо смс съобщение, проверете с balans sms get
/tmp/balans globul set credit 12345678912345 - зарежда б-кънект с хартиен ваучер със следния номер 12345678912345
/tmp/balans globul set mb 512 - зарежда Go Web пакет 512 мб за 20 лв. с валидност 45 дни. 0.5G значи 512 мб за 30 лв. валидни 90 дни.
/tmp/balans sms del - трие всички смс-и от избрания сторидж

Настройка при смяна на модем:

1) Изкарайте текущите настройки и ги разгледайте с командата - nvram show | grep balans
2) Опитайте да проверите сигнала с /tmp/balans signal . Ако трябва, опитайте след малко пак. Имайте предвид, че за правилното инициализиране на модема при ДДВРТ е нужно да сте настроили връзката към интернет от интерфейса на ДДВРТ, иначе и Баланс няма да работи. Ако не можете да получите силата на сигнала, значи трябва да смените порта с командата nvram set balans_port="/dev/ttyUSB2" например. В повечето случаи правилния порт ще е 0, 1, 2 или 3.
3) След успешно приключване на предната стъпка, включе дебъгера nvram set balans_debugger="1". Опитайте се да проверите кредит или мегабайти. Ако не виждате нищо, сменете типа на изпращане на данни nvram set balans_ussdsend="pdu" и опитайте отново. Възможни стойности са pdu/ansi.
След като започнете да получавате отговор, вижте под каква форма е той. Ако е текст, то настройката nvram set balans_ussdreceive="ansi" ще е ansi. Ако е нещо като AABBCC, значи е pdu, ако е нещо като 00AA00BB00CC, значи е ucs2. Направете настройката, изключете дебъгера с nvram set balans_debugger="0"
4) Използвайте /tmp/balans mtel/globul get mb_s и изчакайте да се генерира входящо смс съобщение. Опитайте се да го прочетете с /tmp/balans/sms get . Ако не видите нищо, трябва да промените мястото за съхранение на смс-и. Това става с командата nvram set balans_smsstorage="SM". Възможностите са SM/ME/MT.
5) Настройката WAITTIME е за по-напреднали потребители - смъкването на стойността ще ускори скрипта, но прекаляването ще води до невъзможност на мрежата да отговори и връщане на празни отговори. Спокойно можете да я оставите на дифолтните 4 секунди.
6) След като нагодите всички настройки, не забравяйте да ги запишете с командата "nvram commit", за да останат валидни и след рестарт. Не правете това обаче след всяка настройка поотделно, защото така само ще амортизирате чипа на рутера. Изтествайте всичко и тогава ги запишете едновременно.

г) Бъгове и ограничения

- командата за сила на сигнала не минава понякога, особено след рестарт - изчакайте и повторете
- пин кода на сим картата трябва да се изключи предварително
- смс функционалността е достъпна само за модеми, работещи в текстов режим. Би следвало вече всички да са такива, но не гарантирам
- зареждането на хартиени ваучери е достъпно само за модеми, пращащи в ansi. За другите трябва да се направи конвертер ansi->pdu, за което нямам време и познания, съжалявам
- внимавайте с формата при настройките, главните и малки букви и кавичките имат значение

д) Настройки за модеми, тествани от мен

Huawei e173-u2
Port: 2
Send type: pdu
Receive type: pdu
SMS storage: SM

ZTE mf626
Port: 1
Send type: ansi
Receive type: ucs2
SMS storage: ME

ZTE k3765-z
Port: 3
Send type: ansi
Receive type: ansi ?
SMS storage: ME

===============================

Още тествани модеми тук - http://eko.one.pl/forum/viewtopic.php?id=2927

Аватар
teou
Site Admin
Мнения: 2970
Регистриран на: 23 Ное 2012 19:57
Местоположение: Dreieich - Dreieichenhein (Hessen) / София / Синеморец
Обратна връзка:

Re: DD-WRT cheap 3g HSPA Router - SMS, USSD, проверка на мегабайти

Мнение от teou »

д) сорс код (на Баланс 0.2, не на инсталатора)

Код за потвърждение: Избери целия код

#!/bin/sh
# this script needs balans_installer.sh for initial setup
COMMAND=$1
ACTION=$2
OBJECT=$3
PARAMETER=$4
PORT=`nvram get balans_port`
WAITTIME=`nvram get balans_waittime`
DEBUGGER=`nvram get balans_debugger`
USSDSEND=`nvram get balans_ussdsend`
USSDRECEIVE=`nvram get balans_ussdreceive`
SMSSTORAGE=`nvram get balans_smsstorage`
WAITTXT="\r\nPlease wait a couple of seconds for the result...\r\n\r\n"
ERRTXT="\r\nUnrecognized parameter! Type \"balans\" to see all possible command parameters.\r\n\r\n"
ERRSETTXT="\r\nWrong settings! Type \"nvram show | grep balans\" to see all current settings\r\n and correct typos with \"nvram set balans_XXXX=\"YYYY\"\" \r\nand then \"nvram commit\".\r\n\r\n"
DEBUGTXT="\r\nDebug mode is ON, displaying raw output. Turn off with \"nvram set balans_debug=\"0\"\"\r\n\r\n"
COMMANDTXT="\r\nCommand send, wait a little and check SMS INBOX with \"balans sms get\"\r\n\r\n"
CHARGENONANSI="\r\nYour USSD sending type is not set to ansi. \r\nUnfortunatelly in this version of Balans only ansi credit charging is supported.\r\n"

pdu2txt() {
	# Thanks Cezary at eko.one.pl for this converter
	data1=$(echo $1 | sed -e 's/.\{2\}/&\ /g')

	ret=''
	shift=0
	carry=0

	for byte in $data1; do
		if [ $shift -eq 7 ]; then
			ret=$ret$(echo $carry | awk '{printf("%c",$0)}')
			carry=0
			shift=0
		fi

		byte=$((0x$byte))

		: $(( a = (0xFF >> ($shift + 1)) & 0xFF ))
		: $(( b = $a ^ 0xFF ))

		: $(( digit = $carry | (($byte & $a) << $shift) & 0xFF ))
		: $(( carry = ($byte & $b) >> (7 - $shift) ))

		ret=$ret$(echo $digit | awk '{printf("%c",$0)}')

		: $(( shift++ ))
	done
	echo $ret
}

if [ $COMMAND == "mtel" ]
then	
		if [ $ACTION == "get" ]
		then
				if [ $OBJECT == "credit" -o $OBJECT == "mb" ]
				then
					rm -f ./balansresult.txt
					cat $PORT | grep +CUSD: | sed -e 's/+CUSD: 0,"//g;s/",15//g;s/",72//g' > ./balansresult.txt &
					if [ $USSDSEND == "ansi" ]
					then
						if [ $OBJECT == "credit" ]
						then
							echo -e -n "AT+CUSD=1,\"*101#\",15\r\n" > $PORT
						else
							echo -e -n "AT+CUSD=1,\"*101#03#\",15\r\n" > $PORT
						fi
					elif [ $USSDSEND == "pdu" ]
					then
						if [ $OBJECT == "credit" ]
						then
							echo -e -n "AT+CUSD=1,\"AA182C3602\",15\r\n" > $PORT
						else
							echo -e -n "AT+CUSD=1,\"AA182C3682CD46\",15\r\n" > $PORT
						fi
					else
						echo -e -n $ERRSETTXT
					fi
					if [ $DEBUGGER == "1" ]
					then
						echo -e -n $DEBUGTXT
						echo -e -n $WAITTXT
						sleep $WAITTIME
						killall cat
						cat ./balansresult.txt
						echo -e -n "\r\n"
					else
						if [ $USSDRECEIVE == "ansi" ]
						then
							echo -e -n $WAITTXT
							sleep $WAITTIME
							killall cat
							cat ./balansresult.txt
							echo -e -n "\r\n"
						elif [ $USSDRECEIVE == "pdu" ]
						then
							cat $PORT | grep +CUSD: | sed -e 's/+CUSD: 0,"//g;s/",15//g;s/",72//g' > ./balansresult.txt &
							echo -e -n $WAITTXT
							sleep $WAITTIME
							killall cat
							RAWPDU=`cat ./balansresult.txt | tr '\r\n' ' '`
							pdu2txt "$RAWPDU"
							echo -e -n "\r\n"
						elif [ $USSDRECEIVE == "ucs2" ]
						then
							echo -e -n $WAITTXT
							sleep $WAITTIME
							killall cat
							RAWPDU=`cat ./balansresult.txt`
							CONVERTEDTXT=$(echo $RAWPDU | awk '{for(i=1;;i=i+4)if(substr($1,i,4)!=""){printf "%c",(index("0123456789ABCDEF",substr($1,i+2,1))-1)*16+(index("0123456789ABCDEF",substr($1,i+3,1))-1)}else exit;}')
							echo $CONVERTEDTXT
							echo -e -n "\r\n"
						else
							echo -e -n $ERRSETTXT
						fi
					fi
				elif [ $OBJECT == "mb_s" -o $OBJECT == "credit_s" ]
				then
					echo -e -n "AT+CMGF=0\r\n" > $PORT
					echo -e -n "AT+CMGS=16 \015" > $PORT
					echo -e -n "07915389080003F11100048171690000FF06C2303BEC9E03\032" > $PORT
					sleep 1
					echo -e -n $COMMANDTXT
				else 
					echo -e -n $ERRTXT
				fi
		elif [ $ACTION == "set" ]
		then
			if [ $OBJECT == "credit" ]
			then
				if [ $USSDSEND == "ansi" ]
				then
					echo -e -n "AT+CUSD=1,\"*100#$PARAMETER#\",15 \015" > $PORT
					sleep 1
					echo -e -n $COMMANDTXT
				else
					echo -e -n $CHARGENONANSI
				fi
			elif [ $OBJECT == "mb" ]
			then 
				if [ $PARAMETER == "512" ]
				then
					echo -e -n "\r\nCharging 512 MB for 20 lv. valid for 60 days...\r\n"
					echo -e -n "AT+CMGF=0\r\n" > $PORT
					echo -e -n "AT+CMGS=16 \015" > $PORT
					echo -e -n "07915389080003F11100048171690000FF06B5980CD41402\032" > $PORT
					sleep 1
					echo -e -n $COMMANDTXT
				elif [ $PARAMETER == "1500" ]
				then
					echo -e -n "\r\nCharging 1500 MB for 30 lv. valid for 60 days...\r\n"
					echo -e -n "AT+CMGF=0\r\n" > $PORT
					echo -e -n "AT+CMGS=15 \015" > $PORT
					echo -e -n "07915389080003F11100048171690000FF07B11A0C066A0A01\032" > $PORT
					sleep 1
					echo -e -n $COMMANDTXT
				elif [ $PARAMETER == "1G" ]
				then
					echo -e -n "\r\nCharging 1 GB for 10 lv. valid for 2 days...\r\n"
					echo -e -n "AT+CMGF=0\r\n" > $PORT
					echo -e -n "AT+CMGS=14 \015" > $PORT
					echo -e -n "07915389080003F11100048171690000FF0431D05108\032" > $PORT
					sleep 1
					echo -e -n $COMMANDTXT
				elif [ $PARAMETER == "5G" ]
				then
					echo -e -n "\r\nCharging 5 GB for 50 lv. valid for 30 days...\r\n"
					echo -e -n "AT+CMGF=0\r\n" > $PORT
					echo -e -n "AT+CMGS=14 \015" > $PORT
					echo -e -n "07915389080003F11100048171690000FF0435D05108\032" > $PORT
					sleep 1
					echo -e -n $COMMANDTXT
				else
					echo -e -n $ERRTXT
				fi
			else
				echo -e -n $ERRTXT
			fi
		else
		echo -e -n $ERRTXT
		fi
elif [ $COMMAND == "globul" ]
then	
		if [ $ACTION == "get" ]
		then
				if [ $OBJECT == "credit" -o $OBJECT == "mb" ]
				then
					#globul sim on mf626-send pdu receive ucs2- new vars- added sed 72
					rm -f ./balansresult.txt
					cat $PORT | grep +CUSD: | sed -e 's/+CUSD: 0,"//g;s/",15//g;s/",72//g' > ./balansresult.txt &
					
					if [ $USSDSEND == "ansi" ]
					then
						if [ $OBJECT == "credit" ]
						then
							echo -e -n "AT+CUSD=1,\"*123*1#\",15\r\n" > $PORT
						else
							echo -e -n "AT+CUSD=1,\"*123*2#5#\",15\r\n" > $PORT
						fi
					elif [ $USSDSEND == "pdu" ]
					then
						if [ $OBJECT == "credit" ]
						then
							echo -e -n "AT+CUSD=1,\"AA986CA68A8D1A\",15\r\n" > $PORT
						else
							echo -e -n "AT+CUSD=1,\"AA986CA6928D6A23\",15\r\n" > $PORT
						fi
					else
						echo -e -n $ERRSETTXT
					fi
					if [ $DEBUGGER == "1" ]
					then
						echo -e -n $DEBUGTXT
						echo -e -n $WAITTXT
						sleep $WAITTIME
						killall cat
						cat ./balansresult.txt
						echo -e -n "\r\n"
					else
						if [ $USSDRECEIVE == "ansi" ]
						then
							echo -e -n $WAITTXT
							sleep $WAITTIME
							killall cat
							cat ./balansresult.txt
							echo -e -n "\r\n"
						elif [ $USSDRECEIVE == "pdu" ]
						then
							cat $PORT | grep +CUSD: | sed -e 's/+CUSD: 0,"//g;s/",15//g;s/",72//g' > ./balansresult.txt &
							echo -e -n $WAITTXT
							sleep $WAITTIME
							killall cat
							RAWPDU=`cat ./balansresult.txt | tr '\r\n' ' '`
							pdu2txt "$RAWPDU"
							echo -e -n "\r\n"
						elif [ $USSDRECEIVE == "ucs2" ]
						then
							echo -e -n $WAITTXT
							sleep $WAITTIME
							killall cat
							RAWPDU=`cat ./balansresult.txt`
							GLOBULFIXED=$(echo $RAWPDU | awk '{for(i=1;;i=i+4)if(substr($1,i,4)!=""){printf "%c",(index("0123456789ABCDEF",substr($1,i+2,1))-1)*16+(index("0123456789ABCDEF",substr($1,i+3,1))-1)}else exit;}')
							echo $GLOBULFIXED | sed -e 's/Kreditat vi izticha na//g'
							echo -e -n "\r\n"
						else
							echo -e -n $ERRSETTXT
						fi
					fi
				elif [ $OBJECT == "mb_s" ]
				then
					echo -e -n "AT+CMGF=0\r\n" > $PORT
					echo -e -n "AT+CMGS=12 \015" > $PORT
					echo -e -n "07915389190000F01100038121F50000FF02C721\032" > $PORT
					sleep 1
					echo -e -n $COMMANDTXT
				else 
					echo -e -n $ERRTXT
				fi
		elif [ $ACTION == "set" ]
		then
			if [ $OBJECT == "credit" ]
			then
				if [ $USSDSEND == "ansi" ]
				then
					echo -e -n "AT+CUSD=1,\"*115*$PARAMETER#\",15 \015" > $PORT
					sleep 1
					echo -e -n $COMMANDTXT
				else
					echo -e -n $CHARGENONANSI
				fi
			elif [ $OBJECT == "mb" ]
			then 
				if [ $PARAMETER == "64" ]
				then
					echo -e -n "\r\nCharging 64 MB for 10 lv. valid for 30 days...\r\n"
					echo -e -n "AT+CMGF=0\r\n" > $PORT
					echo -e -n "AT+CMGS=14 \015" > $PORT
					echo -e -n "07915389190000F01100038121F50000FF04C7A08D06\032" > $PORT
					sleep 1
					echo -e -n $COMMANDTXT
				elif [ $PARAMETER == "128" ]
				then
					echo -e -n "\r\nCharging 128 MB for 15 lv. valid for 30 days...\r\n"
					echo -e -n "AT+CMGF=0\r\n" > $PORT
					echo -e -n "AT+CMGS=15 \015" > $PORT
					echo -e -n "07915389190000F01100038121F50000FF05C7604C8603\032" > $PORT
					sleep 1
					echo -e -n $COMMANDTXT
				elif [ $PARAMETER == "512" ]
				then
					echo -e -n "\r\nCharging 512 MB for 20 lv. valid for 45 days...\r\n"
					echo -e -n "AT+CMGF=0\r\n" > $PORT
					echo -e -n "AT+CMGS=14 \015" > $PORT
					echo -e -n "07915389190000F01100038121F50000FF04C7602D06\032" > $PORT
					sleep 1
					echo -e -n $COMMANDTXT
				elif [ $PARAMETER == "0.5G" ]
				then
					echo -e -n "\r\nCharging 512 MB for 30 lv. valid for 90 days...\r\n"
					echo -e -n "AT+CMGF=0\r\n" > $PORT
					echo -e -n "AT+CMGS=14 \015" > $PORT
					echo -e -n "07915389190000F01100038121F50000FF04C7606D06\032" > $PORT
					sleep 1
					echo -e -n $COMMANDTXT
				elif [ $PARAMETER == "1024" ]
				then
					echo -e -n "\r\nCharging 1024 MB for 30 lv. valid for 60 days...\r\n"
					echo -e -n "AT+CMGF=0\r\n" > $PORT
					echo -e -n "AT+CMGS=15 \015" > $PORT
					echo -e -n "07915389190000F01100038121F50000FF05C7600C1603\032" > $PORT
					sleep 1
					echo -e -n $COMMANDTXT
				elif [ $PARAMETER == "1G" ]
				then
					echo -e -n "\r\nCharging 1024 MB for 40 lv. valid for 120 days...\r\n"
					echo -e -n "AT+CMGF=0\r\n" > $PORT
					echo -e -n "AT+CMGS=15 \015" > $PORT
					echo -e -n "07915389190000F01100038121F50000FF05C7600C3603\032" > $PORT
					sleep 1
					echo -e -n $COMMANDTXT
				else
					echo -e -n $ERRTXT
				fi
			else
				echo -e -n $ERRTXT
			fi
		else
			echo -e -n $ERRTXT	
		fi
elif [ $COMMAND == "vivacom" ]
then	
		if [ $ACTION == "get" ]
		then
				if [ $OBJECT == "credit" ]
				then
					rm -f ./balansresult.txt
					cat $PORT | grep +CUSD: | sed -e 's/+CUSD: 0,"//g;s/",15//g;s/",72//g' > ./balansresult.txt &
					
					if [ $USSDSEND == "ansi" ]
					then
						echo -e -n "AT+CUSD=1,\"*102#\",15\r\n" > $PORT
					elif [ $USSDSEND == "pdu" ]
					then
							echo -e -n "AT+CUSD=1,\"AA184C3602\",15\r\n" > $PORT
					else
						echo -e -n $ERRSETTXT
					fi
					if [ $DEBUGGER == "1" ]
					then
						echo -e -n $DEBUGTXT
						echo -e -n $WAITTXT
						sleep $WAITTIME
						killall cat
						cat ./balansresult.txt
						echo -e -n "\r\n"
					else
						if [ $USSDRECEIVE == "ansi" ]
						then
							echo -e -n $WAITTXT
							sleep $WAITTIME
							killall cat
							cat ./balansresult.txt
							echo -e -n "\r\n"
						elif [ $USSDRECEIVE == "pdu" ]
						then
							cat $PORT | grep +CUSD: | sed -e 's/+CUSD: 0,"//g;s/",15//g;s/",72//g' > ./balansresult.txt &
							echo -e -n $WAITTXT
							sleep $WAITTIME
							killall cat
							RAWPDU=`cat ./balansresult.txt | tr '\r\n' ' '`
							pdu2txt "$RAWPDU"
							echo -e -n "\r\n"
						elif [ $USSDRECEIVE == "ucs2" ]
						then
							echo -e -n $WAITTXT
							sleep $WAITTIME
							killall cat
							RAWPDU=`cat ./balansresult.txt`
							CONVERTEDTXT=$(echo $RAWPDU | awk '{for(i=1;;i=i+4)if(substr($1,i,4)!=""){printf "%c",(index("0123456789ABCDEF",substr($1,i+2,1))-1)*16+(index("0123456789ABCDEF",substr($1,i+3,1))-1)}else exit;}')
							echo $CONVERTEDTXT
							echo -e -n "\r\n"
						else
							echo -e -n $ERRSETTXT
						fi
					fi
				else 
					echo -e -n $ERRTXT
				fi
		elif [ $ACTION == "set" ]
		then
			if [ $OBJECT == "credit" ]
			then
				if [ $USSDSEND == "ansi" ]
				then
					echo -e -n "AT+CUSD=1,\"*101#$PARAMETER#\",15 \015" > $PORT
					sleep 1
					echo -e -n $COMMANDTXT
				else
					echo -e -n $CHARGENONANSI
				fi
			else
				echo -e -n $ERRTXT
			fi
		else
			echo -e -n $ERRTXT	
		fi
elif [ $COMMAND == "sms" ]
then
	if [ $ACTION == "get" ]
	then
		rm -f ./balansresult.txt
		cat $PORT | grep -A1 +CMGL: > ./balansresult.txt &
		echo -e -n "AT+CMGF=1\r\n" > $PORT
		echo -e -n "AT+CPMS=\"$SMSSTORAGE\",\"$SMSSTORAGE\",\"$SMSSTORAGE\"\r\n" > $PORT
		sleep 1
		echo -e -n "AT+CMGL=\"ALL\"\r\n" > $PORT
		sleep 1
		killall cat
		echo -e -e "\r\n"
		cat ./balansresult.txt
		echo -e -e "\r\n"
	elif [ $ACTION == "del" ]
	then
		echo -e -n "AT+CMGF=1\r\n" > $PORT
		echo -e -n "AT+CPMS=\"$SMSSTORAGE\",\"$SMSSTORAGE\",\"$SMSSTORAGE\"\r\n" > $PORT
		sleep 1
		echo -e "AT+CMGD=1,4\r\n" > $PORT
		echo -e -e "\r\nAll SMS messages deleted.\r\n"
	else
		echo -e -n $ERRTXT
	fi
elif [ $COMMAND == "signal" ]
then
	rm -f ./balansresult.txt
	cat $PORT | grep +CSQ: | sed -e 's/+CSQ: //g;s/,99//g' > ./balansresult.txt &
	echo -e -n "AT+CSQ\r\n" > $PORT
	sleep 2
	killall cat
	RECALC=$(cat ./balansresult.txt)
	echo -e -n "\r\n" 
	echo -n "Signal strength is approximately "
	echo -e -n $(($RECALC * 323 / 100))
	echo -e -n "% \r\n\r\n"
else
  echo "
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Balans command-line version 0.2 for DD-WRT
A simple shell script for checking balance of Bulgarian pre-paid 3g data cards
(c) Todor Uzunov, 2013. License CC-BY-NC-SA. Help, more info, updates at:
https://nethelpforums.net/viewtopic.php?t=618
Thanks Cezary from eko.one.pl for the PDU2TXT functions!
------------
COMMAND TREE
------------
balans  mtel        get credit/credit_s
                        mb/mb_s
                    set credit                 12345678912345
                        mb                     512/1500/1G/5G
        globul      get credit
                        mb/mb_s
                    set credit                 12345678901234
                        mb                     64/128/512/0.5G/1024/1G
        vivacom     get credit
                    set credit                 12345678901234
        sms         get
                    del
        signal
-------------------------
EXAMPLES AND EXPLANATIONS
-------------------------
\"/tmp/balans mtel get credit\" - gets the remaining credit (BGN) of Data Prima
\"/tmp/balans mtel get credit_s\" - gets credit via SMS method
\"/tmp/balans globul set credit 12345678912345\" - recharge b-connect with 
paper voucher with number 1234567891234
\"/tmp/balans globul set mb 512\" - recharge 512 mb for 20 lv, 45 days. 
0.5G means 30 lv, 90 days
\"/tmp/balans sms get\" - list all sms messages from the selected storage area
----------------------------------------------
INITIAL SETUP AFTER FIRST BOOT OR MODEM CHANGE
----------------------------------------------
1) Get Balans settings and look at them - \" nvram show | grep balans\". 
2) Try getting signal with \"/tmp/balans signal \". In case of error, repeat.
If you still get errors, change port: \"nvram set balans_port=\"/dev/ttyUSB2\"\"
In most cases the correct port is 0,1,2 or 3
3) Turn on debugger: \"nvram set balans_debugger=\"1\"\". Try to check mb/credit
If you do not see output, then switch the USSDSEND type from/to ansi/pdu. 
Once you see some output, note what it is. If it is text, then your correct
USSDRECEIVE setting is ansi. If it is in the form of AABBCC, it is pdu, and in 
case of 00AA00BB00CC it is ucs2. Set settings accordingly, turn off debugger.
4) Use \"get credit_s/mb_s\" commands to generate incoming SMS message. Then 
after a while try to see it with \"sms get\" command. If you do not see it,
change SMSSTORAGE type. Possible values are SM/ME/MT. 
5) The WAITTIME setting is for convenience - setting it low will speed up the
script but network may not have enough time to respond.
6) Settings will survive reboot only after \"nvram commit\" command.
Do this only after everything is set up correctly, not after every other command
--------------------------
KNOWN BUGS AND LIMITATIONS
--------------------------
1) Signal command timeouts sometimes, just repeat it.
2) Disable PIN code before running Balans
3) SMS is supported only for modems capable of text mode sms-ing.
4) Charging with paper vouchers for now only possible for modems capable of 
USSD sending in ansi.
5) Beware of the settings format - do not mess up quotes, paths and cases, if
something like that happens check installer script for reference (or reinstall)
6) Balans runs correctly only from terminal like Putty, do not try to run it
from Web Control Panel (Administration - Commands).
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"
fi

Аватар
teou
Site Admin
Мнения: 2970
Регистриран на: 23 Ное 2012 19:57
Местоположение: Dreieich - Dreieichenhein (Hessen) / София / Синеморец
Обратна връзка:

Re: DD-WRT cheap 3g HSPA Router - SMS, USSD, проверка на мегабайти

Мнение от teou »

Направих версия, адаптирана за OpenWRT. Моля не се опитвайте да инсталирате версията за ддврт на опенврт и обратно, различни са!

Теоретически скрипта трябваше да работи само с промяна на мястото за съхранение на настройки, на практика се наложиха и други модификации. Ще отбележа, че използвах firmware на Madox от май 2013 за 703. В него шела не е sh, a ash, което може да е корена на проблема. Което автоматически означава, че въпреки, че скрипта няма зависимости, на друга вариация на опренврт може и да не работи съвсем и да се наложат съвсем дребни промени - моля за обратна връзка в това отношение.

Всичко останало е аналогично, с изкл. на процедурата по инсталация и запис на настройки.

Инсталация:
1) копирайте balans_cmd_openwrt_source.sh като /usr/share/balans_cmd_openwrt_source.sh
2) копирайте конфигурационния файл balanscnf като /etc/config/balanscnf
3) отворете LuCi и в секцията Startup преди exit 0 вкарайте реда
cp /usr/share/balans_cmd_openwrt_source.sh /tmp/balans; chmod +x /tmp/balans

Правене на настройки:
1) Листване на всички настройки с cat /etc/config/balanscnf
2) Промяна на някоя настройка с uci set balanscnf.@balanscnf[0].port=/dev/ttyUSB2
3) Запис във флаша на новата конфигурация накрая става с uci commit balanscnf

п.с. Тъй като това е временен проект, докато пусна новата версия на уеб-базираният Balans за OpenWRT, не съм хвърлил много усилия и в тестване. Тествано е само с Глобул и модем Huawei 172-u2
Прикачени файлове
openwrt_balans_cmd_02.zip
(4.09 KiB) Свалено 335 пъти

Аватар
teou
Site Admin
Мнения: 2970
Регистриран на: 23 Ное 2012 19:57
Местоположение: Dreieich - Dreieichenhein (Hessen) / София / Синеморец
Обратна връзка:

Re: DD-WRT cheap 3g HSPA Router - SMS, USSD, проверка на мегабайти [НОВО: вариант и за OpenWRT]

Мнение от teou »

Относно това кой модем на кой порт върви, оказа се, че и Cezary от eko.one.pl e стартирал такава тема тук - http://eko.one.pl/forum/viewtopic.php?id=2927

Аватар
teou
Site Admin
Мнения: 2970
Регистриран на: 23 Ное 2012 19:57
Местоположение: Dreieich - Dreieichenhein (Hessen) / София / Синеморец
Обратна връзка:

Re: DD-WRT cheap 3g HSPA Router - SMS, USSD, проверка на мегабайти [НОВО: вариант и за OpenWRT]

Мнение от teou »

За съжаление се оказа, че Глобул пак са сменили кодовете си за проверка на баланс и мегабайти. Новото меню има този вид и теоретично командите трябва да са

Код за потвърждение: Избери целия код

AT+CUSD=1,\"*123*4#1#\",15

за проверка на баланса и

Код за потвърждение: Избери целия код

AT+CUSD=1,\"*123*4#7#\",15
за оставащи мегабайти, само дето вече не е възможно да се изпратят като една команда или поне аз не можах. Това означава дебъгване и преправяне на скрипта. В момента нямам време за това, а и като се има предвид, че не ползвам нито Глобул нито ДДврт не съм и супер мотивиран.

Така че засега фикс за новото меню на Глобул от мен няма да има за този продукт - използвайте смс проверката за мегабайтите като временно решение.
А аз ще се концентрирам над графичната версия за Опенврт, за която ще опитам да направя фикс.

VampiRUS
Мнения: 2
Регистриран на: 16 Сеп 2014 03:02

Re: DD-WRT cheap 3g HSPA Router - SMS, USSD, проверка на мегабайти [НОВО: вариант и за OpenWRT]

Мнение от VampiRUS »

Hi, thanks for you work.
I need free space in nvram?
Please tell me how can i remove this software.
I want to adapt it for russian mts and some my needs.

Аватар
teou
Site Admin
Мнения: 2970
Регистриран на: 23 Ное 2012 19:57
Местоположение: Dreieich - Dreieichenhein (Hessen) / София / Синеморец
Обратна връзка:

Re: DD-WRT cheap 3g HSPA Router - SMS, USSD, проверка на мегабайти [НОВО: вариант и за OpenWRT]

Мнение от teou »

Hi, it seems i indeed forgot the uninstaller for the DD-wrt version (my focus is on OpenWRT and the packet system there uninstalls automatically). You can check the install script and do just the opposite.

To uninstall on DDWRT without resetting all router to factory defaults (that of course will delete Balans), you need to do 3 things:
- delete settings from NVRAM one by one. You can skip this - it will save only several bytes, not that much space
- delete the reference in the startup script. I am not sure if there will be any problems if you skip this. My advice is to check if the whole startup script rc_startup is available in the GUI - it will be easy to remove the last line from there. If not, you must use an inline editor like VI, or cat the contents, copy only what is needed without the last lines, etc. You can check here for example - http://www.dd-wrt.com/wiki/index.php/Startup_Scripts - i cannot really be more elaborate now, i'm in Berlin and a bit in a hurry right now and i don't have any DDWRT router with me at the moment.
- the third step, that will really delete 99% of the script, it to remove the main Balans script from NVRAM and save space: from the command line write nvram unset teo_bal


Аватар
teou
Site Admin
Мнения: 2970
Регистриран на: 23 Ное 2012 19:57
Местоположение: Dreieich - Dreieichenhein (Hessen) / София / Синеморец
Обратна връзка:

Re: DD-WRT cheap 3g HSPA Router - SMS, USSD, проверка на мегабайти [НОВО: вариант и за OpenWRT]

Мнение от teou »

Уважаеми колеги и приятели,
Тъй като все още пазя 2-3 сим предплатени сим карти и устройства само за тестови цели, реших да тествам до колко действително са си оправили мрежата Глобул/Теленор, който тест ще опиша в темата за телекомите. Извадих прастарата предплатена карта и от 1 час правя опит да я заредя. Няма да влизам в подробности, само ще ви кажа, че макар и все още втори по брой абонати този оператор безспорно е най-скапаният що се отнася до обслужването на клиенти.

Но да не правя излишен топик, а да споделя това, което е свързано с темата.

Първо, менюто май пак е променяно. Не ползвам този оператор, не ме вълнува и нямам време, а и ми писна да се разправям с тях, така че който иска да фиксва пакета за проверка. Кода е отворен, дерзайте.

Второ, освен валидноста на кредита, прецакана е и валидността на картите, както е описано тук. И междувпрочем драги ми ТелеПор (ТелеЗор), таблицата противоречи на текста, верен се оказа естествено текста с по-кофтите условия. С две думи - трябва да презареждате максимум на два месеца (иначе губите и кредит и самата сим карта), което ефективно превръща "предплатената" карта в следплатена, т.е. ако сега ще купувате карта за предплатен интернет, "за Бога братя, не купувайте" от този оператор. Промяната важи и за стари карти, за да е по-весело "новото начало"!

Трето, една промяна в положителна посока - май отново работят комплексните кодове от типа на *123*4*1# за проверка на баланса - ще са ви нужни ако решите да поправяте пакета Баланс.

Четвърто - пакетите, описани на сайта им, не важат за стари карти. За стари сим карти важат старите пакети. Това всъщност носи един позитив - поне хората със стари карти, старите версии на пакета Баланс, поне в СМС частта си за команди за зареждане, няма да имат нужда от промяна. Така че който е със стара сим карта - споко, който е с нова - за чий си купувате нещо от този оператор?!?

Аватар
teou
Site Admin
Мнения: 2970
Регистриран на: 23 Ное 2012 19:57
Местоположение: Dreieich - Dreieichenhein (Hessen) / София / Синеморец
Обратна връзка:

Re: DD-WRT cheap 3g HSPA Router - SMS, USSD, проверка на мегабайти [НОВО: вариант и за OpenWRT]

Мнение от teou »

Второ, освен валидноста на кредита, прецакана е и валидността на картите, както е описано тук. И междувпрочем драги ми ТелеПор (ТелеЗор), таблицата противоречи на текста, верен се оказа естествено текста с по-кофтите условия. С две думи - трябва да презареждате максимум на два месеца (иначе губите и кредит и самата сим карта), което ефективно превръща "предплатената" карта в следплатена, т.е. ако сега ще купувате карта за предплатен интернет, "за Бога братя, не купувайте" от този оператор. Промяната важи и за стари карти, за да е по-весело "новото начало"!
Последно, вярна се оказа таблицата. След поне половин час от второто ми презареждане за 6 лв за деня получих смс, че валидността на сим картата е удължена с 12 месеца (между другото проверката на тази валидност става само чрез връзка с оператор срещу 10 ст.). Условията за губене на парите след 2-3 месеца обаче са достатъчно прецакващи.

Аватар
teou
Site Admin
Мнения: 2970
Регистриран на: 23 Ное 2012 19:57
Местоположение: Dreieich - Dreieichenhein (Hessen) / София / Синеморец
Обратна връзка:

Re: DD-WRT cheap 3g HSPA Router - SMS, USSD, проверка на мегабайти [НОВО: вариант и за OpenWRT]

Мнение от teou »

Още нещо във връзка с Глобул / Теленор.
Отново имах възможност да тествам. Сложих я като втора сим карта в телефона си.

Първо, командите за проверка от Баланс би трябвало да си работят. Това, което вероятно няма да работи, са командите за зареждане с пакети, просто защото сега пакетите са други, а оператора не е описал на сайта си как да стане зареждането чрез ussd или смс код. Сега за зареждане се ползва страничката goweb.lp.telenor.bg - която работи чудесно от телефон. През нея се вижда остатък от пакета, предлага се активация на нов или вкаране на код от ваучер, както и номера на картата. Вероятно ще работи чудесно и от таблет или усб модем.
Пробвах да я достъпя обаче от компютър, вързан по tether за телефона и греда - зарежда се главната страница на оператора. Опитах се да го дебъгна и стигнах до ип адреса 192.168.88.37, но не можах да го подкарам. Алтернативно през тетеринг/рутер (през рутер не съм тествал, но принципа е същия, има НАТ) предполагам може да се гледа през портала в страницата на оператора. Само дето за него е нужна регистрация с смс, а аз при купуването на картата не си дадох личните данни и съответно като нерегистрирана сим карта по закон не са активирани гласови и смс услуги, така че - параграф 22.

Публикувай отговор