commit
d925255e53
@ -0,0 +1,100 @@
|
||||
import json
|
||||
from argparse import ArgumentParser
|
||||
|
||||
parser = ArgumentParser()
|
||||
parser.add_argument(
|
||||
"-s",
|
||||
"--storage",
|
||||
dest="storage_path",
|
||||
default="/srv/homeassistant/config/.storage",
|
||||
type=str,
|
||||
help="Path to storage",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-y",
|
||||
"--skip_confirm",
|
||||
default=False,
|
||||
dest="skip_confirm",
|
||||
action="store_true",
|
||||
help="Skip confirm",
|
||||
)
|
||||
try:
|
||||
args = parser.parse_args()
|
||||
except:
|
||||
exit(1)
|
||||
|
||||
|
||||
def collect_devices() -> dict[str, str]:
|
||||
devices: dict[str, str] = {}
|
||||
with open(f"{args.storage_path}/core.device_registry") as devices_file:
|
||||
raw_devices = json.load(devices_file)
|
||||
|
||||
for d in filter(
|
||||
lambda x: x["name_by_user"] != None, raw_devices["data"]["devices"]
|
||||
):
|
||||
devices[d["id"]] = d["name_by_user"]
|
||||
|
||||
return devices
|
||||
|
||||
|
||||
def collect_entities() -> list[dict]:
|
||||
with open(f"{args.storage_path}/core.entity_registry") as entities_file:
|
||||
entities = json.load(entities_file)["data"]["entities"]
|
||||
|
||||
return entities
|
||||
|
||||
|
||||
def valid_entity_id(inp: str) -> str:
|
||||
return (
|
||||
inp.lower()
|
||||
.replace(" ", "_")
|
||||
.replace("-", "_")
|
||||
.replace("/", "_")
|
||||
.replace("\\", "_")
|
||||
)
|
||||
|
||||
|
||||
def confirm(msg):
|
||||
yon = input(f"{msg} (y/n): ")
|
||||
return True if yon == "y" else False
|
||||
|
||||
|
||||
def main():
|
||||
devices = collect_devices()
|
||||
entities = collect_entities()
|
||||
|
||||
for e in entities:
|
||||
if e["device_id"] in devices:
|
||||
old = e["entity_id"]
|
||||
suffix = valid_entity_id(e["original_name"])
|
||||
prefix = e["entity_id"].split(".")[0]
|
||||
name = valid_entity_id(devices[e["device_id"]])
|
||||
new = f"{prefix}.{name}_{suffix}"
|
||||
|
||||
if old != new:
|
||||
print(f"{old} -> {new}")
|
||||
if not args.skip_confirm:
|
||||
if confirm("Do you want to replace the name for this entity?"):
|
||||
e["entity_id"] = new
|
||||
else:
|
||||
e["entity_id"] = new
|
||||
|
||||
with open(f"{args.storage_path}/core.entity_registry") as entities_file, open(
|
||||
"debug.json", "w"
|
||||
) as of:
|
||||
entities_object = json.load(entities_file)
|
||||
entities_object["data"]["entities"] = entities
|
||||
|
||||
json.dump(entities_object, of)
|
||||
|
||||
with open(f"{args.storage_path}/core.entity_registry", "w") as entities_file:
|
||||
if confirm("Check 'debug.json' if the output looks reasonable then confirm"):
|
||||
json.dump(entities_object, entities_file)
|
||||
print("Replaced 'core.entity_registry' with the contents of debug.json")
|
||||
else:
|
||||
print(
|
||||
"Nothing changed. You could try to fix debug.json and replace the original file with it."
|
||||
)
|
||||
|
||||
|
||||
main()
|
Loading…
Reference in new issue