Script python
Script python
Merci à vous, je viens d acheté une petite sirène zwave secteur et batterie. Je souhaite également utiliser le script python " sur le wiki domoticz" dans détection jamming que tu as créé. Mais je ne sais pas quelle variable il faut modifier
Faut t'il modifier les valeurs 'c' ,'j' .... Dans le ligne sys.stderr.write ?
Envoyé de mon Mi 9T en utilisant Tapatalk
Faut t'il modifier les valeurs 'c' ,'j' .... Dans le ligne sys.stderr.write ?
Envoyé de mon Mi 9T en utilisant Tapatalk
Re: Brouilleur de fréquence RF
voir photo
- Pièces jointes
-
- IMG_20210325_180602.jpg (4.44 Mio) Consulté 4357 fois
Re: Script python
Je viens de déplacer ton message dans un nouveau sujet.
Peux-tu indiquer le lien la page du wiki que tu cites ?
Peux-tu poster ton code complet du script en utilisant le bouton </> au-dessus de la zone de rédaction des messages ?
Et tu aurais pu éditer ton premier message pour rajouter la photo de ton code au lieu de créer un nouveau message juste pour ça.
Peux-tu indiquer le lien la page du wiki que tu cites ?
Peux-tu poster ton code complet du script en utilisant le bouton </> au-dessus de la zone de rédaction des messages ?
Et tu aurais pu éditer ton premier message pour rajouter la photo de ton code au lieu de créer un nouveau message juste pour ça.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Re: Script python
OK merci keros
Désoler je n avais pas vu qu'il était possible de rajouter une image à un message déja poster.
Voici le lien du wiki que je cite
https://www.domoticz.com/wiki/Alarm_Set ... ct_jamming
Désoler je n avais pas vu qu'il était possible de rajouter une image à un message déja poster.
Voici le lien du wiki que je cite
https://www.domoticz.com/wiki/Alarm_Set ... ct_jamming
Code : Tout sélectionner
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Check a zwave device with polling enabled presence and trigger
# a virtual switch to indicate possible radio jam if not seen...
#
# Returns 0 if no jamming, 1 if jamming, -1 if an error occured.
# But return value cannot be used from Lua??? So use -s.
#
# Changelog : 21/01/2017, YL, 1st version.
import getopt
import logging
import json
import sys
import requests
import datetime
#####################
# EDITABLE SETTINGS #
#####################
logLevel='INFO' # DEBUG / INFO
# Domoticz json API url
dmtJurl = 'http://127.0.0.1:8080/json.htm?'
# Command parameters in json format (only change if API change!)
dmtJsonGetZwNodes = {"type":"openzwavenodes", "idx":"999"}
dmtJsonSwitch = {"type":"command", "param":"switchlight", "idx":999, "switchcmd":"Off"}
# Domoticz time format on LUA side:
dmtLuaTimeFmt = "%Y-%m-%d %H:%M:%S"
#####################
def usage():
"""
Display usage
"""
sys.stderr.write( "Usage: ChkZwJam.py [-h] [-c<CtrlIdx>] [-j<jamSwitchIdx>] [-n<DevName>] [-m<missedPollNbLimit>] -s[<0|1>]\n")
sys.stderr.write( " 'c' = IDx of Z-Wave controller.\n")
sys.stderr.write( " 'j' = IDx of Z-Wave jamming vSwitch.\n")
sys.stderr.write( " 'n' = Z-Wave device name to monitor.\n")
sys.stderr.write( " 'm' = Missed poll(s) nb for device not seen alert.\n")
sys.stderr.write( " 's' = Current state from Lua (need update eval).\n")
#####################
def dmtJsonApi(url, jsonApiCmd, logger):
"""
Send Domoticz json command
"""
try:
# Connect to Domoticz via JSON API and send data
dmtRget=requests.get(url, params=jsonApiCmd)
except requests.exceptions.RequestException as dmtErr:
logger.log(logging.ERROR, "Unable to connect with URL=%s \nGet requests error %s" % (dmtRget.url, dmtErr))
finally:
logger.log(logging.DEBUG, "Sent data: [%s]" % (dmtRget.url))
return dmtRget.json()
#####################
def main(argv):
"""
Main
"""
logging.basicConfig()
logger = logging.getLogger()
handler = logging.StreamHandler(sys.stdout)
# Checks the parameters
try:
opts, args = getopt.getopt(argv, "h:c:j:n:m:s:",["help","ctlIdx","jamIdx","name","miss","state"])
except getopt.GetoptError:
usage()
sys.exit(-1)
# Defaults
devName = '999'
missPollLimit = 2
ctlIdx = '0'
jamIdx = '0'
curState = -1
for o, a in opts:
if o in ("-h", "--help"):
usage()
sys.exit(-1)
if o in ("-c", "--ctlIdx" ):
ctlIdx=a
if o in ("-j", "--jamIdx" ):
jamIdx=a
if o in ("-n", "--name" ):
devName=a
if o in ("-m", "--miss" ):
missPollLimit=int(a)
if o in ("-s", "--state" ):
curState=int(a)
# Configure the logger
handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
logger.setLevel(logLevel)
dmtJsonSwitch['idx'] = jamIdx
logger.log(logging.DEBUG, "Controler IDx=%s, Jamming vSwitch IDx=%s, Device=%s, Miss Poll Limit=%ds." %(ctlIdx, jamIdx, devName, missPollLimit))
# Get all zwave nodes data
dmtJsonGetZwNodes['idx'] = ctlIdx
zwNodesData = dmtJsonApi(dmtJurl, dmtJsonGetZwNodes, logger)
#logger.log(logging.DEBUG, "Zwave Nodes: [%s]" % (zwNodesData))
# Get devices nb...
devNb=len(zwNodesData['result'])
logger.log(logging.DEBUG, "Found %d nodes, extract data for %s" % (devNb, devName))
if (devNb < 2):
logger.log(logging.INFO, "%d < 2 devices found !!!", devNb)
sys.exit(-1)
# Get controller poll interval
if (zwNodesData['result'][0]['config'][0]['label'] == 'Poll Interval'):
pollSec = int(zwNodesData['result'][0]['config'][0]['value'])
logger.log(logging.DEBUG, 'Controller Poll Interval = %dsec.', pollSec)
else:
logger.log(logging.INFO, "Cannot find controller poll interval config !!!")
sys.exit(-1)
# Find device to poll using it's name...
devFound = 0
for node in zwNodesData['result']:
if (node['Name'] == devName):
logger.log(logging.DEBUG, 'Found: %s ; PollEnabled=%s ; LastUpdate=%s',
node['Name'],
node['PollEnabled'],
node['LastUpdate'])
devFound = 1
break
# Device name not found, exit...
if (devFound == 0):
logger.log(logging.INFO, "Device %s : NOT FOUND." % devName)
sys.exit(-1)
# If found node is poll enabled, check last seen time vs current...
ret = 0
if (node['PollEnabled'] == 'true'):
curDate = datetime.datetime.now()
lstDate = datetime.datetime.strptime(node['LastUpdate'], dmtLuaTimeFmt)
lastSec = (curDate - lstDate).seconds
logger.log(logging.DEBUG, "Current date/time : %s", curDate)
logger.log(logging.DEBUG, "LastUpd date/time : %s (%s) ; Diff=%ssec.", node['LastUpdate'], node['Name'], lastSec)
if (lastSec > (pollSec * missPollLimit)):
logger.log(logging.INFO, "%s: No poll response since %dsec ; Jamming?", devName, lastSec)
print('JAMMING')
ret = 1
if (curState == 0):
dmtJsonSwitch['switchcmd'] = 'On'
dmtJsonApi(dmtJurl, dmtJsonSwitch, logger)
else:
if (curState == 1):
dmtJsonSwitch['switchcmd'] = 'Off'
dmtJsonApi(dmtJurl, dmtJsonSwitch, logger)
else:
logger.log(logging.INFO, "Must enable device polling !!!")
sys.exit(-1)
# Happy ending!
logger.log(logging.DEBUG, "%s: Last=%ds / Poll=%ds (Miss limit=%d).", devName, lastSec, pollSec, missPollLimit)
sys.exit(ret)
if __name__ == "__main__":
main(sys.argv[1:])
Re: Script python
Hello,psy501 a écrit : 25 mars 2021, 18:15 Faut t'il modifier les valeurs 'c' ,'j' .... Dans le ligne sys.stderr.write ?
Le script est essentiellement écrit en python, mais aucune modif nécessaire: L'appel est fait par un autre script, un time Lua, dont le rôle est essentiellement d'appeler le script principal en python.
A l'époque ou ce fut écrit, il n'y avait pas de support python dans Domoticz d'ou cette construction un peu tordue/hybride...
Bref, ce que tu pointais dans le source python c'est juste l'aide du script qui peut s'afficher à l'appel direct, avec les paramètres. L'appel direct n'est utile que pour tester que tout fonctionne bien (un exemple avec affichage avec le niveau de log level debug est donné).
Mais ensuite, c'est la partie Lua qui s'en charge, toutes les minutes, et là il faut en effet éditer cette partie avec ses propres noms/chemin script principal/idx:
Code : Tout sélectionner
-- User config editable settings :
chkZwPyPath = '/home/domo/domoticz/scripts/'
devJamSwitch = 'JamZwave' -- vSwitch showing jamming name.
devJamIdx = '999' -- vSwitch IDx (both must match).
devJamCheck = 'Siren' -- Z-Wave device in poll mode used for checks.
jamMissLimit = '2' -- Nb of consecutive polls miss limit.
devCtlIdx = '999' -- Z-Wave controler IDx.
Re: Script python
Ok merci lost, donc si je comprends bien ce script ne fonctionne pas avec python 3 ?
Envoyé de mon Mi 9T en utilisant Tapatalk
Envoyé de mon Mi 9T en utilisant Tapatalk
Re: Script python
Pas testé... Mais Raspbian 10 reste en python 2.7 par défaut.
Dernière modification par Keros le 31 mars 2021, 12:31, modifié 1 fois.
Raison : Merci de ne pas citer le message précédent lors d'une réponse directe.
Raison : Merci de ne pas citer le message précédent lors d'une réponse directe.