Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Automatyczna konfiguracja urządzeń Tasmoty i OpenBeken na Windows z cURL HTTP

p.kaczmarek2 08 Mar 2023 14:12 1095 12
  • Automatyczna konfiguracja urządzeń Tasmoty i OpenBeken na Windows z cURL HTTP
    Pokażę tutaj jak można masowo konfigurować i kontrolować urządzenia IoT z wgranym oprogramowaniem Tasmota bądź ze zgodnym z podstawą Tasmoty, wieloplatformowym OpenBeken. Konfiguracja będzie odbywać się poprzez wysyłanie komend konsoli w żądaniu HTTP GET. Pozwoli to np. masowo ustawiać parametry serwera MQTT, albo masowo konfigurować oszczędzanie energii (na Obk), albo np. zmieniać barwę, poziom jasności bądź temperaturę bieli świateł LED. Żądanie GET należy skierować na adres IP urządzenia, docelowym zasobem powinien być podadres cm, natomiast zmienną cmnd, to co w niej zawrzemy zostanie wykonane przez urządzenie.
    Wszystkie skrypty będę uruchamiać na platformie Windows, ale na Linuxie wyglądałoby to analogicznie, tylko nieco inna składania.

    Interfejs HTTP - komendy Tasmoty (i OBK)
    Na początek rozważmy przykładowe żądanie HTTP kontrolujące stan światła lampki z Tasmotą:
    
     http://192.168.0.201/cm?cmnd=POWER%20TOGGLE
    

    Mamy tu trzy segmenty:
    - 92.168.0.201 - to adres naszego urządzenia
    - cm?cmnd= - cm to docelowy zasób, a po pytajniku są parametry zapytania GET, ich format to klucz (tutaj cmnd) a po znaku równości jest wartość
    - POWER%20TOGGLE - to komenda z argumentem, zamiast spacji ustawiamy kod %20
    Komendy możemy wziąć z dokumentacji Tasmoty lub OpenBeken:
    https://github.com/openshwprojects/OpenBK7231T_App/blob/main/docs/commands.md
    https://tasmota.github.io/docs/Commands/
    Kilka komend jednocześnie można wysłać za pomocą backlog. Składnia to:
    
    backlog cmd1; cmd2; cmd3;
    

    Przykład:
    
    http://192.168.0.201/cm?cmnd=backlog%20CT%20500;POWER%20ON;
    


    Odpowiedzi urządzenia
    Te komendy pozwalają też sprawdzać stan urządzenia, a urządzenie odpowiada na nie w formacie JSON. Przykładowo, wysłanie POWER bez argumentu skutkuje:
    
    http://192.168.0.201/cm?cmnd=POWER
    

    otrzymaniem takiej odpowiedzi (to z OBK, w Tasmocie może się śladowo różnić):
    Code: json
    Log in, to see the code

    Dużo informacji o urządzeniu można uzyskać poprzez komendę Status, co można poczytać w dokumentacji Tasmoty.

    Curl - wysyłanie komend bez przeglądarki
    Jak zapewne każdy się domyśla, taki magiczny URL wystarczy wkleić do przeglądarki i komenda zostanie wysłana. To normalne. Wtedy przeglądarka pokaże nam odpowiedź w JSONie, ale nie jest to dla nas wygodne.
    GET można wysłać też na różne inne sposoby.
    Dobrym przykładem takiego sposobu jest biblioteka cURL:
    https://curl.se/
    Repozytorium curl:
    https://github.com/curl/curl
    Opis instalacji:
    https://curl.se/docs/install.html
    FAQ:
    https://curl.se/docs/faq.html
    Curl można odpalić na różnych systemach, nie powinno być z tym problemu. Jeśli nasza linia komend nie widzi komendy CURL po jego zainstalowaniu, może być potrzeba dodania folderu zawierającego curl.exe do zmiennej środowiskowej PATH, tak jak zresztą robi się z Pythonem i innymi tego typu programami. Dzięki temu curl.exe jest widoczne w każdym folderze.
    Sprawdźmy czy u mnie curl jest widoczne:
    Automatyczna konfiguracja urządzeń Tasmoty i OpenBeken na Windows z cURL HTTP
    Jest widoczne, co nam pokażę przełącznik help?
    Spoiler:

    
    C:\>curl --help
    Usage: curl [options...] <url>
         --abstract-unix-socket <path> Connect via abstract Unix domain socket
         --anyauth       Pick any authentication method
     -a, --append        Append to target file when uploading
         --basic         Use HTTP Basic Authentication
         --cacert <CA certificate> CA certificate to verify peer against
         --capath <dir>  CA directory to verify peer against
     -E, --cert <certificate[:password]> Client certificate file and password
         --cert-status   Verify the status of the server certificate
         --cert-type <type> Certificate file type (DER/PEM/ENG)
         --ciphers <list of ciphers> SSL ciphers to use
         --compressed    Request compressed response
     -K, --config <file> Read config from a file
         --connect-timeout <seconds> Maximum time allowed for connection
         --connect-to <HOST1:PORT1:HOST2:PORT2> Connect to host
     -C, --continue-at <offset> Resumed transfer offset
     -b, --cookie <data> Send cookies from string/file
     -c, --cookie-jar <filename> Write cookies to <filename> after operation
         --create-dirs   Create necessary local directory hierarchy
         --crlf          Convert LF to CRLF in upload
         --crlfile <file> Get a CRL list in PEM format from the given file
     -d, --data <data>   HTTP POST data
         --data-ascii <data> HTTP POST ASCII data
         --data-binary <data> HTTP POST binary data
         --data-raw <data> HTTP POST data, '@' allowed
         --data-urlencode <data> HTTP POST data url encoded
         --delegation <LEVEL> GSS-API delegation permission
         --digest        Use HTTP Digest Authentication
     -q, --disable       Disable .curlrc
         --disable-eprt  Inhibit using EPRT or LPRT
         --disable-epsv  Inhibit using EPSV
         --dns-interface <interface> Interface to use for DNS requests
         --dns-ipv4-addr <address> IPv4 address to use for DNS requests
         --dns-ipv6-addr <address> IPv6 address to use for DNS requests
         --dns-servers <addresses> DNS server addrs to use
     -D, --dump-header <filename> Write the received headers to <filename>
         --egd-file <file> EGD socket path for random data
         --engine <name> Crypto engine to use
         --expect100-timeout <seconds> How long to wait for 100-continue
     -f, --fail          Fail silently (no output at all) on HTTP errors
         --fail-early    Fail on first transfer error, do not continue
         --false-start   Enable TLS False Start
     -F, --form <name=content> Specify HTTP multipart POST data
         --form-string <name=string> Specify HTTP multipart POST data
         --ftp-account <data> Account data string
         --ftp-alternative-to-user <command> String to replace USER [name]
         --ftp-create-dirs Create the remote dirs if not present
         --ftp-method <method> Control CWD usage
         --ftp-pasv      Use PASV/EPSV instead of PORT
     -P, --ftp-port <address> Use PORT instead of PASV
         --ftp-pret      Send PRET before PASV
         --ftp-skip-pasv-ip Skip the IP address for PASV
         --ftp-ssl-ccc   Send CCC after authenticating
         --ftp-ssl-ccc-mode <active/passive> Set CCC mode
         --ftp-ssl-control Require SSL/TLS for FTP login, clear for transfer
     -G, --get           Put the post data in the URL and use GET
     -g, --globoff       Disable URL sequences and ranges using {} and []
     -I, --head          Show document info only
     -H, --header <header/@file> Pass custom header(s) to server
     -h, --help          This help text
         --hostpubmd5 <md5> Acceptable MD5 hash of the host public key
     -0, --http1.0       Use HTTP 1.0
         --http1.1       Use HTTP 1.1
         --http2         Use HTTP 2
         --http2-prior-knowledge Use HTTP 2 without HTTP/1.1 Upgrade
         --ignore-content-length Ignore the size of the remote resource
     -i, --include       Include protocol response headers in the output
     -k, --insecure      Allow insecure server connections when using SSL
         --interface <name> Use network INTERFACE (or address)
     -4, --ipv4          Resolve names to IPv4 addresses
     -6, --ipv6          Resolve names to IPv6 addresses
     -j, --junk-session-cookies Ignore session cookies read from file
         --keepalive-time <seconds> Interval time for keepalive probes
         --key <key>     Private key file name
         --key-type <type> Private key file type (DER/PEM/ENG)
         --krb <level>   Enable Kerberos with security <level>
         --libcurl <file> Dump libcurl equivalent code of this command line
         --limit-rate <speed> Limit transfer speed to RATE
     -l, --list-only     List only mode
         --local-port <num/range> Force use of RANGE for local port numbers
     -L, --location      Follow redirects
         --location-trusted Like --location, and send auth to other hosts
         --login-options <options> Server login options
         --mail-auth <address> Originator address of the original email
         --mail-from <address> Mail from this address
         --mail-rcpt <address> Mail from this address
     -M, --manual        Display the full manual
         --max-filesize <bytes> Maximum file size to download
         --max-redirs <num> Maximum number of redirects allowed
     -m, --max-time <time> Maximum time allowed for the transfer
         --metalink      Process given URLs as metalink XML file
         --negotiate     Use HTTP Negotiate (SPNEGO) authentication
     -n, --netrc         Must read .netrc for user name and password
         --netrc-file <filename> Specify FILE for netrc
         --netrc-optional Use either .netrc or URL
     -:, --next          Make next URL use its separate set of options
         --no-alpn       Disable the ALPN TLS extension
     -N, --no-buffer     Disable buffering of the output stream
         --no-keepalive  Disable TCP keepalive on the connection
         --no-npn        Disable the NPN TLS extension
         --no-sessionid  Disable SSL session-ID reusing
         --noproxy <no-proxy-list> List of hosts which do not use proxy
         --ntlm          Use HTTP NTLM authentication
         --ntlm-wb       Use HTTP NTLM authentication with winbind
         --oauth2-bearer <token> OAuth 2 Bearer Token
     -o, --output <file> Write to file instead of stdout
         --pass <phrase> Pass phrase for the private key
         --path-as-is    Do not squash .. sequences in URL path
         --pinnedpubkey <hashes> FILE/HASHES Public key to verify peer against
         --post301       Do not switch to GET after following a 301
         --post302       Do not switch to GET after following a 302
         --post303       Do not switch to GET after following a 303
         --preproxy [protocol://]host[:port] Use this proxy first
     -#, --progress-bar  Display transfer progress as a bar
         --proto <protocols> Enable/disable PROTOCOLS
         --proto-default <protocol> Use PROTOCOL for any URL missing a scheme
         --proto-redir <protocols> Enable/disable PROTOCOLS on redirect
     -x, --proxy [protocol://]host[:port] Use this proxy
         --proxy-anyauth Pick any proxy authentication method
         --proxy-basic   Use Basic authentication on the proxy
         --proxy-cacert <file> CA certificate to verify peer against for proxy
         --proxy-capath <dir> CA directory to verify peer against for proxy
         --proxy-cert <cert[:passwd]> Set client certificate for proxy
         --proxy-cert-type <type> Client certificate type for HTTS proxy
         --proxy-ciphers <list> SSL ciphers to use for proxy
         --proxy-crlfile <file> Set a CRL list for proxy
         --proxy-digest  Use Digest authentication on the proxy
         --proxy-header <header/@file> Pass custom header(s) to proxy
         --proxy-insecure Do HTTPS proxy connections without verifying the proxy
         --proxy-key <key> Private key for HTTPS proxy
         --proxy-key-type <type> Private key file type for proxy
         --proxy-negotiate Use HTTP Negotiate (SPNEGO) authentication on the proxy
         --proxy-ntlm    Use NTLM authentication on the proxy
         --proxy-pass <phrase> Pass phrase for the private key for HTTPS proxy
         --proxy-service-name <name> SPNEGO proxy service name
         --proxy-ssl-allow-beast Allow security flaw for interop for HTTPS proxy
         --proxy-tlsauthtype <type> TLS authentication type for HTTPS proxy
         --proxy-tlspassword <string> TLS password for HTTPS proxy
         --proxy-tlsuser <name> TLS username for HTTPS proxy
         --proxy-tlsv1   Use TLSv1 for HTTPS proxy
     -U, --proxy-user <user:password> Proxy user and password
         --proxy1.0 <host[:port]> Use HTTP/1.0 proxy on given port
     -p, --proxytunnel   Operate through a HTTP proxy tunnel (using CONNECT)
         --pubkey <key>  SSH Public key file name
     -Q, --quote         Send command(s) to server before transfer
         --random-file <file> File for reading random data from
     -r, --range <range> Retrieve only the bytes within RANGE
         --raw           Do HTTP "raw"; no transfer decoding
     -e, --referer <URL> Referrer URL
     -J, --remote-header-name Use the header-provided filename
     -O, --remote-name   Write output to a file named as the remote file
         --remote-name-all Use the remote file name for all URLs
     -R, --remote-time   Set the remote file's time on the local output
     -X, --request <command> Specify request command to use
         --request-target Specify the target for this request
         --resolve <host:port:address> Resolve the host+port to this address
         --retry <num>   Retry request if transient problems occur
         --retry-connrefused Retry on connection refused (use with --retry)
         --retry-delay <seconds> Wait time between retries
         --retry-max-time <seconds> Retry only within this period
         --sasl-ir       Enable initial response in SASL authentication
         --service-name <name> SPNEGO service name
     -S, --show-error    Show error even when -s is used
     -s, --silent        Silent mode
         --socks4 <host[:port]> SOCKS4 proxy on given host + port
         --socks4a <host[:port]> SOCKS4a proxy on given host + port
         --socks5 <host[:port]> SOCKS5 proxy on given host + port
         --socks5-basic  Enable username/password auth for SOCKS5 proxies
         --socks5-gssapi Enable GSS-API auth for SOCKS5 proxies
         --socks5-gssapi-nec Compatibility with NEC SOCKS5 server
         --socks5-gssapi-service <name> SOCKS5 proxy service name for GSS-API
         --socks5-hostname <host[:port]> SOCKS5 proxy, pass host name to proxy
     -Y, --speed-limit <speed> Stop transfers slower than this
     -y, --speed-time <seconds> Trigger 'speed-limit' abort after this time
         --ssl           Try SSL/TLS
         --ssl-allow-beast Allow security flaw to improve interop
         --ssl-no-revoke Disable cert revocation checks (WinSSL)
         --ssl-reqd      Require SSL/TLS
     -2, --sslv2         Use SSLv2
     -3, --sslv3         Use SSLv3
         --stderr        Where to redirect stderr
         --suppress-connect-headers Suppress proxy CONNECT response headers
         --tcp-fastopen  Use TCP Fast Open
         --tcp-nodelay   Use the TCP_NODELAY option
     -t, --telnet-option <opt=val> Set telnet option
         --tftp-blksize <value> Set TFTP BLKSIZE option
         --tftp-no-options Do not send any TFTP options
     -z, --time-cond <time> Transfer based on a time condition
         --tls-max <VERSION> Use TLSv1.0 or greater
         --tlsauthtype <type> TLS authentication type
         --tlspassword   TLS password
         --tlsuser <name> TLS user name
     -1, --tlsv1         Use TLSv1.0 or greater
         --tlsv1.0       Use TLSv1.0
         --tlsv1.1       Use TLSv1.1
         --tlsv1.2       Use TLSv1.2
         --tlsv1.3       Use TLSv1.3
         --tr-encoding   Request compressed transfer encoding
         --trace <file>  Write a debug trace to FILE
         --trace-ascii <file> Like --trace, but without hex output
         --trace-time    Add time stamps to trace/verbose output
         --unix-socket <path> Connect through this Unix domain socket
     -T, --upload-file <file> Transfer local FILE to destination
         --url <url>     URL to work with
     -B, --use-ascii     Use ASCII/text transfer
     -u, --user <user:password> Server user and password
     -A, --user-agent <name> Send User-Agent <name> to server
     -v, --verbose       Make the operation more talkative
     -V, --version       Show version number and quit
     -w, --write-out <format> Use output FORMAT after completion
         --xattr         Store metadata in extended file attributes
    


    Trochę tych opcji jest. Bardzo bogate narzędzie, ale czy my potrzebujemy komplikować?
    Spróbujmy wysłać GET do smart lampki:
    
    curl http://192.168.0.201/cm?cmnd=POWER%20TOGGLE
    

    Stan lampy się zmienia - POWER jest przełączone z ON na OFF lub z OFF na ON, wszystko działa:
    Automatyczna konfiguracja urządzeń Tasmoty i OpenBeken na Windows z cURL HTTP
    Analogicznie można zrobić:
    
    curl http://192.168.0.201/cm?cmnd=backlog%20CT%20500;POWER%20ON;
    

    To ustawi temperaturę światła (komenda działa z OBK i z Tasmotą) i włączy te światło.

    Pliki wsadowe bat, autostart, skrypty
    To co można wpisać w konsoli Windowsa można też wpisać do pliku wsadowego bat. Taki plik można potem odpalić i wykonać.
    Można go również dodać do autostartu.


    Windows - Skrypt Batch - Wybór
    Zróbmy na próbę jakiś skrypt prosty. Użyjemy choice i zapytamy użytkownika co chce zrobić, odbierzemy indeks jego wyboru i poprzez if sprawdzimy, co musimy wykonać. Do odbioru rezultatu służy specjalnia zmienna errorlevel.
    Code: text
    Log in, to see the code

    I teraz UWAGA - WAŻNE: na Windowsie % jest specjalnym znakiem, pozwalającym wstawić zmienną. W związku z tym, w konsoli znaki % były pojedyncze, a tutaj w skrypcie są już podwójnie. Bez tego skrypt Wam nie zadziała.
    Automatyczna konfiguracja urządzeń Tasmoty i OpenBeken na Windows z cURL HTTP

    Windows - Skrypt Batch - Animacja
    W Batch można również stopniowo inkrementować zmienne wraz z pewnym opóźnieniem. Do opóźnienia wykorzystamy timeout, i będziemy w pętli zwiększać temperaturę koloru światła.
    Code: text
    Log in, to see the code

    Dodatkowo uruchamiamy EnableDelayedExpansion by móc wstawić do curl wygodnie wartość zmiennej iteracyjnej i.
    Skrypt działa, barwa bieli stopniowo się zmienia.

    Windows - Skrypt Batch - Masowa kontrola
    Teraz może zróbmy coś w stylu skanera IP, takiego bardzo prymitywnego. Też użyjemy pętli, ale tym razem zmienną iteracyjną wsadzimy do docelowego adresu IP. Poniższy skrypt zmieni stan wszystkich urządzeń OBK/WiFi widocznych na podanym zakresie IP:
    Code: text
    Log in, to see the code

    Automatyczna konfiguracja urządzeń Tasmoty i OpenBeken na Windows z cURL HTTP


    Windows - Skrypt Batch - Masowa konfiguracja
    W ten sam sposób można zrealizować konfigurację.
    Przykładowo, jeśli chcemy włączyć wszędzie ustawić Host MQTT, to wystarczy użyć komendy MQTTHost:
    Code: text
    Log in, to see the code

    Analogicznie dla pozostałych komend konfiguracyjnych. Tu jest lista komend wspieranych przez Obk:
    https://github.com/openshwprojects/OpenBK7231T_App/blob/main/docs/README.md
    Jeśli chcemy użyć kilku komend, to możemy użyć backlog, tak jak pokazywałem wcześniej.
    W ten sposób można naprawdę dużo skonfigurować i to jednym skryptem. Całe namiary na MQTT, flagi, ustawienia i tak dalej.



    Windows - Skrypt Batch - Gotowy konfigurator
    Tylko po co to wszystko robić ręcznie?
    Załóżmy, że mamy plik my_ips.txt:
    
    192.168.0.200
    192.168.0.201
    192.168.0.212
    

    oraz plik my_cfg.txt:
    
    POWER TOGGLE
    SetFlag 10 1
    

    Opracowany poniżej skrypt bash wczyta plik cfg, połączy wszystko w jeden backlog, ustawi średniki, zamieni spacje na zakodowane znaki dla HTTP, a potem kolejno wyślę poprzez CURL tę komendę do każdego odbiorcy:
    Code: text
    Log in, to see the code

    Rezultat:
    Automatyczna konfiguracja urządzeń Tasmoty i OpenBeken na Windows z cURL HTTP

    Co do działania skryptu, warto jest podkreślić, że wczytuje on pliki linia po linii, konfiguracje łączy linia po linii dopisując ; (począwszy od zbędnego ;, który jest potem usuwany), a IP wczytuje jedno, obsługuje, a potem wczytuje dopiero drugie. Linia z a, b, c zastępuje spację (po b jest spacja, tego nie widać na pierwszy rzut oka) znakiem kodowym spacji %20. Tam są dwa znaki %, gdyż jeden by oznaczał zmienną batch. Linijka z :~1! usuwa pierwszy znak z poleceń, czyli ten nadliczbowy ;.


    Podsumowanie
    Curl i skrypty Batch pozwalają bardzo łatwo konfigurować masowo urządzenia Tasmoty i OpenBeken na Windowsie. Zgodność większości komend pozwala użyć jednego skryptu dla podstawowej konfiguracji urządzeń z różnymi firmware. Komendy do MQTT i tak dalej są między firmware zgodne.
    W podobny sposób można też kontrolować urządzenia jak zajdzie taka potrzeba, wyzwalać różne zdarzenia z poziomu Windowsa oraz pobierać stan urządzeń, ale pobieranie stanu pokażę już innym razem.
    Wszystko wyglądałoby analogicznie na Linuxie, tylko trzeba by było przepisać skrypty na bash lub pokrewny język.

    Cool? Ranking DIY
    About Author
    p.kaczmarek2
    Moderator Smart Home
    Offline 
  • #2
    Mlody_Zdolny
    Level 24  
    Korzystanie z windowsowych skryptów to męczarnia i jeśli ktoś nie musi to nie polecam. Najlepiej od razu zacząć pisać w środowisku linuxowym, na Windowsie może to być WSL.
  • #3
    p.kaczmarek2
    Moderator Smart Home
    Całość można by też zrealizować przykładowo w node.js albo w Pythonie, ale nie chciałem aż tak komplikować dla takiego prostego skryptu.
  • #4
    krzbor
    Level 25  
    Warto też wskazać na możliwość użycia Javascript i AJAX. Niestety na nowszej Tasmocie CORS jest domyślnie zablokowany (można go odblokować). Nie wiem jak z CORS na OpenBeken (chyba jest domyślnie odblokowany). W przypadku takiego rozwiązania wystarczy prosty skrypt z funkcją, która "opakuje" AJAXa. Najważniejsze jest to, że nic nie musimy instalować (curl, python itd). Zakładam, że przeglądarkę internetową mamy :)
  • #5
    p.kaczmarek2
    Moderator Smart Home
    Tak dla jasności, to ten Javascript i AJAX to jest też użycie dokładnie tego samego interfejsu REST/HTTP o którym ja napisałem tutaj. Po prostu w inny sposób. Można w ten sposób zrobić sobie nawet bez serwera HTTP prosty dokument HTML kontrolujący wiele urządzeń. Na OBK ten dokument HTML z kolei można też zahostować na samym urządzeniu w systemie plików LittleFS. Poniżej przykład własnego panelu dla urządzenia zrobionego w ten sposób:
    Automatyczna konfiguracja urządzeń Tasmoty i OpenBeken na Windows z cURL HTTP
  • #6
    krzbor
    Level 25  
    p.kaczmarek2 wrote:
    Tak dla jasności, to ten Javascript i AJAX to jest też użycie dokładnie tego samego interfejsu REST/HTTP o którym ja napisałem tutaj. Po prostu w inny sposób. Można w ten sposób zrobić sobie nawet bez serwera HTTP prosty dokument HTML kontrolujący wiele urządzeń. Na OBK ten dokument HTML z kolei można też zahostować na samym urządzeniu w systemie plików LittleFS. Poniżej przykład własnego panelu dla urządzenia zrobionego w ten sposób:
    Automatyczna konfiguracja urządzeń Tasmoty i OpenBeken na Windows z cURL HTTP
    Dokładnie o tym myślałem. Idealne rozwiązanie dla osób, które chcą sterować niewielką liczbą urządzeń i nie potrzebują scenariuszy.
  • #7
    Mlody_Zdolny
    Level 24  
    Javascript jak najbardziej. Oprócz tego, że w JS bardzo wygodnie tworzy się obsługę JSON, UI to jeszcze mamy Promises znakomicie usprawniające tworzenie wszelkich asynchronicznych scenariuszy, nie tylko z wykorzystaniem sieci ale również połączeń przez COM.
  • #8
    p.kaczmarek2
    Moderator Smart Home
    Najnowsza wersja tego skryptu jest dostępna tutaj:
    https://github.com/openshwprojects/TasmotaHTTPCurlConfigurator
    Wkrótce może zostać zaktualizowany.
  • #9
    p.kaczmarek2
    Moderator Smart Home
    krzbor wrote:
    Idealne rozwiązanie dla osób, które chcą sterować niewielką liczbą urządzeń i nie potrzebują scenariuszy.

    W obk można też przypisywać zdarzenia do godziny oraz sprawdzać warunkowo np. dzień tygodnia, więc też można zrobić np. zapalanie światła rano bez Home Assistant
  • #10
    ferbulous
    Level 15  
    Cześć, dzięki za tutorial

    Jakie jest polecenie konsoli, aby zmienić czas na to?

    Automatyczna konfiguracja urządzeń Tasmoty i OpenBeken na Windows z cURL HTTP

    A jak wywołać odkrycie asystenta domowego?
    Automatyczna konfiguracja urządzeń Tasmoty i OpenBeken na Windows z cURL HTTP

    SetFlag 0 1
    SetFlag 1 1
    SetFlag 7 1
    SetFlag 10 1
    SetFlag 12 1
    SetFlag 16 1
    SetFlag 27 1
    SetPinRole 6 PWM;3
    SetPinRole 7 PWM;2
    SetPinRole 8 PWM;1
    SetPinRole 24 PWM;5
    SetPinRole 26 PWM;4
    SSID1 ssid
    Password1 wifi_pass
    MqttHost 192.168.1.40
    MqttUser username
    MqttPassword password
    scheduleHADiscovery 10
  • #11
    p.kaczmarek2
    Moderator Smart Home
    Polecenie to FullBootTime.
    Tutaj zobacz sekcję poleceń:
    https://github.com/openshwprojects/OpenBK7231T_App/blob/main/docs/README.md
    Masz już polecenie wykrywania HA:
    
    scheduleHADiscovery 10
    


    Btw @ ferbulous , czas oznaczania rozruchu w porządku wynosi teraz 5 sekund, na jaką wartość zamierzasz to zmienić?
  • #12
    ferbulous
    Level 15  
    @p.kaczmarek2 dzięki, nie zauważyłem tego
    Jaki jest właściwy sposób przypisania numeru pinu PWM?

    SetPinRole 6 PWM;3
    SetPinRole 7 PWM;2
    SetPinRole 8 PWM;1
    SetPinRole 24 PWM;5
    SetPinRole 26 PWM;4

    -----------------------------------------------------------
    Nieważne, trzeba użyć setpinchannel

    Dla nowego urządzenia z własnym punktem dostępowym (192.168.4.1)
    Czy muszę dodać polecenie restartu, aby łączyło się z Wi-Fi?

    Jeśli chodzi o „scheduleHADiscovery”, czy muszę dodać skrypt startowy, czy jest to jednorazowa konfiguracja?
  • #13
    p.kaczmarek2
    Moderator Smart Home
    Hmm tak, SetPinChannel ustawi kanał dla danego pinu.

    Myślę, że musisz dodać polecenie ponownego uruchomienia, aby łączyło się z Wi-Fi po ponownym uruchomieniu.

    Harmonogram HADiscovery można wykonać raz i to wystarczy, ale pamiętaj, że jeśli zaplanujesz scheduleHADiscovery w trybie AP, urządzenie tego nie zrobi (bo zabraknie mu MQTT) i po restarcie zapomni, że miałeś to zaplanowane .

    Musisz więc uruchomić scheduleHADiscovery, gdy urządzenie jest już w stanie połączyć się z twoim serwerem MQTT, więc musi być na twoim Wi-Fi i musi mieć już wprowadzone dane uwierzytelniające MQTT.