Hab es direkt aus der Anleitung kopiert und nur das Logging angepaßt.
ar stderr;
var stdout;
system.Exec("/etc/config/addons/automower/automower.tcl 0 5 500 200
5 10 192.168.178.241:10001",&stdout, &stderr);
Moderator: Co-Administratoren
Hab es direkt aus der Anleitung kopiert und nur das Logging angepaßt.
Lag am Zeilenumbruch, nun funktioniert es. Vielen Dank.
Code: Alles auswählen
[{"id":"7a498143.cf8ff","type":"comment","z":"cc15dff6.8f50c","name":"Listen on MQTT and start sequence","info":"","x":170,"y":40,"wires":[]},{"id":"fa63bfa8.89b52","type":"mqtt in","z":"cc15dff6.8f50c","name":"Listen MQTT Automower (use keyword inject)","topic":"+/Automower/#","qos":"0","datatype":"auto","broker":"3cac25a9.63c0da","x":210,"y":80,"wires":[["c1fe0594.0427c8"]]},{"id":"c1fe0594.0427c8","type":"function","z":"cc15dff6.8f50c","name":"Transform MQTT to message (payload \"inject\" needed)","func":"// stop if we did not receive a command\nif (msg.payload == \"inject\") { //only react if the keyword \"inject\" is used\n\n// create JSON MQTT MESSAGE\nvar new_msg = {};\nmyJson = {}; // create the JSON message\n\n//split topic to check if it is CMND/STAT/TELE\nvar topic_type = msg.topic.slice(0).split('/'); //slice (starting from, -1= all word or numbers for #char)\n\n//handle cmnd answers\nif(topic_type[0] == \"cmnd\"){\n \n switch(topic_type[2]){\n case \"Status\": topic_type[0]= \"stat\" ; msg.payload = \"0F01F10000\"; break;\n case \"W-Mode-Home\": topic_type[0]= \"cmnd\" ; msg.payload = \"0F812C0003\"; break;\n case \"W-Mode-Auto\": topic_type[0]= \"cmnd\" ; msg.payload = \"0F812C0001\"; break;\n case \"LoopQuality500\": topic_type[0]= \"tele\" ; msg.payload = \"0F01B90000\"; break;\n case \"BatterieMV\": topic_type[0]= \"tele\" ; msg.payload = \"0F2EF40000\"; break;\n case \"TempBatterie\": topic_type[0]= \"tele\" ; msg.payload = \"0F02330000\"; break;\n case \"BatteryCapacity\": topic_type[0]= \"tele\" ; msg.payload = \"0F00B10000\"; break;\n case \"MVolt\": topic_type[0]= \"tele\" ; msg.payload = \"0F01EB0000\"; break;\n \n default: new_msg.topic = \"not found\"; break;\n }\n}\n\nvar objName = topic_type[2]; //identify the answer\nvar objValue = msg.payload;\nmyJson = objValue;\n\nnew_msg.payload = myJson; // load the message\nnew_msg.topic = topic_type[0]+\"/\"+topic_type[1]+\"/\"+topic_type[2]+\"/\"; // do not forget the topic\nreturn new_msg; // send it out\n}","outputs":1,"noerr":0,"x":640,"y":80,"wires":[["f7719f19.1fda7","9f888841.f5fb58"]]},{"id":"f7719f19.1fda7","type":"debug","z":"cc15dff6.8f50c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1010,"y":80,"wires":[]},{"id":"3e85cf4a.a07a7","type":"comment","z":"cc15dff6.8f50c","name":"Manual Automower Commands","info":"","x":160,"y":180,"wires":[]},{"id":"4b439292.15fcec","type":"inject","z":"cc15dff6.8f50c","name":"tele/Automower/Maehzeit/","topic":"tele/Automower/Maehzeit/","payload":"0F00380000","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":176.00001525878906,"y":219.0000057220459,"wires":[["9f888841.f5fb58"]]},{"id":"cd96cbd6.97e778","type":"inject","z":"cc15dff6.8f50c","name":"tele/Automower/MVolt/","topic":"tele/Automower/MVolt/","payload":"0F01EB0000","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":"05","x":166.00001525878906,"y":259.0000057220459,"wires":[["9f888841.f5fb58"]]},{"id":"e4e8dd8b.fda26","type":"inject","z":"cc15dff6.8f50c","name":"tele/Automower/BatteryCapacity/","topic":"tele/Automower/BatteryCapacity/","payload":"0F00B10000","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":196.00001525878906,"y":299.0000057220459,"wires":[["9f888841.f5fb58"]]},{"id":"380c9b30.16fb14","type":"inject","z":"cc15dff6.8f50c","name":"tele/Automower/TempBatterie/","topic":"tele/Automower/TempBatterie/","payload":"0F02330000","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":186.00001525878906,"y":339.0000057220459,"wires":[["9f888841.f5fb58"]]},{"id":"28b70be9.7d8f54","type":"inject","z":"cc15dff6.8f50c","name":"tele/Automower/BatterieMV/","topic":"tele/Automower/BatterieMV/","payload":"0F2EF40000","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":186.00001525878906,"y":379.0000057220459,"wires":[["9f888841.f5fb58"]]},{"id":"939ffd06.b52b2","type":"inject","z":"cc15dff6.8f50c","name":"tele/Automower/LoopQuality500/","topic":"tele/Automower/LoopQuality500/","payload":"0F01B90000","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":196.00001525878906,"y":419.0000057220459,"wires":[["9f888841.f5fb58"]]},{"id":"a48e3a94.0a0438","type":"inject","z":"cc15dff6.8f50c","name":"","topic":"tele/Automower/Zeit/","payload":"0F01F00000","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":200,"y":460,"wires":[["9f888841.f5fb58"]]},{"id":"5cd785d0.a1859c","type":"inject","z":"cc15dff6.8f50c","name":"Automower-Status","topic":"stat/Automower/Status/","payload":"0F01F10000","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":250,"y":500,"wires":[["9f888841.f5fb58"]]},{"id":"fc99ba67.a6b078","type":"inject","z":"cc15dff6.8f50c","name":"W-Mode-Home","topic":"cmnd/Automower/W-Mode-Home/","payload":"0F812C0003","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":240,"y":540,"wires":[["9f888841.f5fb58"]]},{"id":"11c0bf64.0be0e1","type":"inject","z":"cc15dff6.8f50c","name":"W-Mode-Auto","topic":"cmnd/Automower/W-Mode-Auto/","payload":"0F812C0001","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":580,"wires":[["9f888841.f5fb58"]]},{"id":"9f888841.f5fb58","type":"function","z":"cc15dff6.8f50c","name":"Load command into Hex converter","func":"hexload= msg.payload;\nmsg.payload = new Buffer(hexload,\"hex\");\nreturn msg;","outputs":1,"noerr":0,"x":660,"y":280,"wires":[["66ef9ff.9b5666","a792e7eb.718798"]]},{"id":"a792e7eb.718798","type":"debug","z":"cc15dff6.8f50c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":870,"y":220,"wires":[]},{"id":"caf18301.52ef3","type":"function","z":"cc15dff6.8f50c","name":"Calculate Answer // Hex must be reversed","func":"var t1 = msg.payload.toString('hex').substr(6, 2);\nvar t2 = msg.payload.toString('hex').substr(8, 2);\nmsg.payload = t2+t1;\n//msg.payload.data = Number(new Buffer(t2+t1));\nmsg.payload = msg.payload.split(' ').map(function(hex){ return parseInt(hex, 16); });\nreturn msg;","outputs":1,"noerr":0,"x":680,"y":340,"wires":[["bd0ec952.5ea438"]]},{"id":"66ef9ff.9b5666","type":"tcp request","z":"cc15dff6.8f50c","server":"192.168.20.220","port":"10001","out":"time","splitc":"600","name":"Send cmd to Automower and get Answer","x":1060,"y":280,"wires":[["caf18301.52ef3"]]},{"id":"bd0ec952.5ea438","type":"function","z":"cc15dff6.8f50c","name":"Answer converter to MQTT","func":"//split topic to check if it is CMND/STAT/TELE\nvar topic_type = msg.topic.slice(0,-1).split('/'); \n //slice (starting from, -1= all word or nubers for #char)\n\n//handle stat answers \nif(topic_type[0] == \"stat\" ){\n switch(parseInt(msg.payload))\n {\n case 6: msg.payload = \"Linker Radmotor blockiert\"; break;\n case 12: msg.payload = \"Kein Schleifensignal\"; break;\n case 16: msg.payload = \"Ausserhalb\"; break; \n case 18: msg.payload = \"Niedrige Batteriespannung\"; break; \n case 26: msg.payload = \"Ladestation blockiert\"; break;\n case 34: msg.payload = \"Mäher hochgehoben\"; break;\n case 52: msg.payload = \"Kein Kontakt zur Ladestation\"; break;\n case 54: msg.payload = \"Pin abgelaufen\"; break; \n case 1000: msg.payload = \"aus LS ausfahren\"; break; \n case 1002: msg.payload = \"Mähen\"; break;\n case 1008: msg.payload = \"Mähwerk gestartet\"; break;\n case 1012: msg.payload = \"Signal starte Mähwerk\"; break;\n case 1014: msg.payload = \"Laden\"; break;\n case 1016: msg.payload = \"in LS wartend\"; break;\n case 1024: msg.payload = \"aus LS einfahren\"; break;\n case 1036: msg.payload = \"Viereckmodus\"; break;\n case 1038: msg.payload = \"Festgefahren\"; break;\n case 1040: msg.payload = \"Kollision\"; break;\n case 1042: msg.payload = \"Suchen\"; break;\n case 1044: msg.payload = \"Stop\"; break;\n case 1048: msg.payload = \"Andocken\"; break;\n case 1050: msg.payload = \"aus LS ausfahren\"; break;\n case 1052: msg.payload = \"Yes druecken\"; break;\n case 1056: msg.payload = \"Wartet (Modus Manuell/Home)\"; break;\n case 1058: msg.payload = \"Begrenzung folgen\"; break;\n case 1060: msg.payload = \"N-Signal gefunden\"; break;\n case 1062: msg.payload = \"Festgefahren\"; break;\n case 1064: msg.payload = \"Suchen\"; break;\n case 1070: msg.payload = \"Suchschleife folgen\"; break;\n case 1072: msg.payload = \"Schleife folgen\"; break;\n //default: msg.payload = \"unknown status\";\n } \n}\n\n//handle cmnd answers\nif(topic_type[0] == \"cmnd\"){\n switch(parseInt(msg.payload))\n {\n case 1: msg.payload = \"Befehl Auto bestätigt\"; break;\n case 3: msg.payload = \"Befehl Nachhause bestätigt\"; break;\n default: msg.payload = \"unknown command\";\n }\n topic_type[0] == \"stat\" // if not we get a loop\n}\n\n//handle tele answers \nif(topic_type[0] == \"tele\"){\n msg.payload = msg.payload[0];\n}\n\n// save global variable to know if the automower is home before we start water\nif (topic_type[0] == \"stat\" && topic_type[2] == \"Status\" ){\n flow.set(\"MowerStatus\", msg.payload); \n}\n\n\n// create JSON MQTT MESSAGE\nvar new_msg = {};\nmyJson = {}; // create the JSON message\n var objName = topic_type[2]; //identify the answer\n var objValue = msg.payload;\n myJson[\"Time\"] = new Date().toISOString();\n myJson[objName] = objValue;\n\nnew_msg.payload = myJson; // load the message\n//new_msg.topic = msg.topic; // do not forget the topic\nnew_msg.topic = topic_type[0]+\"/\"+topic_type[1]+\"/\"+topic_type[2]+\"/\"; // do not forget the topic\nreturn new_msg; // send it out","outputs":1,"noerr":0,"x":1020,"y":340,"wires":[["a58e8fa5.3e6de","5cb0e868.42f5b8"]]},{"id":"a58e8fa5.3e6de","type":"mqtt out","z":"cc15dff6.8f50c","name":"Send MQTT","topic":"","qos":"","retain":"","broker":"3cac25a9.63c0da","x":1350,"y":340,"wires":[]},{"id":"5cb0e868.42f5b8","type":"debug","z":"cc15dff6.8f50c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1350,"y":400,"wires":[]},{"id":"3cac25a9.63c0da","type":"mqtt-broker","z":"","name":"OpenhabMQTT","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]