First version

This commit is contained in:
MMX 2025-11-01 13:26:50 +03:00 committed by GitHub
parent 5e1a17d330
commit 431242800e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 134 additions and 0 deletions

134
m2p.py Normal file
View File

@ -0,0 +1,134 @@
import re
import sys
import meshtastic
import meshtastic.tcp_interface
import time
import os
from pubsub import pub
logs = False
capcodes = []
def msg_transliterator(text):
search = r"абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ@"
replace = r"ABWGDEEVZIJKLMNOPRSTUFHC^[]XYX\@Qabwgdeevzijklmnoprstufhc~{}xyx|@qA"
trans = str.maketrans(search, replace)
return text.translate(trans)
def msg_transliterator_en_to_ru(text):
replace = r"абцдефгхийклмнопярстувщхызАБЦДЕФГХИЙКЛМНОПЯРСТУВЩХЫЗ"
search = r"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
trans = str.maketrans(search, replace)
return text.translate(trans)
def msg_transliterator_ru_to_en(text):
search = r"абцдеёфгхийклмнопярстувжщызъьэючшАБЦДЕЁФГХИЙКЛМНОПЯРСТУВЩЫЗЪЬЭЮЧШЖ"
replace = r"abcdeefghijklmnopqrstuvxwyz''eu4wABCDEEFGHIJKLMNOPQRSTUVWYZ''EU4WX"
trans = str.maketrans(search, replace)
return text.translate(trans)
def msg_regex_cut(text):
res = re.sub(r"[^a-zA-ZА-Яа-я0-9 =#@\n$%&*()_+';./:>?,<!ёЁ-]+", "*", text)
return res
def send_msg_to_pgr(capcode, freq, mesg):
runcheck_command = 'pidof pocsag >/dev/null && echo "run" || echo "nf"'
rstream = os.popen(runcheck_command)
routput = rstream.read()
print(routput)
while routput == "run":
print("pocsag is running - sleeping for 8 sec and retry")
time.sleep(8)
nrstream = os.popen(runcheck_command)
nroutput = nrstream.read()
if nroutput == "nf":
break
else:
continue
else:
print("pocsag is not running - executing")
command = 'echo $(echo "'+ capcode +':'+ mesg +'") | sudo /home/pi/rpitx/pocsag -f "'+ freq +'" -b 3 -r 1200'
print(command)
stream = os.popen(command)
output = stream.read()
dell = output
def onConnect(interface, topic=pub.AUTO_TOPIC):
if logs:
print("Connected to the tcp interface.")
def onLost(interface, packet):
if logs:
print("Connection to the tcp interface has been lost")
def onUpdated(interface, node):
if logs:
print("Node has been updated.")
def onReceive(interface, packet):
try:
packet_decoded = packet.get('decoded')
if packet_decoded:
msg = packet_decoded.get('text')
else:
msg = False
if msg:
fromidsender = str(packet.get('fromId'))
if fromidsender == "!FRIENDLYNODE1":
fromidsender = "ProperName1"
elif fromidsender == "!FRIENDLYNODE2":
fromidsender = "ProperName2"
elif fromidsender == "!FRIENDLYNODE3":
fromidsender = "ProperName3"
elif fromidsender == "!FRIENDLYNODE4":
fromidsender = "ProperName4"
#else:
#do nothing
message = fromidsender + ": " + msg + " (SNR: " + str(packet.get('rxSnr')) + ", RSSI: " + str(packet.get('rxRssi')) + ", hoplim: " + str(packet.get('hopLimit')) + ")"
if logs:
print("packet decoded")
print(f"message: {message}")
is_ping = msg.startswith("/ping")
if is_ping and str(packet.get('toId')) == "!YOURNODEID":
pong = "pong" + " [SNR: " + str(packet.get('rxSnr')) + ", RSSI: " + str(packet.get('rxRssi')) + ", hoplim: " + str(packet.get('hopLimit')) + "]"
interface.sendText(pong, destinationId=str(packet.get('fromId')))
if logs:
print("ping received, sending pong back via mesh")
print(pong)
return
print("sending to pocsag")
print(message)
prepared_msg = msg_regex_cut(message)
rmsg = msg_transliterator_en_to_ru(prepared_msg)
sendmsg = msg_transliterator(rmsg)
#if (capcode == '777'):
# sendmsg = msg_transliterator_ru_to_en(prepared_msg)
print(sendmsg)
if str(packet.get('toId')) == "!YOURNODEID":
send_msg_to_pgr("0000123", "157575000", sendmsg) # DIRECT MESSAGES WITH SOUND
else:
send_msg_to_pgr("0001123A", "157575000", sendmsg) # MAIL MUTED CAPCODE
except Exception as ex:
print (ex)
pass
pub.subscribe(onReceive, "meshtastic.receive")
pub.subscribe(onConnect, "meshtastic.connection.established")
pub.subscribe(onLost, "meshtastic.connection.lost")
pub.subscribe(onUpdated, "meshtastic.node.updated")
try:
interface = meshtastic.tcp_interface.TCPInterface(hostname="123.123.123.123") # your node IP address
while True:
time.sleep(1000)
except Exception as ex:
print(f"Error: Could not connect to tcp interface: {ex}")
sys.exit(1)