package mk2driver import ( "time" ) type mock struct { c chan *Mk2Info } var _ ProtocolControl = (*mock)(nil) func NewMk2Mock() Mk2 { tmp := &mock{ c: make(chan *Mk2Info, 1), } go tmp.genMockValues() return tmp } func genBaseLeds(state LEDstate) map[Led]LEDstate { return map[Led]LEDstate{ LedMain: state, LedAbsorption: state, LedBulk: state, LedFloat: state, LedInverter: state, LedOverload: state, LedLowBattery: state, LedTemperature: state, } } func (m *mock) C() chan *Mk2Info { return m.c } func (m *mock) Close() { } func (m *mock) WriteRAMVar(_ uint16, _ int16) error { return nil } func (m *mock) WriteSetting(_ uint16, _ int16) error { return nil } func (m *mock) SetPanelState(_ PanelSwitchState, _ *float64) error { return nil } func (m *mock) SetStandby(_ bool) error { return nil } func (m *mock) GetDeviceState() (DeviceState, error) { return DeviceStateOn, nil } func (m *mock) SetDeviceState(_ DeviceState) error { return nil } func (m *mock) ReadRAMVarByID(_ uint16) (int16, error) { return 0, nil } func (m *mock) ReadSettingByID(_ uint16) (int16, error) { return 0, nil } func (m *mock) SelectRAMVar(_ uint16) error { return nil } func (m *mock) SelectSetting(_ uint16) error { return nil } func (m *mock) ReadSelected() (int16, error) { return 0, nil } func (m *mock) ReadRAMVarInfo(id uint16) (RAMVarInfo, error) { return RAMVarInfo{ ID: id, Supported: false, }, nil } func (m *mock) WriteSettingByID(_ uint16, _ int16) error { return nil } func (m *mock) WriteRAMVarByID(_ uint16, _ int16) error { return nil } func (m *mock) WriteSelectedData(_ int16) error { return nil } func (m *mock) WriteSettingBySelection(_ uint16, _ int16) error { return nil } func (m *mock) WriteRAMVarBySelection(_ uint16, _ int16) error { return nil } func (m *mock) genMockValues() { mult := 1.0 ledState := LedOff for { input := &Mk2Info{ OutCurrent: 2.0 * mult, InCurrent: 2.3 * mult, OutVoltage: 230.0 * mult, InVoltage: 230.1 * mult, BatVoltage: 25 * mult, BatCurrent: -10 * mult, InFrequency: 50 * mult, OutFrequency: 50 * mult, ChargeState: 1 * mult, Errors: nil, Timestamp: time.Now(), Valid: true, LEDs: genBaseLeds(ledState), } ledState = (ledState + 1) % 3 mult = mult - 0.1 if mult < 0 { mult = 1.0 } m.c <- input time.Sleep(1 * time.Second) } }