wir haben es so gelöst.
Im Pictory haben wir ein Virtuelles gerät erstellt.
In LC3 eine Virtuelle Variablenliste erstellt
//Virtuelle Eingänge fuer die Verwaltung der One Wire Geraete
AussenTemp_ist AT %IW1.235 : WORD; // Aussen Temparatur ist Wert
SolarTemp_ist AT %IW1.237 : WORD; // Solar Temparatur ist Wert
BeckenTemp_ist AT %IW1.239 : WORD; // Becken Temparatur ist
SolSp_Pool_ist AT %IW1.241 : WORD; // SolSp_Pool ist Wert
WW_Temp_ist AT %IW1.243 : WORD; // WW Temparatur ist Wert
PH_Wert_ist AT %IW1.245 : WORD; // PH ist Wert
OPR_Wert_ist AT %IW1.247 : WORD; // Redox ist Wert
Fuelstand_PooL_ist AT %IW1.249 : WORD; // Poolfüllstand ist
Derzeit verwalte ichg aber nur die Temparatursensoren damit. Das Prinzip mit den Sonden sollte aber das gleiche sein. Das werde ich sehen wenn ich diese dann habe.
Dann über Pyhton die Auswertung und übergabe an LC3
Code: Select all
[attachment=0]#!/usr/bin/python2
"""Konfiguration """
ip = '192.168.178.122'
port = 5000
# uuid oder Gera"tenamen auf SPS Variable
devicemap = {
'3C0216245DD9EE28':'BeckenTemp_ist',
'AA0216245C5CEE28':'AussenTemp_ist',
'D50216247768EE28':'WW_Temp_ist',
'020116275F62EE28':'KellerTemp_ist'
}
#demopath binary
pictory= '/opt/1WireService/piTest'
# runtime, keine A"nderungen vornehmen !!
import OneWire
import time
import os
import sys
# sys.exit(0)
fpid = os.fork()
if fpid!=0:
# Running as daemon now. PID is fpid
sys.exit(0)
try:
while True:
data = OneWire.connect1Wire(ip,port);
#print data
for key in devicemap:
#print key
try:
wert = data[key]['value']
cmd = pictory+' -w '+devicemap[key]+','+str(wert)+' 2> /dev/null >/dev/null'
# print cmd
os.system(cmd)
except:
next;
time.sleep(10)
except KeyboardInterrupt:
print 'Break running';
Code: Select all
# -*- coding: utf-8 -*-
"""
Created on Wed Feb 22 23:10:36 2017
@author: axel
"""
""" Programm """
import socket
def readSocket(client_soc,lines):
bytes = [];
tokens = [];
data = [];
try:
while lines > 0:
byte = client_soc.recv(1);
if not byte:
token = b''.join(bytes); # bytes zusammenfuegen
tokens.append(token); # token speichern
data.append(tokens);
return data;
if (byte == "\n"):
token = b''.join(bytes); # bytes zusammenfuegen
tokens.append(token); # token speichern
bytes = [];
data.append(tokens);
tokens = [];
lines -= 1;
elif(byte == "|"):
token = b''.join(bytes); # bytes zusammenfuegen
tokens.append(token); # token speichern
bytes = []; # byte leern
elif (byte == "\r"):
continue;
else:
bytes.append(byte);
except socket.timeout:
data.append(tokens);
return data;
def getInfo(socket):
# print "Send INFO command";
socket.settimeout(1);
socket.sendall("get,sys,info\r\n");
value = {}
entrys = readSocket(socket,10)
for e in entrys:
if (len(e)==2):
value.update({e[0]:e[1]})
return value
def setNeededConfigure(socket):
cmds = [
"set,owb,search,2",
"set,sys,dataprint,1",
"set,owb,owdid,0",
"set,owb,owdidformat,1"
]
for cmd in cmds:
socket.sendall(cmd+"\r\n");
#print cmd,':', readSocket(socket,1);
def getDeviceCount (socket):
socket.sendall("GET,OWB,COUNT\r\n");
data = readSocket(socket,1);
# print data
try:
c=int(data[0][1]);
except ValueError:
c=0;
except IndexError:
c=0;
return c
def getDevices(socket):
# print "Send Device command";
socket.sendall("get,owb,listall\r\n");
return readSocket(socket,32);
def getDevicesValue(socket,devcount):
# print "Send Devicevalue command";
# print "get,sys,data\r\n";
socket.sendall("get,sys,data\r\n");
return readSocket(socket,devcount);
def getSettings(socket):
# print "Send Setting command";
socket.sendall("get,sys,setting\r\n");
return readSocket(socket);
def connect1Wire(_ip,_port):
client_soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM);
client_soc.settimeout(5);
try:
client_soc.connect((_ip,_port));
info = getInfo (client_soc);
setNeededConfigure(client_soc);
devcount = getDeviceCount (client_soc);
data = getDevicesValue(client_soc,devcount+1);
devices = getDevices (client_soc);
client_soc.close();
info.update({'devcount':devcount});
for device in data:
if len(device)!=2:
continue
for devinfo in devices:
if (len(devinfo)==0):
continue
if (device[0]==devinfo[1]):
z = {'uuid':devinfo[2],'value':device[1],'device':devinfo[4]}
info.update({device[0]:z})
info.update({devinfo[2]:z})
return info
except socket.timeout:
print "Socket Timeout"
return
except socket.error, exc:
print "Caught exception socket.error : %s" % exc
hoffe du kannst damit etwas anfangen