Regulacja jasności żarówki

Cześć.
Mam zrobiony proces w którym za pomocą pilota zigbee Smart Knob [ERS-10TZBVK-AA] (TuYa ERS-10TZBVK-AA control via MQTT | Zigbee2MQTT) steruje jasnością żarówki xioami ZNLDP12LM
Proces działa, ale pojawiają się błędy i działanie jest zbyt wolne. Szybkie pokręcenie pokrętłem nie robi rozjaśniania lub przyciemniania żarówki o kilka kroków.
Problem jest też że w Debugu dostaje taki komunikat “Call-service error. expected int for dictionary value @ data[‘brightness’]”
Domyślam sie że jest to spowodowane że pilot po każdym wysłaniu msg.payload “rotate_right” lub “rotate_left” wysyła jeszcze pusty ciąg “”
Nie wiem jak z tym sobie poradzić.
Proszę o pomoc
Podsyłam screen z tego jak przekręciłem pilot o jedna pozycję i proces obsługi

Proces
flows (1).json (3 KB)

I bardzo dobrze, przynajmniej wiesz kiedy przestałeś kręcić i możesz wysłać wartość do żarówki, a nie ciągle bombardować trasnsmisję.

var kierunek = msg.payload;
var jasnosc = flow.get('stan_jasnosc') || 10;

if (kierunek == 'rotate_right')
{
    jasnosc = jasnosc + 25;
    
    if (jasnosc > 255)
    {
        jasnosc = 255;
    }
    
    flow.set('stan_jasnosc',jasnosc);
    msg.jasnosc = jasnosc;
    return null;
   
}

if (kierunek == 'rotate_left')
{
    jasnosc = jasnosc - 25;
    
    if (jasnosc < 10)
    {
        jasnosc = 10;
    }
    
    flow.set('stan_jasnosc',jasnosc);
    msg.jasnosc = jasnosc;
    return null;
}

if (kierunek == 'double')
{
    jasnosc = 50;
    msg.jasnosc = jasnosc;
    return null;
}

if (kierunek == '') {
    msg.jasnosc = jasnosc;
    return msg;
}

return null;

…druga wersja to: nie wysyłać gdy rotate jest puste.

var kierunek = msg.payload;
var jasnosc = flow.get('stan_jasnosc') || 10;

if (kierunek == 'rotate_right')
{
    jasnosc = jasnosc + 25;
    
    if (jasnosc > 255)
    {
        jasnosc = 255;
    }
    
    flow.set('stan_jasnosc',jasnosc);
    msg.jasnosc = jasnosc;
    return msg;
   
}

if (kierunek == 'rotate_left')
{
    jasnosc = jasnosc - 25;
    
    if (jasnosc < 10)
    {
        jasnosc = 10;
    }
    
    flow.set('stan_jasnosc',jasnosc);
    msg.jasnosc = jasnosc;
    return msg;
}

if (kierunek == 'double')
{
    jasnosc = 50;
    msg.jasnosc = jasnosc;
    return msg;
}

return null;
1 Like

Gdyby to było po zakończeniu kręcenia to spoko, ale to jest za każdym przeskokiem enkodera czyli jakieś 24 razy na obrót.

W każdym razie dziękuje za zmodyfikowaną funkcję. Działa dobrze, ale jest dość wolna. Spodziewałem się że płynniej będzie ona wywoływana. Teraz jest ona wywoływana co kilka przeskoków enkodera. Może jakiś bufor był by potrzebny, sam nie wiem.
Nie da się pokręcić gałką o 180stopni i zmniejszyć jasności oświetlenia, trzeba wykonać kilka obrotów (lub odczekać po każdym przeskoku sekundę) aby zmienić jasność z min na max lub odwrotnie.

To encoder odczytuj bezpośrenio z mqtt, a nie jak teraz via HA. Może przyspieszy?

A jak sprawdzić jakie wiadomości mqtt przesyła enkoder tego pokretła? Nie wiem nawet na jakim Topicu mam nasłuchiwać.
Mam nazwę urządzenia ale jaką scieżkę powinienem wpisać aby nasłuchiwać właściwy topic wiadomości?

Edit:
MQTTExplorer prawdę ci powie :slight_smile: Już wiem zigbee2mqtt/Pilot pokretlo

1 Like

Wszystkie wiadomości mqtt masz w logach zigbee2mqtt

1 Like

Nie wiem czy mam ten sam smart knob (wygląda podobnie) ale mój PNTZ 55 ma dwa tryby pracy . Pierwszy wali komunikatami w prawo w lewo drugi natomiast przechowuje wartość jasności w encji . Dodatkowo przy przytrzymaniu przycisku można regulować barwę światła. Przejście między trybami to 3 szybkie kliknięcia więc drugi tryb można wykorzystać do regulacji np. głośności tv lub wzmacniacza

options:
  - command
  - event
action: null
action_rate: null
action_step_size: null
action_transition_time: null
battery: 100
brightness: 255
linkquality: 87
operation_mode: command
voltage: 3000
icon: mdi:tune
friendly_name: Potencjometr 1 operation mode