Vorwort

Leider lässt sich der Roboter nicht komplett in ioBroker integrieren und zeigt somit leider keine Karte bzw. den Status/Batterie-Stand an. Ich forsche aktuell danach, ob es sich nicht doch noch realisieren lässt.

Mit dem u.g. Skript ist es immerhin möglich, den Roboter via VIS oder Jarvis zu steuern.

Es werden 2 Datenpunkte angelegt: Modus und Steuerung.

In der Steuerung hat man die Auswahl zwischen Start, Stop und Aufladen

Der Modus-Datenpunkt steuert die Reinigung des Roboters: Auto, Bereich, Rand

Skript

Nun erstellen wir in ioBroker ein neues Skript im common Bereich. Es bekommt den Namen “Proscenic-Remote”.

/*
 * @copyright 2021 Stephan Kreyenborg <stephan@kreyenborg.koeln>
 *
 * @author 2021 Stephan Kreyenborg <stephan@kreyenborg.koeln>
 *
 * Dieses Skript dient zur freien Verwendung in ioBroker zur Steuerung des Proscenic.
 * Jegliche Verantwortung liegt beim Benutzer. Das Skript wurde unter Berücksichtigung der bestmöglichen Nutzung
 * und Performance entwickelt.
 * Der Entwickler versichert, das keine böswilligen Systemeingriffe im originalen Skript vorhanden sind.
 *
 * Sollte das Skript wider Erwarten nicht korrekt funktionieren, so hast Du jederzeit die Möglichkeit, Dich auf
 * https://www.kreyenborg.koeln
 * für Unterstützung zu melden. Jedes Skript besitzt seine eigene Kommentarseite, auf der,
 * nach zeitlicher Möglichkeit des Autors, Hilfe angeboten wird. Ein Anrecht hierauf besteht nicht!
 *
 * Ansprüche gegenüber Dritten bestehen nicht.
 *
 * Skript Name:     Proscenic-Remote
 * Skript Version:  1.0
 * Erstell-Datum:   24. September 2021
 *
 */
 
// Datenpunkte neu erstellen
var ueberschreiben = true;
 
// Hauptdatenpunkt unterhalb javascript
var datenpunkt = "Proscenic.";
 
// IP des Proscenic
const robot_ip = "192.168.5.100";
 
// Port des Proscenic
const robot_port = 10684;
 
// Aktion für den Staubsauger (Stop, Start, Aufladen)
const robot_aktion = ['',
    'BERkRFMjA5MDYwMDAxMDAwMzAwMDAwMDAw',
    'BERkRFMjA5MDYwMDAxMDAwMjAwMDAwMDAx',
    'BGRkRFMjA5MDYwMDAxMDAwMTAwMDAwMDAw'];
 
// Text für Aktion
const robot_aktion_text = ['', 'Stop', 'Start', 'Aufladen'];
 
// Reinigungsmodus (Auto, Bereich, Rand)
const rein_modus = ['',
    'A5RkRFMjA5MDYwMDAxMDAwMjA1MDAwMDAw',
    'BBRkRFMjA5MDYwMDAxMDAwMjA0MDAwMDAw',
    'BCRkRFMjA5MDYwMDAxMDAwMjAzMDAwMDAw'];
 
// Text für Reinigungsmodus
const rein_modus_text = ['', 'Auto-Modus', 'Bereich-Reinigung', 'Rand-Reinigung']
 
// Aktion | 0 = Steuerung, 1 = Reinigungsmodus
function robot_steuerung(aktion = 0, funktion = 0) {
    let befehl = "";
    let nachricht = "";
    if (aktion == 0) {
        befehl = robot_aktion[funktion];
        nachricht = 'Proscenic: Steuerung: ' + robot_aktion_text[funktion] + ' an Roboter gesendet!';
    }
 
    if (aktion == 1) {
        befehl = rein_modus[funktion];
        // Robotor stoppen, damit neuer Modus angenommen wird
        robot_steuerung(0, 1);
        nachricht = 'Proscenic: Reinigungs-Modus: ' + rein_modus_text[funktion] + ' an Roboter gesendet!';
    }
 
    // Befehl ausführen
    let kommando = '<MESSAGE Version="1.0"><HEADER MsgType="MSG_TRANSIT_SHAS_REQ" MsgSeq="1" From="02000000000000000" To="01801930aea421f164" Keep="0"/>'
    kommando = kommando + '<BODY>PFRSQU5TSVRfSU5GTz48Q09NTUFORD5ST0JPVF9DTUQ8L0NPTU1BTkQ+PFJUVT5BQTU1QTU1QT'
    kommando = kommando + befehl;
    kommando = kommando + 'MDA8L1JUVT48L1RSQU5TSVRfSU5GTz4K</BODY></MESSAGE>\r\n\r\n';
    if (funktion != undefined && funktion != 0) {
        var dgram = require('dgram');
        var client = dgram.createSocket('udp4');
        var message = Buffer.from(kommando);
        client.send(message, 0, message.length, robot_port, robot_ip, function (err, bytes) {
            if (err) throw err;
            client.close();
            log(nachricht);
        });
    }
}
 
