Fully Kiosk Browser

sound like you have all your tablet point to the same “input_select”

Fantastic, thanks

Anyone having issues with fully on a fire tab no longer dimming the screen. I think the last update has broken it for me.

The screen saver still starts but the screen does not dim.

1 Like

I’m using the below as a value template for a screensaver activation switch. (Thanks @RagingComputer & @xstrex for examples). It triggers instantly but lags in reflecting its current state. Anybody know of a better way of doing it?

Sensor

- platform: rest
  name: master_bedroom_panel_screensaver_state
  json_attributes:
- currentFragment
  resource: !secret master_bedroom_panel_rest
  value_template: '{{ value_json.currentFragment }}'

Switch

  - platform: template
    switches:
      master_bedroom_panel_screen:
        value_template: "{{ is_state('sensor.master_bedroom_panel_screensaver_state', '') }}"
        turn_on:
          service: rest_command.master_bedroom_panel_screen_on
        turn_off:
          service: rest_command.master_bedroom_panel_screen_off

Good day, has anyone managed to pull the motion sensor event using the javascript interface?
https://www.ozerov.de/fully-kiosk-browser/

TLDR: there is a dedicated fire os version of fully now. https://www.ozerov.de/fully-kiosk-browser/#download-box

I was amazed by the fully browser and decided to buy a dedicated tablet as wall panel.
The fire 8.0 was very cheap these days and I gave it a go. It turned out that most functions didn’t work on fire os as they did on pure Android.
So I asked the developer if he can improve fire os support. It turned out that he didn’t have a fire os device but that we both live in Germany.
So I sent him my tablet about a month ago.
He returned it yesterday and published a link to a improved fire os version that works significantly better on my tablet.
Thought I let you know, as this is a dedicated APK that will never make it into the Playstore update. https://www.ozerov.de/fully-kiosk-browser/#download-box

6 Likes

Whats the best tablet and wallmount to get for this usage ?

This is the gear I ended up using for mine.

1 Like

Maybe he’d be willing to put it in the Amazon store? Fire tablets go on sale quite frequently but I’ve held off on buying one because I don’t want to mess around with a browser that doesn’t quite work. I also don’t want to side-load apps, it’s just too easy to forget about updates or you end up getting malware installed.

Plus, I’d even be willing to pay a buck or two if it helps out the developer.

Great app.

I can’t get sensor state as a TTS from my tablet. Here is my two switch:

  - platform: command_line
    switches:
      hosgeldiniz:
        command_on: curl -X POST "http://192.168.86.135:2323/?cmd=textToSpeech&text=Belek+evine+hoş+geldiniz&password=1234"
        friendly_name: Hoşgeldin Mesajı

  - platform: command_line
    switches:
      isiyisoyle:
        command_on: curl -X POST "http://192.168.86.135:2323/?cmd=textToSpeech&text={{ states('sensor.broadlink_sensor_temperature') }}&password=1234"
        friendly_name: Belek Isısı

First one is working well. But second one is getting error on Hass.io logs:

Command failed: curl -X POST "http://192.168.86.135:2323/?cmd=textToSpeech&text={{ states('sensor.broadlink_sensor_temperature') }}&password=1234"

Any advice?

Thank you.

This is the JavaScript motion-detection code I use in my fully documented setup, set inside variables.yaml of my active theme. It posts to (and auto-creates) a binary sensor, first by setting it to false then setting it to true. Otherwise a state change would not occur nor be recorded if you only send true all the time.

body_includes:
 - |
    <script>
    /**
     * Send motion detection event to Home Assistant API
     *
     * It turns off the sensor before turning it on again, to make sure that
     * any change is registered. A bit dirty, but it works!
     */
    if (typeof fully != 'undefined') {
      function reportKioskMotion() {
        var xhttp = new XMLHttpRequest();
        xhttp.open('POST', 'http://hassio.local:8123/api/states/binary_sensor.kiosk_motion', false);
        xhttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
        xhttp.send(JSON.stringify({
          'state': 'off',
          'attributes': {
            'friendly_name': 'Kiosk Motion'
          }
        }));
        xhttp.open('POST', 'http://hassio.local:8123/api/states/binary_sensor.kiosk_motion', false);
        xhttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
        xhttp.send(JSON.stringify({
          'state': 'on',
          'attributes': {
            'friendly_name': 'Kiosk Motion'
          }
        }));
      }
      fully.bind('onMotion', 'reportKioskMotion();');
    }
    </script>

The binary sensor is then interpreted by a template sensor here to give it a 3-minute delay based on the last state change as the tablet only reports motion, not a lack thereof.

#
# Fully Kiosk Browser motion sensor
#
# The Fully app can only send "onMotion" events as it is stateless. Instead of
# coming up with a complicated yet fragile Javascript state-handler that would
# calculate the last time any motion was detected and then send an "off" signal
# and would survive across URL changes (but would fail if the Android device is
# offline or if the app is forced-closed), an extra server-side sensor is much
# sturdier, if a bit less accurate. It should turn off within 3-4 minutes after
# the last change.
#
# The "binary_sensor.kiosk_motion" is dynamically created by the first
# "onMotion" event call for a custom Javascript declared in all dashboards using
# the "Modern" theme. Two API calls are done sequentially, one to turn off the
# binary sensor, then other to turn it right  back on. This way the sensor state
# is guaranteed to change, and the  "last_changed" and "last_updated" timestamps
# along with it.
#
# @see /appdaemon/custom_css/modern/variables.yaml
#
- platform: template
  sensors:
    kiosk_motion_auto:
      friendly_name: Kiosk Motion
      device_class: motion
      entity_id:
        - sensor.time
        - binary_sensor.kiosk_motion
      delay_off:
        seconds: 5
      value_template: >-
        {{ is_state('binary_sensor.kiosk_motion', 'on')
           and (180 >= as_timestamp(now()) - as_timestamp(states.binary_sensor.kiosk_motion.last_changed)) }}

Finally, I use this kiosk motion detection info to update a state card, giving me this:

Security Status

This setup works well for me! :slight_smile:

6 Likes

Rene, fantastic repo. thank you for sharing it.
Im only using appdaemon for the dash, so hope my question is not silly.

So I just copy your variables.yaml
inside /appdaemon/custom_css/modern/variables.yaml

and create the template sensor?

Is the variable.yaml purpose only this sensor?

thank you

one more question, i dont see the tablet ip anywhere. it’s not required?

is it possible to add any sensor state to texttospeech?

Rene copied your variable.yaml and sensor, but im not getting any state.
I presume there’s more to do than just this?

Hi there,

I can’t get motion sensor state from Fully-Kiosk to HA? I just purchased license, but Can’t get any sensor state from tablet. Here is my reference

You’ll have to be more specific… Did you read my original post, and can you poll data via curl on the command line?

My goal is trigger an automation/script when tablet motion dedector active. I’m getting only/always “motionDetectorState 2”

motionDetectorState doesnt change through any motion activity.

Most likely this is a setting within fully, have you read through every single page of settings, and played with anything related to motion? Also, have you read the fully documentation on the website (listed above)? I’ve done this in my testing, it works fine.

Anyone know of a good url to give me photos that are relevant to my current weather conditions as my Fully Kiosk screensaver?

Kind of like YoWindow but for photos or gifs?

I modified the sensor by adding “currentFragment” to json_attributes.
Then my value_template becomes:

  value_template: >-
    {% if value_json.currentFragment == 'screensaver' %}
       false
    {% else %}
       true
    {% endif %}

Sensor then becomes “true” whenever the screensaver turns off, which it does whenever it detects motion, and thus becomes my motion sensor.