Skip to content

Commit

Permalink
[meater] Add console extension for showing IDs (openhab#13601)
Browse files Browse the repository at this point in the history
* Add console extension for showing IDs

Fixes openhab#13599

Signed-off-by: Jacob Laursen <jacob-github@vindvejr.dk>
  • Loading branch information
jlaur authored and borazslo committed Jan 7, 2023
1 parent 3bd3896 commit 703cf50
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 3 deletions.
8 changes: 6 additions & 2 deletions bundles/org.openhab.binding.meater/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
@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");
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
}

0 comments on commit 703cf50

Please sign in to comment.