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:

4 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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.