Zonnedag allemaal.
Ook ik heb een Omnik Omniksol 4.0 TL omvormer met WIFI - 2MPP
Ik heb het python script gebruikt voor mijn Domoticz, maar loop tegen hetzelfde probleem aan als topics hiervoor. De wifi kaart resetten en opnieuw beginnen.
Nu heb ik als beginner in Python eens zitten rotzooien
In de Omvormer kun je meerdere server adressen opgeven.
Hier dus maar eens een IP nummer +poort van mijn PC ingegeven waar Python op draait.
Eerst maar eens de livestats.py geprobeerd om te testen.
Nu maar eens gezocht naar een socket server voorbeeld.
Na wat geknoei werkt het!
De socket gebruikt de InverterMsg van wouterrr
Het is nog lang niet af dus, ik krijg elke 5 minuten in de IDLE een telegram met alle waarden.
Deze dienen dan nog "even" naar Domoticz verzonden te worden.
https://www.domoticz.com/wiki/Omnik_Solar_Inverter
nadeeltje, er wordt elke 5 minuten een data pakket klaar gezet.
( o ja de code is natuurlijk een rommeltje van het vele testen)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
| # Simple socket server using threads
import InverterMsg # Import the Msg handler
import socket
import sys
from thread import *
HOST = '' # Symbolic name meaning all available interfaces
PORT =28812 # Arbitrary non-privileged port -> De poort heb je opgegeven in je omvormer met je ip adres
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
#Bind socket to local host and port
try:
s.bind((HOST, PORT))
except socket.error as msg:
print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()
print 'Socket bind complete'
#Start listening on socket
s.listen(10)
print 'Socket now listening'
#Function for handling connections. This will be used to create threads
def clientthread(conn):
#Sending message to connected client
conn.send(InverterMsg.generate_string(123456789)) #vul hier je wifinummer van je omvormer in
#infinite loop so that function do not terminate and thread do not end.
# while True:
#Receiving from client
# data += conn.recv(1024)
# reply = 'h@0KƒÝ_KƒÝ_'
data = ''
while 1:
data += conn.recv(1024)
if len(data) >= 198: break
#if not data:
# break
print "data: " ,repr(data)
msg = InverterMsg.InverterMsg(data)
print "ID: {0}".format(msg.getID())
print "E Today: {0:>5} Total: {1:<5}".format(msg.getEToday(), msg.getETotal())
print "H Total: {0:>5} Temp: {1:<5}".format(msg.getHTotal(), msg.getTemp())
print "PV1 V: {0:>5} I: {1:>4}".format(msg.getVPV(1), msg.getIPV(1))
print "PV2 V: {0:>5} I: {1:>4}".format(msg.getVPV(2), msg.getIPV(2))
print "PV3 V: {0:>5} I: {1:>4}".format(msg.getVPV(3), msg.getIPV(3))
print "L1 P: {0:>5} V: {1:>5} I: {2:>4} F: {3:>5}".format(msg.getPAC(1), msg.getVAC(1), msg.getIAC(1), msg.getFAC(1))
print "L2 P: {0:>5} V: {1:>5} I: {2:>4} F: {3:>5}".format(msg.getPAC(2), msg.getVAC(2), msg.getIAC(2), msg.getFAC(2))
print "L3 P: {0:>5} V: {1:>5} I: {2:>4} F: {3:>5}".format(msg.getPAC(3), msg.getVAC(3), msg.getIAC(3), msg.getFAC(3))
# conn.sendall(InverterMsg.generate_string(1608352587))
#came out of loop
conn.close()
#now keep talking with the client
while 1:
#wait to accept a connection - blocking call
conn, addr = s.accept()
print 'Connected with ' + addr[0] + ':' + str(addr[1])
#start new thread takes 1st argument as a function name to be run, second is the tuple of arguments to the function.
start_new_thread(clientthread ,(conn,))
s.close() |
zo te zien aan wireshark worden de 2 ingestelde servers na elkaar afgewerkt. Liefst had ik mijn eigen server bovenaan gezet, maar de default server kan ik niet veranderen, hoogstens blokkeren in mijn router.
[
Voor 3% gewijzigd door
habbekrats op 22-11-2015 16:43
]