Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. IRobot Roomba Steuerung

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    IRobot Roomba Steuerung

    This topic has been deleted. Only users with topic management privileges can see it.
    • eric2905
      eric2905 last edited by

      Hallo zusammen,

      ich habe mir gebraucht einen iRobot Roomba 581 sehr günstig geschossen und ihn mir nun in Node-Red eingebaut.

      Dazu habe ich mir noch den WLAN-Aufsatz Thinking Cleaner (http://www.thinkingcleaner.com) besorgt - einfach und klasse Teil.

      Zuerst muss der Flow "Roomba - Initialisierung !!!" aufgerufen werden (einmal), um die notwendigen Datenpunkte zu erzeugen.

      [{"id":"24ac0962.db53f6","type":"inject","name":"Datenpunkte definieren - muss einmal gestartet werden!!!","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":242,"y":103,"z":"1231008e.edceff","wires":[["8c5bceff.73a43"]]},{"id":"d32a5e05.2cd5a","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.command_Clean","ack":"false","autoCreate":"true","x":584,"y":269,"z":"1231008e.edceff","wires":[]},{"id":"8c5bceff.73a43","type":"function","name":"Trigger rücksetzen","func":"msg1 = {};\nbefehl = \"0\";\n\nmsg1.payload = befehl;\n\n\nreturn [msg1];","outputs":"1","noerr":0,"x":220,"y":269,"z":"1231008e.edceff","wires":[["d32a5e05.2cd5a","2181a5ff.de7e5a","f4efb6c1.0b1048","fadec315.05214","be3875de.41c788","4a6d87c0.b59278","7736dc3.f88c924"]]},{"id":"2181a5ff.de7e5a","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.command_MaxSaugen","ack":"false","autoCreate":"true","x":605,"y":330,"z":"1231008e.edceff","wires":[]},{"id":"f4efb6c1.0b1048","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.command_BackToDock","ack":"false","autoCreate":"true","x":607,"y":386,"z":"1231008e.edceff","wires":[]},{"id":"fadec315.05214","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.command_LeaveDock","ack":"false","autoCreate":"true","x":605,"y":441,"z":"1231008e.edceff","wires":[]},{"id":"be3875de.41c788","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.command_Findme","ack":"false","autoCreate":"true","x":596,"y":496,"z":"1231008e.edceff","wires":[]},{"id":"4a6d87c0.b59278","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.command_DriveStop","ack":"false","autoCreate":"true","x":604,"y":549,"z":"1231008e.edceff","wires":[]},{"id":"7736dc3.f88c924","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.command_PowerOff","ack":"false","autoCreate":"true","x":607,"y":605,"z":"1231008e.edceff","wires":[]}]
      
      

      Hier werden die Trigger-Datenpunkte gesetzt, die dann in Vis verwendet werden können, um Aktionen zu starten.

      Diese Trigger-Datenpunkte sind

      node-red.0.Roomba.command_Clean => Cleaning starten

      node-red.0.Roomba.command_MaxSaugen => Max-Saugen starten

      node-red.0.Roomba.command_BackToDock => Zurück zur Basis-Station (Dock / Ladestation)

      node-red.0.Roomba.command_LeaveDock => Verlasse die Basis-Station (Dock / Ladestation)

      node-red.0.Roomba.command_Findme => Der Roomba gibt eine Tonfolge aus, um ihn besser zu finden

      node-red.0.Roomba.command_DriveStop => So schnell wie möglich STOP

      node-red.0.Roomba.command_PowerOff => Den Roomba ausschalten

      Die Werte sind standardmäßig auf 0. Wird ein Wert (z.B. in Vis mit einer Taste) auf 1 gesetzt, wird die hinterlegte Funktion aufgerufen und der Wert wieder auf 0 zurückgesetzt.

      –------------------------------------------------------------------------

      Der nächste Flow ist "Roomba Steuerung" - hier sind die genannten Funktionsaufrufe enthalten.

      [{"id":"53556f91.acaa9","type":"subflow","name":"Sub_Roomba_Steuerung","in":[{"x":63,"y":85,"wires":[{"id":"101dd7dd.efe228"}]}],"out":[{"x":1163,"y":134,"wires":[{"id":"6d393f45.92c6c","port":0}]}]},{"id":"41df1cc7.be20e4","type":"function","name":"Bauen","func":"var IP = msg.RoombaIP;\nvar Befehl = msg.kommando;\n\nvar Ausgabe = \"http://\" + IP + \"/command.json?command=\" + Befehl;\nmsg.url = Ausgabe;\n\nreturn msg;","outputs":"1","noerr":0,"x":344,"y":83,"z":"53556f91.acaa9","wires":[["30f42818.cf0bd8","6d393f45.92c6c"]]},{"id":"30f42818.cf0bd8","type":"http request","name":"Roomba command","method":"GET","ret":"txt","url":"","x":560,"y":82,"z":"53556f91.acaa9","wires":[["fcc86132.0337a"]]},{"id":"6d393f45.92c6c","type":"function","name":"Trigger rücksetzen","func":"msg.payload = \"0\";\nreturn msg;","outputs":"1","noerr":0,"x":555,"y":133,"z":"53556f91.acaa9","wires":[[]]},{"id":"fcc86132.0337a","type":"function","name":"Antwort auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\nvar name_startpos = quelle.indexOf('result');\nvar name = quelle.substr(name_startpos + 11, 50);\nvar name_endpos = name.indexOf('\"');\nname = name.substring(0, name_endpos);\nmsg1.payload = name;\n\nreturn [msg1];\n","outputs":"1","noerr":0,"x":777,"y":83,"z":"53556f91.acaa9","wires":[["60bf6063.9f40a"]]},{"id":"60bf6063.9f40a","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.CommandStatus","ack":"false","autoCreate":"true","x":1034,"y":83,"z":"53556f91.acaa9","wires":[]},{"id":"101dd7dd.efe228","type":"function","name":"IP setzen","func":"msg.RoombaIP = \"[IP_ROOMBA_EINTRAGEN]\"\nreturn msg;","outputs":1,"noerr":0,"x":196,"y":83,"z":"53556f91.acaa9","wires":[["41df1cc7.be20e4"]]},{"id":"6d2de672.92d218","type":"ioBroker in","name":"command_Clean","topic":"node-red.0.Roomba.command_Clean","payloadType":"value","x":83,"y":52,"z":"898d14e1.7672e8","wires":[["163fe4db.e9c01b"]]},{"id":"163fe4db.e9c01b","type":"switch","name":"Wenn gesetzt","property":"payload","rules":[{"t":"eq","v":"1"}],"checkall":"true","outputs":1,"x":313,"y":51,"z":"898d14e1.7672e8","wires":[["982c2ff5.67d3d"]]},{"id":"982c2ff5.67d3d","type":"function","name":"Daten setzen","func":"msg.kommando = \"clean\"\nmsg.topic=\"command_Clean\";\nreturn msg;","outputs":1,"noerr":0,"x":480,"y":50,"z":"898d14e1.7672e8","wires":[["f19fbacf.0e6048"]]},{"id":"4ed9ac69.b12654","type":"ioBroker out","name":"","topic":"","ack":"false","autoCreate":"true","x":1085,"y":194,"z":"898d14e1.7672e8","wires":[]},{"id":"15b0d45d.ea4f2c","type":"function","name":"Join","func":"msg.topic = \"node-red.0.Roomba.\" + msg.topic;\nreturn msg;","outputs":1,"noerr":0,"x":954.142822265625,"y":194.00001525878906,"z":"898d14e1.7672e8","wires":[["4ed9ac69.b12654"]]},{"id":"f19fbacf.0e6048","type":"subflow:53556f91.acaa9","name":"","x":778,"y":193,"z":"898d14e1.7672e8","wires":[["15b0d45d.ea4f2c"]]},{"id":"6c20afb.f93df5","type":"ioBroker in","name":"command_SpotSaugen","topic":"node-red.0.Roomba.command_SpotSaugen","payloadType":"value","x":103,"y":116,"z":"898d14e1.7672e8","wires":[["bdd39ea3.422c6"]]},{"id":"bdd39ea3.422c6","type":"switch","name":"Wenn gesetzt","property":"payload","rules":[{"t":"eq","v":"1"}],"checkall":"true","outputs":1,"x":313,"y":116,"z":"898d14e1.7672e8","wires":[["f4ff457.f0b00b8"]]},{"id":"f4ff457.f0b00b8","type":"function","name":"Daten setzen","func":"msg.kommando = \"spot\"\nmsg.topic=\"command_SpotSaugen\";\nreturn msg;","outputs":1,"noerr":0,"x":480,"y":115,"z":"898d14e1.7672e8","wires":[["f19fbacf.0e6048"]]},{"id":"74533a2a.8bacc4","type":"ioBroker in","name":"command_MaxSaugen","topic":"node-red.0.Roomba.command_MaxSaugen","payloadType":"value","x":103,"y":176,"z":"898d14e1.7672e8","wires":[["2e79d958.d18626"]]},{"id":"2e79d958.d18626","type":"switch","name":"Wenn gesetzt","property":"payload","rules":[{"t":"eq","v":"1"}],"checkall":"true","outputs":1,"x":313,"y":176,"z":"898d14e1.7672e8","wires":[["fc216cd6.03de9"]]},{"id":"fc216cd6.03de9","type":"function","name":"Daten setzen","func":"msg.kommando = \"max\"\nmsg.topic=\"command_MaxSaugen\";\nreturn msg;","outputs":1,"noerr":0,"x":480,"y":175,"z":"898d14e1.7672e8","wires":[["f19fbacf.0e6048"]]},{"id":"8bc1a754.743e58","type":"ioBroker in","name":"command_BackToDock","topic":"node-red.0.Roomba.command_BackToDock","payloadType":"value","x":102,"y":234,"z":"898d14e1.7672e8","wires":[["5200de48.adff2"]]},{"id":"5200de48.adff2","type":"switch","name":"Wenn gesetzt","property":"payload","rules":[{"t":"eq","v":"1"}],"checkall":"true","outputs":1,"x":312,"y":234,"z":"898d14e1.7672e8","wires":[["daf582cf.250a8"]]},{"id":"daf582cf.250a8","type":"function","name":"Daten setzen","func":"msg.kommando = \"dock\"\nmsg.topic=\"command_BackToDock\";\nreturn msg;","outputs":1,"noerr":0,"x":479,"y":233,"z":"898d14e1.7672e8","wires":[["f19fbacf.0e6048"]]},{"id":"5a728e93.a58d7","type":"ioBroker in","name":"command_LeaveDock","topic":"node-red.0.Roomba.command_LeaveDock","payloadType":"value","x":103.5,"y":302,"z":"898d14e1.7672e8","wires":[["c0a89ca3.3f576"]]},{"id":"c0a89ca3.3f576","type":"switch","name":"Wenn gesetzt","property":"payload","rules":[{"t":"eq","v":"1"}],"checkall":"true","outputs":1,"x":313.5,"y":302,"z":"898d14e1.7672e8","wires":[["8f619f7c.709e6"]]},{"id":"8f619f7c.709e6","type":"function","name":"Daten setzen","func":"msg.kommando = \"leavehomebase\"\nmsg.topic=\"command_LeaveDock\";\nreturn msg;","outputs":1,"noerr":0,"x":480.5,"y":301,"z":"898d14e1.7672e8","wires":[["f19fbacf.0e6048"]]},{"id":"219c0db1.de63f2","type":"ioBroker in","name":"command_Findme","topic":"node-red.0.Roomba.command_Findme","payloadType":"value","x":99.5,"y":368,"z":"898d14e1.7672e8","wires":[["b16cad9d.4e935"]]},{"id":"b16cad9d.4e935","type":"switch","name":"Wenn gesetzt","property":"payload","rules":[{"t":"eq","v":"1"}],"checkall":"true","outputs":1,"x":309.5,"y":368,"z":"898d14e1.7672e8","wires":[["2c5eb0a.fd3a15"]]},{"id":"2c5eb0a.fd3a15","type":"function","name":"Daten setzen","func":"msg.kommando = \"find_me\"\nmsg.topic=\"command_Findme\";\nreturn msg;","outputs":1,"noerr":0,"x":476.5,"y":367,"z":"898d14e1.7672e8","wires":[["f19fbacf.0e6048"]]},{"id":"42f8276d.bd07d8","type":"ioBroker in","name":"command_DriveStop","topic":"node-red.0.Roomba.command_DriveStop","payloadType":"value","x":102,"y":426,"z":"898d14e1.7672e8","wires":[["c2538f0d.3dac7"]]},{"id":"c2538f0d.3dac7","type":"switch","name":"Wenn gesetzt","property":"payload","rules":[{"t":"eq","v":"1"}],"checkall":"true","outputs":1,"x":312,"y":426,"z":"898d14e1.7672e8","wires":[["ec479d75.13b86"]]},{"id":"ec479d75.13b86","type":"function","name":"Daten setzen","func":"msg.kommando = \"drivestop\"\nmsg.topic=\"command_DriveStop\";\nreturn msg;","outputs":1,"noerr":0,"x":479,"y":425,"z":"898d14e1.7672e8","wires":[["f19fbacf.0e6048"]]},{"id":"e6f764de.190898","type":"ioBroker in","name":"command_PowerOff","topic":"node-red.0.Roomba.command_PowerOff","payloadType":"value","x":107,"y":488,"z":"898d14e1.7672e8","wires":[["9557c46c.6aa838"]]},{"id":"9557c46c.6aa838","type":"switch","name":"Wenn gesetzt","property":"payload","rules":[{"t":"eq","v":"1"}],"checkall":"true","outputs":1,"x":317,"y":488,"z":"898d14e1.7672e8","wires":[["8a3d3738.75c2c8"]]},{"id":"8a3d3738.75c2c8","type":"function","name":"Daten setzen","func":"msg.kommando = \"poweroff\"\nmsg.topic=\"command_PowerOff\";\nreturn msg;","outputs":1,"noerr":0,"x":484,"y":487,"z":"898d14e1.7672e8","wires":[["f19fbacf.0e6048"]]}]
      
      

      Dieser Flow hat einen Sub-Flow "Sub_Roomba_Steuerung", in dem UNBEDINGT in der Funktion "setzen" die IP-Adresse des Roomba eingetragen werden muss.

      –------------------------------------------------------------------------

      Der dritte und letzte Flow ist der "Roomba Status". Hiermit wird zeitgesteuert (ich habe derzeit jede Minute eingestellt) der Status des Roomba abgefragt und in die entsprechenden Datenpunkte geschrieben.

      [{"id":"a5a2adf.f5a5d5","type":"inject","name":"Full Status jede 1 Minute","topic":"","payload":"","payloadType":"date","repeat":"60","crontab":"","once":true,"x":180,"y":62,"z":"7859072e.87a6f8","wires":[["504181f6.afbe8","182e191.fe7d1e7"]]},{"id":"504181f6.afbe8","type":"http request","name":"Roomba command","method":"GET","ret":"txt","url":"http://192.168.178.55/full_status.xml","x":408,"y":63,"z":"7859072e.87a6f8","wires":[["b7123aff.48edc8","3050ead5.cfaf16","6c22b045.93dd5","c8c15059.373eb","205772fb.dfa88e","bee92f3c.4116d","f8aef704.075108","a899536.f5766b","666e081d.9991f8"]]},{"id":"b7123aff.48edc8","type":"function","name":"Name auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<name>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":658,"y":63,"z":"7859072e.87a6f8","wires":[["5f503576.a0afcc"]]},{"id":"5f503576.a0afcc","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.name","ack":"false","autoCreate":"true","x":990,"y":64,"z":"7859072e.87a6f8","wires":[]},{"id":"3050ead5.cfaf16","type":"function","name":"Strecke auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<cleaning_distance>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":664,"y":133,"z":"7859072e.87a6f8","wires":[["b475f945.4b8a08"]]},{"id":"b475f945.4b8a08","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.strecke","ack":"false","autoCreate":"true","x":996,"y":134,"z":"7859072e.87a6f8","wires":[]},{"id":"6c22b045.93dd5","type":"function","name":"Schmutzbehälter auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<bin_status>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":693,"y":191,"z":"7859072e.87a6f8","wires":[["11db5550.ee24ab"]]},{"id":"11db5550.ee24ab","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.schmutzbehaelter","ack":"false","autoCreate":"true","x":1029,"y":193,"z":"7859072e.87a6f8","wires":[]},{"id":"c8c15059.373eb","type":"function","name":"Akkuladung auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<battery_charge>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":666,"y":259,"z":"7859072e.87a6f8","wires":[["8c8c5798.7373a8"]]},{"id":"8c8c5798.7373a8","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.akkuladung","ack":"false","autoCreate":"true","x":1030,"y":260,"z":"7859072e.87a6f8","wires":[]},{"id":"205772fb.dfa88e","type":"function","name":"Akkukapazität (Soll) auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<capacity>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":688,"y":319,"z":"7859072e.87a6f8","wires":[["5c1179c1.a3ee88"]]},{"id":"5c1179c1.a3ee88","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.akkusoll","ack":"false","autoCreate":"true","x":1036,"y":319,"z":"7859072e.87a6f8","wires":[]},{"id":"bee92f3c.4116d","type":"function","name":"Akkukapazität (Ist) auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<charge>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":690,"y":378,"z":"7859072e.87a6f8","wires":[["334dc150.ccb23e"]]},{"id":"334dc150.ccb23e","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.akkuist","ack":"false","autoCreate":"true","x":1026,"y":380,"z":"7859072e.87a6f8","wires":[]},{"id":"f8aef704.075108","type":"function","name":"Temperatur auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<temperature>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":692,"y":436,"z":"7859072e.87a6f8","wires":[["2712b369.d8ed4c"]]},{"id":"2712b369.d8ed4c","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.temperatur","ack":"false","autoCreate":"true","x":1028,"y":438,"z":"7859072e.87a6f8","wires":[]},{"id":"a899536.f5766b","type":"function","name":"Status auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<cleaner_state>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\n\nif (daten == \"st_base\"){\n    daten = \"Auf Basis, nicht ladend\";\n}\n\nif (daten == \"st_base_recon\"){\n    daten = \"Auf Basis, Auffrischungsladung\";\n}\n\nif (daten == \"st_base_full\"){\n    daten = \"Auf Basis, normal aufladend\";\n}\n\nif (daten == \"st_base_trickle\"){\n    daten = \"Auf Basis, Erhaltungsladung\";\n}\n\nif (daten == \"st_base_wait\"){\n    daten = \"Auf Basis, wartend\";\n}\n\nif (daten == \"st_plug\"){\n    daten = \"Eingesteckt, nicht ladend\";\n}\n\nif (daten == \"st_plug_recon\"){\n    daten = \"Eingesteckt, Auffrischungsladung\";\n}\n\nif (daten == \"st_plug_full\"){\n    daten = \"Eingesteckt, normal aufladend\";\n}\n\nif (daten == \"st_plug_trickle\"){\n    daten = \"Eingesteckt, Erhaltungsladung\";\n}\n\nif (daten == \"st_plug_wait\"){\n    daten = \"Eingesteckt, wartend\";\n}\n\nif (daten == \"st_stopped\"){\n    daten = \"Angehalten\";\n}\n\nif (daten == \"st_clean\"){\n    daten = \"Reinigung läuft\";\n}\n\nif (daten == \"st_cleanstop\"){\n    daten = \"Reinigung gestoppt\";\n}\n\nif (daten == \"st_clean_spot\"){\n    daten = \"Spot-Reinigung\";\n}\n\nif (daten == \"st_clean_max\"){\n    daten = \"Max-Reinigung\";\n}\n\nif (daten == \"st_delayed\"){\n    daten = \"Reinigung verzögert, startet gleich\";\n}\n\nif (daten == \"st_dock\"){\n    daten = \"Suche Basis\";\n}\n\nif (daten == \"st_pickup\"){\n    daten = \"Roomba hochgehoben\";\n}\n\nif (daten == \"st_remote\"){\n    daten = \"Ferngesteuertes fahren\";\n}\n\nif (daten == \"st_wait\"){\n    daten = \"Warte auf Befehle\";\n}\n\nif (daten == \"st_off\"){\n    daten = \"Aus\";\n}\n\nif (daten == \"st_error\"){\n    daten = \"Fehler\";\n}\n\nif (daten == \"st_locate\"){\n    daten = \"Finde mich\";\n}\n\nif (daten == \"st_unknown\"){\n    daten = \"Status unbekannt\";\n}\n\n\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":692,"y":497,"z":"7859072e.87a6f8","wires":[["f6e00de3.091ff"]]},{"id":"f6e00de3.091ff","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.status","ack":"false","autoCreate":"true","x":1028,"y":499,"z":"7859072e.87a6f8","wires":[]},{"id":"666e081d.9991f8","type":"function","name":"Saugt gerade auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<cleaning>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":706,"y":556,"z":"7859072e.87a6f8","wires":[["c7157fc8.38ea8"]]},{"id":"c7157fc8.38ea8","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.saugt","ack":"false","autoCreate":"true","x":1042,"y":558,"z":"7859072e.87a6f8","wires":[]},{"id":"182e191.fe7d1e7","type":"function","name":"Status-Uhrzeit ermitteln","func":"msg = {};\n\n\nfunction addZero(i) {\n    if (i < 10) {\n        i = \"0\" + i;\n    }\n    return i;\n}\n\n\nvar currentdate = new Date(); \nvar h = addZero(currentdate.getHours());\nvar m = addZero(currentdate.getMinutes());\nvar s = addZero(currentdate.getSeconds());\n\n\nvar datetime = h + \":\" + m + \":\" + s;\n\nmsg.payload = datetime;\nreturn msg;\n","outputs":1,"noerr":0,"x":701,"y":631,"z":"7859072e.87a6f8","wires":[["57efa4f2.a8105c"]]},{"id":"57efa4f2.a8105c","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.Statusuhrzeit","ack":"false","autoCreate":"true","x":1044,"y":636,"z":"7859072e.87a6f8","wires":[]}]</cleaning></cleaner_state></temperature></charge></capacity></battery_charge></bin_status></cleaning_distance></name>
      

      Auch hier muss UNBEDINGT im Aufruf "Roomba command" die IP-Adresse des Roomba eingetragen werden.

      Folgende Datenpunkte stehen zur Verfügung:

      node-red.0.Roomba.name => Der vergebene Name der Roomba

      node-red.0.Roomba.strecke => Gefahrene Strecke

      node-red.0.Roomba.schmutzbehaelter => Schmutzbehälter voll

      node-red.0.Roomba.akkuladung => Akkuladung in Prozent

      node-red.0.Roomba.akkusoll => Akkuleistung (Soll-Wert, ausgelesen) im mA

      node-red.0.Roomba.akkuist => Akkuleistung (Ist-Wert, gemessen) im mA

      node-red.0.Roomba.temperatur => Temperatur im Roomba

      node-red.0.Roomba.status => Status des Roomba (in Klartext)

      node-red.0.Roomba.saugt => Soll angeben, ob der Roomba gerade saugt (funktioniert aber irgendwie nicht, stattdessen besser den Datenpunkt "node-red.0.Roomba.status" benutzen)

      node-red.0.Roomba.Statusuhrzeit => Uhrzeit der Statusabfrage

      –------------------------------------------------------------------------

      Die Flows laufen seit einigen Tagen ohne Probleme bei mir.

      Verbesserungen, Kommentare, usw. sind sehr willkommen.

      Gruß,

      Eric

      1 Reply Last reply Reply Quote 0
      • H
        hometm last edited by

        Hallo,

        Sobald mein RooWifi für meinen 870 da ist, wollte ich einen Adapter hierfür schreiben

        Tobias

        Gesendet von meinem VT10416-2 mit Tapatalk

        1 Reply Last reply Reply Quote 0
        • eric2905
          eric2905 last edited by

          Moin,

          dann bin ich der erste, der den testen möchte 😉

          Adapter programmieren muss ich mir irgendwann auch mal ansehen … momentan stehe ich mir immer wieder selber im Weg 🙂

          Gruß,

          Eric

          1 Reply Last reply Reply Quote 0
          • T
            tesso last edited by

            Ich werde den Adapter auch testen.

            Der Roomba hat bisher bei mir nur WLAN, aber keine Einbindung in die Steuerung.

            1 Reply Last reply Reply Quote 0
            • eric2905
              eric2905 last edited by

              @tesso:

              Übernimm einfach mal die Node-red Flows von mir - macht Spaß, den Roomba integriert zu wissen 😉

              Eine passende View (Wigdets) kann ich auch bereitstellen, wenn gewünscht.

              Gruß,

              Eric

              1 Reply Last reply Reply Quote 0
              • T
                tesso last edited by

                Die Widgets interessieren mich auch.

                Habe eben die flows importiert. dabei habe ich Fehler bekommen (iobroker input und output wären nicht vorhanden).

                Suche nun den Fehler und schaue dann weiter.

                1 Reply Last reply Reply Quote 0
                • A
                  Arminhh last edited by

                  hat sofort funktioniert! Super Beschreibung und Flow!! 😄

                  Das Widget würde mich auch sehr interessieren!

                  mfg

                  Arminhh

                  1 Reply Last reply Reply Quote 0
                  • eric2905
                    eric2905 last edited by

                    So, dann hier die Widgets.

                    Die Steuerung:

                    [{"tpl":"tplFrame","data":{"visibility-cond":"==","visibility-val":1,"title":"Steuerung","title_color":"black","title_top":"5","title_left":"15","header_height":"30","header_color":"#a0c0ca"},"style":{"left":"560px","top":"60px","width":"345px","height":"423px","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","font-size":"large","z-index":"5"},"widgetSet":"basic"},{"tpl":"tplJquiButtonState","data":{"oid":"node-red.0.Roomba.command_Clean","visibility-cond":"==","visibility-val":1,"buttontext":"Normal saugen","padding":"5","value":"1"},"style":{"left":"590px","top":"120px","z-index":"20"},"widgetSet":"jqui"},{"tpl":"tplJquiButtonState","data":{"oid":"node-red.0.Roomba.command_SpotSaugen","visibility-cond":"==","visibility-val":1,"buttontext":"Spot saugen","padding":"5","value":"1"},"style":{"left":"590px","top":"170px","z-index":"20"},"widgetSet":"jqui"},{"tpl":"tplJquiButtonState","data":{"oid":"node-red.0.Roomba.command_MaxSaugen","visibility-cond":"==","visibility-val":1,"buttontext":"Max saugen","padding":"5","value":"1"},"style":{"left":"590px","top":"220px","z-index":"20"},"widgetSet":"jqui"},{"tpl":"tplJquiButtonState","data":{"oid":"node-red.0.Roomba.command_DriveStop","visibility-cond":"==","visibility-val":1,"buttontext":"Stop","padding":"5","value":"1"},"style":{"left":"590px","top":"290px","z-index":"20"},"widgetSet":"jqui"},{"tpl":"tplJquiButtonState","data":{"oid":"node-red.0.Roomba.command_PowerOff","visibility-cond":"==","visibility-val":1,"buttontext":"Power off","padding":"5","value":"1"},"style":{"left":"590px","top":"420px","z-index":"20"},"widgetSet":"jqui"},{"tpl":"tplJquiButtonState","data":{"oid":"node-red.0.Roomba.command_Findme","visibility-cond":"==","visibility-val":1,"buttontext":"Find me","padding":"5","value":"1"},"style":{"left":"730px","top":"420px","z-index":"20"},"widgetSet":"jqui"},{"tpl":"tplJquiButtonState","data":{"oid":"node-red.0.Roomba.command_BackToDock","visibility-cond":"==","visibility-val":1,"buttontext":"Zur Basis","padding":"5","value":"1"},"style":{"left":"590px","top":"370px","z-index":"20"},"widgetSet":"jqui"},{"tpl":"tplJquiButtonState","data":{"oid":"node-red.0.Roomba.command_LeaveDock","visibility-cond":"==","visibility-val":1,"buttontext":"Basis verlassen","padding":"5","value":"1"},"style":{"left":"730px","top":"370px","z-index":"20"},"widgetSet":"jqui"}]
                    

                    Die Statusinfos:

                    [{"tpl":"tplFrame","data":{"visibility-cond":"==","visibility-val":1,"title":"Status","title_color":"black","title_top":"5","title_left":"15","header_height":"30","header_color":"#a0c0ca"},"style":{"left":"50px","top":"60px","width":"435px","height":"453px","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","font-size":"large","z-index":"5"},"widgetSet":"basic"},{"tpl":"tplValueString","data":{"oid":"nothing_selected","visibility-cond":"==","visibility-val":1,"html_prepend":"Akkustatus"},"style":{"left":"70px","top":"120px","width":"200px","height":"20px","color":"white","text-align":"left","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","z-index":"5"},"widgetSet":"basic"},{"tpl":"tplValueFloat","data":{"oid":"node-red.0.Roomba.akkuladung","visibility-cond":"==","visibility-val":1,"is_comma":"true","factor":"1","html_append_singular":" %","html_append_plural":" %"},"style":{"left":"360px","top":"120px","width":"100px","height":"22px","color":"white","text-align":"right","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","font-size":"large","z-index":"20"},"widgetSet":"basic"},{"tpl":"tplValueString","data":{"oid":"nothing_selected","visibility-cond":"==","visibility-val":1,"html_prepend":"Akkukapazität max."},"style":{"left":"70px","top":"160px","width":"200px","height":"20px","color":"white","text-align":"left","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","z-index":"5"},"widgetSet":"basic"},{"tpl":"tplValueFloat","data":{"oid":"node-red.0.Roomba.akkusoll","visibility-cond":"==","visibility-val":1,"is_comma":"true","factor":"1","html_append_singular":" mA","html_append_plural":" mA"},"style":{"left":"360px","top":"160px","width":"100px","height":"22px","color":"white","text-align":"right","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","font-size":"large","z-index":"20"},"widgetSet":"basic"},{"tpl":"tplValueFloat","data":{"oid":"node-red.0.Roomba.akkuist","visibility-cond":"==","visibility-val":1,"is_comma":"true","factor":"1","html_append_singular":" mA","html_append_plural":" mA"},"style":{"left":"360px","top":"190px","width":"100px","height":"22px","color":"white","text-align":"right","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","font-size":"large","z-index":"20"},"widgetSet":"basic"},{"tpl":"tplValueString","data":{"oid":"nothing_selected","visibility-cond":"==","visibility-val":1,"html_prepend":"Akkukapazität ist"},"style":{"left":"70px","top":"190px","width":"200px","height":"20px","color":"white","text-align":"left","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","z-index":"5"},"widgetSet":"basic"},{"tpl":"tplValueString","data":{"oid":"","visibility-cond":"==","visibility-val":1,"html_prepend":"Saugt gerade"},"style":{"left":"70px","top":"240px","width":"200px","height":"20px","color":"white","text-align":"left","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","z-index":"5"},"widgetSet":"basic"},{"tpl":"tplValueListHtml8","data":{"oid":"node-red.0.Roomba.saugt","visibility-cond":"==","visibility-val":1,"count":"1","value0":"Nein","value1":"Ja","style1":"background-color: green","style0":"background-color: red","value2":"Offen","style2":"background-color: red; padding:4px;","test_list":"0"},"style":{"left":"360px","top":"240px","color":"white","text-align":"center","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","font-size":"large","width":"100px","height":"22px","z-index":"20","overflow-x":""},"widgetSet":"basic"},{"tpl":"tplValueListHtml8","data":{"oid":"node-red.0.Roomba.schmutzbehaelter","visibility-cond":"==","visibility-val":1,"count":"1","value0":"Nein","value1":"Ja","style1":"background-color: red","style0":"background-color: green","value2":"Offen","style2":"background-color: red; padding:4px;","test_list":"0"},"style":{"left":"360px","top":"280px","color":"white","text-align":"center","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","font-size":"large","width":"100px","height":"22px","z-index":"20","overflow-x":""},"widgetSet":"basic"},{"tpl":"tplValueString","data":{"oid":"","visibility-cond":"==","visibility-val":1,"html_prepend":"Staubbehälter voll"},"style":{"left":"70px","top":"280px","width":"200px","height":"20px","color":"white","text-align":"left","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","z-index":"5"},"widgetSet":"basic"},{"tpl":"tplValueString","data":{"oid":"","visibility-cond":"==","visibility-val":1,"html_prepend":"Status"},"style":{"left":"70px","top":"360px","width":"200px","height":"20px","color":"white","text-align":"left","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","z-index":"5"},"widgetSet":"basic"},{"tpl":"tplValueString","data":{"oid":"node-red.0.Roomba.status","visibility-cond":"==","visibility-val":1},"style":{"left":"140px","top":"360px","z-index":"20","color":"rgb(255, 255, 255)","text-align":"right","text-shadow":"none","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","font-size":"16px","line-height":"18px","letter-spacing":"0","word-spacing":"0px","width":"320px","height":"20px"},"widgetSet":"basic"},{"tpl":"tplValueString","data":{"oid":"nothing_selected","visibility-cond":"==","visibility-val":1,"html_prepend":"Gefahrene Strecke"},"style":{"left":"70px","top":"390px","width":"200px","height":"20px","color":"white","text-align":"left","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","z-index":"5"},"widgetSet":"basic"},{"tpl":"tplValueFloat","data":{"oid":"node-red.0.Roomba.strecke","visibility-cond":"==","visibility-val":1,"is_comma":"true","factor":"","html_append_singular":" m","html_append_plural":" m"},"style":{"left":"360px","top":"390px","width":"100px","height":"22px","color":"white","text-align":"right","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","font-size":"large","z-index":"20"},"widgetSet":"basic"},{"tpl":"tplValueString","data":{"oid":"nothing_selected","visibility-cond":"==","visibility-val":1,"html_prepend":"Temperatur"},"style":{"left":"70px","top":"420px","width":"200px","height":"20px","color":"white","text-align":"left","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","z-index":"5"},"widgetSet":"basic"},{"tpl":"tplValueFloat","data":{"oid":"node-red.0.Roomba.temperatur","visibility-cond":"==","visibility-val":1,"is_comma":"true","factor":"","html_append_singular":" ºC","html_append_plural":" ºC"},"style":{"left":"360px","top":"420px","width":"100px","height":"22px","color":"white","text-align":"right","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","font-size":"large","z-index":"20"},"widgetSet":"basic"},{"tpl":"tplValueString","data":{"oid":"node-red.0.Roomba.Statusuhrzeit","visibility-cond":"==","visibility-val":1,"html_prepend":"(Stand : ","html_append":")"},"style":{"left":"130px","top":"66px","color":"black","text-align":"left","width":"250px","height":"20px","z-index":"20","font-family":"Arial, Helvetica, sans-serif","font-style":"normal","font-weight":"bold","font-size":"large"},"widgetSet":"basic"}]
                    

                    Am node-red-Flow für die Statusinfos habe ich noch was angepasst - die Uhrzeit der Statusabfrage wird nun auch in einen Datenpunkt geschrieben und im Widget mit angezeigt. So sieht man immer, wie alt der angezeigte Status ist.

                    Hier der überarbeitete Flow "Roomba Status" (ist auch im Posting oben angepasst):

                    [{"id":"a5a2adf.f5a5d5","type":"inject","name":"Full Status jede 1 Minute","topic":"","payload":"","payloadType":"date","repeat":"60","crontab":"","once":true,"x":180,"y":62,"z":"7859072e.87a6f8","wires":[["504181f6.afbe8","182e191.fe7d1e7"]]},{"id":"504181f6.afbe8","type":"http request","name":"Roomba command","method":"GET","ret":"txt","url":"http://192.168.178.55/full_status.xml","x":408,"y":63,"z":"7859072e.87a6f8","wires":[["b7123aff.48edc8","3050ead5.cfaf16","6c22b045.93dd5","c8c15059.373eb","205772fb.dfa88e","bee92f3c.4116d","f8aef704.075108","a899536.f5766b","666e081d.9991f8"]]},{"id":"b7123aff.48edc8","type":"function","name":"Name auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<name>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":658,"y":63,"z":"7859072e.87a6f8","wires":[["5f503576.a0afcc"]]},{"id":"5f503576.a0afcc","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.name","ack":"false","autoCreate":"true","x":990,"y":64,"z":"7859072e.87a6f8","wires":[]},{"id":"3050ead5.cfaf16","type":"function","name":"Strecke auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<cleaning_distance>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":664,"y":133,"z":"7859072e.87a6f8","wires":[["b475f945.4b8a08"]]},{"id":"b475f945.4b8a08","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.strecke","ack":"false","autoCreate":"true","x":996,"y":134,"z":"7859072e.87a6f8","wires":[]},{"id":"6c22b045.93dd5","type":"function","name":"Schmutzbehälter auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<bin_status>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":693,"y":191,"z":"7859072e.87a6f8","wires":[["11db5550.ee24ab"]]},{"id":"11db5550.ee24ab","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.schmutzbehaelter","ack":"false","autoCreate":"true","x":1029,"y":193,"z":"7859072e.87a6f8","wires":[]},{"id":"c8c15059.373eb","type":"function","name":"Akkuladung auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<battery_charge>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":666,"y":259,"z":"7859072e.87a6f8","wires":[["8c8c5798.7373a8"]]},{"id":"8c8c5798.7373a8","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.akkuladung","ack":"false","autoCreate":"true","x":1030,"y":260,"z":"7859072e.87a6f8","wires":[]},{"id":"205772fb.dfa88e","type":"function","name":"Akkukapazität (Soll) auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<capacity>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":688,"y":319,"z":"7859072e.87a6f8","wires":[["5c1179c1.a3ee88"]]},{"id":"5c1179c1.a3ee88","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.akkusoll","ack":"false","autoCreate":"true","x":1036,"y":319,"z":"7859072e.87a6f8","wires":[]},{"id":"bee92f3c.4116d","type":"function","name":"Akkukapazität (Ist) auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<charge>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":690,"y":378,"z":"7859072e.87a6f8","wires":[["334dc150.ccb23e"]]},{"id":"334dc150.ccb23e","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.akkuist","ack":"false","autoCreate":"true","x":1026,"y":380,"z":"7859072e.87a6f8","wires":[]},{"id":"f8aef704.075108","type":"function","name":"Temperatur auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<temperature>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":692,"y":436,"z":"7859072e.87a6f8","wires":[["2712b369.d8ed4c"]]},{"id":"2712b369.d8ed4c","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.temperatur","ack":"false","autoCreate":"true","x":1028,"y":438,"z":"7859072e.87a6f8","wires":[]},{"id":"a899536.f5766b","type":"function","name":"Status auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<cleaner_state>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\n\nif (daten == \"st_base\"){\n    daten = \"Auf Basis, nicht ladend\";\n}\n\nif (daten == \"st_base_recon\"){\n    daten = \"Auf Basis, Auffrischungsladung\";\n}\n\nif (daten == \"st_base_full\"){\n    daten = \"Auf Basis, normal aufladend\";\n}\n\nif (daten == \"st_base_trickle\"){\n    daten = \"Auf Basis, Erhaltungsladung\";\n}\n\nif (daten == \"st_base_wait\"){\n    daten = \"Auf Basis, wartend\";\n}\n\nif (daten == \"st_plug\"){\n    daten = \"Eingesteckt, nicht ladend\";\n}\n\nif (daten == \"st_plug_recon\"){\n    daten = \"Eingesteckt, Auffrischungsladung\";\n}\n\nif (daten == \"st_plug_full\"){\n    daten = \"Eingesteckt, normal aufladend\";\n}\n\nif (daten == \"st_plug_trickle\"){\n    daten = \"Eingesteckt, Erhaltungsladung\";\n}\n\nif (daten == \"st_plug_wait\"){\n    daten = \"Eingesteckt, wartend\";\n}\n\nif (daten == \"st_stopped\"){\n    daten = \"Angehalten\";\n}\n\nif (daten == \"st_clean\"){\n    daten = \"Reinigung läuft\";\n}\n\nif (daten == \"st_cleanstop\"){\n    daten = \"Reinigung gestoppt\";\n}\n\nif (daten == \"st_clean_spot\"){\n    daten = \"Spot-Reinigung\";\n}\n\nif (daten == \"st_clean_max\"){\n    daten = \"Max-Reinigung\";\n}\n\nif (daten == \"st_delayed\"){\n    daten = \"Reinigung verzögert, startet gleich\";\n}\n\nif (daten == \"st_dock\"){\n    daten = \"Suche Basis\";\n}\n\nif (daten == \"st_pickup\"){\n    daten = \"Roomba hochgehoben\";\n}\n\nif (daten == \"st_remote\"){\n    daten = \"Ferngesteuertes fahren\";\n}\n\nif (daten == \"st_wait\"){\n    daten = \"Warte auf Befehle\";\n}\n\nif (daten == \"st_off\"){\n    daten = \"Aus\";\n}\n\nif (daten == \"st_error\"){\n    daten = \"Fehler\";\n}\n\nif (daten == \"st_locate\"){\n    daten = \"Finde mich\";\n}\n\nif (daten == \"st_unknown\"){\n    daten = \"Status unbekannt\";\n}\n\n\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":692,"y":497,"z":"7859072e.87a6f8","wires":[["f6e00de3.091ff"]]},{"id":"f6e00de3.091ff","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.status","ack":"false","autoCreate":"true","x":1028,"y":499,"z":"7859072e.87a6f8","wires":[]},{"id":"666e081d.9991f8","type":"function","name":"Saugt gerade auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<cleaning>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":706,"y":556,"z":"7859072e.87a6f8","wires":[["c7157fc8.38ea8"]]},{"id":"c7157fc8.38ea8","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.saugt","ack":"false","autoCreate":"true","x":1042,"y":558,"z":"7859072e.87a6f8","wires":[]},{"id":"182e191.fe7d1e7","type":"function","name":"Status-Uhrzeit ermitteln","func":"msg = {};\n\n\nfunction addZero(i) {\n    if (i < 10) {\n        i = \"0\" + i;\n    }\n    return i;\n}\n\n\nvar currentdate = new Date(); \nvar h = addZero(currentdate.getHours());\nvar m = addZero(currentdate.getMinutes());\nvar s = addZero(currentdate.getSeconds());\n\n\nvar datetime = h + \":\" + m + \":\" + s;\n\nmsg.payload = datetime;\nreturn msg;\n","outputs":1,"noerr":0,"x":701,"y":631,"z":"7859072e.87a6f8","wires":[["57efa4f2.a8105c"]]},{"id":"57efa4f2.a8105c","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.Statusuhrzeit","ack":"false","autoCreate":"true","x":1044,"y":636,"z":"7859072e.87a6f8","wires":[]}]</cleaning></cleaner_state></temperature></charge></capacity></battery_charge></bin_status></cleaning_distance></name>
                    

                    Viel Spaß damit 🙂

                    Gruß,

                    Eric

                    smarthomegirl 1 Reply Last reply Reply Quote 0
                    • Homoran
                      Homoran Global Moderator Administrators last edited by

                      Welche Roombas gehen denn per WLAN? und wo gibt's das WLAN-Modul?

                      Gruß

                      Rainer

                      1 Reply Last reply Reply Quote 0
                      • H
                        hometm last edited by

                        Such mal nach roowifi im Netz. Bestellt habe ich das Modul vor 3 Wochen, aber erhalten habe ich es noch nicht. Daher kann ich noch keine Aussage dazu machen.

                        Gesendet von meinem VT10416-2 mit Tapatalk

                        1 Reply Last reply Reply Quote 0
                        • eric2905
                          eric2905 last edited by

                          Hallo Rainer,

                          @Homoran:

                          Welche Roombas gehen denn per WLAN? und wo gibt's das WLAN-Modul? `
                          derzeit geht die 500/600er-Serie und für die 700/800er-Serie ist gerade auf Kickstarter wieder ein Projekt gestartet => Infos hier : http://www.thinkingcleaner.com

                          In Deutschland kannst Du das WLAN-Modul hier kaufen => http://www.homewizard.de/thinking-clean … 00-eu.html

                          Da habe ich meinen auch bestellt (ohne Versandkosten). Ging sehr zügig.

                          Gruß,

                          Eric

                          1 Reply Last reply Reply Quote 0
                          • T
                            tesso last edited by

                            Ich kann die flows nicht testen. Suche immer noch nach den verlorenen nodes in/out.

                            Noch fehlt mir die Idee für eine Lösung.

                            1 Reply Last reply Reply Quote 0
                            • eric2905
                              eric2905 last edited by

                              Moin,

                              hast Du den node-red-Adapter schon deinstalliert und neu installiert?

                              Gruß,

                              Eric

                              1 Reply Last reply Reply Quote 0
                              • derAuge
                                derAuge last edited by

                                Frage:

                                ist dieser Robi dafür brauchbar?

                                http://onlineshop.real.de/Saugroboter-R … 8947001001

                                oder

                                http://www.comtech.de/Markenshops/iRobo ... augroboter

                                Gruß

                                Jürgen

                                1 Reply Last reply Reply Quote 0
                                • H
                                  hometm last edited by

                                  Ich habe einen 870 und bin voll zufrieden.

                                  Meiner Meinung nach sind die räumlichen Gegebenheiten viel wichtiger als das Modell.

                                  Wenn z.B.

                                  • Treppen vorhanden sind

                                  • Gardinen bis auf den Boden reichen

                                  • Kabel herum liegen

                                  • Der sauger sich unter niedrigen Möbelstücken verklemmt

                                  • Teppichfranzen

                                  -…

                                  Dann ist der Spass schnell vorbei. Daher sollte man sich so ein Gerät da bestellen, wo man es auch ohne Probleme zurück geben kann

                                  Tobias

                                  Gesendet von meinem VT10416-2 mit Tapatalk

                                  1 Reply Last reply Reply Quote 0
                                  • T
                                    tesso last edited by

                                    Cool, endlich ist der Roomba in der Haussteuerung.

                                    1 Reply Last reply Reply Quote 0
                                    • A
                                      Arminhh last edited by

                                      moin

                                      ich habe mir gerade eine Szene erstellt wenn der Staubbehälter voll ist, das ich eine Nachricht bekomme. Funktioniert auch soweit, ausser das nach dem leeren die Variable nicht zurückgesetzt wird. Hat der Staubbehälter einen Sensor? Wenn ja wo? Oder wie wird der Füllstand sonst ausgewertet?

                                      mfg

                                      Armin

                                      1 Reply Last reply Reply Quote 0
                                      • eric2905
                                        eric2905 last edited by

                                        Moin,

                                        eh, … bei mir wird die Variable (aus dem Flow) zurückgesetzt ... allerdings habe ich noch nie darauf geachtet, wann.

                                        Evtl. nach dem nächsten Clean-Start?

                                        Mal probieren.

                                        Ist die Verarbeitung über eine Szene einfacher, als über einen Flow?

                                        Ich habe mich noch nicht mit den Szenen befasst, daher meine Frage.

                                        Gruß,

                                        Eric

                                        1 Reply Last reply Reply Quote 0
                                        • smarthomegirl
                                          smarthomegirl @eric2905 last edited by smarthomegirl

                                          @eric2905 sagte in IRobot Roomba Steuerung:

                                          Am node-red-Flow für die Statusinfos habe ich noch was angepasst - die Uhrzeit der Statusabfrage wird nun auch in einen Datenpunkt geschrieben und im Widget mit angezeigt. So sieht man immer, wie alt der angezeigte Status ist.

                                          Hier der überarbeitete Flow "Roomba Status" (ist auch im Posting oben angepasst):

                                          [{"id":"a5a2adf.f5a5d5","type":"inject","name":"Full Status jede 1 Minute","topic":"","payload":"","payloadType":"date","repeat":"60","crontab":"","once":true,"x":180,"y":62,"z":"7859072e.87a6f8","wires":[["504181f6.afbe8","182e191.fe7d1e7"]]},{"id":"504181f6.afbe8","type":"http request","name":"Roomba command","method":"GET","ret":"txt","url":"http://192.168.178.55/full_status.xml","x":408,"y":63,"z":"7859072e.87a6f8","wires":[["b7123aff.48edc8","3050ead5.cfaf16","6c22b045.93dd5","c8c15059.373eb","205772fb.dfa88e","bee92f3c.4116d","f8aef704.075108","a899536.f5766b","666e081d.9991f8"]]},{"id":"b7123aff.48edc8","type":"function","name":"Name auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<name>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":658,"y":63,"z":"7859072e.87a6f8","wires":[["5f503576.a0afcc"]]},{"id":"5f503576.a0afcc","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.name","ack":"false","autoCreate":"true","x":990,"y":64,"z":"7859072e.87a6f8","wires":[]},{"id":"3050ead5.cfaf16","type":"function","name":"Strecke auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<cleaning_distance>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":664,"y":133,"z":"7859072e.87a6f8","wires":[["b475f945.4b8a08"]]},{"id":"b475f945.4b8a08","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.strecke","ack":"false","autoCreate":"true","x":996,"y":134,"z":"7859072e.87a6f8","wires":[]},{"id":"6c22b045.93dd5","type":"function","name":"Schmutzbehälter auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<bin_status>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":693,"y":191,"z":"7859072e.87a6f8","wires":[["11db5550.ee24ab"]]},{"id":"11db5550.ee24ab","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.schmutzbehaelter","ack":"false","autoCreate":"true","x":1029,"y":193,"z":"7859072e.87a6f8","wires":[]},{"id":"c8c15059.373eb","type":"function","name":"Akkuladung auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<battery_charge>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":666,"y":259,"z":"7859072e.87a6f8","wires":[["8c8c5798.7373a8"]]},{"id":"8c8c5798.7373a8","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.akkuladung","ack":"false","autoCreate":"true","x":1030,"y":260,"z":"7859072e.87a6f8","wires":[]},{"id":"205772fb.dfa88e","type":"function","name":"Akkukapazität (Soll) auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<capacity>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":688,"y":319,"z":"7859072e.87a6f8","wires":[["5c1179c1.a3ee88"]]},{"id":"5c1179c1.a3ee88","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.akkusoll","ack":"false","autoCreate":"true","x":1036,"y":319,"z":"7859072e.87a6f8","wires":[]},{"id":"bee92f3c.4116d","type":"function","name":"Akkukapazität (Ist) auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<charge>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":690,"y":378,"z":"7859072e.87a6f8","wires":[["334dc150.ccb23e"]]},{"id":"334dc150.ccb23e","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.akkuist","ack":"false","autoCreate":"true","x":1026,"y":380,"z":"7859072e.87a6f8","wires":[]},{"id":"f8aef704.075108","type":"function","name":"Temperatur auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<temperature>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":692,"y":436,"z":"7859072e.87a6f8","wires":[["2712b369.d8ed4c"]]},{"id":"2712b369.d8ed4c","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.temperatur","ack":"false","autoCreate":"true","x":1028,"y":438,"z":"7859072e.87a6f8","wires":[]},{"id":"a899536.f5766b","type":"function","name":"Status auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<cleaner_state>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\n\nif (daten == \"st_base\"){\n    daten = \"Auf Basis, nicht ladend\";\n}\n\nif (daten == \"st_base_recon\"){\n    daten = \"Auf Basis, Auffrischungsladung\";\n}\n\nif (daten == \"st_base_full\"){\n    daten = \"Auf Basis, normal aufladend\";\n}\n\nif (daten == \"st_base_trickle\"){\n    daten = \"Auf Basis, Erhaltungsladung\";\n}\n\nif (daten == \"st_base_wait\"){\n    daten = \"Auf Basis, wartend\";\n}\n\nif (daten == \"st_plug\"){\n    daten = \"Eingesteckt, nicht ladend\";\n}\n\nif (daten == \"st_plug_recon\"){\n    daten = \"Eingesteckt, Auffrischungsladung\";\n}\n\nif (daten == \"st_plug_full\"){\n    daten = \"Eingesteckt, normal aufladend\";\n}\n\nif (daten == \"st_plug_trickle\"){\n    daten = \"Eingesteckt, Erhaltungsladung\";\n}\n\nif (daten == \"st_plug_wait\"){\n    daten = \"Eingesteckt, wartend\";\n}\n\nif (daten == \"st_stopped\"){\n    daten = \"Angehalten\";\n}\n\nif (daten == \"st_clean\"){\n    daten = \"Reinigung läuft\";\n}\n\nif (daten == \"st_cleanstop\"){\n    daten = \"Reinigung gestoppt\";\n}\n\nif (daten == \"st_clean_spot\"){\n    daten = \"Spot-Reinigung\";\n}\n\nif (daten == \"st_clean_max\"){\n    daten = \"Max-Reinigung\";\n}\n\nif (daten == \"st_delayed\"){\n    daten = \"Reinigung verzögert, startet gleich\";\n}\n\nif (daten == \"st_dock\"){\n    daten = \"Suche Basis\";\n}\n\nif (daten == \"st_pickup\"){\n    daten = \"Roomba hochgehoben\";\n}\n\nif (daten == \"st_remote\"){\n    daten = \"Ferngesteuertes fahren\";\n}\n\nif (daten == \"st_wait\"){\n    daten = \"Warte auf Befehle\";\n}\n\nif (daten == \"st_off\"){\n    daten = \"Aus\";\n}\n\nif (daten == \"st_error\"){\n    daten = \"Fehler\";\n}\n\nif (daten == \"st_locate\"){\n    daten = \"Finde mich\";\n}\n\nif (daten == \"st_unknown\"){\n    daten = \"Status unbekannt\";\n}\n\n\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":692,"y":497,"z":"7859072e.87a6f8","wires":[["f6e00de3.091ff"]]},{"id":"f6e00de3.091ff","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.status","ack":"false","autoCreate":"true","x":1028,"y":499,"z":"7859072e.87a6f8","wires":[]},{"id":"666e081d.9991f8","type":"function","name":"Saugt gerade auswerten","func":"var quelle = msg.payload;\n\nmsg1 = {};\n\nsuche = \"<cleaning>\";\nsuche_laenge = (suche && suche.length);\n\n//  Suchwort \"suche\" finden \n// var daten_startpos = quelle.indexOf('cleaning_distance');\nvar daten_startpos = quelle.indexOf(suche);\nvar daten = quelle.substr(daten_startpos + suche_laenge, 50);\n\n// Finde \"<\" und merke dir die Position. Schneide aus von 0 bis Position\nvar daten_endpos = daten.indexOf('<');\ndaten = daten.substring(0, daten_endpos);\nmsg1.payload = daten; // String\n\nreturn [msg1];","outputs":"1","noerr":0,"x":706,"y":556,"z":"7859072e.87a6f8","wires":[["c7157fc8.38ea8"]]},{"id":"c7157fc8.38ea8","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.saugt","ack":"false","autoCreate":"true","x":1042,"y":558,"z":"7859072e.87a6f8","wires":[]},{"id":"182e191.fe7d1e7","type":"function","name":"Status-Uhrzeit ermitteln","func":"msg = {};\n\n\nfunction addZero(i) {\n    if (i < 10) {\n        i = \"0\" + i;\n    }\n    return i;\n}\n\n\nvar currentdate = new Date(); \nvar h = addZero(currentdate.getHours());\nvar m = addZero(currentdate.getMinutes());\nvar s = addZero(currentdate.getSeconds());\n\n\nvar datetime = h + \":\" + m + \":\" + s;\n\nmsg.payload = datetime;\nreturn msg;\n","outputs":1,"noerr":0,"x":701,"y":631,"z":"7859072e.87a6f8","wires":[["57efa4f2.a8105c"]]},{"id":"57efa4f2.a8105c","type":"ioBroker out","name":"","topic":"node-red.0.Roomba.Statusuhrzeit","ack":"false","autoCreate":"true","x":1044,"y":636,"z":"7859072e.87a6f8","wires":[]}]</cleaning></cleaner_state></temperature></charge></capacity></battery_charge></bin_status></cleaning_distance></name>
                                          

                                          Viel Spaß damit 🙂

                                          Gruß,

                                          Eric

                                          Hallo @eric2905,
                                          beim Importieren des Roomba Status Flows in NodeRed kommt bei mir folgende Fehlermeldung:
                                          479f8357-59e7-432e-b560-48b3598a1392-image.png

                                          Was mache ich da falsch? Wo liegt der Fehler?

                                          EDIT:
                                          Es darf

                                          </cleaning></cleaner_state></temperature></charge></capacity></battery_charge></bin_status></cleaning_distance></name>
                                          

                                          nicht enthalten sein.

                                          Ein Problem habe ich aber trotzdem noch.
                                          Ich habe wie beschrieben unter "Roomba command" meine IP Adresse des Saugroboters eingetragen, aber nach dem Deployen bekommt Node Red keine Verbindung. (siehe Bild) So wie es aussieht ist diese Verbindung nicht möglich.

                                          b071a54d-df05-4b8e-acfc-dd74115bef9f-image.png

                                          Der Aufruf dieses Links http://192.168.178.253/full_status.xml ist nicht möglich.

                                          d5db8c82-88f5-47ce-a043-5aeab60e4d13-image.png

                                          Im Log steht folgende Fehlermeldung:

                                          node-red.0	2020-02-22 21:45:41.561	error	at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
                                          node-red.0	2020-02-22 21:45:41.561	error	(2903) 22 Feb 21:45:41 - [error] [http request:Roomba command] Error: connect ECONNREFUSED 192.168.178.253:80
                                          node-red.0	2020-02-22 21:44:41.552	error	at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
                                          node-red.0	2020-02-22 21:44:41.552	error	(2903) 22 Feb 21:44:41 - [error] [http request:Roomba command] Error: connect ECONNREFUSED 192.168.178.253:80
                                          node-red.0	2020-02-22 21:43:41.581	error	at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
                                          node-red.0	2020-02-22 21:43:41.581	error	(2903) 22 Feb 21:43:41 - [error] [http request:Roomba command] Error: connect ECONNREFUSED 192.168.178.253:80
                                          node-red.0	2020-02-22 21:42:41.561	error	at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
                                          node-red.0	2020-02-22 21:42:41.561	error	(2903) 22 Feb 21:42:41 - [error] [http request:Roomba command] Error: connect ECONNREFUSED 192.168.178.253:80
                                          node-red.0	2020-02-22 21:41:41.576	error	at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
                                          node-red.0	2020-02-22 21:41:41.576	error	(2903) 22 Feb 21:41:41 - [error] [http request:Roomba command] Error: connect ECONNREFUSED 192.168.178.253:80
                                          node-red.0	2020-02-22 21:41:12.308	error	at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
                                          node-red.0	2020-02-22 21:41:12.308	error	(2903) 22 Feb 21:41:12 - [error] [http request:Roomba command] Error: connect ECONNREFUSED 192.168.178.253:80
                                          node-red.0	2020-02-22 21:41:12.138	error	at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
                                          node-red.0	2020-02-22 21:41:12.138	error	(2903) 22 Feb 21:41:12 - [error] [http request:Roomba command] Error: connect ECONNREFUSED 192.168.178.253:80
                                          node-red.0	2020-02-22 21:40:12.307	error	at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
                                          node-red.0	2020-02-22 21:40:12.307	error	(2903) 22 Feb 21:40:12 - [error] [http request:Roomba command] Error: connect ECONNREFUSED 192.168.178.253:80
                                          node-red.0	2020-02-22 21:40:12.160	error	at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
                                          node-red.0	2020-02-22 21:40:12.160	error	(2903) 22 Feb 21:40:12 - [error] [http request:Roomba command] Error: connect ECONNREFUSED 192.168.178.253:80
                                          node-red.0	2020-02-22 21:39:12.353	error	at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
                                          node-red.0	2020-02-22 21:39:12.353	error	(2903) 22 Feb 21:39:12 - [error] [http request:Roomba command] Error: connect ECONNREFUSED 192.168.178.253:80
                                          node-red.0	2020-02-22 21:39:12.324	error	at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
                                          node-red.0	2020-02-22 21:39:12.324	error	(2903) 22 Feb 21:39:12 - [error] [http request:Roomba command] Error: connect ECONNREFUSED 192.168.178.253:80
                                          

                                          Was ist da falsch? Was muss ich da machen?

                                          1 Reply Last reply Reply Quote 0
                                          • First post
                                            Last post

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          671
                                          Online

                                          31.7k
                                          Users

                                          79.7k
                                          Topics

                                          1.3m
                                          Posts

                                          7
                                          19
                                          4031
                                          Loading More Posts
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          The ioBroker Community 2014-2023
                                          logo