Hi motom001,
hast ja Recht! Is halt meine Art immer mit der Tür ins Haus zu fallen
Mfg,
doorpi1
Hi motom001,
hast ja Recht! Is halt meine Art immer mit der Tür ins Haus zu fallen
Mfg,
doorpi1
Hallo MarcusS,
interessant. Was kann die Zusatzplatine für den Raspberry alles leisten ?
Lässt sich die Hardware evtl. mit DoorPi ansteuern?
BG,
doorpi1
Habe eine neue SingleAction programmiert:
Aufruf in der doorpi.ini:
10 = IPS_SetMediaContent,xxxxx
xxxxx = Variablen-Id einer Mediendatei des Typs 1 (Bild)
PiCamera muss angeschlossen sein und die Python-Bibliothek für die PiCamera muss logischerweise geladen sein.
Hier das File runterladen: GitHub
Bei mir funktioniert jetzt die Funktionalität mit Symcon wieder.
Bitte mal die geänderten Files von
ziehen und testen.
Sollte sich noch ein Fehler eingeschlichen haben bitte Feedback an mich, danke.
Hi SchramIP,
habe es jetzt hinbekommen ... allerdings mit dem Schönheitsfehler, dass die Config nicht mehr aus doorpi.ini gezogen wird!
Ich habe einfach zu wenig Python-Erfahrung!
Wäre cool, wenn motom001 mal drüberschauen könnte !
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
logger = logging.getLogger(__name__)
logger.debug("%s loaded", __name__)
import doorpi
import requests
import json
from requests.auth import HTTPBasicAuth
from doorpi.action.base import SingleAction
def ips_rpc_fire(method, *parameters):
url = 'http://<ip-adresse>:3777/api/'
auth=HTTPBasicAuth('<email>@<provider.de>', '<password>')
headers = {'content-type': 'application/json'}
payload = {
"method": method,
"params": parameters,
"jsonrpc": "2.0",
"id": 0,
}
return requests.post(url, auth=auth, data=json.dumps(payload), headers=headers)
def ips_rpc_check_variable_exists(key):
response = ips_rpc_fire('IPS_VariableExists', key)
return response.json()['result']
def ips_rpc_get_variable_type(key):
response = ips_rpc_fire('IPS_GetVariable', key)
return response.json()['result']['VariableType']
def ips_rpc_set_value(key, value):
try:
if ips_rpc_check_variable_exists(key) is not True: raise Exception("var %s doesn't exist", key)
type = ips_rpc_get_variable_type(key)
if type is None: raise Exception("type of var %s couldn't find", key)
# http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/variablenverwaltung/ips-getvariable/
# Variablentyp (0: Boolean, 1: Integer, 2: Float, 3: String)
elif type == 0:
if value.lower() in ['true', 'yes', '1']: value = True
else: value = False
elif type == 1: value = int(value)
elif type == 2: value = float(value)
elif type == 3: value = str(value)
else: value = str(value)
ips_rpc_fire('SetValue', key, value)
except Exception as ex:
logger.exception("couldn't send IpsRpc (%s)", ex)
return False
return True
def get(parameters):
parameter_list = parameters.split(',')
if len(parameter_list) is not 2: return None
key = int(parameter_list[0])
value = parameter_list[1]
return IpsRpcSetValueAction(ips_rpc_set_value, key, value)
class IpsRpcSetValueAction(SingleAction):
pass
Alles anzeigen
Hallo SchramIP,
return response.json()['result']
hast DU beide Klammern () vor ['result'] gesetzt ?
... sieht so aus, als muß ich mir selbst eine Teststellung basteln
Hallo zusammen,
könnte jemand als Test mal folgende Änderungen in ipsrpc_setvalue.py machen:
Änderungen in Zeile 40 und 45 !
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
logger = logging.getLogger(__name__)
logger.debug("%s loaded", __name__)
import doorpi
import requests
import json
from requests.auth import HTTPBasicAuth
from doorpi.action.base import SingleAction
def ips_rpc_create_config():
config = {}
config['webservice_url'] = doorpi.DoorPi().config.get('IP-Symcon', 'server')
config['username'] = doorpi.DoorPi().config.get('IP-Symcon', 'username')
config['password'] = doorpi.DoorPi().config.get('IP-Symcon', 'password')
config['jsonrpc'] = doorpi.DoorPi().config.get('IP-Symcon', 'jsonrpc', '2.0')
config['headers'] = {'content-type': 'application/json'}
return config
def ips_rpc_fire(method, config, *parameters):
payload = {
"method": method,
"params": parameters,
"jsonrpc": config['jsonrpc'],
"id": 0,
}
return requests.post(
config['webservice_url'],
headers = config['headers'],
auth = HTTPBasicAuth(config['username'], config['password']),
data = json.dumps(payload)
)
def ips_rpc_check_variable_exists(key, config = None):
if config is None: config = ips_rpc_create_config()
response = ips_rpc_fire('IPS_VariableExists', config, key)
return response.json()['result']
def ips_rpc_get_variable_type(key, config = None):
if config is None: config = ips_rpc_create_config()
response = ips_rpc_fire('IPS_GetVariable', config, key)
return response.json()['result']['VariableType']
def ips_rpc_set_value(key, value, config = None):
try:
if config is None: config = ips_rpc_create_config()
if ips_rpc_check_variable_exists(key, config) is not True: raise Exception("var %s doesn't exist", key)
type = ips_rpc_get_variable_type(key, config)
if type is None: raise Exception("type of var %s couldn't find", key)
# http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/variablenverwaltung/ips-getvariable/
# Variablentyp (0: Boolean, 1: Integer, 2: Float, 3: String)
elif type == 0:
if value.lower() in ['true', 'yes', '1']: value = True
else: value = False
elif type == 1: value = int(value)
elif type == 2: value = float(value)
elif type == 3: value = str(value)
else: value = str(value)
ips_rpc_fire('SetValue', config, key, value)
except Exception as ex:
logger.exception("couldn't send IpsRpc (%s)", ex)
return False
return True
def get(parameters):
parameter_list = parameters.split(',')
if len(parameter_list) is not 2: return None
key = int(parameter_list[0])
value = parameter_list[1]
return IpsRpcSetValueAction(ips_rpc_set_value, key, value)
class IpsRpcSetValueAction(SingleAction):
pass
Alles anzeigen