krycha88 / GUI-Generic

MIT License
17 stars 15 forks source link

dodanie obsługi przekaźników LC Tech (UART controlled) #135

Open gmx168 opened 2 months ago

gmx168 commented 2 months ago

Na rynku jest kilka urządzeń mających sterowanie przez UART dla 2 i 4 przekaźników.

W rozwiazaniu autora Elmaya: Sekwencje wysyłane na konsolę UART 19200 dla 4 przekaźników. byte relay_1_on[] = {0xA0, 0x01, 0x01, 0xA2}; byte relay_1_off[] = {0xA0, 0x01, 0x00, 0xA1}; byte relay_2_on[] = {0xA0, 0x02, 0x01, 0xA3}; byte relay_2_off[] = {0xA0, 0x02, 0x00, 0xA2}; byte relay_3_on[] = {0xA0, 0x03, 0x01, 0xA4}; byte relay_3_off[] = {0xA0, 0x03, 0x00, 0xA3}; byte relay_4_on[] = {0xA0, 0x04, 0x01, 0xA5}; byte relay_4_off[] = {0xA0, 0x04, 0x00, 0xA4};

Sterowanie wirtualnymi PINami (za Elmaya): const uint8_t RELAY_1_PIN = 100; const uint8_t RELAY_2_PIN = 101; const uint8_t RELAY_3_PIN = 102; const uint8_t RELAY_4_PIN = 103; Elmaya zdefiniowal klasę dziedziczącą za Supla::IO

class LC_4x : public Supla::Io { public: void customDigitalWrite(int channelNumber, uint8_t pin, uint8_t val) { if ((pin == 100)) { if (val == 1) { Serial.write(relay_1_on, sizeof(relay_1_on)); delay(20); state_rele_1 = true; } else { Serial.write(relay_1_off, sizeof(relay_1_off)); delay(20); state_rele_1 = false; } return; } if ((pin == 101)) { if (val == 1) { Serial.write(relay_2_on, sizeof(relay_2_on)); delay(20); state_rele_2 = true; } else { Serial.write(relay_2_off, sizeof(relay_2_off)); delay(20); state_rele_2 = false; } return; } if ((pin == 102)) { if (val == 1) { Serial.write(relay_3_on, sizeof(relay_3_on)); delay(20); state_rele_3 = true; } else { Serial.write(relay_3_off, sizeof(relay_3_off)); delay(20); state_rele_3 = false; } return; } if ((pin == 103)) { if (val == 1) { Serial.write(relay_4_on, sizeof(relay_4_on)); delay(20); state_rele_4 = true; } else { Serial.write(relay_4_off, sizeof(relay_4_off)); delay(20); state_rele_4 = false; } return; } if (pin <= 99) { return ::digitalWrite(pin, val); } }

int customDigitalRead(int channelNumber, uint8_t pin) {

  switch (pin) {
    case 100:
      return state_rele_1;
    case 101:
      return state_rele_2;
    case 102:
      return state_rele_3;
    case 103:
      return state_rele_4;
    default:
      return ::digitalRead(pin); 
  }
}

} LC_4x;

Wg mnie zgodność wsteczna (LC już nie są popularne jak kiedyś w SONOFF Basic ale tez w rozwiązaniach 4 przekaźników nadal są tanie na Aliexpress.