Hallo Community,
habe das Problem als Anlass genommen, mich in Python einzuarbeiten und die Datenbank damit zu bearbeiten.
Anbei das Python-File:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import csv
#import numpy as np # nicht notwendig
import os
Variable = ["34989", "13146","40580","26970","33804"] # Variablen-ID in IP-Symcon
#dWert = [324, 1906,990,2678,771] # dieser Wert wird der bestehenden Variablen hinzuaddiert
dWert = [326, 1892,990,1,788] # dieser Wert wird der bestehenden Variablen hinzuaddiert
#dWert = [0,0,0,0,0]
time = 1481485200 #1481464578 #1477983114 # ab diesem Zeitstempel erfolgt die Veraenderung des Zeitstempels
i = 0
#Anzahl = len(Variable) # so viele Variablen sind zu bearbeiten
for Name in Variable:
print (Name)
print (i)
Variable_str = str(Name) # in string umwandeln
reader = csv.reader(open(Variable_str +".csv", "r"),delimiter=',')
# delimiter: Varieblentrennzeichen in der CSV-Datei
# r: nur lesen ("csv.reader")
# w: nur schreiben ("csv.writer")
os.rename(Variable_str+".csv", Variable_str +"_org.csv") #umbenennen
writer = csv.writer(open(Variable_str+".csv", "w"),delimiter=',')
dWert_str = dWert[i]
for row in reader:
if int(row[0]) > time:
t = [int(row[0]),float(row[1])+dWert_str]
else:
t = [int(row[0]),float(row[1])+0]
writer.writerow(t)
#int / float --> umwandeln vom string nach int, bzw. float
#print (t)
i +=1
Das Skript macht folgendes:
[ul]
[li]CSV-Datei der Rohdaten (z.B. … /2016/11/123456.csv) einlesen und umbenennen (–> 123456_org.csv)
[/li][li]neue CSV-Datei erzeugen (123456.csv)
[/li][li]ab einem gewissen Zeitstempel die Werte ändern (z.B. konstanten Wert addieren)
[/li][/ul]
Folgendes Vorgehen ist zu empfehlen:
[ol]
[li]komplette Datenbank extern sichern
[/li][li]Instanzen / Skripte stoppen, die auf die Variablen zugreifen / verändern
[/li][li]Python-Skript in den entsprechenden Ordner der Rohdaten (z.B. …/db/2016/11/) verschieben
[/li][li]zu ändernde Variablen-IDs / Rechenoption / Zeitstempel im Skript anpassen
[/li][li]Python-Skript ausführen
[/li][li]Werte in der Datenbank aggregieren
[/li][li]evtl. letzten Wert der Datenbank direkt im Archive-Handler löschen
[/li][li]evtl. aktuellen Wert der gerade geänderten Variablen anpassen
[/li][li]zuvor gestoppte Skripte / Instanzen wieder starten
[/li][li]geänderte Variablen im WebFront / Archieve-Handler überprüfen
[/li][/ol]
Vielleicht kann jemand damit etwas anfangen.
Bei mir funktioniert die Vorgehensweise einwandfrei.
Viele Grüße
Wickie