#include <WiFi.h>
#include <WiFiClient.h>
// Configuración WiFi
const char* ssid = "RED";
const char* password = "clave";
// Configuración del servidor (AlmaLinux)
const char* serverIP = "192.168.0.2"; // Reemplaza con la IP de tu servidor AlmaLinux
const uint16_t serverPort = 12345; // Puerto donde el servidor escuchará
WiFiClient client;
void setup() {
Serial.begin(115200); // Inicia el puerto serie para depuración
WiFi.begin(ssid, password);
Serial.println("Conectando a WiFi...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConexión WiFi establecida");
Serial.print("Dirección IP: ");
Serial.println(WiFi.localIP());
}
void loop() {
// Intentar conectar al servidor
if (!client.connected()) {
Serial.println("Conectando al servidor...");
if (client.connect(serverIP, serverPort)) {
Serial.println("Conexión al servidor exitosa");
} else {
Serial.println("Error al conectar al servidor");
delay(5000); // Espera antes de intentar reconectar
return;
}
}
// Generar y enviar un número aleatorio
int randomValue = random(0, 100); // Número aleatorio entre 0 y 99
client.print(String(randomValue) + "\n");
// Imprimir en el puerto serie
Serial.print("Enviado: ");
Serial.println(randomValue);
delay(5000); // Enviar datos cada 5 segundos
sudo nano tcp_server.py
import socket
# Configuración del servidor
HOST = '0.0.0.0' # Escuchar en todas las interfaces
PORT = 12345 # Puerto para escuchar
# Crear socket TCP
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((HOST, PORT))
server_socket.listen(5)
print(f"Servidor escuchando en {HOST}:{PORT}")
while True:
client_socket, client_address = server_socket.accept()
print(f"Conexión establecida con {client_address}")
while True:
data = client_socket.recv(1024).decode()
if not data:
break
print(f"Recibido: {data.strip()}")
client_socket.close()
print(f"Conexión cerrada con {client_address}")
python3 tcp_server.py
sudo firewall-cmd --add-port=12345/tcp --permanent
sudo firewall-cmd --reload
intento 2
#include <WiFi.h>
#include <WiFiClient.h>
// Configuración WiFi
const char* ssid = "DIAZ";
const char* password = "clave";
// Configuración del servidor (AlmaLinux)
const char* serverIP = "192.168.0.2"; // Reemplaza con la IP de tu servidor AlmaLinux
const uint16_t serverPort = 12345; // Puerto donde el servidor escuchará
WiFiClient client;
// Configuración del pin analógico
#define LM35_2 35 // Pin analógico para el LM35 (voltaje simulado)
void setup() {
Serial.begin(115200); // Inicia el puerto serie para depuración
WiFi.begin(ssid, password);
Serial.println("Conectando a WiFi...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConexión WiFi establecida");
Serial.print("Dirección IP: ");
Serial.println(WiFi.localIP());
}
void loop() {
// Intentar conectar al servidor
if (!client.connected()) {
Serial.println("Conectando al servidor...");
if (client.connect(serverIP, serverPort)) {
Serial.println("Conexión al servidor exitosa");
} else {
Serial.println("Error al conectar al servidor");
delay(5000); // Espera antes de intentar reconectar
return;
}
}
// Leer el valor del LM35 en bits
int analogValue = analogRead(LM35_2);
// Enviar el valor al servidor
client.print(String(analogValue) + "\n");
// Imprimir en el puerto serie
Serial.print("Enviado: ");
Serial.println(analogValue);
// Verificar si el valor supera 1000 (en binario)
if (analogValue > 1000) {
Serial.println("Valor supera 1000 en binario. Activando llamada a 1001...");
llamarAsterisk();
}
delay(5000); // Enviar datos cada 5 segundos
}
void llamarAsterisk() {
WiFiClient asteriskClient;
const char* asteriskIP = "192.168.0.2"; // IP del servidor Asterisk
const uint16_t asteriskPort = 5038; // Puerto de Asterisk AMI (predeterminado)
if (asteriskClient.connect(asteriskIP, asteriskPort)) {
// Login a AMI (Asterisk Manager Interface)
asteriskClient.print("Action: Login\r\n");
asteriskClient.print("Username: admin\r\n"); // Ajustar según tu configuración
asteriskClient.print("Secret: admin\r\n"); // Ajustar según tu configuración
asteriskClient.print("\r\n");
delay(100);
// Comando para iniciar llamada
asteriskClient.print("Action: Originate\r\n");
asteriskClient.print("Channel: SIP/1001\r\n");
asteriskClient.print("Context: default\r\n");
asteriskClient.print("Exten: 1001\r\n");
asteriskClient.print("Priority: 1\r\n");
asteriskClient.print("CallerID: Alerta LM35 <1003>\r\n");
asteriskClient.print("\r\n");
delay(100);
asteriskClient.stop();
Serial.println("Llamada a 1001 enviada.");
} else {
Serial.println("Error al conectar con Asterisk.");
}
sudo nano /etc/asterisk/manager.conf
[admin]
secret = admin
read = all
write = all
sudo systemctl restart asterisk
Llamar a 1001 a voluntad
sudo nano call_1001.py
import socket
# Configuración de Asterisk Manager Interface (AMI)
ASTERISK_HOST = '127.0.0.1' # Dirección IP del servidor Asterisk
ASTERISK_PORT = 5038 # Puerto de AMI
ASTERISK_USER = 'admin' # Usuario definido en manager.conf
ASTERISK_SECRET = 'admin' # Contraseña definida en manager.conf
def llamar_a_1001():
try:
# Crear socket para conexión AMI
ami_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ami_socket.connect((ASTERISK_HOST, ASTERISK_PORT))
# Login en AMI
ami_socket.sendall(b"Action: Login\r\n")
ami_socket.sendall(f"Username: {ASTERISK_USER}\r\n".encode())
ami_socket.sendall(f"Secret: {ASTERISK_SECRET}\r\n".encode())
ami_socket.sendall(b"\r\n")
# Comando Originate para iniciar llamada
ami_socket.sendall(b"Action: Originate\r\n")
ami_socket.sendall(b"Channel: PJSIP/1001\r\n")
ami_socket.sendall(b"Context: default\r\n")
ami_socket.sendall(b"Exten: 1001\r\n")
ami_socket.sendall(b"Priority: 1\r\n")
ami_socket.sendall(b"CallerID: Prueba <1003>\r\n")
ami_socket.sendall(b"\r\n")
print("Llamada a 1001 enviada.")
ami_socket.close()
except Exception as e:
print(f"Error al conectar con Asterisk: {e}")
# Ejecutar la función para llamar a 1001
if __name__ == "__main__":
llamar_a_1001()
sudo nano /etc/asterisk/manager.conf
sudo systemctl restart asterisk
sudo nano /etc/asterisk/manager.conf
[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0
[admin]
secret = admin
read = all
write = all
sudo systemctl restart asterisk
sudo netstat -tuln | grep 5038
python3 call_1001.py
Intento continuo
sudo nano continuous_call.py
import socket
import time
# Configuración de Asterisk Manager Interface (AMI)
ASTERISK_HOST = '127.0.0.1' # Dirección IP del servidor Asterisk
ASTERISK_PORT = 5038 # Puerto de AMI
ASTERISK_USER = 'admin' # Usuario definido en manager.conf
ASTERISK_SECRET = 'admin' # Contraseña definida en manager.conf
def iniciar_llamada():
try:
# Crear socket para conexión AMI
ami_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ami_socket.connect((ASTERISK_HOST, ASTERISK_PORT))
# Login en AMI
ami_socket.sendall(b"Action: Login\r\n")
ami_socket.sendall(f"Username: {ASTERISK_USER}\r\n".encode())
ami_socket.sendall(f"Secret: {ASTERISK_SECRET}\r\n".encode())
ami_socket.sendall(b"\r\n")
time.sleep(1)
# Comando Originate para iniciar llamada
ami_socket.sendall(b"Action: Originate\r\n")
ami_socket.sendall(b"Channel: SIP/1001\r\n")
ami_socket.sendall(b"Context: default\r\n")
ami_socket.sendall(b"Exten: 1001\r\n")
ami_socket.sendall(b"Priority: 1\r\n")
ami_socket.sendall(b"CallerID: Modo Continuo <1003>\r\n")
ami_socket.sendall(b"\r\n")
print("Llamada enviada a 1001. Esperando respuesta...")
# Leer la respuesta de Asterisk
while True:
data = ami_socket.recv(1024).decode()
if "Hangup" in data or "answered" in data.lower():
print("La llamada fue contestada o finalizada.")
break
ami_socket.close()
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
try:
while True:
iniciar_llamada()
time.sleep(1) # Espera un segundo antes de intentar otra llamada
except KeyboardInterrupt:
print("\nModo continuo finalizado. No se realizarán más llamadas.")
python3 continuous_call.py
#include <WiFi.h>
#include <WiFiClient.h>
// Configuración WiFi
const char* ssid = "DIAZ1"; // Nombre de la red WiFi
const char* password = "clave"; // Contraseña de la red WiFi
// Configuración del servidor (AlmaLinux)
const char* serverIP = "192.168.0.2"; // Reemplaza con la IP de tu servidor AlmaLinux
const uint16_t serverPort = 12345; // Puerto donde el servidor escuchará
WiFiClient client;
// Configuración del pin analógico
#define LM35_2 35 // Pin analógico para el LM35 (voltaje simulado)
// Variables de control
int delayLow = 500; // Delay en ms para valores menores a 1000
int delayHigh = 2000; // Delay en ms para valores mayores a 1000
void setup() {
Serial.begin(115200); // Inicia el puerto serie para depuración
WiFi.begin(ssid, password);
Serial.println("Conectando a WiFi...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConexión WiFi establecida");
Serial.print("Dirección IP: ");
Serial.println(WiFi.localIP());
}
void loop() {
// Intentar conectar al servidor
if (!client.connected()) {
Serial.println("Conectando al servidor...");
if (client.connect(serverIP, serverPort)) {
Serial.println("Conexión al servidor exitosa");
} else {
Serial.println("Error al conectar al servidor");
delay(5000); // Espera antes de intentar reconectar
return;
}
}
// Leer el valor del LM35 en bits
int analogValue = analogRead(LM35_2);
String binValue = String(analogValue, BIN); // Convertir a binario
// Enviar el valor al servidor
client.print(binValue + "\n");
// Imprimir en el puerto serie
Serial.print("Enviado: ");
Serial.print(analogValue);
Serial.print(" (binario: ");
Serial.print(binValue);
Serial.println(")");
// Ajustar el delay según el valor
if (analogValue > 1000) {
delay(delayHigh);
} else {
delay(delayLow);
}
}
sudo nano call_control.py
import socket
import subprocess
# Configuración del servidor TCP
HOST = '0.0.0.0' # Escuchar en todas las interfaces
PORT = 12345 # Puerto para escuchar
# Variables de control
llamada_activa = False
proceso_llamada = None
def iniciar_llamada():
global llamada_activa, proceso_llamada
if llamada_activa:
return # No iniciar otra llamada si ya está en progreso
try:
# Ejecutar el script continuous_call.py
print("Iniciando llamada al 1001...")
proceso_llamada = subprocess.Popen(['python3', 'continuous_call.py'])
llamada_activa = True
except Exception as e:
print(f"Error al iniciar la llamada: {e}")
def detener_llamada():
global llamada_activa, proceso_llamada
if not llamada_activa:
return # No hay llamada en progreso
try:
# Terminar el proceso de continuous_call.py
print("Deteniendo llamada al 1001...")
if proceso_llamada:
proceso_llamada.terminate()
proceso_llamada = None
llamada_activa = False
except Exception as e:
print(f"Error al detener la llamada: {e}")
# Servidor para recibir datos del ESP32
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((HOST, PORT))
server_socket.listen(5)
print(f"Servidor escuchando en {HOST}:{PORT}")
while True:
client_socket, client_address = server_socket.accept()
print(f"Conexión establecida con {client_address}")
while True:
try:
data = client_socket.recv(1024).decode().strip()
if not data:
break
# Validar que el dato recibido es binario válido
try:
decimal_value = int(data, 2) # Convertir de binario a decimal
print(f"Recibido: {data} (decimal: {decimal_value})")
# Lógica para iniciar o detener la llamada
if decimal_value > 1000:
iniciar_llamada()
else:
detener_llamada()
except ValueError:
print(f"Dato inválido recibido: {data}")
except Exception as e:
print(f"Error: {e}")
break
client_socket.close()
print(f"Conexión cerrada con {client_address}")
phyton3 call_control.py
sudo nano led_on.py
import socket
ESP_IP = "192.168.0.102" # Dirección IP del ESP32
ESP_PORT = 12345 # Puerto del ESP32
# Crear conexión TCP con el ESP32
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((ESP_IP, ESP_PORT))
s.sendall(b"1\n") # Enviar el comando "1" para encender el LED
print("Comando enviado: 1 (LED ENCENDIDO)")
sudo nano led_off.py
import socket
ESP_IP = "192.168.0.102" # Dirección IP del ESP32
ESP_PORT = 12345 # Puerto del ESP32
# Crear conexión TCP con el ESP32
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((ESP_IP, ESP_PORT))
s.sendall(b"0\n") # Enviar el comando "0" para apagar el LED
print("Comando enviado: 0 (LED APAGADO)")
python3 led_off.py
sudo nano /etc/asterisk/extensions.conf
[ivr_menu]
exten => 777,1,Answer()
same => n,Playback(welcome) ; Reproduce un audio de bienvenida (cámbialo por tu archivo)
same => n,WaitExten(10) ; Espera 10 segundos para recibir una entrada
exten => 1,1,NoOp(Opción 1 seleccionada)
same => n,System(python3 /ruta/a/led_on.py) ; Ejecuta el script para encender el LED
same => n,Playback(led-on) ; Mensaje de confirmación (opcional)
same => n,Goto(ivr_menu,777,1) ; Regresa al menú
exten => 2,1,NoOp(Opción 2 seleccionada)
same => n,System(python3 /ruta/a/led_off.py) ; Ejecuta el script para apagar el LED
same => n,Playback(led-off) ; Mensaje de confirmación (opcional)
same => n,Goto(ivr_menu,777,1) ; Regresa al menú
exten => i,1,Playback(invalid) ; Opción inválida
same => n,Goto(ivr_menu,777,1) ; Regresa al menú
exten => t,1,Playback(timeout) ; Si el usuario no presiona nada
same => n,Goto(ivr_menu,777,1) ; Regresa al menú
sox tu-audio.wav -r 8000 -c 1 welcome.gsm
sudo mv welcome.gsm /var/lib/asterisk/sounds/
sudo mv led-on.gsm /var/lib/asterisk/sounds/
sudo mv led-off.gsm /var/lib/asterisk/sounds/
sudo asterisk -rx "dialplan reload"
sudo nano /etc/asterisk/pjsip.conf
[1001]
type = endpoint
context = ivr_menu ; Este contexto debe coincidir con el configurado en extensions.conf
auth = auth1001
aors = 1001
sudo asterisk -rx "pjsip reload"
sudo nano /etc/asterisk/extensions.conf
[ivr_menu]
exten => 777,1,Answer()
same => n,Playback(welcome) ; Audio de bienvenida
same => n,WaitExten(10) ; Espera 10 segundos para entrada
exten => 1,1,NoOp(Opción 1 seleccionada)
same => n,System(python3 /root/led_on.py) ; Ejecuta el script para encender el LED
same => n,Playback(led-on) ; Mensaje de confirmación (opcional)
same => n,Goto(ivr_menu,777,1) ; Regresa al menú
exten => 2,1,NoOp(Opción 2 seleccionada)
same => n,System(python3 /root/led_off.py) ; Ejecuta el script para apagar el LED
same => n,Playback(led-off) ; Mensaje de confirmación (opcional)
same => n,Goto(ivr_menu,777,1) ; Regresa al menú
exten => i,1,Playback(invalid)
same => n,Goto(ivr_menu,777,1)
exten => t,1,Playback(timeout)
same => n,Goto(ivr_menu,777,1)
ls /var/lib/asterisk/sounds/
sudo asterisk -rx "dialplan reload"
sudo nano /etc/asterisk/asterisk.conf
[options]
execincludes = yes
chmod +x /root/led_on.py
chmod +x /root/led_off.py
exten => 1,1,NoOp(Opción 1 seleccionada)
same => n,System(python3 /usr/local/bin/led_on.py)
same => n,Playback(prueba)
same => n,Goto(ivr_menu,777,1)
exten => 2,1,NoOp(Opción 2 seleccionada)
same => n,System(python3 /usr/local/bin/led_off.py)
same => n,Playback(prueba)
same => n,Goto(ivr_menu,777,1)
sudo asterisk -rx "dialplan reload"
No hay comentarios.:
Publicar un comentario