MCPcopy Create free account
hub / github.com/evcc-io/evcc / newDeviceHandler

Function newDeviceHandler

server/http_config_device_handler.go:340–417  ·  view source on GitHub ↗

newDeviceHandler creates a new device by class

(site site.API, authObject auth.Auth)

Source from the content-addressed store, hash-verified

338
339// newDeviceHandler creates a new device by class
340func newDeviceHandler(site site.API, authObject auth.Auth) http.HandlerFunc {
341 return func(w http.ResponseWriter, r *http.Request) {
342 vars := mux.Vars(r)
343
344 class, err := templates.ClassString(vars["class"])
345 if err != nil {
346 jsonError(w, http.StatusBadRequest, err)
347 return
348 }
349
350 req, err := decodeDeviceConfig(r.Body)
351 if err != nil {
352 jsonError(w, http.StatusBadRequest, err)
353 return
354 }
355
356 if !requireCriticalConfigAuth(w, r, authObject, req) {
357 return
358 }
359
360 var conf *config.Config
361 ctx, cancel, done := startDeviceTimeout()
362
363 force := r.URL.Query().Get("force") == "true"
364
365 switch class {
366 case templates.Charger:
367 conf, err = newDevice(ctx, class, req, charger.NewFromConfig, config.Chargers(), force)
368
369 case templates.Meter:
370 conf, err = newDevice(ctx, class, req, meter.NewFromConfig, config.Meters(), force)
371
372 case templates.Vehicle:
373 conf, err = newDevice(ctx, class, req, vehicle.NewFromConfig, config.Vehicles(), force)
374
375 case templates.Circuit:
376 conf, err = newDevice(ctx, class, req, circuit.NewFromConfig, config.Circuits(), force)
377
378 case templates.Hems:
379 if existing, _ := config.ConfigurationByClass(templates.Hems); existing != nil {
380 err = errors.New("hems already configured")
381 } else {
382 conf, err = newDevice(ctx, class, req, newHemsFactory(site), config.Hems(), force)
383 }
384
385 case templates.Tariff:
386 conf, err = newDevice(ctx, class, req, tariff.NewFromConfig, config.Tariffs(), force)
387
388 case templates.Messenger:
389 conf, err = newDevice(ctx, class, req, messenger.NewFromConfig, config.Messengers(), force)
390 }
391
392 if err != nil {
393 cancel()
394 jsonError(w, http.StatusBadRequest, err)
395 return
396 }
397

Callers 1

RegisterSystemHandlerMethod · 0.85

Calls 15

ClassStringFunction · 0.92
ChargersFunction · 0.92
MetersFunction · 0.92
VehiclesFunction · 0.92
CircuitsFunction · 0.92
ConfigurationByClassFunction · 0.92
HemsFunction · 0.92
TariffsFunction · 0.92
MessengersFunction · 0.92
NameForIDFunction · 0.92
decodeDeviceConfigFunction · 0.85

Tested by

no test coverage detected