Hallo smartHome.py Freunde,
ich möchte von mehreren Computern auf smartHome.py-Items zugreifen können.
Die betreffenden Computer und das smartHome.py befinden sich in unterschiedlichen LAN-Segmenten, die durch eine Firewall getrennt sind.
In diese sind ohnehin zwei Löcher gebohrt, um die SmartVISU im erstgenannten Segment zur Verfügung zu stellen.
Der Zugriff soll durch ein Shell- oder Python-Script geschehen, um diese dann - unter anderem - geordnet herunterfahren zu können.
Also habe ich einen Versuch mit Python gestartet.
Während mir das smartHome.py-Network-Plugin eher für das Netzwerkseitige setzen der Werte
von Items geeignet scheint, spricht nach meiner Kenntnis nichts dagegen, die genannten
Löcher in der Firewall auch hierfür zu verwenden und den gleichen WebSocket zu verwenden,
den auch die SmartVISU verwendet.
Eine von der VISU abweichende Zugriffsregelung ist nicht erforderlich.
Beim Ausführen der Datei wstest_client.py wird allerdings die Verbindung geschlossen, bevor eine Antwort empfangen wurde (siehe Konsolenausgabe unten).
wstest_client.py:
Konsolenausgabe:
Die von smarthome.py -d erzeugte Konsolenausgabe lautet:
Über jegliche Hilfe würde ich mich sehr freuen!
Viele Grüße,
fivesails
ich möchte von mehreren Computern auf smartHome.py-Items zugreifen können.
Die betreffenden Computer und das smartHome.py befinden sich in unterschiedlichen LAN-Segmenten, die durch eine Firewall getrennt sind.
In diese sind ohnehin zwei Löcher gebohrt, um die SmartVISU im erstgenannten Segment zur Verfügung zu stellen.
Der Zugriff soll durch ein Shell- oder Python-Script geschehen, um diese dann - unter anderem - geordnet herunterfahren zu können.
Also habe ich einen Versuch mit Python gestartet.
Während mir das smartHome.py-Network-Plugin eher für das Netzwerkseitige setzen der Werte
von Items geeignet scheint, spricht nach meiner Kenntnis nichts dagegen, die genannten
Löcher in der Firewall auch hierfür zu verwenden und den gleichen WebSocket zu verwenden,
den auch die SmartVISU verwendet.
Eine von der VISU abweichende Zugriffsregelung ist nicht erforderlich.
Beim Ausführen der Datei wstest_client.py wird allerdings die Verbindung geschlossen, bevor eine Antwort empfangen wurde (siehe Konsolenausgabe unten).
wstest_client.py:
Code:
import json
import websocket
version = 3,
try:
import thread
except ImportError: #TODO use Threading instead of _thread in python3
import _thread as thread
import time
import sys
def on_message(ws, message):
print(message)
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
def run(*args):
for i in range(1):
# send the message, then wait
# so thread doesnt exit and socket
# isnt closed
sendstr = json.dumps({'cmd': 'proto', 'ver': version})
print("Sending " + sendstr)
ws.send(sendstr)
print("Sent")
sendstr = json.dumps({'cmd': 'monitor', 'items': ['eg.hwr.licht.decke']});
print("Sending " + sendstr)
ws.send(sendstr)
print("Sent")
time.sleep(1)
# time.sleep(1)
# ws.close()
# print("Thread terminating...")
thread.start_new_thread(run, ())
if __name__ == "__main__":
websocket.enableTrace(True)
if len(sys.argv) < 2:
host = "ws://smarthome.lan:2424/"
else:
host = sys.argv[1]
ws = websocket.WebSocketApp(host,
on_message = on_message,
on_error = on_error,
on_close = on_close)
ws.on_open = on_open
ws.run_forever()
Code:
root@shProto:/usr/dev# python wstest_client.py
--- request header ---
GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: fasanenweg.lan:2424
Origin: http://fasanenweg.lan:2424
Sec-WebSocket-Key: VX6ipXfBQY2FUfhbRlJc6g==
Sec-WebSocket-Version: 13
-----------------------
--- response header ---
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: fMQ/KVrJ/fsDlVou1uLKvyzzVXQ=
-----------------------
Sending {"cmd": "proto", "ver": [3]}
send: b'\x81\x9c\xe0\x13;\xa7\x9b1X\xca\x841\x01\x87\xc2cI\xc8\x94|\x19\x8b\xc01M\xc2\x921\x01\x87\xbb f\xda'
Sent
Sending {"items": ["eg.hwr.licht.decke"], "cmd": "monitor"}
send: b'\x81\xb3\x96\xa5G)\xed\x87.]\xf3\xc84\x0b\xac\x85\x1c\x0b\xf3\xc2iA\xe1\xd7iE\xff\xc6/]\xb8\xc1"J\xfd\xc0et\xba\x85eJ\xfb\xc1e\x13\xb6\x87*F\xf8\xcc3F\xe4\x87:'
Sent
### closed ###
Code:
2014-12-30 20:18:21,054 DEBUG Main WebSocket: incoming connection from 192.168.2.2:57996 to 192.168.2.20:2424 -- connection.py:accept:187
2014-12-30 20:18:21,075 DEBUG Main 192.168.2.2:57996 sent '{"cmd": "proto", "ver": [3]}' -- __init__.py:json_parse:269
2014-12-30 20:18:21,080 DEBUG Main WebSocketHandler: closing socket 192.168.2.2:57996 -- connection.py:close:302
Viele Grüße,
fivesails


Kommentar