реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> скрипты Python Telit, Вопрос по написанию скриптов на Python для Telit
csm7
сообщение Sep 29 2016, 06:54
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 22-12-08
Пользователь №: 42 674



Доброго времени суток!
Писал скрипт для GL868 на Python Алгоритм следующий Основной скрипт настраивает модуль запускает монитор событий и переводит его в режим малого энергопотребления. Когда приходит входящий звонок монитор событий должен запустить следующий скрипт. Монитор событий срабатывает а скрипт не запускается. Может кто поможет Привожу код где в нем ошибка?

Код
import MOD
import MDM
import SER
import sys

SER.set_speed('115200','8N1')

class SerWriter:
    def __init__(self):
        SER.set_speed('115200','8N1')

    def write(self,s):
        SER.send(s+'\r')

sys.stdout = sys.stderr = SerWriter()

def checkNetwork():
    MOD.sleep(20)
    REC_TIME = 200
    for _ in range(10):
        MDM.send('AT+CREG?\r',0)
        res = MDM.receive(REC_TIME)
        if (res.find('0,1')!=-1): return 1
        else: MOD.sleep(50)
    return 0


print "Start"
MDM.send('AT+CLIP=1\r',0)


MDM.send('AT#ENAEVMONI=0\r',0) # clear all evants
MDM.send('AT#ENAEVMONICFG=3,1,2\r',0) #
MDM.send('AT#EVMONI="RING",0,1,1\r',0) #Ring 1-th timeout 2 minute
a = MDM.send('AT#EVMONI="RING",0,0,"AT#ESCRIPT="runRING.pyo";AT#EXECSCR"\r',0) # Запуск скрипта по обработке входящего звонка
print "runRING.py Ok " + str(a)
MDM.send('AT#EVMONI="RING",1\r',0)
MDM.send('AT#ENAEVMONI=1\r',0) # set all evants
#MDM.send('AT&W\r',0)
print "MONI = Ok " + str(a)


runRING.pyo
Код

import MOD
import MDM
import sys


MDM.send('AT\r',5) #



Go to the top of the page
 
+Quote Post
Nixon
сообщение Sep 29 2016, 07:50
Сообщение #2


Гуру
******

Группа: Админы
Сообщений: 2 723
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



Я поступал проще:
Код
# запускаем пользовательское приложение
try:
    import user
except: pass
где user - это пользовательский скрипт user.pyo
На try-exсept не обращайте внимания - это просто защита от глюков в пользовательском приложении


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
csm7
сообщение Sep 30 2016, 13:42
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 22-12-08
Пользователь №: 42 674



Спасибо за совет
Я обнаружил что в строке
a = MDM.send('AT#EVMONI="RING",0,0,"AT#ESCRIPT="runRING.pyo";AT#EXECSCR"\r',0) # Запуск скрипта по обработке входящего звонка
указано две команды "AT#ESCRIPT="runRING.pyo";AT#EXECSCR", которые должны выполнятся по срабатыванию монитора событий Однако наличие скобок "runRING.pyo" нарушает конструкцию В документации вместо скобок советуют использовать символ \22 Но и это не помогает
Go to the top of the page
 
+Quote Post
csm7
сообщение Feb 5 2017, 09:49
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 22-12-08
Пользователь №: 42 674



Появилась необходимость сохранять данные в файле на SIM карте или в памяти модуля GSM. Позволяет скриптовый язык Python сохранять и и считывать файлы данных?
Go to the top of the page
 
+Quote Post
smalcom
сообщение Feb 5 2017, 16:16
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 290
Регистрация: 26-06-07
Пользователь №: 28 718



да
Go to the top of the page
 
+Quote Post
Nixon
сообщение Feb 6 2017, 11:30
Сообщение #6


Гуру
******

Группа: Админы
Сообщений: 2 723
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