// Erstelle die benötigten Datenpunkte
function datenpunkte_erstellen() {
    createState(datenpunkt + "Steuerung", "", ueberschreiben, {
        name: "Steuerung des Roboters",
        desc: "Steuerung des Roboters",
        type: "number",
        role: "value",
        min: 0,
        max: 3,
        "states": {
            "0": "Nichts",
            "1": "Stop",
            "2": "Start",
            "3": "Aufladen"
        }
    });
    createState(datenpunkt + "Modus", "", ueberschreiben, {
        name: "Reinigungsmodus des Roboters",
        desc: "Reinigungsmodus des Roboters",
        type: "number",
        role: "value",
        min: 0,
        max: 3,
        "states": {
            "0": "Nichts",
            "1": "Auto",
            "2": "Bereich",
            "3": "Rand"
        }
    });
}
 
function proscenic_erster_start() {
    log("Proscenic: Erster Start des Skriptes! Datenpunkte werden erstellt!");
    // Datenpunkte werden erstellt
    datenpunkte_erstellen();
}
 
// Erster Start und Initialisierung
proscenic_erster_start();
 
// Abonniere Datenpunkt zur Steuerung
on({ id: "javascript.0.Proscenic.Steuerung", change: "any" }, function (obj) {
    robot_steuerung(0, obj.state.val);
});
on({ id: "javascript.0.Proscenic.Modus", change: "any" }, function (obj) {
    robot_steuerung(1, obj.state.val);
});

Anwendung

In Zeile 31 musst Du zunächst die IP des Roboters anpassen.

Das Skript erstellt 2 Datenpunkte unterhalb javascript.0.Proscenic und lauscht im Hintergrund auf Änderung.
Die Datenpunkte kannst Du nun via Skript, VIS oder Auswahlliste auf die jeweiligen Werte einstellen.
Folgende Werte sind möglich:

Steuerung:

WertFunktion
0Standard
1Stop
2Start
3Aufladen

Modus:

WertFunktion
0Standard
1Auto
2Bereich
3Rand

Unterstützte Geräte

Roboter-ModellUnterstützt?
790TJa
M8Nein (laut Feedback)

Kategorien:

