[meater] Add console extension for showing IDs (#13601)

* Add console extension for showing IDs

Fixes #13599

Signed-off-by: Jacob Laursen <jacob-github@vindvejr.dk>
This commit is contained in:
Jacob Laursen 2022-10-24 23:27:33 +02:00 committed by GitHub
parent cf47dc0f39
commit af8a941f1f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 97 additions and 3 deletions

View File

@ -18,14 +18,18 @@ This binding supports the following thing types:
## Discovery
The preferred way of adding MEATER probe(s) since the probe IDs are not easily found.
The binding supports auto-discovery of all MEATER probes belonging to the configured cloud API account.
**NOTE**: For The Original MEATER and MEATER Plus you need to have your MEATER app running and the MEATER probe(s) must connected to the cloud (out of the charger box) before you start the discovery.
After the configuration of the Bridge, you need to perform a manual scan and then your MEATER probe(s) will be automatically discovered and placed as a thing(s) in the inbox.
## Thing Configuration
When manually configuring the probes, the console command `openhab:meater showIds` can be used to identify the IDs of all connected probes.
Since the probes are unnamed, they can be hard to identify.
For this reason, the ambient temperature is included in the list.
This might help isolating an individual probe.
## Supported Things and Channels

View File

@ -26,7 +26,7 @@ import org.openhab.core.thing.ThingTypeUID;
@NonNullByDefault
public class MeaterBindingConstants {
private static final String BINDING_ID = "meater";
public static final String BINDING_ID = "meater";
// List of all Thing Type UIDs
public static final ThingTypeUID THING_TYPE_MEATER_PROBE = new ThingTypeUID(BINDING_ID, "meaterprobe");

View File

@ -0,0 +1,90 @@
/**
* Copyright (c) 2010-2022 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.openhab.binding.meater.internal.console;
import java.util.Arrays;
import java.util.List;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.meater.internal.MeaterBindingConstants;
import org.openhab.binding.meater.internal.handler.MeaterBridgeHandler;
import org.openhab.core.io.console.Console;
import org.openhab.core.io.console.ConsoleCommandCompleter;
import org.openhab.core.io.console.StringsCompleter;
import org.openhab.core.io.console.extensions.AbstractConsoleCommandExtension;
import org.openhab.core.io.console.extensions.ConsoleCommandExtension;
import org.openhab.core.thing.Thing;
import org.openhab.core.thing.ThingRegistry;
import org.openhab.core.thing.binding.ThingHandler;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* The {@link MeaterCommandExtension} is responsible for handling console commands
*
* @author Jacob Laursen - Initial contribution
*/
@NonNullByDefault
@Component(service = ConsoleCommandExtension.class)
public class MeaterCommandExtension extends AbstractConsoleCommandExtension implements ConsoleCommandCompleter {
private static final String SHOW_IDS = "showIds";
private static final StringsCompleter SUBCMD_COMPLETER = new StringsCompleter(List.of(SHOW_IDS), false);
private final ThingRegistry thingRegistry;
@Activate
public MeaterCommandExtension(final @Reference ThingRegistry thingRegistry) {
super(MeaterBindingConstants.BINDING_ID, "Interact with the Meater binding.");
this.thingRegistry = thingRegistry;
}
@Override
public void execute(String[] args, Console console) {
if (args.length != 1 || !SHOW_IDS.equals(args[0])) {
printUsage(console);
return;
}
for (Thing thing : thingRegistry.getAll()) {
ThingHandler thingHandler = thing.getHandler();
if (thingHandler instanceof MeaterBridgeHandler) {
console.println("API bridge: " + thing.getLabel());
((MeaterBridgeHandler) thingHandler).getMeaterThings().entrySet().stream().forEach(t -> {
console.println(" - ID: " + t.getKey() + " (ambient temperature: "
+ t.getValue().temperature.ambient + ")");
});
}
}
}
@Override
public List<String> getUsages() {
return Arrays.asList(buildCommandUsage(SHOW_IDS, "list all probes"));
}
@Override
public @Nullable ConsoleCommandCompleter getCompleter() {
return this;
}
@Override
public boolean complete(String[] args, int cursorArgumentIndex, int cursorPosition, List<String> candidates) {
if (cursorArgumentIndex <= 0) {
return SUBCMD_COMPLETER.complete(args, cursorArgumentIndex, cursorPosition, candidates);
}
return false;
}
}