Selasa, 06 November 2018

Raspi sebagai LCD Proyektor

Ceritanya

Dosen login....dia scan semua PC di jaringannya...muncullah ip ip computer para siswanya
trus dia piih salah satu untuk presentasi....
maka pc yang dia klik akan tertuju di layar utama...

Konsepnya adalah sama dengan remote desktop...hanya ini di modif seakan2:
LCD proyektor,.........

++++++++++++++++++++++++++++++++++++++++++++++++++


metode u aplikasi Impelemantasi share desktop raspberry PI untuk LCD projector adalah menggunakan metode pencocokan content atau biasa di sebut dgn sequential search

cara kerjanya:
1.admin/dosen/moderator dosen akan menscan IP di jaringan kelas tsb
sehingga akan ketahuan IP mana saja yang aktif dan yang tidak aktif
2.admin/dosen/moderator memilih ip yang akan di munculkan layar desktopnya ke monitor
3.disini diperlukan admin/moderator/dosen agar tidak terjadi rebutan klik ip yang akan aktif
4.konsep koneknya adalah, dengan terlebih dahulu mendiskonek perangkat /laptop sebelumnya baru autokonek ip laptop terpilih
5.ada tombol juga reset all yang artinya diskonesi ke semua pc client dari layar monitor
6.semua aktivitas akan tercatat di tabel log

keterbatasan:
1.aplikasi hanya bisa diterapkan dalam 1 jaringan network/satu subnetmask
2.pengenalan antar laptop adalah menggunakan ip address sehingga setiap laptop agar mudah dikenali siapa pemiliknya maka harus di daftarkan dahulu
3.harus install library apliaksi di client juga

novelty/nilai kebaruan aplikasi ini dari sebelumnya:
1.aplikasi berbasis cient server sehingga mudah memantaunya bisa berbasis desktop, mobile(android), web
2.adanya tabel .log u menyimpan semua aktivitas
3.adanya fitur scan sehingga pc/laptop bisa ditambah atau dikurangkan secara dinamis


Nah ino code veri dosennya:


 <?php

if(isset($_GET["scan"])){
$sql="insert into tb_command values('scan')";
process($conn,$sql);
                echo "<script>alert('Please wait 30 seconds then press OK button')</script>";
                //sleep(30);
                die("<script>location.href='?mnu=controlpanel'</script>");
}

if(isset($_GET["close"])){
  $sql="update tb_status set status='standby'";// where ip='$ip'
        process($conn,$sql);

  $sql="insert into tb_command values('close')";
process($conn,$sql);
die("<script>location.href='?mnu=controlpanel'</script>");
}

if(isset($_GET["st"])){
$kode_status=$_GET["kode"];
$ip=$_GET["id"];
$st=$_GET["st"];

$sql="update tb_status set status='$st' where ip='$ip'";
process($conn,$sql);

if($st=="on"){
//$sql="insert into tb_close values('close')";
$sql="update tb_status set status='$st' where ip='$ip'";
                process($conn,$sql);

$sql="insert into tb_command values('on#$ip')";
process($conn,$sql);
                echo "<script>alert('Your session will expire in 15 minutes')</script>";
die("<script>location.href='?mnu=controlpanel'</script>");
}
else{//standby
$sql="insert into tb_command values('close')";
process($conn,$sql);
die("<script>location.href='?mnu=controlpanel'</script>");
}
}
?>

<div id="accordion">
  <h3>Data</h3>
  <div><p style="text-align:left;">

    <a href="tightvnc-2.8.8-gpl-setup-32bit.msi">Download software presentasi (Win32)</a></span></p>
    <span style="float:right;"> <a href="tightvnc-2.8.8-gpl-setup-64bit.msi">Download software presentasi (Win64)</a></span>
  <br>

<table width="50%" class="table table-bordered table-striped table-hover js-basic-example dataTable">
  <tr bgcolor="#036">
    <th width="3%"><center>No</th>
    <th width="30%"><center>IP</th>
    <th width="15%"><center>Status</th>
    <th width="10%"><center>Jam</th> 
    <th width="10%"><center>PLAY</th> 
  </tr>
<?php
  $sql="select * from `$tbstatus` order by `kode_status` desc";
  $jum=getJum($conn,$sql);
if($jum > 0){
$no=1;
$arr=getData($conn,$sql);
foreach($arr as $d) {
$kode_status=$d["kode_status"]; ;
$jam=$d["jam"];
$ip=$d["ip"];
$status=$d["status"];
$color="#dddddd";
if($no %2==0){$color="#eeeeee";}
echo"<tr bgcolor='$color'>
<td>$no</td>
<td align='center'>$ip</td>
<td align='center'>$status</td>
<td align='center'>$jam</td>";

if($status=="on"){
echo"<td align='center'>
<a href='?mnu=controlpanel&st=standby&kode=$kode_status&id=$ip'><input type='button' value='$status'></a>
</td>";
}
else{
echo"<td align='center'><a href='?mnu=controlpanel&st=on&kode=$kode_status&id=$ip'><input type='button' value='$status'></a></td>";
}

echo"</tr>";

$no++;
}//while
}//if
else{echo"<tr><td colspan='7'><blink>Maaf, Data status belum tersedia...</blink></td></tr>";}
?>
</table>
</div>


