Giuseppe Parrello

 

Come gestire i dispositivi Smart MagicHome


In questa pagina fornisco i codici script allo scopo di gestire i dispositivi Smart MagicHome, principalmente controller led e lampadine.


Linea di Comando

Per gestire i dispositivi Smart MagicHome tramite la linea di comando, si prega di prendere nota dei seguenti requisiti:

Per gestire i dispositivi Smart MagicHome, basta eseguire il comando "flux_led" seguito da alcuni parametri. Per avere un elenco dei parametri disponibili, eseguire il comando "flux_led --help", il seguente output mostra i parametri usabili con il comando "flux_led":

Usage: usage: flux_led [-sS10cwpCiltThe] [addr1 [addr2 [addr3] ...].

A utility to control Flux WiFi LED Bulbs.

Options:
  -h, --help            show this help message and exit
  -s, --scan            Search for bulbs on local network
  -S, --scanresults     Operate on scan results instead of arg list
  -i, --info            Info about bulb(s) state
  --getclock            Get clock
  --setclock            Set clock to same as current time on this computer
  -t, --timers          Show timers
  -T NUM MODE SETTINGS, --settimer=NUM MODE SETTINGS
                        Set timer. NUM: number of the timer (1-6). MODE:
                        inactive, poweroff, default, color, preset, or
                        warmwhite. SETTINGS: a string of settings including
                        time, repeatdays or date, and other mode specific
                        settings.   Use --timerhelp for more details.
  --protocol=PROTOCOL   Set the device protocol. Currently only supports
                        LEDENET

  Program help and information option:
    -e, --examples      Show usage examples
    --timerhelp         Show detailed help for setting timers
    -l, --listpresets   List preset codes
    --listcolors        List color names

  Power options (mutually exclusive):
    -1, --on            Turn on specified bulb(s)
    -0, --off           Turn off specified bulb(s)

  Mode options (mutually exclusive):
    -c COLOR, --color=COLOR
                        Set single color mode.  Can be either color name, web
                        hex, or comma-separated RGB triple
    -w LEVELWW, --warmwhite=LEVELWW
                        Set warm white mode (LEVELWW is percent)
    --coldwhite=LEVELCW
                        Set cold white mode (LEVELCW is percent)
    -p CODE SPEED, --preset=CODE SPEED
                        Set preset pattern mode (SPEED is percent)
    -C TYPE SPEED COLORLIST, --custom=TYPE SPEED COLORLIST
                        Set custom pattern mode. TYPE should be jump, gradual,
                        or strobe. SPEED is percent. COLORLIST is a space-
                        separated list of color names, web hex values, or
                        comma-separated RGB triples

  Other options:
    -v, --volatile      Don't persist mode setting with hard power cycle (RGB
                        and WW modes only).

Buona parte dei parametri richiede l'indirizzo IP del dispositivo Smart MagicHome, ad esempio se l'indirizzo IP è 192.168.1.20, per sapere lo stato attuale del dispositivo basta eseguire il comando "flux_led -i 192.168.1.20".
Per avere una lista di esempi di utilizzo, basta eseguire il comando "flux_led -e". Mentre per avere una lista dei comandi per i timer, basta eseguire il comando "flux_led --timerhelp".
Con la linea di comando è possibile impostare anche un flusso di colori, un esempio è il comando " flux_led 192.168.1.20 -C gradual 65 "#0029ff #00ff00 #0000ff #ffff00" " per avere un flusso graduale blu/verde/blu/giallo al 65% di velocità.

 

Linguaggio Python

Il seguente script mostra alcune informazioni sul dispositivo Smart MagicHome, spegne e accende il dispositivo, imposta il colore Rosso e luminosità al 20%, dopo 2 secondi imposta il colore Verde e luminosità al 50% e infine dopo 2 secondi imposta il colore Blue e luminosità al 100% per poi tornare al colore predefinito:

import time
from flux_led import WifiLedBulb

bulbipaddress = "192.168.1.20"

def main():
    bulb = WifiLedBulb(bulbipaddress)
    print (bulb)
    bulb.refreshState()
    redcolor, greencolor, bluecolor = bulb.getRgb()
    bulbstatus = bulb.isOn()
    brightnessval = bulb.brightness
    print("Turn off bulb")
    bulb.turnOff()
    time.sleep(2)
    print("Turn on bulb")
    bulb.turnOn()
    time.sleep(2)
    print("Set Red color + 20% brightness")
    bulb.setRgb(255,0,0, brightness=20)
    time.sleep(2)
    print("Set Green color + 50% brightness")
    bulb.setRgb(0,255,0, brightness=50)
    time.sleep(2)
    print("Set Blue color + 100% brightness")
    bulb.setRgb(0,0,255, brightness=100)
    time.sleep(2)
    print("Set default color")
    bulb.refreshState()
    bulb.setRgb(redcolor, greencolor, bluecolor, brightness=brightnessval)
    
if __name__ == '__main__':
    main()

Il seguente script accende il dispositivo Smart MagicHome, imposta un flusso graduale di colori per 10 secondi, imposta lo stesso flusso di colori ma in modalità Jump per 10 secondi, imposta lo stesso flusso di colori ma in modalità Strobo per 10 secondi e infine torna al colore predefinito:

import time
from flux_led import WifiLedBulb, utils

bulbipaddress = "192.168.1.20"

def getPatternColors(color_list_str):
    str_list = color_list_str.split(' ')
    color_list = []
    for s in str_list:
        c = utils.color_object_to_tuple(s)
        if c is not None:
            color_list.append(c)
        else:
            raise Exception
    return color_list

def main():
    bulb = WifiLedBulb(bulbipaddress)
    bulb.refreshState()
    bulb.turnOn()
    redcolor, greencolor, bluecolor = bulb.getRgb()
    color_list = getPatternColors("#0029ff #00ff00 #0000ff #ffff00")
    print("Set gradual flow")
    bulb.setCustomPattern(color_list, 100, "gradual")
    time.sleep(10)
    print("Set jump flow")
    bulb.setCustomPattern(color_list, 100, "jump")
    time.sleep(10)
    print("Set strobe flow")
    bulb.setCustomPattern(color_list, 100, "strobe")
    time.sleep(10)
    print("Set default color")
    bulb.refreshState()
    bulb.setRgb(redcolor, greencolor, bluecolor)
    
if __name__ == '__main__':
    main()