11 Kommentare

  1. Hallo Stephan,

    vielen Dank für das Script. Ich habe es bei meinem Proscenic M8 Pro ausprobiert – er hat aber leider überhaupt keine Lust darauf zu reagieren. Selbstverständlich habe ich auch daran gedacht, die IP anzupassen.

    Im Log erscheint z.B. beim starten folgender Eintrag:
    javascript.0 (701) script.js.common.Proscenic: Proscenic: Steuerung: Start an Roboter gesendet!

    Leider fährt er dann aber nicht los. Ist der M8 Pro eventuell nicht kompatibel zu dieser Steuerung? Den M7 Pro konnte ich mittels folgendem NodeRed-Script sehr gut steuern:
    https://flows.nodered.org/flow/e2bf4baa24941ecfdda44931c5ef6f74

    PS: was bedeutet eigentlich dieser Satz in deinem Eingänglichen Kommentarfeld?
    ——
    * Dieses Skript dient zur freien Verwendung in ioBroker zur Verbrauchserfassung der Shelly Geräte.
    ——

    Vielen Dank für deine Arbeit!

    • Hallo Mike,
      anscheinend wird der M8 von diesem Skript nicht unterstützt. Da ich selbst einen 790T habe, kann ich die anderen Modelle leider nicht testen.

      * Dieses Skript dient zur freien Verwendung in ioBroker zur Verbrauchserfassung der Shelly Geräte.

      Hier scheint sich wohl der Fehlerteufel eingeschlichen zu haben – ich kopiere meine Kommentare immer aus einem vorhandenen Skript 😉
      Den Kommentar habe ich natürlich angepasst.

      Gruß,
      Stephan

  2. Hallo Stephan,

    vielen Dank für die schnelle Antwort. Hast du vielleicht einen Tipp, wie ich den M8 Pro steuern könnte? Woher nimmst du die Befehlsketten? Müssen die Ketten nur angepasst werden? Ich teste auch gern andere Scripte, um das Teil endlich im Broker zum laufen zu kriegen.

    MfG: Mike

    • Hi Mike,
      Da ging es mir ähnlich. Ich hatte mich nach einem neuen Proscenic umgesehen und dann gemerkt, daß dieser gar nicht mit ioBroker sprechen möchte. Aus dem Grunde sind wir bei iRobot gelandet. Der spricht wenigstens 😉

      Ich kann dich da leider nur auf Google verweisen und hoffen, daß Du dort fündig wirst. Tut mir Leid.

      Gruß,
      Stephan

  3. Hallo Stephan,

    nach längeren Versuchen habe ich eine etwas unschöne Lösung gefunden. Auch wenn sie mit deinem Skript nichts zu tun hat, würde ich sie gerne hier niederschreiben, falls noch andere nach einer Lösung suchen. Ich hoffe du hast kein Problem damit.

    Gelöst habe ich es über meine Alexa, die Verknüpfung des Roboters mithilfe des “Smart Life” Home Skills und den “Alexa2”-Adapter im Broker. Ist die Alexa auf deutsch gestellt, kann man den Roboter wie eine Lampe Ein- und Ausschalten. Nur leider bleibt er nach dem Ausschalten einfach dort stehen wo er ist und lässt sich mit keinem Befehl (auch nicht per Spracheingabe in die Alexa) wieder zur Dockingstation schicken. Umgehen kann ich das Problem, indem ich die Alexa in den Geräteeinstellungen auf “Englisch” oder “Englisch / Deutsch” stelle. Ab dem Moment kann er mittels englischen Sprachbefehlen gesteuert werden. Zum Beispiel “set Staubsaugerroboter dock” – und schon fährt er nach Hause.

    PS: die Spracheinstellungen sind für jede Alexa exklusiv – man verstellt sich daher bei den Versuchen nicht gleich global alle Alexas.

    Vielen Dank nochmal für deine Hilfestellungen!

    • Ich verwende den Proscenic Skill. Wenn man dann sagt “Alexa, sage smartbot, starte Aufladung” dann klappt es.
      Man muss aber pausen zwischen den Wörtern mache, der Skill ist da ziemlich schlecht. Daher habe ich mir in iobroker ein Skript erstellt welches der Alexa diesen wortlaut übermittelt und eine Routine in Alexa mit meinem gewünschten Wortlaut, auf die ich dann in iobroker reagiere. (z.B. Alexa, mach unten sauben)

      Ein Problem bleibt jedoch, ich habe einen zweiten Bot und den kann der Skill nicht bedienen, daher kann ich den nicht zum laden schicken!

      • Hallo Carsten,
        die Codes habe ich via Google gefunden. Da ich selber keinen Proscenic mehr habe, kann ich hier leider nicht mehr weiter forschen.
        Ich gehe davon aus, das der Alexa Skill nur einen Robot verwalten kann – somit wirst Du leider mit nur einem steuerbaren Bot leben müssen 🙂
        Oder, Du erwirbst die iRobot – da kann die App und der Skill mehrere …

        Gruß,
        Stephan

        • Zur Info, auch das funktioniert seit kurzem nicht mehr bei mir.
          Über die Alexa-App unter Geräte hat der Bot nun 3 Datenpunkte.
          1- Ein/Aus
          2- Reinigungsmodus
          3- Saugstärke

          Um den Bot zu starten muss man aber nicht wie bisher auf Ein/Aus drücken, sondern muss den Reinigungsmodus auswählen. Bei Ein/Aus passiert einfach NICHTS!
          Leider ist nur Ein/Aus als Datenpunkt in iobroker und auch als Datenpunkt in den Alexa Routinen verfügbar.

          Somit ist für mich aktuell nur noch ein Bot steuerbar, indem ich die Sprachsteuerung über IOBroker simulieren. Den zweiten bekomme ich aktuell garnicht per IOB angesprochen.

  4. Hi. ich habe 2 x den 830T und der reagiert leider auch nicht auf dein Skript.
    Wie bist du denn auf die robot_action-, den rein_modus- und das kommando- Werte gekommen, vielleicht reicht es ja schon diese anzupassen, damit es mit anderen Bots läuft.

    Ich habe bei mir wohl den Namen “Proscenic.” geändert, damit ich beide Bots einlesen und auseinanderhalten kann. Die IP habe ich natürlich entsprechend angepasst!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.