Puuh.... So krass kann man sich also in einem Buch täuschen und wundert sich dann, warum man alles falsch lernt
Dann liest man Berichte in der tiefsten Tiefe, aber weiß nicht, woher sie diese Infos haben, um sich das auch aneignen zu können...
Naja, nochmal zu meinem Projekt, sonst krieg ich noch mehr Kopfschmerzen als von meinem Code:
Client:
Code: Alles auswählen
import socket
import json
import sys
from time import sleep
IP = '127.0.0.1'
PORT = 50000
print('init socket...')
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((IP, PORT))
s.settimeout(500)
except socket.error as exc:
print('Caught exception socket.error: {0}'.format(exc))
sys.exit(0)
print("init socket successfull")
d = json.dumps({"hcode": 10101, "device": '1', "status": True}).encode("ascii")
print(json.dumps(d))
s.send(d)
print('data sent')
Der Server:
Code: Alles auswählen
from __future__ import unicode_literals
import socket
import json
import traceback
import sys
from pip import commands
IP = '127.0.0.1'
PORT = 50000 #Port und IP überprüfen
print("start server...")
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((IP, PORT))
s.listen(1)
except Exception:
print('an error occured...')
sys.exit(0)
print("server started")
class Plug:
def switch(self, hcode, id, status):
command = ("sudo /home/pi/raspberry-remote/send {0} {1} {2}".format(hcode, id, '1' if status else '0'))
print(command)
status_code, result = commands.getstatusoutput(command)
return status_code == 0
class Plugswitcher:
def switch_by_json(self, json_data):
try:
message = json.loads(json_data)
hcode = message.get('hcode', None)
device = message.get('device', None)
status = message.get('status', None)
print('switching {0} in housecode {1} {2}'.format(device, hcode, 'on' if status else 'off'))
if hcode and device and message:
return Plug.switch(hcode, device, status)
except:
traceback.print_exc()
return False
switcher = Plugswitcher()
try:
while True:
komm, addr = s.accept()
data = komm.recv(1024)
if not data:
continue
else:
print(data)
switcher.switch_by_json(data)
finally:
s.close()
Vor langer langer Zeit, hat mir ein alter Kollege mal ein Grundgerüst dazu gebaut, das kopier ich auch mal rein. Mein Wunsch war es, die Einträge der Steckdosen nicht im Server zu belegen, sondern einfach nur den gesendeten Input zu verarbeiten. So kann man, später in der App, flexibel die Anzahl der Steckdosen festlegen und muss nicht den Code auf dem Server bearbeiten.
Grundgerüst:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import os
import commands
import socket
import json
import traceback
print("Server wird gestartet...")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("", 50000))
s.listen(1)
print("Server ist gestartet !")
class Plug:
def __init__(self, name, house_code, id):
self.name = name
self.house_code = house_code
self.id = id
def switch(self, status):
command = "sudo /home/pi/raspberry-remote/send {code } {id} {enabled}".format ( code = self.house_code, id = self.id, enabled = '1' if status else '0' )
print(command)
status_code, result = commands.getstatusoutput(command)
return status_code == 0
class Plugswitcher:
def __init__(self):
self.plugs = [
Plug('Licht_1', '10101', 1),
Plug('Licht_2', '10101', 2),
Plug('Licht_3', '10101', 3),
Plug('Licht_4', '10101', 4),
]
def switch_by_json(self, json_data):
try:
message = json.loads(json_data)
device = message.get('device', None)
status = message.get('status', None)
print(device, status)
if device and message:
for plug in self.plugs:
return plug.switch(status)
except:
traceback.print_exc()
return False
switcher = Plugswitcher()
try:
while True:
komm, addr = s.accept()
data = komm.recv(1024)
if not data:
continue
else:
print(data)
switcher.switch_by_json(data)
finally:
s.close