মিডোরির জন্য অটো-রিফ্রেশ


11

আমি একটি অ-ইন্টারেক্টিভ ওয়েব কিওস্ক তৈরি করতে রাস্পবেরি পাই ব্যবহার করছি - একটি নির্দিষ্ট ওয়েবপৃষ্ঠা (রিমোট মনিটরিং স্টেশন থেকে পরিমাপ) পূর্ণ স্ক্রিন মোডে কোনও স্ক্রিনে প্রদর্শিত হতে পারে, এজেএক্সের মাধ্যমে সামগ্রীগুলি ঘন ঘন রিফ্রেশ হয়।

এখন রাস্পবেরিটিকে কিওস্কে পরিণত করার বেশ কয়েকটি সমাধান রয়েছে এবং আমি নিশ্চিত যে আমি এটি ঠিকঠাক করতে পারব তবে কিওস্কটি বেশ রক্ষণাবেক্ষণ-মুক্ত হওয়া উচিত। বিশেষত পরিস্থিতিতে যখন বিদ্যুৎ চলে যায়, তারপরে আবার ফিরে আসে তবে কোনওভাবে রাউটার / মডেম / নেটওয়ার্ক অবকাঠামো বেশ কার্যকরভাবে আসে নি।

এই পরিস্থিতিতে মিডোরিটি "সংযোগ দিতে অক্ষম" বা এর মতো কিছু সম্পর্কে একটি পৃষ্ঠা নিয়ে আসবে এবং কেউ আবার শক্তিটিকে চক্র না করা পর্যন্ত এটি এভাবে আটকে থাকবে - যেহেতু ওয়েবপেজটি তার নিজস্ব অটোরফ্রেশ প্রক্রিয়া সহ লোড করতে ব্যর্থ হয়েছিল!

নেটওয়ার্কটি যখন আবার পাওয়া যায় তখন আমি কীভাবে মিডোরিকে পৃষ্ঠাটি লোড করতে বাধ্য করতে পারি, বা অনুরূপ প্রভাবের মতো কিছু (প্রতি 15 মিনিট বা তারপরে সর্বদা স্বতঃ-রিফ্রেশ করুন, বা পৃষ্ঠাটি লোড না হওয়া অবধি ততক্ষণ সতেজতা অবিরত রাখতে পারি)?

যদি সেই বিকল্পটি মিডডোরির জন্য অনুপলব্ধ থাকে, তবে আপনি কি আরও কিছু সমাধানের প্রস্তাব দিতে পারেন?


আমি এখনই পাই তে অ্যাক্সেস পাইনি, এবং কোনও মিডডোরিতেও পাচ্ছি না, তবে মিডোরির ডাবাস সমর্থন আছে? আপনি qdbus(প্যাকেজ থেকে libqt4-dbus) বা অনুরূপ কোনও সরঞ্জাম চালনার চেষ্টা করতে পারেন এবং সেখানে মিডডোরির সন্ধান করতে পারেন। তারপরে আপনি সম্ভবত পৃষ্ঠার একটি রিফ্রেশ ট্রিগার করতে পারেন।
আর্ন

আরও ভাল: মনে হয় মিডোরির মধ্যে কিছু অন্তর্নির্মিত রয়েছে । হতে পারে আপনি এটি চেষ্টা করে দেখতে পারেন এবং এখানে একটি উত্তর পোস্ট করতে পারেন।
আর্ন

আমার উত্তর কি কার্যকর ছিল না? আপনি কি চাইবেন আমি পাইথনের পরিবর্তে বাশ স্ক্রিপ্ট লিখব? যদি আপনার ক্রন্টব ব্যবহার করতে হয় তবে এমন কোনও ত্রুটি রয়েছে যা দিয়ে আপনি উত্তর দিতে পারেন?
xxmbabanexx

@ এমএসবিবাবেনএক্সএক্স: এটি কার্যকর ছিল এবং এর চেয়ে ভাল আরও কিছু না উপস্থিত হলে আমি অবশ্যই এটি মেনে নেব। আমি একটি বিকল্প সমাধান পেয়েছি যা আমি পুরোপুরি বিকাশের পরে পোস্ট করব। আমি এখনও আশা করছি যে পৃষ্ঠাটি ঠিকঠাক কাজ করা থাকলে কেউ রিফ্রেশ করে না এমন একটি সমাধান নিয়ে আসে তবে যদি তা না ঘটে তবে আপনার উত্তরটি পুরোপুরি গ্রহণযোগ্য এবং আমি এটি গ্রহণ করব।
এসএফ

