मिडोरी के लिए ऑटो-रिफ्रेश


11

मैं एक गैर-संवादात्मक वेब कियोस्क बनाने के लिए रास्पबेरी पाई का उपयोग कर रहा हूं - पूर्ण स्क्रीन मोड में स्क्रीन पर प्रदर्शित होने के लिए एक विशिष्ट वेबपेज (एक दूरस्थ निगरानी स्टेशन से माप), सामग्री को AJAX के माध्यम से अक्सर ताज़ा किया जाता है।

अब रास्पबेरी को एक कियोस्क में बनाने के लिए काफी कुछ समाधान हैं, और मुझे पूरा यकीन है कि मैं इसे ठीक कर पाऊंगा, लेकिन कियोस्क काफी रखरखाव-मुक्त होना चाहिए। खासकर ऐसी स्थिति में जब बिजली चली जाती है, तब वापस आती है, लेकिन किसी तरह राउटर / मॉडेम / नेटवर्क इन्फ्रास्ट्रक्चर काफी हद तक ऑनलाइन नहीं हुआ।

उस स्थिति में Midori "कनेक्ट करने में असमर्थ" या ऐसा कुछ करने के बारे में एक पृष्ठ के साथ आएगा और यह इस तरह से अटक जाएगा जब तक कि कोई फिर से बिजली चक्र नहीं करता है - क्योंकि वेबपेज सहित अपने स्वयं के ऑटोरेफ़रेश तंत्र को लोड करने में विफल रहा है!

अब मैं नेटवर्क को फिर से उपलब्ध होने पर, या इसी तरह के प्रभाव के लिए कुछ करने के लिए पेज को लोड करने के लिए मिडोरी को कैसे मजबूर कर सकता हूं (ऑटो रिफ्रेश हमेशा हर 15 मिनट या तो, या जब तक पेज लोड होता है या ऐसा कुछ नहीं होता है) तब तक ताज़ा रखें।)

यदि वह विकल्प Midori के लिए उपलब्ध नहीं है, तो क्या आप कुछ अन्य समाधान सुझा सकते हैं?


मुझे अभी किसी Pi तक पहुँच नहीं मिली है, और न ही Midori को, लेकिन शायद Midori को डब का समर्थन है? आप qdbus(पैकेज से libqt4-dbus) या कुछ इसी तरह के उपकरण चलाने की कोशिश कर सकते हैं और वहां मिडोरी की तलाश कर सकते हैं। तब आप शायद पृष्ठ के रिफ्रेश को ट्रिगर कर सकते हैं।
अर्ने

इससे भी बेहतर: ऐसा लगता है कि मिदोरी ने कुछ बनाया है । शायद आप कोशिश कर सकते हैं और यहाँ एक उत्तर पोस्ट कर सकते हैं।
Arne

क्या मेरा उत्तर उपयोगी नहीं था? क्या आप मुझे पाइथन के बजाय बैश स्क्रिप्ट लिखना पसंद करेंगे? यदि आपको क्रॉस्टैब का उपयोग करने की आवश्यकता है, तो क्या कोई त्रुटियां हैं जिनके साथ आप उत्तर दे सकते हैं?
xxmbabanexx

@xxmbabanexx: यह उपयोगी था और अगर कोई बेहतर नहीं दिखता है तो मैं इसे अवश्य स्वीकार करूंगा। मुझे एक वैकल्पिक समाधान मिला है जिसे मैं एक बार पूरी तरह से विकसित होने के बाद पोस्ट करूंगा। मैं अभी भी उम्मीद कर रहा हूं कि कोई व्यक्ति एक समाधान के साथ आता है जो ताज़ा नहीं करता है यदि पृष्ठ ठीक काम कर रहा है लेकिन अगर ऐसा नहीं होता है, तो आपका जवाब पूरी तरह से स्वीकार्य है और मैं इसे स्वीकार करूंगा।
एसएफ।