для примера работа с SIM:
Код
# КЛАСС РАБОТЫ С НАСТРОЙКАМИ В SIM карте
class CCfg:
    def __init__ (self):
        try:
            # установили хранилище для телефонной книги на SIM карту
            CMD('AT+CPBS="SM"\r', 10)
            # ожидаем готовность SIM карты (фейковое чтение)
            while 1:
                res = CMD('AT+CPBR=50\r', 10)
                if (res[len(res) - 1] != 'ERROR'):
                    break
                else:
                    MOD.sleep(1)
        except:
            pass
    # функция чтения переменной из SIM карты
    def getvar (self, index):
        data = ''
        try:
            res = CMD('AT+CPBR=' + str(50 + index) + '\r', 10)
            if (res[0].find('+CPBR: ' + str(50 + index)) != -1):
                data = res[0].split('"')[1]
        except:
            pass
        return data
    # функция записи переменной на SIM карту
    def setvar (self, index, data):
        return CMD('AT+CPBW=' + str(50 + index) + ',' + str(data) + '\r', 10)


и пример с файлами:
Код
# ЧТЕНИЕ ИЗ ФАЙЛА КОНФИГУРАЦИИ ПАРАМЕТРОВ GPRS И FTP
def GET_CFG ():
    apn = ext = ftp = ''
    try:
        # открываем файл конфигурации программы обновления
        cfg = open('boot.cfg', "r")
        apn = cfg.readline().replace('\r\n', '')
        ext = cfg.readline().replace('\r\n', '')
        ftp = cfg.readline().replace('\r\n', '')
        cfg.close()
    except: pass
    # возвращаем параметры программы обновления
    return apn, ext, ftp
Тут только чтение, как записывать думаю понятно будет


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
csm7
сообщение Feb 7 2017, 14:06
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 22-12-08
Пользователь №: 42 674



Спасибо, интересные идеи
Go to the top of the page
 
+Quote Post
energostart
сообщение Feb 7 2018, 12:07
Сообщение #8





Группа: Новичок
Сообщений: 3
Регистрация: 6-01-18
Пользователь №: 100 945



Цитата(csm7 @ Sep 29 2016, 07:54) *
Доброго времени суток!
Писал скрипт для GL868 на Python Алгоритм следующий Основной скрипт настраивает модуль запускает монитор событий и переводит его в режим малого энергопотребления. Когда приходит входящий звонок монитор событий должен запустить следующий скрипт. Монитор событий срабатывает а скрипт не запускается. Может кто поможет Привожу код где в нем ошибка?

Код
import MOD
import MDM
import SER
import sys

SER.set_speed('115200','8N1')

class SerWriter:
    def __init__(self):
        SER.set_speed('115200','8N1')

    def write(self,s):
        SER.send(s+'\r')

sys.stdout = sys.stderr = SerWriter()

def checkNetwork():
    MOD.sleep(20)
    REC_TIME = 200
    for _ in range(10):
        MDM.send('AT+CREG?\r',0)
        res = MDM.receive(REC_TIME)
        if (res.find('0,1')!=-1): return 1
        else: MOD.sleep(50)
    return 0


print "Start"
MDM.send('AT+CLIP=1\r',0)


MDM.send('AT#ENAEVMONI=0\r',0) # clear all evants
MDM.send('AT#ENAEVMONICFG=3,1,2\r',0) #
MDM.send('AT#EVMONI="RING",0,1,1\r',0) #Ring 1-th timeout 2 minute
a = MDM.send('AT#EVMONI="RING",0,0,"AT#ESCRIPT="runRING.pyo";AT#EXECSCR"\r',0) # Запуск скрипта по обработке входящего звонка
print "runRING.py Ok " + str(a)
MDM.send('AT#EVMONI="RING",1\r',0)
MDM.send('AT#ENAEVMONI=1\r',0) # set all evants
#MDM.send('AT&W\r',0)
print "MONI = Ok " + str(a)


runRING.pyo
Код

import MOD
import MDM
import sys


MDM.send('AT\r',5) #



Требуется помощь в коррекции скрипта для Telit GL868. Работу оплачу
Go to the top of the page
 
+Quote Post
csm7
сообщение Mar 13 2018, 06:35
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 22-12-08
Пользователь №: 42 674



Ув коллеги в процессе отлаживания скрипта под GL868-DUAL V3 (AT+CGMR 16.01.181) обнаружил, что не работает команда
CODE
MDM.send('AT+CPBW=50,' + str(abonent) + ',145,smsNum\r', 15)


