Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Fully Browser

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    780

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    587

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    1.1k

Fully Browser

Geplant Angeheftet Gesperrt Verschoben JavaScript
6 Beiträge 4 Kommentatoren 1.6k Aufrufe 5 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • H Online
    H Online
    helfi9999
    schrieb am zuletzt editiert von helfi9999
    #1

    Hallo,
    habe folgendes Script:

    /*******************************************************************************


    • Script: Steuerung Fully-Browser in ioBroker

    • Quelle: https://github.com/Mic-M/iobroker.fully-kiosk-browser-script
    • Autor: Mic
    • Support: https://forum.iobroker.net/viewtopic.php?f=21&t=19105
    • Fully Browser REST Interface: https://www.ozerov.de/fully-kiosk-browser/de/#rest
    • Change log:
    • 0.3 - New information states are being created automatically if Fully App is adding additional ones.
    • 0.2 - Bug fix, added latest info states, added startApplication command
    • 0.1 - initial version
      ******************************************************************************/

    /*******************************************************************************

    • Konfiguration: Pfade / Datenpunkte
      ******************************************************************************/
      // Datenpunkte: Hauptpfad
      const STATE_PATH = 'javascript.'+ instance + '.' + 'mic.FullyBrowser.';

    /*******************************************************************************

    • Konfiguration: Fully
      ******************************************************************************/
      const FULLY_IP = '192.xxx.xxx.xxx';
      const FULLY_PORT = '2323';
      const FULLY_PASSWORD = 'xxxxxxxxxxx';

    /*******************************************************************************

    • Konfiguration: Rest
      ******************************************************************************/

    // Wie oft ausführen?
    const FULLY_REQUEST_INFO_SCHEDULE = "*/1 * * * *"; // Alle 2 Minuten

    // Logeinträge auf Debug setzen?
    const FDEBUG = false;

    // Logeinträge auf erweiterte Infos im Log setzen (bei Scriptstart, bei Drücken eines Buttons, etc.)
    const EXTINFO = true;

    /**********************************************************************************************************
    ++++++++++++++++++++++++++++ Ab hier nichts mehr ändern / Stop editing here! ++++++++++++++++++++++++++++
    *********************************************************************************************************/

    /*******************************************************************************

    • Executed on every script start.
      *******************************************************************************/
      init();
      function init() {

      // Create states. The info states are created through getFullyBrowserInfo()
      createScriptStates();

      // Main Script starten, 5 Sekunden nach State-Generierung
      setTimeout(main, 5000);

      // Ebenso nach 6 Sekunden Fully-Info holen bei Script-Start. Wird danach alle x Minuten ausgeführt.
      setTimeout(getFullyBrowserInfo, 6000);

    }

    /*******************************************************************************

    • Haupt-Skript
      *******************************************************************************/
      var mSchedule;
      function main() {

      /***

      • Regelmäßig Infos vom Fully Browser holen.
      • Hierbei zunächst evtl. laufende Schedules zuerst beenden, falls aktiv.
        **/
        clearSchedule(mSchedule);
        mSchedule = schedule(FULLY_REQUEST_INFO_SCHEDULE, getFullyBrowserInfo);
        if (EXTINFO) log('Fully Browser: Schedule zum Abruf der Informationen gestartet (' + FULLY_REQUEST_INFO_SCHEDULE + ')');

      /***

      • Monitor Button Commands
      • All Button Command states being monitored. If button pushed, the command is sent to Fully Browser.
      • Note: the name of the state is the same as the command to be sent.
        **/
        const MSELECTOR_BTN = $('[id=' + STATE_PATH + 'Commands.*][role=button]');
        MSELECTOR_BTN.each(function (stateId, i) {
        on({id: stateId, val:true}, function (obj) {
        fullySendCommand(obj.common.name);
        if (EXTINFO) log('Gesendet: ' + obj.common.name);
        setState(obj.id, false);
        });
        });

      /***

      • Monitor Other Commands
        **/
        on({id: STATE_PATH + 'Commands.' + 'textToSpeech', change:"any"}, function (obj) {
        var txtSp = obj.state.val;
        txtSp = txtSp.replace(/[^a-zA-Z0-9ß-ü]/g,''); // Just keep letters, numbers, and umlauts
        txtSp = txtSp.replace(/ +/g, ' '); // Remove multiple spaces
        if (txtSp.length > 1) {
        fullySendCommand(obj.common.name + '&text=' + txtSp);
        if (EXTINFO) log('Gesendet: ' + obj.common.name + ', [' + txtSp + ']');
        }
        });
        on({id: STATE_PATH + 'Commands.' + 'loadURL', change:"any"}, function (obj) {
        var strUrl = obj.state.val;
        strUrl = strUrl.replace(/ /g,""); // Remove Spaces
        if (! strUrl.match(/^https?:///)) strUrl = 'http://' + strUrl; // add http if URL is not starting with "http://" or "https://"

        if (strUrl.length > 10) {
        fullySendCommand(obj.common.name + '&url=' + strUrl);
        if (EXTINFO) log('Gesendet: ' + obj.common.name + ', [' + strUrl + ']');
        } else {
        log('URL für Fully-Browser-Kommando [loadURL] scheint nicht valide, daher Befehl nicht ausgeführt.', 'warn');
        }
        });
        on({id: STATE_PATH + 'Commands.' + 'startApplication', change:"any"}, function (obj) {
        var strApp = obj.state.val;
        strApp = strApp.replace(/ /g,""); // Remove Spaces

        if (strApp.length > 2) {
        fullySendCommand(obj.common.name + '&package=' + strApp);
        if (EXTINFO) log('Gesendet: ' + obj.common.name + ', [' + strApp + ']');
        } else {
        log('Application-Name für Fully-Browser-Kommando [startApplication] scheint nicht valide, daher Befehl nicht ausgeführt.', 'warn');
        }
        });
        }

    /*******************************************************************************

    • More Functions
      *******************************************************************************/

    /**

    • Sends a command to Fully Browser via http

    • @param {string} strCommand Command, see https://www.ozerov.de/fully-kiosk-browser/de/#rest
      */
      function fullySendCommand(strCommand){

      var request = require('request');

      var options = {
      url: 'http://' + FULLY_IP + ':' + FULLY_PORT + '/?cmd=' + strCommand + '&password=' + FULLY_PASSWORD
      };
      request(options, function (error, response, body) {
      if (response !== undefined) {
      if (EXTINFO) log('Fully Browser: sent command [' + strCommand + '], response: ' + response.statusCode);
      } else {
      log('Fully Browser: no response!', 'error');
      }

      });
      }

    /**

    • Fetches the Fully Browser information and updates the states in ioBroker.

    • Also, it creates all the info states.
      */
      function getFullyBrowserInfo() {

      var statusURL = 'http://' + FULLY_IP + ':' + FULLY_PORT + '/?cmd=deviceInfo&type=json&password=' + FULLY_PASSWORD;

      var thisRequest = require('request');

      var thisOptions = {
      uri: statusURL,
      method: "GET",
      timeout: 2000,
      followRedirect: false,
      maxRedirects: 0
      };

      thisRequest(thisOptions, function(error, response, body) {
      if (!error && response.statusCode == 200) {
      var fullyInfoObject = JSON.parse(body);
      var count = 0;
      for (let lpEntry in fullyInfoObject) {
      // looks like Fully is regularly adding more information, so we create the states on the fly
      let lpType = typeof fullyInfoObject[lpEntry]; // get Type of Variable as String, like string/number/boolean
      createState(STATE_PATH + 'Info.' + lpEntry, {'name':lpEntry, 'type':lpType, 'read':true, 'write':false, 'role':'info'});
      setStateDelayed(STATE_PATH + 'Info.' + lpEntry, fullyInfoObject[lpEntry], 200);
      count++;
      }
      if (FDEBUG) log('Fully Browser: ' + count + ' Informationen abgerufen und in Datenpunkte geschrieben.');
      setState(STATE_PATH + 'Info2.' + 'isFullyAlive', true);
      }
      else {
      log('Fully Browser: Folgender Fehler bei http-Request aufgetreten: ' + error, 'warn');
      setState(STATE_PATH + 'Info2.' + 'isFullyAlive', false);
      }
      setState(STATE_PATH + 'Info2.' + 'lastInfoUpdate', Date.now());
      });

    }

    /**

    • Create states needed for this script.

    • !Note that all the info states are created through getFullyBrowserInfo()
      */
      function createScriptStates() {

      // Infos, die von diesem Script selbst stammen bzw. gesetzt werden
      createState(STATE_PATH + 'Info2.' + 'isFullyAlive', {'name':'Is Fully Browser Alive?', 'type':'boolean', 'read':true, 'write':false, 'role':'info'});
      createState(STATE_PATH + 'Info2.' + 'lastInfoUpdate', {'name':'Date/Time of last information update from Fully Browser', 'type':'number', 'read':true, 'write':false, 'role':'value.time'});

      // Commands: Buttons
      createState(STATE_PATH + 'Commands.' + 'loadStartURL', {'name':'loadStartURL', 'type':'boolean', 'read':false, 'write':true, 'role':'button'});
      createState(STATE_PATH + 'Commands.' + 'clearCache', {'name':'clearCache', 'type':'boolean', 'read':false, 'write':true, 'role':'button'});
      createState(STATE_PATH + 'Commands.' + 'restartApp', {'name':'restartApp', 'type':'boolean', 'read':false, 'write':true, 'role':'button'});
      createState(STATE_PATH + 'Commands.' + 'exitApp', {'name':'exitApp', 'type':'boolean', 'read':false, 'write':true, 'role':'button'});
      createState(STATE_PATH + 'Commands.' + 'screenOn', {'name':'screenOn', 'type':'boolean', 'read':false, 'write':true, 'role':'button'});
      createState(STATE_PATH + 'Commands.' + 'screenOff', {'name':'screenOff', 'type':'boolean', 'read':false, 'write':true, 'role':'button'});
      createState(STATE_PATH + 'Commands.' + 'forceSleep', {'name':'forceSleep', 'type':'boolean', 'read':false, 'write':true, 'role':'button'});
      createState(STATE_PATH + 'Commands.' + 'triggerMotion', {'name':'triggerMotion', 'type':'boolean', 'read':false, 'write':true, 'role':'button'});
      createState(STATE_PATH + 'Commands.' + 'startScreensaver', {'name':'startScreensaver', 'type':'boolean', 'read':false, 'write':true, 'role':'button'});
      createState(STATE_PATH + 'Commands.' + 'stopScreensaver', {'name':'stopScreensaver', 'type':'boolean', 'read':false, 'write':true, 'role':'button'});
      createState(STATE_PATH + 'Commands.' + 'startDaydream', {'name':'startDaydream', 'type':'boolean', 'read':false, 'write':true, 'role':'button'});
      createState(STATE_PATH + 'Commands.' + 'stopDaydream', {'name':'stopDaydream', 'type':'boolean', 'read':false, 'write':true, 'role':'button'});
      createState(STATE_PATH + 'Commands.' + 'toForeground', {'name':'toForeground', 'type':'boolean', 'read':false, 'write':true, 'role':'button'});
      createState(STATE_PATH + 'Commands.' + 'popFragment', {'name':'popFragment', 'type':'boolean', 'read':false, 'write':true, 'role':'button'});
      createState(STATE_PATH + 'Commands.' + 'enableLockedMode', {'name':'enableLockedMode', 'type':'boolean', 'read':false, 'write':true, 'role':'button'});
      createState(STATE_PATH + 'Commands.' + 'disableLockedMode', {'name':'disableLockedMode', 'type':'boolean', 'read':false, 'write':true, 'role':'button'});
      // Commands: Strings
      createState(STATE_PATH + 'Commands.' + 'textToSpeech', {'name':'textToSpeech', 'type':'string', 'read':true, 'write':true, 'role':'text'});
      createState(STATE_PATH + 'Commands.' + 'loadURL', {'name':'loadURL', 'type':'string', 'read':true, 'write':true, 'role':'text'});
      createState(STATE_PATH + 'Commands.' + 'startApplication', {'name':'startApplication', 'type':'string', 'read':true, 'write':true, 'role':'text'});

    }

    .
    Bis heute funktionierte es super.
    Seit heute kommt immer folgende Meldung:
    javascript.0 script.js.Alexa_Bedienung.Fully: Fully Browser: Folgender Fehler bei http-Request aufgetreten: Error: connect ECONNREFUSED 192.xxx.xxx.xxx:2323.

    Was bedeutet es und was kann ich eventuell dagegen machen

    MfG
    helfi9999

    Intel NUC mit Iobroker

    1 Antwort Letzte Antwort
    0
    • 0 Offline
      0 Offline
      0018
      schrieb am zuletzt editiert von 0018
      #2

      Hi,

      ist dein Fully Browser über das Webinterface erreichbar, also funktioniert die Bedienung dort?
      Hast du schon mal versucht die Steuerung über den Adapter zu machen?

      Mfg
      0018

      H 1 Antwort Letzte Antwort
      0
      • 0 0018

        Hi,

        ist dein Fully Browser über das Webinterface erreichbar, also funktioniert die Bedienung dort?
        Hast du schon mal versucht die Steuerung über den Adapter zu machen?

        H Online
        H Online
        helfi9999
        schrieb am zuletzt editiert von
        #3

        @0018
        habe den Adapter drauf aber der hat keine Datenpunkte sondern nur Commands oder ist da was nicht richtig

        Intel NUC mit Iobroker

        1 Antwort Letzte Antwort
        0
        • 0 Offline
          0 Offline
          0018
          schrieb am zuletzt editiert von
          #4

          Das sind alle Info´s und commands die über den Adapter kommen.

          Fully.png

          Mfg
          0018

          1 Antwort Letzte Antwort
          0
          • liv-in-skyL Offline
            liv-in-skyL Offline
            liv-in-sky
            schrieb am zuletzt editiert von
            #5

            wenn du tatsächlich nichts am iobroker geändert hast und andere adapter keine netzwerkfehlermeldungen bringen, üßte es an dem tablet liegen

            evtl- gab es ein update des fully browsers, der etwas vermurkst hat

            • tablet mal neustarten
            • überprüfung ob tablet im netz (mit fully browser mal ins internet gehen (z.b. google aufrufen)) und ob es eine eindeutige ip adresse hat - tablet wifi beenden - und auf windows rechner mal den befehl ping 192.xxx.xxx.xxx (tablet) ausführen - wenn dann antwort kommt gibrt es vielleicht doppelte ip adresse

            zum testen: öffne browser am pc/mac und gehe auf url: http://192.xxx.xxx.xxx:2323 (ip adresse von fully browser) - öffnet sich diese seite ?

            nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

            1 Antwort Letzte Antwort
            0
            • I Offline
              I Offline
              I-Punkt
              schrieb am zuletzt editiert von
              #6

              Mal eine kurze Zwischenfrage für mein Verständnis der Sache: Muss der Fully gestartet sein, muss er im Vordergrund laufen oder reicht es, wenn er einfach nur installiert ist? Hintergrund der Frage: Ich nutze an meiner Fritzbox alte Handys statt DECT-Telefone und bei denen läuft immer die Fritz-App im Vordergrund. Bisher verwende ich für die Akku-Kontrolle/-Pflege PAW, überlege aber ggf. auf Fully umzusteigen.

              1 Antwort Letzte Antwort
              0

              Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

              Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

              Mit deinem Input könnte dieser Beitrag noch besser werden 💗

              Registrieren Anmelden
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              547

              Online

              32.8k

              Benutzer

              82.9k

              Themen

              1.3m

              Beiträge
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Anmelden

              • Du hast noch kein Konto? Registrieren

              • Anmelden oder registrieren, um zu suchen
              • Erster Beitrag
                Letzter Beitrag
              0
              • Home
              • Aktuell
              • Tags
              • Ungelesen 0
              • Kategorien
              • Unreplied
              • Beliebt
              • GitHub
              • Docu
              • Hilfe