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