Согласно документации переменные str(abonent) и smsNum должны находиться в кавычках (") Пробовал всячески прописать кавычки но пока безрезультатно

При вожу функцию в которой сбоит эта команда Может не в команде дело а в задержках
CODE
def findCall(self):
out = 0
while (1==1):
res = MDM.receive(10)
if (res.find('+CLIP:') != -1):
abonent = res.split('"')[1]
MDM.send('AT+CPBF=' + str(abonent) + '\r', 0)
res = MDM.receive(1)
if (res.find('ERROR') == -1):
MDM.send('ata\r', 1)
SER.send('Connenct ' + str(abonent) + '\r\n')
#MDM.send('AT+CPBW=50,' + str(abonent) + ',145,smsNum\r', 15)
res = MDM.receive(30)
SER.send(str(res))
out = 1
else:
MDM.send('ath0\r', 2)
SER.send('Disconnect\r\n')
out = -1
break
return out


Сообщение отредактировал csm7 - Mar 13 2018, 06:37
Go to the top of the page
 
+Quote Post
molecul
сообщение Mar 14 2018, 05:41
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 19-01-11
Из: СПб
Пользователь №: 62 326



Цитата(csm7 @ Mar 13 2018, 09:35) *
Ув коллеги в процессе отлаживания скрипта под GL868-DUAL V3 (AT+CGMR 16.01.181) обнаружил, что не работает команда
CODE
MDM.send('AT+CPBW=50,' + str(abonent) + ',145,smsNum\r', 15)


Согласно документации переменные str(abonent) и smsNum должны находиться в кавычках (") Пробовал всячески прописать кавычки но пока безрезультатно

При вожу функцию в которой сбоит эта команда Может не в команде дело а в задержках
CODE
def findCall(self):
out = 0
while (1==1):
res = MDM.receive(10)
if (res.find('+CLIP:') != -1):
abonent = res.split('"')[1]
MDM.send('AT+CPBF=' + str(abonent) + '\r', 0)
res = MDM.receive(1)
if (res.find('ERROR') == -1):
MDM.send('ata\r', 1)
SER.send('Connenct ' + str(abonent) + '\r\n')
#MDM.send('AT+CPBW=50,' + str(abonent) + ',145,smsNum\r', 15)
res = MDM.receive(30)
SER.send(str(res))
out = 1
else:
MDM.send('ath0\r', 2)
SER.send('Disconnect\r\n')
out = -1
break
return out

+CPBF ищет не номер (который вы получаете из +CLIP), а имя из телефонной книги, соответственно вы никогда не попадете в ветку с +CPBW
Go to the top of the page
 
+Quote Post
csm7
сообщение Mar 19 2018, 16:33
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 22-12-08
Пользователь №: 42 674



Код
Send: at+cpbf=+38067*******<cr><lf>
at+cpbf=+38067******

+CPBF: 51,"+38067*******",145,"+38067*******"

OK


По алгоритму все работает нормально. Проблема оказалась в том что когда трубка поднята нет возможности записывать номер в телефонную книгу


Доброго времени суток Появился другой вопрос Как отослать СМС записанному в телефонной книге абоненту. Номер ячейки известен. а также известно ник этого номера в телефонной книге. Определять мобильный номер нет желания, где-то видел команду - отсылает СМС по номеру ячейки или по нику записанного в телефонной книге абонента

Сообщение отредактировал csm7 - Mar 19 2018, 16:47
Go to the top of the page
 
+Quote Post
csm7
сообщение Mar 20 2018, 07:27
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 22-12-08
Пользователь №: 42 674



Доброго времени суток!

В модуле GL868 работает скрипт. Вопрос . Запустится ли при этом другой скрипт если придет СМС с кодом запуска скрипта типа
Код
AT#ESCRIPT="user.pyo";#execscr;\r


И еще по ходу один вопрос.
Работает скрипт - в какой-то момент он запускает другой скрипт. Возможно ли запускаемому скрипту передать параметры с работающего скрипта

Сообщение отредактировал csm7 - Mar 20 2018, 07:28
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2018 - 22:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01058 секунд с 7
ELECTRONIX ©2004-2016