miércoles, 2 de abril de 2025

Tecno chismes

How to get the IP address of hotspot client

cmb.py

#!/usr/bin/env python3

# Thanks to

# Rui Santos & Sara Santos - Random Nerd Tutorials

# and Anthony - stackoverflow

# for the ideas

import sys

import requests

import subprocess

import time

# Wi-Fi credentials

ssid = 'YOUR-SSID'

password = 'YOUR-PASSWORD'

# Your phone number in international format (including the + sign)

phone_number = 'YOUR-PHONE-NUMBER'

# Your callmebot API key

api_key = 'YOUR-API-KEY'

# Wi-Fi functions

def what_wifi():

    process = subprocess.run(['nmcli', '-t', '-f', 'ACTIVE,SSID', 'dev', 'wifi'], stdout=subprocess.PIPE)

    if process.returncode == 0:

        wifis = process.stdout.decode('utf-8').strip().splitlines()

        for wifi in wifis:

            if  "yes" in wifi:

                return(wifi.split(':')[1])

    else:

        return ''

def is_connected_to(ssid: str):

    return what_wifi() == ssid

def scan_wifi():

    process = subprocess.run(['nmcli', '-t', '-f', 'SSID,SECURITY,SIGNAL', 'dev', 'wifi'], stdout=subprocess.PIPE)

    if process.returncode == 0:

        return process.stdout.decode('utf-8').strip().split('\n')

    else:

        return []

def is_wifi_available(ssid: str):

    return ssid in [x.split(':')[0] for x in scan_wifi()]

def connect_to(ssid: str, password: str):

    if not is_wifi_available(ssid):

#        print(ssid, ": not available")

        return False

    subprocess.call(['nmcli', 'd', 'wifi', 'connect', ssid, 'password', password])

    return is_connected_to(ssid)

def connect_to_saved(ssid: str):

    if not is_wifi_available(ssid):

#        print(ssid, ": not available")

        return False

    subprocess.call(['nmcli', 'c', 'up', ssid])

    return is_connected_to(ssid)


def send_message(phone_number, api_key, message):

    # Set the URL

    url = f'https://api.callmebot.com/whatsapp.php?phone={phone_number}&text={message}&apikey={api_key}'

    # Make the request

    response = requests.get(url)

    # check if it was successful

    if (response.status_code == 200):

        print('Success!', flush=True)

    else:

        print('Error: ')

        print(response.text, flush=True)

def get_IP():

    wifi_IP = subprocess.check_output(['hostname', '-I'], encoding="utf-8")

    if wifi_IP is not None:

        return(wifi_IP)

    return("No IP")

try:

    while True:

        if is_connected_to(ssid):

            print("conectado a "+ssid, flush=True)

            time.sleep(180)

        elif is_wifi_available(ssid):

            print(ssid+" disponible", flush=True)

            if connect_to_saved(ssid):

                print("enviar IP", flush=True)

                message = get_IP()

                print(message, flush=True)

                send_message(phone_number, api_key, message)

            else:

                print("No se ha conectado", flush=True)

                time.sleep(60)

        else:

            time.sleep(180)

except Exception as e:

    print('Error:', e)


cmb.sh


#!/bin/bash

echo "cmb starts:"

python3 cmb.py

echo $?

echo ":cmb.piExit "


cmb.service


[Unit]

Description=Run cmb.sh script on Boot with Retry

After=network.target

[Service]

WorkingDirectory=/home/pi/work

ExecStart=/home/pi/work/cmb.sh

StandardOutput=append:/home/pi/work/cmb.out

StandardError=append:/home/pi/work/cmb.err

Restart=always

User=root

[Install]

WantedBy=multi-user.target


Enable your service


1.

Create your service file. (cmb.service)

2.

Copy it to /etc/systemd/system:

sudo cp cmb.service /etc/systemd/system/

3.

Update systemd’s internal data:

sudo systemctl daemon-reload

4.

Enable your service

sudo systemctl enable cmb

5.

Start it

sudo systemctl start cmb


How to register your phone with CallMeBot


https://www.callmebot.com/blog/free-api-whatsapp-messages/


miércoles, 27 de noviembre de 2024

Crónica de dos exposiciones

La de Durand-Ruel en la sala Recoletos, muy breve: los muy famosos son muy famosos por algo.

La del premio de otoño de AEDA en Sanchinarro. Me atrevería a decir que el premio es más una muestra de agradecimiento que de admiración. Las exposiciones de pintura, salvo muy felices excepciones, nos resultan tan aburridas que cualquier esfuerzo por salir del pozo de indiferencia en que nos encontramos se recompensa, a lo mejor merecidamente, sin ninguna otra consideración. Teniendo en cuenta siempre que la pintura basura promedio es seguramente más relevante que nuestra mejor crítica designándola como tal, la obra premiada, técnicamente regular, no se puede destacar tampoco como especialmente original. Ni la idea del cuadro dentro del cuadro ni la disociación entre el tema y el motivo son nuevas, sin embargo si preguntáramos al jurado por las razones del premio, sin duda la originalidad sería la primera. Y, para mí, la única que les divirtió.

Había alguna pequeña obra magistralmente ejecutada, si no digna de desbancar a los premiados sí de recibir alguna mención. Conviene recordar que la calidad está siempre de moda. Nos quejamos de que la pintura no se vende. Si la obra premiada hubiera estado inmersa en un mar de obras de calidad similar a las dos o tres destacables, puede que hubiera seguido teniendo alguna mención como un jocoso agradecimiento, pero todas las demás nos habrían ayudado a mantener el interés por la pintura y, con algo de suerte, a despertar en alguien el deseo de rodearse de algunas de esas obras de arte que, lejos de aburrirle, le han hecho pasar un rato enriquecedor.

viernes, 18 de octubre de 2024

Soledad Sevilla

Pocas veces salgo de una exposición tan enriquecido como esta mañana en el Reina Sofía, con la exposición de Soledad Sevilla, como para moverme a escribir una reseña, yo que no soy crítico de arte, sino un simple admirador. Creo que la última fue la de Alex Katz en el Thyssen, pero ¡¿qué iba yo a escribir de Alex Katz?!

Un único concepto exprimido hasta la perfección, con un gusto sublime y una ejecución exquisita. Ya me había sorprendido en alguna que otra edición de ARCO, pero una muestra extensa, como la que presenta el Reina Sofía, me ha sumergido en un mundo único, personal, sólido, como sólo los grandes artistas saben crear, como también recuerdo la de Alex Katz, que me hace sentir orgulloso de ser un ser humano.

En un momento en que las imágenes generadas por las máquinas se afanan en pasar a las primeras filas, es curioso ver como, desde los trabajos iniciales con imágenes de ordenador, con seguridad en la raíz del estilo personal de Soledad Sevilla, hasta los experimentos actuales, ella crea una obra relevante enormemente alejada, todavía, de lo que cualquier programa de construcción gráfica es capaz de generar hoy.

No pasar por alto la instalación específica de la entrada a la exposición, donde la sombra vertical da al sutil telón de hilos de algodón una presencia tan real como la profundidad que las tramas de color dan a sus cuadros.