Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. IRobot Roomba Adapter

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    IRobot Roomba Adapter

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

      Nachdem wir ja nun das Thema Windows vs. Linux hinter uns gelassen haben, scheitere ich weiterhin seit einer Woche an der Installation von Canavas, welche ich exakt nach der Windows Anleitung auf Zefaus Seite durchgeführt habe.

      Trotz exakter Eingabe des Befehls, kommt es zu den unten zu sehenden Fehlermeldungen. Was kann ich aber anderes tun, als diesen Befehl einzugeben. Der Rest passiert ja automatisch (oder auch nicht)?

      node-gyp rebuild --GTK_Root=C:\GTK2
      
      **********************************************************
      ***               Welcome to ioBroker.                 ***
      ***                                                    ***
      ***   Type 'iobroker help' for list of instructions.   ***
      ***                For more help see                   ***
      ***     https://github.com/ioBroker/ioBroker.docs      ***
      **********************************************************
      
      Your environment has been set up for using Node.js 12.18.0 (ia32) and npm.
      
      
      C:\iobroker\GLT>npm install --global --production windows-build-tools
      npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
      
      > windows-build-tools@5.2.2 postinstall C:\iobroker\GLT\nodejs\node_modules\windows-build-tools
      > node ./dist/index.js
      
      
      
      Downloading vs_BuildTools.exe
      [>                                            ] 0.0% (0 B/s)
      Downloaded vs_BuildTools.exe. Saved to C:\Users\blank\.windows-build-tools\vs_BuildTools.exe.
      
      Starting installation...
      Launched installers, now waiting for them to finish.
      This will likely take some time - please be patient!
      
      Status from the installers:
      ---------- Visual Studio Build Tools ----------
      2020-06-28T18:24:09 : Verbose : [InstalledProductsProviderImpl]: Stream was closed
      2020-06-28T18:24:09 : Verbose : [InstallerImpl]: Rpc connection was closed.
      2020-06-28T18:24:09 : Verbose : [InstallerImpl]: Stream was closed
      2020-06-28T18:24:09 : Verbose : [SetupUpdaterImpl]: Rpc connection was closed.
      2020-06-28T18:24:09 : Verbose : [SetupUpdaterImpl]: Stream was closed
      ------------------- Python --------------------
      Python 2.7.15 is already installed, not installing again.
      
      
      Could not install Visual Studio Build Tools.
      Please find more details in the log files, which can be found at
      C:\Users\blank\.windows-build-tools
      
      Skipping configuration: No configuration for Python or Visual Studio Build Tools required.
      
      All done!
      
      + windows-build-tools@5.2.2
      updated 1 package in 12.295s
      
      C:\iobroker\GLT>node-gyp rebuild --GTK_Root=C:\GTK2
      gyp info it worked if it ends with ok
      gyp info using node-gyp@6.0.1
      gyp info using node@12.18.0 | win32 | ia32
      gyp info find Python using Python version 2.7.15 found at "C:\Users\blank\.windows-build-tools\python27\python.exe"
      gyp info find VS using VS2017 (15.9.28307.905) found at:
      gyp info find VS "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools"
      gyp info find VS run with --verbose for detailed information
      gyp info spawn C:\Users\blank\.windows-build-tools\python27\python.exe
      gyp info spawn args [
      gyp info spawn args   'C:\\iobroker\\GLT\\env\\npm\\node_modules\\node-gyp\\gyp\\gyp_main.py',
      gyp info spawn args   'binding.gyp',
      gyp info spawn args   '-f',
      gyp info spawn args   'msvs',
      gyp info spawn args   '-I',
      gyp info spawn args   'C:\\iobroker\\GLT\\build\\config.gypi',
      gyp info spawn args   '-I',
      gyp info spawn args   'C:\\iobroker\\GLT\\env\\npm\\node_modules\\node-gyp\\addon.gypi',
      gyp info spawn args   '-I',
      gyp info spawn args   'C:\\Users\\blank\\AppData\\Local\\node-gyp\\Cache\\12.18.0\\include\\node\\common.gypi',
      gyp info spawn args   '-Dlibrary=shared_library',
      gyp info spawn args   '-Dvisibility=default',
      gyp info spawn args   '-Dnode_root_dir=C:\\Users\\blank\\AppData\\Local\\node-gyp\\Cache\\12.18.0',
      gyp info spawn args   '-Dnode_gyp_dir=C:\\iobroker\\GLT\\env\\npm\\node_modules\\node-gyp',
      gyp info spawn args   '-Dnode_lib_file=C:\\\\Users\\\\blank\\\\AppData\\\\Local\\\\node-gyp\\\\Cache\\\\12.18.0\\\\<(target_arch)\\\\node.lib',
      gyp info spawn args   '-Dmodule_root_dir=C:\\iobroker\\GLT',
      gyp info spawn args   '-Dnode_engine=v8',
      gyp info spawn args   '--depth=.',
      gyp info spawn args   '--no-parallel',
      gyp info spawn args   '--generator-output',
      gyp info spawn args   'C:\\iobroker\\GLT\\build',
      gyp info spawn args   '-Goutput_dir=.'
      gyp info spawn args ]
      gyp: binding.gyp not found (cwd: C:\iobroker\GLT) while trying to load binding.gyp
      gyp ERR! configure error
      gyp ERR! stack Error: `gyp` failed with exit code: 1
      gyp ERR! stack     at ChildProcess.onCpExit (C:\iobroker\GLT\env\npm\node_modules\node-gyp\lib\configure.js:351:16)
      gyp ERR! stack     at ChildProcess.emit (events.js:315:20)
      gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
      gyp ERR! System Windows_NT 10.0.18363
      gyp ERR! command "C:\\iobroker\\GLT\\nodejs\\node.exe" "C:\\iobroker\\GLT\\env\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--GTK_Root=C:\\GTK2"
      gyp ERR! cwd C:\iobroker\GLT
      gyp ERR! node -v v12.18.0
      
      mikeal created this issue in request/request

      open Request’s Past, Present and Future #3142

      Zefau 1 Reply Last reply Reply Quote 0
      • Zefau
        Zefau @JB_Sullivan last edited by

        @JB_Sullivan ich hab leider kein Windows und kann daher nur bedingt helfen. Laut Fehler fehlt die Datei binding.gyp (gyp: binding.gyp not found (cwd: C:\iobroker\GLT) while trying to load binding.gyp). Google mal, was das für Windows bedeutet. Ich meine, dass die Datei manuell angelegt werden muss, da es sich um eine Konfiguration handelt.

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

          Die Konfiguration zum abarbeiten der einzelnen Installationsschritte scheint unter npn falsch zu sein, denn es gibt unter node_modules den Ordner canvas und genau da ist die binding.gyp drin.

          Ich habe sie schon spaßeshalber mal an den gewünschten Ort kopiert. Da die binding.gyp wie du richtig sagst eine Konfigurationsdatei ist, startet er sie dann zwar, meckert aber im nächsten Schritt die nächsten fehlenden Dateien an, die alle wie gesagt unter node_modules liegen und nicht im Root Verzeichnis von ioBroker.

          Irgend etwas in der Installationsroutine läuft das schief.

          Zefau 1 Reply Last reply Reply Quote 0
          • Zefau
            Zefau @JB_Sullivan last edited by

            @JB_Sullivan wie startest du das Ganze? Kannst du den Ordner wechseln?

            1 Reply Last reply Reply Quote 0
            • W
              wizzardking last edited by

              Hallo zusammen

              Erstmals Danke für den Adapter. Funktioniert sehr gut.
              Ich habe jedoch ein kleines Problem, mit dem iRobot i7 +.

              Den Roboter lasse ich per Zeitplan über iOBroker starten, damit ich den Zeitplan per VIS An- und Abschalten, so wie editieren kann.
              Dies bringt jedoch das Problem mit sich, dass sich der Behälter nicht automatisch leert, wenn er voll ist (i7+ hat einen externen Abfallbehälter). Wenn der Roboter jedoch per "normalem" iRobot App-Zeitplan gestartet wird, dann geht das.

              Nun habe ich 2 Fragen dazu:

              1. Ist es möglich im Adapter den Befehl zu senden, dass sich der Behälter leeren soll? Somit könnte ich einfach die Funktion einbauen:
                Wenn Behälter voll UND Roboter an Dockingstation = leere Behälter.

              ODER

              1. Wie kann ich den Zeitplan über den Adapter auslesen und ändern, damit ich dies weiterhin über VIS einstellen kann, jedoch der Roboter mit dem "normalen" Zeitplan startet?

              P.S. Es gibt ja das RunCommand Objekt. Beim Objekt steht, dass eine Liste unter https://bit.ly/2S57cgM zu finden ist. Dort wurde ja aber auch nur die Standardfunktionen wie Start, Stop, etc. abgebildet.

              Zefau 1 Reply Last reply Reply Quote 0
              • Zefau
                Zefau @wizzardking last edited by

                @wizzardking den Zeitplan findest du bereits in den States (unter missions.schedule). Bzgl. des Befehls schau mal die Issues (auch die geschlossenen) von dorita durch (siehe https://github.com/koalazak/dorita980/issues), ob du dort etwas zu i7 findest.

                W 1 Reply Last reply Reply Quote 0
                • K
                  Kusi last edited by

                  Hallo zusammen

                  Ist es möglich, dass via ioBroker auch nur ein bestimmter Raum gereinigt werden soll?
                  Gerne würde ich dann auch mehrere Räume zu einer Zone/Start zusammenschliessen.
                  Die Räume sind bereits in der Roomba-App vorhanden.

                  Vielen Dank für eure Hilfe.

                  Gruss Kusi

                  Zefau 1 Reply Last reply Reply Quote 0
                  • Zefau
                    Zefau @Kusi last edited by Zefau

                    @Kusi Ist nicht direkt implementiert. Es müsste ein command state geben, mit dem du das realisieren kannst.

                    { command: 'CleanRoom', time: 0, initiator: 'localApp' }
                    

                    Ich habe keinen Roomba mehr und kann es daher nicht probieren. Probier etwas mit den Werten zu spielen, wenn es nicht geht.

                    K 1 Reply Last reply Reply Quote 0
                    • K
                      Kusi @Zefau last edited by

                      @Zefau Danke für deine Antwort.
                      Wo muss ich denn diese Zeile eingeben?

                      Zefau 1 Reply Last reply Reply Quote 0
                      • JB_Sullivan
                        JB_Sullivan last edited by

                        Mal eine Frage an alle - habt ihr z.Zt. auch Probleme, das sich Roomba nicht mehr mit der Werkscloud verbindet?

                        Ich hatte nie Probleme damit, doch seit Montag ist mir aufgefallen, das so gut wie keine Verbindung mehr zustande kommt.

                        Die nächste Frage geht an @Zefau : Wurde irgend etwas bei den History Daten geändert?

                        Der Datenpunkt roomba.0.missions.history spuckt ja eine json Tabelle aus. Im VIS eingebunden sieht diese dann so aus.

                        2020-07-17 08_02_36-vis.png

                        Interessanter Weise scheint die sich nicht mehr zu aktualisieren, denn die History Tabelle vom Roomba selber schaut so aus.

                        2020-07-17 08_02_58-iRobot Roomba.png

                        Während die json Tabelle bei 339 endet, geht die Roomba Tabelle bis 356 (die fehlenden Nummer bitte ignorieren, da habe ich was ausprobiert und canvas lief nicht)

                        1 Reply Last reply Reply Quote 0
                        • Zefau
                          Zefau @Kusi last edited by

                          @Kusi Datenpunkt commands._runCommand

                          K 1 Reply Last reply Reply Quote 0
                          • K
                            Kusi @Zefau last edited by Kusi

                            @Zefau Danke, könntest du mir dies bitte ein bisschen genauer erklären, wie ich dies beim genannten Objekt eintragen muss? Ich habe es heute probiert, jedoch nicht hinbekommen.

                            Muss das gesamte Wort "CleanRoom" durch den Raumnamen ersetzt werden?

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

                              der adapter soll ja auf dorita980 basieren, und im git dazu steht "Compatible robots: all 600, 800, 900, e5 and i7/i7+ series with HOME app and Braava m6."
                              ich hab nun mal meinen m6 über den adapter verbunden und es funktioniert auch alles (was ich benötige und getestet habe) 👍
                              das einzige was etwas störend ist das nun regelmässig fehler vom adapter im log auftauchen 😞

                              unifi.0	2020-07-19 07:47:38.776	info	(2130) Update done
                              roomba.0	2020-07-19 07:47:28.294	error	(1876) "Cannot read property 'toString' of null"
                              roomba.0	2020-07-19 07:47:28.292	error	(1876) "Cannot read property 'toString' of null"
                              unifi.0	2020-07-19 07:46:38.889	info	(2130) Update done
                              roomba.0	2020-07-19 07:46:20.500	error	(1876) "Cannot read property 'toString' of null"
                              roomba.0	2020-07-19 07:46:20.497	error	(1876) "Cannot read property 'toString' of null"
                              unifi.0	2020-07-19 07:45:38.881	info	(2130) Update done
                              roomba.0	2020-07-19 07:45:18.102	error	(1876) "Cannot read property 'toString' of null"
                              roomba.0	2020-07-19 07:45:18.100	error	(1876) "Cannot read property 'toString' of null"
                              

                              wie kann ich helfen den fehler auf die spur zu kommen?
                              danke im voraus.

                              1 Reply Last reply Reply Quote 0
                              • W
                                wizzardking @Zefau last edited by

                                @Zefau said in IRobot Roomba Adapter:

                                missions.schedule

                                Hallo Zefau
                                Vielen Dank für Deine Antwort.
                                Leider sehe ich nur beim älteren iRobot Modell den Zeitplan. Beim i7 sehe ich unter "Missions" leider nur den Ordner "current".

                                Den Zeitplan müsste man aber ja auch durch das objekt _runCommand auslesen und setzen können.
                                Ich verstehe hier aber die Anleitung nicht ganz.
                                Wenn ich "myRobot.getWeek()" im Objekt _runCommand eingebe, würde ich erwarten, dass der aktuelle Zeitplan in den Logs ausgegeben wird, tatsächlich passiert aber nichts.

                                Zefau 1 Reply Last reply Reply Quote 0
                                • Zefau
                                  Zefau @wizzardking last edited by

                                  @wizzardking bitte beachtet, dass ich keinen Roomba mehr habe und daher nur noch sehr begrenzt support leisten kann.

                                  Ich habe runCommand nie selbst ausprobiert. Das Format müsste aber wie folgt sein

                                  { "command": "start", "time": 1579465092, "initiator": "localApp" }
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • ?
                                    A Former User last edited by A Former User

                                    Disregard.

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

                                      Hi zusammen,
                                      ich habe einen s9 und habe mir den Roomba Adapter im IOBroker installiert.
                                      Die Kommandos unter .commands wie Start, Stop ... funktionieren gut.
                                      Jedoch wundert es mich das keine Bereichsreinigung möglich ist, also habe ich mich an '_runCommand' gemacht.
                                      Egal was ich dort übergebe ich bekomme so gar kein Feedback, also keinen Fehler und nix.

                                      Ich hätte gedacht das dieses Kommando das richtige sei:

                                      '{"command" : "cleanroom","ordered": 1,"pmap_id": "meine id","regions": [{ "region_id": "12"},{ "region_id": "13"}],"user_pmapv_id": "meine id"}'
                                      

                                      Ich habe auch leider kein Erfolg gehabt dorita980 in einem Skript zu verwenden:

                                      var dorita980 = require('dorita980');
                                      var robi= new dorita980.Local('???', ':1:1596011664:??', '172.xx.xx.xx');  
                                      robi.on('connect', init);
                                      
                                      function init () {
                                          if (robi)
                                          {
                                          log("init");
                                          robi.getRobotState(['lastCommand']).then((actualState) => {
                                              log(actualState);
                                          });
                                          }
                                      }
                                      

                                      Kann mir jemand damit bitte helfen, hat das schon mal jemand im IOBroker gemacht ?

                                      A 1 Reply Last reply Reply Quote 1
                                      • A
                                        Ashuan @Ashuan last edited by Ashuan

                                        Hallo zusammen, hallo @Zefau ,
                                        ich habe mal ein wenig Recherche betrieben. Ich finde Deinen Adapter super und würde gerne die Node _runCommand benutzen.
                                        Jedoch tut sich beim Benutzen dieser so garnichts.
                                        So wie ich Deinen Code verstehe (roomba.js) Zeile 151

                                        		// run command
                                        		else if (action == '_runCommand' && state.ack !== true)
                                        		{
                                        			let command = { command: state.val, time: Date.now() / 1000 | 0, initiator: 'localApp' };
                                        			robot.publish('cmd', JSON.stringify(command), () => {
                                        				adapter.log.info('Ran command ' + state.val + '!');
                                        			});
                                        		}
                                        

                                        läßt Du dort nur ein Kommando wir 'start' o.ä., ohne Parameter zu, da der eigentliche Commandstring erst via stringify erzeugt wird.
                                        Also möchte ich ein Command wie (btw: Dieses Command funktioniert wenn ich eine Verbindung zum s9 via MQTT Explorer aufbaue)

                                        {
                                        	"command": "start",
                                        	"ordered": 1,
                                        	"params": {
                                        		"carpetBoost": false,
                                        		"noAutoPasses": false,
                                        		"twoPass": false,
                                        		"vacHigh": false
                                        	},
                                        	"pmap_id": "???",
                                        	"regions": [
                                        		{
                                        			"region_id": "12",
                                        			"type": "rid"
                                        		}
                                        	],
                                        	"user_pmapv_id": "???"
                                        }
                                        

                                        los schicken, wird folgendes in die Methode publish geschickt:

                                        { command: {
                                        	"command": "start",
                                        	"ordered": 1,
                                        	"params": {
                                        		"carpetBoost": false,
                                        		"noAutoPasses": false,
                                        		"twoPass": false,
                                        		"vacHigh": false
                                        	},
                                        	"pmap_id": "???",
                                        	"regions": [
                                        		{
                                        			"region_id": "12",
                                        			"type": "rid"
                                        		}
                                        	],
                                        	"user_pmapv_id": "???"
                                        }, time: Date.now() / 1000 | 0, initiator: 'localApp' }
                                        

                                        ... und das dürfte einen Fehler produzieren.
                                        Ich möchte Dir nicht vorgreifen, jedoch sollte der case für _runCommand nicht so aussehen ?

                                        		// run command
                                        		else if (action == '_runCommand' && state.ack !== true)
                                        		{
                                        			robot.publish('cmd', state.val, () => {
                                        				adapter.log.info('Ran command ' + state.val + '!');
                                        			});
                                        		}
                                        

                                        Edit: Ich habe gerade meine lokale roomba.js dahingehend geändert. Ich denke der Case wird nicht angesprungen..

                                        		// run command
                                        		else if (action == '_runCommand' && state.ack !== true)
                                        		{
                                        			adapter.log.info('_runCommand modify');
                                        
                                        			robot.publish('cmd', state.val, () => {
                                        				adapter.log.info('Ran command ' + state.val + '!');
                                        			});
                                        		}
                                        
                                        

                                        Ich kenne die Internas von IOBroker nicht und dachte es wäre die Stelle im Code die ausgeführt wird sobald ich den Inhalt der Node 'roomba.0.commands._runCommand' verändere. Ich sehe auch im Log nicht den erwarteten Output '_runCommand modify'
                                        Liege ich damit falsch ?

                                        Viele Grüße

                                        Kai

                                        A 1 Reply Last reply Reply Quote 0
                                        • A
                                          Ashuan @Ashuan last edited by Ashuan

                                          Hallo zusammen,
                                          entschuldigt bitte, jedoch es hat mir keine Ruhe gelassen.
                                          Ich habe die roomba.js dahin gehend angepasst sodass der _runCommand Befehl funktioniert.

                                          roomba.js

                                          @Zefau : es wäre super wenn Du das prüfen könntest und ggf. einchecken.

                                          Ich habe folgendes angepasst:

                                          Zeile 151

                                          		else if (action == '_runCommand' && state.ack !== true)
                                          		{
                                          			robot.publish('cmd', state.val, () => {
                                          				adapter.log.info('Ran command ' + state.val + '!');
                                          			});
                                          		}
                                          
                                          

                                          Zeile 616

                                          				if (node.node !== undefined)
                                          					{
                                          					let leafnode = node.node.substr(node.node.lastIndexOf('.')+1);
                                          					//adapter.log.info('Leafnode: ' + leafnode + '.');
                                          
                                          					if ((leafnode) && (leafnode === '_runCommand' ) && listeners[node.node] === undefined)
                                          					{
                                          						adapter.log.info('Subscripe Leafnode: ' + leafnode + '.');
                                          						adapter.subscribeStates(node.node); // attach state listener
                                          						listeners[node.node] = node;
                                          					}
                                          					adapter.getState(node.node, function(err, res)
                                          					{
                                          						if ((err !== null || !res) && (node.node !== undefined && node.description !== undefined))
                                          							library.set(node, '');
                                          					});
                                          				}
                                          

                                          Ich habe es bei mir getestet und das _runCommand funktioniert.

                                          {
                                          	"command": "start",
                                          	"ordered": 1,
                                          	"params": {
                                          		"carpetBoost": false,
                                          		"noAutoPasses": false,
                                          		"twoPass": false,
                                          		"vacHigh": false
                                          	},
                                          	"pmap_id": "yourmapid",
                                          	"regions": [
                                          		{
                                          			"region_id": "12",
                                          			"type": "rid"
                                          		}
                                          	],
                                          	"user_pmapv_id": "yourid"
                                          }
                                          

                                          Ich bekomme immer wieder ein "Cannot read property 'toString' of null" aber da bin ich dran.
                                          Ich denke das habe ich mir eingefangen als ich die Nodes etwas verändert habe.

                                          LG und have fun
                                          Kai

                                          Zefau F K 3 Replies Last reply Reply Quote 0
                                          • Zefau
                                            Zefau @Ashuan last edited by

                                            @Ashuan Danke dir! Bitte Repo forken und dann einfach einen pull request 🙂

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            772
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            100
                                            829
                                            180097
                                            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