</div>
<a href='?mnu=controlpanel&scan=scan'><input type='button' value='SCAN IP'></a>
<a href='?mnu=controlpanel&close=close'><input type='button' value='CLOSE ALL'></a>

Sedang di raspinya:


import MySQLdb
from time import gmtime, strftime
from random import randint
import time
import subprocess
import os
import os, sys

data1=""
data2=""
data3=""

start=0
kon=1
paketimer=False

while kon==1:

    sql="SELECT * FROM tb_command"
    db = MySQLdb.connect("localhost","dian","12345","db_matakuliah")
    cursor = db.cursor()
    proses=0

    cursor.execute(sql)
    res = cursor.fetchall()
    mdata=""
    time.sleep(1)

    if paketimer==True:
      if time.time() > start + 900:
        os.system("pkill vncviewer")
        sql = "UPDATE tb_status set status='standby', keterangan='-' where status='on'"
        try:
           cursor.execute(sql)
           db.commit()
        except:
           db.rollback() 

    for row in res :
        mdata =row[0]

        print(mdata)
        data = mdata.split("#")

        if len(data)==1:
            data1=data[0]
        elif len(data)==2:
            data1=data[0]
            data2=data[1]
        elif len(data)==3:
            data1=data[0]
            data2=data[1]
            data3=data[2]
         
        proses =0
        if len(data)==1: 
            if data1 == "scan": #scan
                print "SCAN"
                proses=1
                #SCAN

                sql="Truncate tb_status"
                try:
                     cursor.execute(sql)
                     db.commit()
               
                except:
                     db.rollback()
               
                with open(os.devnull, "wb") as limbo:
                    for n in xrange(100, 150):
                        ip="192.168.1.{0}".format(n)
                        result=subprocess.Popen(["ping", "-c", "1", "-n", "-W", "1", ip],
                        stdout=limbo, stderr=limbo).wait()
                        if result:
                            print ip, "offline"
                        else:
                            print ip, "online"
                            tanggal=strftime("%Y-%m-%d", gmtime())
                            jam=strftime("%H:%M:%S", gmtime())
                            sql="INSERT INTO `tb_status` (`tanggal` ,`jam` ,`ip` ,`status` ,`keterangan`) VALUES('%s','%s','%s','%s','%s')" % (tanggal,jam,ip,'standby','-')
                            print sql
                            try:
                                cursor.execute(sql)
                                db.commit()
                            except:
                                db.rollback()
            elif data1 == "close":
                  proses=1
                  print "CLOSE"
                  os.system("pkill vncviewer")
                  paketimer=False

        elif len(data)<=3: 
            if data1 == "on": #on#192.168
                proses=1

                ip=data2
                tanggal=strftime("%Y-%m-%d", gmtime())
                jam=strftime("%H:%M:%S", gmtime())
                keterangan=data1

                sql="Truncate tb_command"
                try:
                     cursor.execute(sql)
                     db.commit()

                except:
                     db.rollback()


                sql ="UPDATE `tb_status` set `status`='%s', `jam`='%s', `tanggal`='%s', `keterangan`='%s' where ip='%s'" % ('on',jam,tanggal,keterangan,ip)
                #print (sql)
                try:
                     cursor.execute(sql)
                     db.commit()
                except:
                     db.rollback()

                #AL = os.system("./vnc2.sh "+ ip)
                subprocess.Popen(["./vnc2.sh", ip])
                paketimer=True
                start = time.time()

             
        print "OK-LOPS----"
        if proses==1:
            sql="Truncate tb_command"
            try:
                 cursor.execute(sql)
                 db.commit()
               
            except:
                 db.rollback()
    cursor.close ()
    db.close () 



+++++++++++++
sedang Bash Shell nya sbb: vnc2.sh

#!/bin/bash

ssvnc -cmd -viewer -scale 0.75  -fullscreen $1

+++++++++++++
tabelnya sbb:

CREATE TABLE `tb_command` (
  `command` varchar(30) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE `tb_status` (
  `kode_status` int(15) NOT NULL,
  `tanggal` date NOT NULL,
  `jam` time NOT NULL,
  `ip` varchar(20) NOT NULL,
  `status` varchar(15) NOT NULL,
  `keterangan` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


INSERT INTO `tb_status` (`kode_status`, `tanggal`, `jam`, `ip`, `status`, `keterangan`) VALUES
(1, '2018-10-30', '15:50:51', '192.168.1.8', 'standby', '-'),
(2, '2018-10-30', '15:50:51', '192.168.1.9', 'standby', '-'),
(3, '2018-10-30', '15:59:49', '192.168.1.10', 'on', 'on'),
(4, '2018-10-30', '15:50:52', '192.168.1.11', 'standby', '-');



Ok mudah yaaaaaaaaaaaaaaaaaaaaaaaaaa