Page 1 sur 1

[Tuto] Suivi du temps de jeu de la PS4 dans domoticz

Publié : 26 avr. 2020, 22:58
par garycooper
Je cherchais à suivre le temps de jeu de mes enfants sur la PS4, et je suis tombé sur ce post :
https://www.domoticz.com/forum/viewtopic.php?t=29873
Pour commencer, il est nécessaire d'installer "PS4-waker" https://github.com/dhleong/ps4-waker
Pour cela, si vous avez Node 6, faire :

Code : Tout sélectionner

sudo npm i ps4-waker -g
Pour Node 7, faire :

Code : Tout sélectionner

npx ps4-waker
Installer la librairie python PS4 "pyps4"

Code : Tout sélectionner

sudo pip install pyps4
Il faut débloquer l'accès au port 987 de la playstation sur votre fournisseur d'accès.
Sur la freebox, allez sur les paramètres via mafreebox.freebox.fr puis "paramètres de la freebox > gestion des ports
là, cochez "activez la DMZ" et sélectionnez l'IP de votre playstation 4 dans "IP DMZ".

Après il faut associer le raspberry (via ps4-waker) avec la playstation 4. Pour ce faire, il est nécessaire d'avoir déjà associé un smartphone ou une tablette avec la playstation en double écran. Installer l'appli "PS App" sur votre smartphone. Sur la playstation, faire "menu > Paramètres de connection de l'application mobile > Ajouter un périphérique" puis, sur le smartphone, indiquer le code à 8 chiffres (sans espace) indiqué sur la playstation.
Redemandez à associer un périphérique sur la PS4 et noter le code à 8 chiffres proposé.
Une fois cela fait, sur l'appli "PS App", appuyer sur l'icône playstation et choisissez "double écran".

Sur le raspberry, taper

Code : Tout sélectionner

sudo ps4-waker -c .ps4-wake.credentials.json --pin "code indiqué sur la PS4" -d "IP de la playstation"
Attention à bien laisser les " et de ne pas mettre d'espace dans le code proposé par la PS4.
Là vous aurez un message disant de vous connecter sur PS App de votre smartphone. Sur l'écran de votre smartphone, vous devriez voir apparître "PS4-waker" dans "Second écran". Cliquez dessus pour vous y connecter.
Et voilà, le raspberry est à présent lié à la PS4.


Maintenant, revenons sur Domoticz :
Créer un interrupteur "PS4" de type sélecteur avec les positions "Off / Veille / Marche / Jeu" qui permettra de visualiser simplement l'état de fonctionnement de la playstation.
Pour les niveaux d'action 0 et 10, taper "script://stopps4.sh"
Pour les niveaux 20 et 30, taper "script://startps4.sh"
Créer un compteur "PS4 duree de jeu en cours" de type incrémental qui comptabiliser le temps de jeu en cours
Créer un compteur "PS4 duree de jeu journee" qui additionnera les temps de jeu sur la journée.
Modifier les deux compteurs en mettant "Custom" dans "Type", "Temps" dans "nom de l'axe" puis "min" dans "Unité"

Créer le script dZVents "PS4.lua" à stocker dans /home/pi/domoticz/scripts/dzVents/scripts :
Pensez à indiquer l'adresse IP de votre playstation (ici "192.168.1.999").

Code : Tout sélectionner

local TimerSetting = "every minute" local n=1
-- local TimerSetting = "every 10 minutes" local n=10

return {

      on = {timer = {TimerSetting}},
      
      	logging = { level = domoticz.LOG_INFO
                ,marker = "PS4"},

	execute = function(domoticz, trigger)
        local PS4Switch      = domoticz.devices("PS4") -- Pour voir l'état et changer l'état
        local GameTime       = domoticz.devices("PS4 duree de jeu en cours") -- Type compteur incremental
        local GameTimeToday  = domoticz.devices("PS4 duree de jeu journee")  -- Type compteur
        local PS4StatusOld   = PS4Switch.state

        local json = require "JSON"
        local level = 0
        
        local handle2 = assert(io.popen("ping -c 1 192.168.1.999 | grep -q 'Destination Host Unreachable' && echo 'Off Line'"))
        local PS4status = handle2:read("*all")
        handle2:close()
     
        if string.sub(PS4status,1,8) == "Off Line" then
            if PS4Switch.level ~= level then PS4Switch.switchSelector(0).silent() end
            if GameTime.counter ~= 0 then GameTime.updateCounter(0) end
                                   
        else -- Playstation should be reachable. Time to use ps4-waker
            local handle = assert(io.popen("ps4-waker check"))
                local PS4status = string.gsub(handle:read("*all"), "-", "") -- remove the "-"
            handle:close()   
           jsonPS4status = json:decode(PS4status)            -- Turn JSON into LUA table
        
            if jsonPS4status.status == "Standby" then
                print("Veille")
                level = 10
                if PS4Switch.level ~= level then PS4Switch.switchSelector(level).silent() end-- Set selector to Standby
                if GameTime.counter ~= 0 then GameTime.updateCounter(0) end 
                                
            elseif jsonPS4status.runningappname then
                level = 30
                 if PS4Switch.level ~= level then PS4Switch.switchSelector(level).silent() end
                GameTime.incrementCounter(n) 
                GameTimeToday.updateCounter(GameTime.counterToday)
                local Game = jsonPS4status.runningappname
                 
            else -- jsonPS4status.status == "OK" then
                level = 20
                 if PS4Switch.level ~= level then PS4Switch.switchSelector(level).silent() end
                GameTime.incrementCounter(n) 
                GameTimeToday.updateCounter(GameTime.counterToday)
             end
        end    
	end
}
Ensuite, dans /home/pi/domoticz/scripts, créer 2 scripts shell :
"startps4.sh" avec

Code : Tout sélectionner

#!/bin/sh
ps4-waker --skip-login &
et "stopps4.sh" avec

Code : Tout sélectionner

#!/bin/bash
ps4-waker standby &
Sur le raspberry, faire :

Code : Tout sélectionner

cd /home/pi/domoticz/scripts
sudo chmod +x startps4.sh
sudo chmod +x stopps4.sh
Et voilà ! vous avez maintenant un suivi du temps de jeu et vous pouvez voir l'état de fonctionnement de la PS4.