@sf। अतिरिक्त सूचना के लिए धन्यवाद। एक बार जब मैं अपना गणित का होमवर्क पूरा कर लेता हूं, तो मैं नेटवर्क-कनेक्शन चेकिंग को शामिल करने के लिए अपनी स्क्रिप्ट को संपादित करूंगा।
xxmbabanexx

जवाबों:


6

यह मानते हुए कि आपके पास अपने सिस्टम पर पायथन है, के लिए एक विकल्प है cron। मैंने एक त्वरित पायथन 2.7.3 स्क्रिप्ट बनाई है जो मिडोरी को हर 5 मिनट में पुनः लोड करेगी।

#This program reloads midori every 5 minutes

#Redifine the variables below as you see fit

rest_time = 300 #Rest time is set to 300 seconds (5 minutes) 


import subprocess as sub #Imports terminal commands (needed for reload)
from time import sleep #Import sleep (allows an infinite loop to become dormant)

while True: #This is an infinite loop. This means that our script won't stop.
    sub.call(["midori", "-e", "Reload"]) #This forwards our command to the terminal
    sleep(rest_time) #Wait rest_time second(s), then start the loop again. 

यदि आपको बाकी समय की मात्रा को बदलने की आवश्यकता है, तो बस rest_timeचर को बदलें ।

नई स्क्रिप्ट

जैसा कि आपने कहा था कि आपको "स्मार्ट" होने के लिए कार्यक्रम की आवश्यकता है, मैंने इसे ऐसा करने के लिए संपादित किया है। इस कार्यक्रम का उपयोग करते समय, कृपया मिदोरी को मैन्युअल रूप से न खोलें; इसे स्क्रिप्ट से खोलें। यदि आप अन्यथा करते हैं तो मुझे स्पीड डायलर के कारण दुर्घटनाग्रस्त होने की एक अजीब आदत है। यह पायथन 2.7.3 पर भी चलता है। यदि आप वह सब कॉपी और पेस्ट करना नहीं चाहते हैं, तो कृपया कोड के मेरे पास्टबिन पर जाएँ

"""
Midori Kiosk Reloader.
Created by xxmbabanexx

NOTE: This program opens Midori automatically. DO NOT OPEN IT MANUALLY, SIMPLY CLICK ON THIS PROGRAM.

KEYS

1 = Connection Complete. All is well.

0 = Connection Incomplete. Something is wrong.
"""


#Change these variables to your liking.

host = "www.google.com" #Put your desired host URL/IP between the quotes

port = 80 #Set to default port of 80. If your host uses something else, please change it.

recheck_time = 10 #The number of seconds the program will wait to ping the server. Change this at your leisure. 

page_to_open_to = "www.google.com" #This is the webpage the kiosk will open to. Put the url between the quotes.


#Excersise caution when changing these vars.

last = -1 #undefined state
up = -1 #Undefined state



"""
#---------------- Main code. Do NOT touch unless you KNOW what you are doing. ------------
"""
#Import modules

import subprocess as sub
from time import sleep
import socket
import threading

sub.Popen(["midori", "-a", page_to_open_to]) #open midori


#Check if internet is up
addr = (host, port) #the connection addr


while True:
    last = up #reset checking var
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #create socket
    try: #attempt to ping, change vars
        s.connect(addr)
        up = 1
        print "\n"
    except socket.error: #if error when pinging, change vars
        up = 0
        print "\n"

    print "LAST CHECK:", last
    print "CURRENT CHECK:", up
    if last == 0 and up == 1:
        print "Reloading Midori.\n"
        sub.call(["midori", "-e", "Reload"])
    s.close()


    sleep(recheck_time)

8

बस किसी के द्वारा आता है और एक अद्यतन जवाब की तलाश में है, Midori अब एक कमांड लाइन विकल्प है --inactivity-reset=SECONDS(या -iसंक्षेप में)।

-aविकल्प के साथ युग्मित , आप प्रत्येक x सेकंड में कियोस्क मोड में लगातार पुनरारंभ ब्राउज़र प्राप्त कर सकते हैं।

जैसे

midori -a http://www.google.com/ -i 120 -e फ़ुलस्क्रीन

