Kodi Community Forum
[RELEASE] Cinema Experience - the new Home Theater Experience Script - Printable Version

+- Kodi Community Forum (https://forum.kodi.tv)
+-- Forum: Support (https://forum.kodi.tv/forumdisplay.php?fid=33)
+--- Forum: Add-on Support (https://forum.kodi.tv/forumdisplay.php?fid=27)
+---- Forum: Program Add-ons (https://forum.kodi.tv/forumdisplay.php?fid=151)
+---- Thread: [RELEASE] Cinema Experience - the new Home Theater Experience Script (/showthread.php?tid=87563)



- jurmb84 - 2011-04-01

I am loving this script.... 1 question...

With unwatched slides and trailers... once all slides and trailers are viewed, does the watched status auto reset??

Thanx in advance


- Kallaide - 2011-04-01

Love the script but you have only days left to finish it! XBMC has been sold to Sony!

Do what you can guys then BACKUP EVERYTHING.


- dannycorker - 2011-04-01

Anyone have links to UK ratings for the (awesome) script? I've downloaded from darkscouts page and lots of things from Slave Units but don't seem to be able to find any Sad


- itssuresh - 2011-04-01

My cinema Experience add-on is giving scirpt error . It was working fine with the same settings with xbmc 9.xx .Currently I have xbmc 10.1 . I have competely uninstalled and re-install the add-on but still i get Script error.

Does this add-on supports xbmc 10.1 version?


- giftie - 2011-04-01

itssuresh Wrote:My cinema Experience add-on is giving scirpt error . It was working fine with the same settings with xbmc 9.xx .Currently I have xbmc 10.1 . I have competely uninstalled and re-install the add-on but still i get Script error.

Does this add-on supports xbmc 10.1 version?

Cinema Experience 1.0.0 and on(1.0.41 now the current) are Dharma Compatible...(available from Nuka's Repo)

Although it originated from Home Theater Experience(pre-Dharma version), the settings and the program have changed a lot.


- giftie - 2011-04-01

Kallaide Wrote:Love the script but you have only days left to finish it! XBMC has been sold to Sony!

Do what you can guys then BACKUP EVERYTHING.


Hmm... lol.. pretty good April Fools joke... Smile


- giftie - 2011-04-01

dannycorker Wrote:Anyone have links to UK ratings for the (awesome) script? I've downloaded from darkscouts page and lots of things from Slave Units but don't seem to be able to find any Sad

I though Slave Unit's pack had the BBFC ratings... Hmmm...


You can download them from here: http://www.mediafire.com/file/xq72wzn7zz5sdkh/BBFC.rar


- dannycorker - 2011-04-01

giftie Wrote:I though Slave Unit's pack had the BBFC ratings... Hmmm...


You can download them from here: http://www.mediafire.com/file/xq72wzn7zz5sdkh/BBFC.rar

That's great thanks Smile I can't seem to be able to get them to run though, do they need to have UK in the naming format or anything?


- Necromancyr - 2011-04-01

Anyone else having an issue with coming attractions intros? If I set a folder to play a random one, it just entirely skips playing any trailers.

edit: This seems to be something being odd with the settings getting saved as noted before. It's working now, but settings are getting randomly changed.

edit2: A nice feature might be the ability to restrict the use of trivia/stills to one folder until that folder is completed. So, for example, show all pixar stills until they are all shown then go to terminator stills show all them, etc.


- giftie - 2011-04-02

dannycorker Wrote:That's great thanks Smile I can't seem to be able to get them to run though, do they need to have UK in the naming format or anything?

The file names should already be proper... When setting the Movie Ratings Folder in settings make sure it 'points' to the folder that contains the videos. For example, if you extract that rar file it contains a BBFC folder, the script requires you to point to that folder(where ever you extracted it to.

Other than that, I would need to see a copy of your Debug xbmc.log file.


- Necromancyr - 2011-04-02

Well, seems any issue I had was due to the odd saving settings bug. My wife was like 'WTF are we watching frogs telling me not to use my cell...' BUT she got the point and thought it was cute that it made it just like going to the movies.

One thing that would be insanely cool (and prob. completely undoable) is playing of random intermission/ads if you press pause. Would just be 'neat'.

Also, I realized the '60's and drive ins were insanely cool Smile - I mean,hell, coffee was a selling point! Smile


- andrewf - 2011-04-02

is it wrong that I am insanely excited at this featureBig GrinBig Grin

My passion has always been my cinema set up. last month I bought my first ever PC (a Revo) just to get XBMC and have all my movies together and now I find this fab set up.

Ive spent all morning downloading THX and DD files, ratings, publishers etc anything I can get to make this the 'cinema experience' at home.

Just chuckled at the earlier post with the wife at the pre show ads. I expect my wife will be the same Laugh

Cant thank those of you working on this enough

EDIT - Im using Aeon MQ2 which has a cinema button so other than the first few pages of the thread with the links and the folder tree is there anything else I ought to read up on or thanks to all the work so far am I lucky enough to be able to jump straight in?


- giftie - 2011-04-02

andrewf Wrote:is it wrong that I am insanely excited at this featureBig GrinBig Grin

My passion has always been my cinema set up. last month I bought my first ever PC (a Revo) just to get XBMC and have all my movies together and now I find this fab set up.

Ive spent all morning downloading THX and DD files, ratings, publishers etc anything I can get to make this the 'cinema experience' at home.

Just chuckled at the earlier post with the wife at the pre show ads. I expect my wife will be the same Laugh

Cant thank those of you working on this enough

EDIT - Im using Aeon MQ2 which has a cinema button so other than the first few pages of the thread with the links and the folder tree is there anything else I ought to read up on or thanks to all the work so far am I lucky enough to be able to jump straight in?


The most important thing about using the "Cinema" button with Aeon MQ2 is that you need to Queue the movie to properly function. This is done by using the 'Q' or '0' zero button. The 'Cinema' button gives quick access to use the multiple feature option of the add on.


- lams144 - 2011-04-02

Here you have a good source to control X10 devices and speaker through homeseer home automation software in a simple way:

http://smart-living.geoblog.be/?p=4&lang=en

This could be one choice for home automation control (homeseer controls x10, z-ware...)

I have done a macro in eventghost, asociated to a key in my mce remote, using that plugin. It dims or switch off my lights, then send a key to xbmc (in my case ctrl+shift+h) asociated to cinema experience in keyboard.xml with this code:

<h mod="ctrl,shift">XBMC.RunScript(script.cinema.experience)</h>

The result is my lights dimmed and then cinema experience started. More Cinema Experience for your tv room with the touch of a key in your remote or keyboard.


- lams144 - 2011-04-02

I have developed a little more the code in the eventghost plugin (__init__.py) to dim or bright lights:

Code:
# -*- coding: utf-8 -*-

eg.RegisterPlugin(
    name = "Homeseer",
    guid = '{3B51BC0D-A030-4BF1-9E54-EBC3C236F582}',
    author = "Me. made original, modified by krambriw",
    version = "0.0.4",
    kind = "other",
    description = "Homeseer plugin. More info on http://smart-living.geoblog.be/"
)

import eg
from win32com.client import Dispatch


class HomeseerPlugin(eg.PluginClass):
    
    def __init__(self):
        self.AddAction(OnOffCommand)
        self.AddAction(OffCommand)
        self.AddAction(OnCommand)
        self.AddAction(DimCommand)
        self.AddAction(BrightCommand)
        self.AddAction(Speak)

        
    def __start__(self, hostname, username, password):
        self.hsi = Dispatch("HomeSeer2.application")
        self.connected = False
        self.hostname = hostname
        self.username = username
        self.password = password

        print "Trying to connect to Homeseer-host " + self.hostname + " using user " + self.username + "."
        self.hsi.SetHost(self.hostname)
        rval = self.hsi.Connect(self.username, self.password)
        if rval == "":
            print "Successfully connected to Homeseer " + self.hostname + " using user " + self.username + "."
            self.connected = True
        else:
            print "Error: " + rval
            self.hsi.Disconnect
            self.connected = False

        if self.connected:
            self.hs = Dispatch("homeseer.application")


    def __stop__(self):
        if self.connected:
            self.hsi.Disconnect
            print "Disconnected from Homeseer."
            self.connected = False


    def __close__(self):
        print "Homeseer plugin is now closed."

  
    def doSpeak(self, speech):
        if self.connected:
            print "Speaking " + speech
            self.hs.Speak(speech)
        else:
            print "Not connected to Homeseer."


    def doOnOffCommand(self, deviceCode):
        if self.connected:
            if self.hs.DeviceExistsRef(deviceCode)>-1: # krambriw: Check if the device exists
                if self.hs.IsOn(deviceCode):
                    command = "Off"
                else:
                    command = "On"
            
                print "Sending command " + command + " to " + deviceCode
                self.hs.ExecX10(deviceCode, command, 0, 0, False)
            else:
                print deviceCode + " does not exist in Homeseer configuration."            
        else:
            print "Not connected to Homeseer."


    def doOffCommand(self, deviceCode):
        if self.connected:
            if self.hs.DeviceExistsRef(deviceCode)>-1: # krambriw: Check if the device exists
                command = "Off"
                print "Sending command " + command + " to " + deviceCode
                self.hs.ExecX10(deviceCode, command, 0, 0, False)
            else:
                print deviceCode + " does not exist in Homeseer configuration."            
        else:
            print "Not connected to Homeseer."


    def doOnCommand(self, deviceCode):
        if self.connected:
            if self.hs.DeviceExistsRef(deviceCode)>-1: # krambriw: Check if the device exists
                command = "On"
                print "Sending command " + command + " to " + deviceCode
                self.hs.ExecX10(deviceCode, command, 0, 0, False)
            else:
                print deviceCode + " does not exist in Homeseer configuration."            
        else:
            print "Not connected to Homeseer."

    def doDimCommand(self, deviceCode):
        if self.connected:
            if self.hs.DeviceExistsRef(deviceCode)>-1: # krambriw: Check if the device exists
                command = "Dim"
                print "Sending command " + command + " to " + deviceCode
                self.hs.ExecX10(deviceCode, command, 33, 0, False)
            else:
                print deviceCode + " does not exist in Homeseer configuration."            
        else:
            print "Not connected to Homeseer."
            
    def doBrightCommand(self, deviceCode):
        if self.connected:
            if self.hs.DeviceExistsRef(deviceCode)>-1: # krambriw: Check if the device exists
                command = "Bright"
                print "Sending command " + command + " to " + deviceCode
                self.hs.ExecX10(deviceCode, command, 33, 0, False)
            else:
                print deviceCode + " does not exist in Homeseer configuration."            
        else:
            print "Not connected to Homeseer."

    def Configure(self, hostname="localhost", username="default", password="default"):
        panel = eg.ConfigPanel()
        
        hostnameTextControl = panel.TextCtrl(hostname)
        usernameTextControl = panel.TextCtrl(username)
        passwordTextControl = wx.TextCtrl(panel, -1, password, size=(175, -1), style=wx.TE_PASSWORD)

        sizer = wx.FlexGridSizer(rows=3, cols=2, hgap=10, vgap=5)
        sizer.Add(panel.StaticText("Homeseer Host: "))
        sizer.Add(hostnameTextControl)  
        sizer.Add(panel.StaticText("Homeseer Username: "))
        sizer.Add(usernameTextControl)
        sizer.Add(panel.StaticText("Homeseer Password: "))    # row2, col1
        sizer.Add(passwordTextControl)
        
        border = wx.BoxSizer()
        border.Add(sizer, 0, wx.ALL, 10)
        panel.SetSizerAndFit(border)
        
        while panel.Affirmed():
            panel.SetResult(
                hostnameTextControl.GetValue(),
                usernameTextControl.GetValue(),
                passwordTextControl.GetValue()
            )
            
            
            
class OnOffCommand(eg.ActionClass):
    
    def __call__(self, deviceCode):
        self.plugin.doOnOffCommand(deviceCode)


    def Configure(self, devicecode=""):
        panel = eg.ConfigPanel()
        
        deviceCodeTextControl = panel.TextCtrl(devicecode)
        
        sizer = wx.FlexGridSizer(rows=2, cols=2, hgap=10, vgap=5)
        sizer.Add(panel.StaticText("Device Code: "))
        sizer.Add(deviceCodeTextControl)  
        
        border = wx.BoxSizer()
        border.Add(sizer, 0, wx.ALL, 10)
        panel.SetSizerAndFit(border)
        
        while panel.Affirmed():
            panel.SetResult(deviceCodeTextControl.GetValue())


        
class OffCommand(eg.ActionClass):
    
    def __call__(self, deviceCode):
        self.plugin.doOffCommand(deviceCode)


    def Configure(self, devicecode=""):
        panel = eg.ConfigPanel()
        
        deviceCodeTextControl = panel.TextCtrl(devicecode)
        
        sizer = wx.FlexGridSizer(rows=2, cols=2, hgap=10, vgap=5)
        sizer.Add(panel.StaticText("Device Code: "))
        sizer.Add(deviceCodeTextControl)  
        
        border = wx.BoxSizer()
        border.Add(sizer, 0, wx.ALL, 10)
        panel.SetSizerAndFit(border)
        
        while panel.Affirmed():
            panel.SetResult(deviceCodeTextControl.GetValue())


        
class OnCommand(eg.ActionClass):
    
    def __call__(self, deviceCode):
        self.plugin.doOnCommand(deviceCode)


    def Configure(self, devicecode=""):
        panel = eg.ConfigPanel()
        
        deviceCodeTextControl = panel.TextCtrl(devicecode)
        
        sizer = wx.FlexGridSizer(rows=2, cols=2, hgap=10, vgap=5)
        sizer.Add(panel.StaticText("Device Code: "))
        sizer.Add(deviceCodeTextControl)  
        
        border = wx.BoxSizer()
        border.Add(sizer, 0, wx.ALL, 10)
        panel.SetSizerAndFit(border)
        
        while panel.Affirmed():
            panel.SetResult(deviceCodeTextControl.GetValue())
        
class DimCommand(eg.ActionClass):
    
    def __call__(self, deviceCode):
        self.plugin.doDimCommand(deviceCode)


    def Configure(self, devicecode=""):
        panel = eg.ConfigPanel()
        
        deviceCodeTextControl = panel.TextCtrl(devicecode)
        
        sizer = wx.FlexGridSizer(rows=2, cols=2, hgap=10, vgap=5)
        sizer.Add(panel.StaticText("Device Code: "))
        sizer.Add(deviceCodeTextControl)  
        
        border = wx.BoxSizer()
        border.Add(sizer, 0, wx.ALL, 10)
        panel.SetSizerAndFit(border)
        
        while panel.Affirmed():
            panel.SetResult(deviceCodeTextControl.GetValue())

        
class BrightCommand(eg.ActionClass):
    
    def __call__(self, deviceCode):
        self.plugin.doBrightCommand(deviceCode)


    def Configure(self, devicecode=""):
        panel = eg.ConfigPanel()
        
        deviceCodeTextControl = panel.TextCtrl(devicecode)
        
        sizer = wx.FlexGridSizer(rows=2, cols=2, hgap=10, vgap=5)
        sizer.Add(panel.StaticText("Device Code: "))
        sizer.Add(deviceCodeTextControl)  
        
        border = wx.BoxSizer()
        border.Add(sizer, 0, wx.ALL, 10)
        panel.SetSizerAndFit(border)
        
        while panel.Affirmed():
            panel.SetResult(deviceCodeTextControl.GetValue())


        
class Speak(eg.ActionClass):

    def __call__(self, speech):
        self.plugin.doSpeak(speech)


    def Configure(self, speech="Hello Homeseer World."):
        panel = eg.ConfigPanel()
        
        speechTextControl = panel.TextCtrl(speech)
        
        sizer = wx.FlexGridSizer(rows=1, cols=2, hgap=10, vgap=5)
        sizer.Add(panel.StaticText("Speech: "))
        sizer.Add(speechTextControl)  
        
        border = wx.BoxSizer()
        border.Add(sizer, 0, wx.ALL, 10)
        panel.SetSizerAndFit(border)
        
        while panel.Affirmed():
            panel.SetResult(speechTextControl.GetValue())

I think that this could be usefull.

Best regards.