@sf। অতিরিক্ত তথ্যের জন্য ধন্যবাদ। আমি আমার গণিতের হোমওয়ার্ক শেষ করার পরে, আমার স্ক্রিপ্টটি নেটওয়ার্ক-সংযোগ চেকিং অন্তর্ভুক্ত করতে সম্পাদনা করব।
xxmbabanexx

উত্তর:


6

ধরে নিই যে আপনার সিস্টেমে পাইথন রয়েছে, এর বিকল্প রয়েছে cron। আমি একটি দ্রুত পাইথন ২.7.৩ স্ক্রিপ্ট তৈরি করেছি যা প্রতি 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হয় তবে কেবল পরিবর্তনশীল পরিবর্তন করুন।

নতুন স্ক্রিপ্ট

আপনি যেমন বলেছিলেন যে প্রোগ্রামটি "স্মার্ট" হওয়ার জন্য আপনার প্রয়োজন ছিল, তাই এটি করার জন্য আমি এটি সম্পাদনা করেছি। এই প্রোগ্রামটি ব্যবহার করার সময়, দয়া করে মিডোরিটি ম্যানুয়ালি খুলবেন না; স্ক্রিপ্ট থেকে এটি খুলুন। যদি আপনি অন্যথায় করেন তবে স্পিড ডায়ালারের কারণে ক্র্যাশ হওয়ার আমার একটি অভ্যাস রয়েছে। এটি পাইথন ২.7.৩ এও চলে। আপনি যদি সেই সমস্ত অনুলিপি এবং পেস্ট করতে না চান তবে দয়া করে কোডের আমার পেস্টবিনটি দেখুন।

"""
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

কেবলমাত্র কেউ যদি আসে এবং আপডেট উত্তর খুঁজতে থাকে, মিডোরির এখন একটি কমান্ড লাইন বিকল্প রয়েছে --inactivity-reset=SECONDS(বা -iসংক্ষেপে)।

-aবিকল্পটির সাথে মিলিত হয়ে , আপনি প্রতি x সেকেন্ডে কিওস্ক মোডে একটি ক্রমাগত পুনর্সূচনা ব্রাউজারটি অর্জন করতে পারেন।

যেমন

মিডোরি -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 বা ত্রুটি হিসাবে লোড বা এর জাভাস্ক্রিপ্ট যে কোনও কারণে বন্ধ হয়ে যায়, বা কিছু হাইজ্যাক আমাদেরকে অন্য পৃষ্ঠায় ঠেলে দেয়, যদি পর পর দু'বার রিফ্রেশ বার্তা আসতে ব্যর্থ হয় তবে ওয়াচডগ ফ্রেমটি ইউআরএলটিকে পুনরায় সেট করে মূলটিতে, যা স্বয়ংক্রিয়ভাবে পুনরায় লোড সম্পাদন করে।

দ্রষ্টব্য, চেষ্টা ... ধরাটি পুরানো ব্রাউজারগুলির সমস্যাগুলি প্রতিরোধ করা যা পোস্টম্যাসেজ সমর্থন করে না। এটি কিওস্কে সমস্যা হবে না যেহেতু আমরা পরিবেশটি নিয়ন্ত্রণ করি এবং সর্বদা নিশ্চিত করতে পারি যে সঠিক ব্রাউজার ব্যবহার করা হবে। ওটিওএইচ, র্যান্ডম ক্লায়েন্ট কম্পিউটারগুলিতে ফ্রেম ছাড়াই বার্তা শোনার ছাড়াই পোস্টম্যাসেজ অপারেশনটি কোনও বিকল্প নেই যতক্ষণ না এটি স্ক্রিপ্ট-গর্ভপাত ত্রুটির সৃষ্টি করে না, এইভাবে চেষ্টা করুন .c


3

আমি একটি এফ 5 কিপ্রেস অনুকরণ করতে এক্সডটুল ব্যবহার করি

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.