फुलस्क्रीन विंडो में http://www.google.com/ खोलेंगे और 2 मिनट की निष्क्रियता के बाद पृष्ठ को रीफ्रेश करेंगे। ( -eएक कमांड निष्पादित करता है)


4

मैंने इसे एक अलग पक्ष से, ज्यादातर ब्राउज़र-स्वतंत्र से संपर्क करने का फैसला किया।

ब्राउज़र को कियोस्क मोड में शुरू किया गया है, जो एक विशिष्ट स्थानीय दस्तावेज़ की ओर इशारा करता है:

watchdog.html

<!DOCTYPE html>
<html>
    <head>
        <title>Monitoring</title>
        <script type="text/javascript">
        <!--
        var reload_url="http://example.org/watched.html";
        var to = 10000;  // Watchdog timeout: 10s.
        var wd;
        var ifr;
        function setup_watchdog()
        {
            ifr=document.getElementById("frame1");
            window.onmessage = function(e){
                if (e.data == 'tyrp') {
                    window.clearTimeout(wd);
                    wd = window.setTimeout(wdf,to);
                }
            };
            ifr.src = reload_url;
            wd = window.setTimeout(wdf,to);
        }

        function wdf()
        {
            ifr.src = reload_url;
            wd = window.setTimeout(wdf,to);
        }
        // -->
        </script>
    </head>
    <body onload="setup_watchdog()" style="margin: 0; overflow: hidden;">
        <iframe id="frame1" src="#" 
        style="position:absolute; left: 0px; width: 100%; top: 0px; height: 100%; margin:0; padding:0; border:0px none transparent;"></iframe>
    </body>
</html>

अब इस फ़ाइल में, टाइमआउट मान को दूरस्थ पृष्ठ के दो सामान्य ऑटोरफ्रेश और कुछ के साथ समायोजित किया जाता है, और reload_urlइसके URL पर सेट किया जाता है।

दूरस्थ पृष्ठ पर एक स्निपेट होता है जिसे हर बार उसके रिफ्रेश को सही तरीके से निष्पादित किया जाता है:

try {
    window.top.postMessage('tyrp', '*');
} catch(e){}

यदि कुछ भी बुरा होता है - पृष्ठ लोड करने में विफल रहता है, 404 या त्रुटि के रूप में लोड होता है या इसकी जावास्क्रिप्ट किसी भी कारण से बंद हो जाती है, या कुछ अपहृत रीडायरेक्ट हमें एक अलग पृष्ठ पर ले जाता है, अगर दो लगातार ताज़ा संदेश आने में विफल होते हैं, तो वॉचडॉग URL रीसेट करता है मूल के लिए, जो स्वचालित रूप से पुनः लोड करता है।

ध्यान दें, कोशिश ... पकड़ पुराने ब्राउज़रों के साथ समस्याओं को रोकने के लिए है जो पोस्टमैसेज का समर्थन नहीं कर सकते हैं। यह कियोस्क के साथ एक समस्या नहीं होगी क्योंकि हम पर्यावरण को नियंत्रित करते हैं और हमेशा आश्वस्त कर सकते हैं कि सही ब्राउज़र का उपयोग किया जाएगा। OTOH, रैंडम क्लाइंट कंप्यूटरों पर बिना फ्रेम वाले संदेशों को सुनकर पोस्टमैसेज ऑपरेशन नो-ऑप होता है, जब तक कि यह स्क्रिप्ट-एबॉर्टिंग एरर का कारण नहीं बनता है, इस प्रकार कोशिश करें..चेक करें।


3

मैं एक f5 कुंजी को अनुकरण करने के लिए xdotool का उपयोग करता हूं

pi@data-integrity-pi ~/log $ cat ~/bin/refresh_kiosk.sh
DISPLAY=:0 xdotool search --name ci-monitor windowactivate --sync key F5 >> ~/log/tmp.log 2>&1

और फिर अपने क्रॉस्टैब में मैं हर मिनट उस स्क्रिप्ट को चलाता हूं

 */1 *   *   *   *    /home/pi/bin/refresh_kiosk.sh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.