Es ist mal wieder soweit für ein neues Projekt.
Leider ist ja vermehr wieder zu lesen das Geräte neu angelernt werden müssen.
Das ist bei vielen mit einer HG Schlacht verbunden und mit viel Zeit.
Daher habe ich mir mein Node Red vorgenommen und eine Funktion geschrieben die bei den HG’s die ID’s tauscht.
Dazu muss Node Red installiert sein ( system ist egal es geht auch nen Windows Rechner ) sowie das homee Node von @stfnhmplr.
Das tote Gerät darf noch nicht gelöscht sein und das neue muss angelernt sein.
Das homee Node (API) muss mit dem homee verbunden sein und das Speichern im Kontext muss aktiviert sein.
[
{
"id": "76e0d02a.6b828",
"type": "inject",
"z": "2fafa37e.5aa2cc",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "get:homeegrams",
"payloadType": "str",
"x": 180,
"y": 860,
"wires": [
[
"ac5cba84.d15698"
]
]
},
{
"id": "9492b4bb.9b0458",
"type": "function",
"z": "2fafa37e.5aa2cc",
"name": "Attribute und Node ID ersetzen bei Trigger , Conditions und Actions ",
"func": "var nodeold = 0;\nvar nodenew = 0;\nvar attribute = global.get(\"homee.attributes\");\nvar nodes = global.get(\"homee.nodes\");\n\nif (Object.keys(msg.payload)[0] === \"homeegrams\"){\nvar hg = msg.payload.homeegrams;\nhg.forEach(function(hgs){\n hgs.triggers.attribute_triggers.forEach(function(trigger){\n if (trigger.node_id == nodeold){\n var typeold = attribute.find(attri => attri.id === trigger.attribute_id );\n var typenew = nodes.find(node => node.id === nodenew );\n typenew.attributes.forEach(function(attritype){\n if (attritype.type == typeold.type && attritype.instance == typeold.instance){\n node.send({payload: \"PUT:homeegrams/\"+trigger.homeegram_id+\"/triggers/\"+trigger.id+\"?attribute_id=\"+attritype.id});\n node.send({payload: \"PUT:homeegrams/\"+trigger.homeegram_id+\"/triggers/\"+trigger.id+\"?node_id=\"+nodenew})}\n })\n }\n })\n\n hgs.actions.attribute_actions.forEach(function(action){\n if (action.node_id == nodeold){\n var typeold = attribute.find(attri => attri.id === action.attribute_id );\n var typenew = nodes.find(node => node.id === nodenew );\n typenew.attributes.forEach(function(attritype){\n if (attritype.type == typeold.type && attritype.instance == typeold.instance){\n node.send({payload: \"PUT:homeegrams/\"+action.homeegram_id+\"/actions/\"+action.id+\"?node_id=\"+nodenew+\"&attribute_id=\"+attritype.id})}\n })\n }\n })\n \n hgs.conditions.attribute_conditions.forEach(function(conditions){\n if (conditions.node_id == nodeold ){\n var typeold = attribute.find(attri => attri.id === conditions.attribute_id );\n var typenew = nodes.find(node => node.id === nodenew );\n typenew.attributes.forEach(function(attritype){\n if (attritype.type == typeold.type && attritype.instance == typeold.instance){\n node.send({payload: \"PUT:homeegrams/\"+conditions.homeegram_id+\"/conditions/\"+conditions.id+\"?node_id=\"+nodenew+\"&attribute_id=\"+attritype.id})}\n })\n }\n })\n \n})\n}\n",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"x": 340,
"y": 1000,
"wires": [
[
"ac5cba84.d15698"
]
]
},
{
"id": "ac5cba84.d15698",
"type": "homeeApi",
"z": "2fafa37e.5aa2cc",
"homee": "",
"name": "homeeApi",
"messageTypeFilter": [],
"nodeFilter": null,
"attributeFilter": null,
"x": 420,
"y": 860,
"wires": [
[
"9492b4bb.9b0458"
]
]
}
]
Dann diesen Flow importieren und in der Funktion die alte Node ID und die neue Node ID eingeben. ( Diese findet Ihr in der Browser Eingabezeile )
Dann den Inject Button drücken und in wenigen Sekunden ist alles erledigt und Ihr könnt das alte Gerät löschen und das neue ist Betriebsbereit.
Die Funktion berücksichtigt hier alle Attributtypen und deren Instancen.
Viel Spaß beim testen und beim Zeitsparen.
VG Micha