Hallo,
ich möchte per Netzwerkzugriff von meinem macbook auf die SD-Karte des Controllers zugreifen.
Primär ginge es mir nur um den Download von Sensordaten aus dem history-verzeichnis.
Geht es auch einfach per Konsole?
Grüße richard
Zugriff auf SD-Karte
-
richard-os
- Beiträge: 21
- Registriert: 6. Januar 2015, 17:06
-
Alex
- Administrator
- Beiträge: 10103
- Registriert: 28. Mai 2014, 23:00
Re: Zugriff auf SD-Karte
Der Controller hat keine Konsole... oder meinst Konsole am Mac? (da kann ich Dir nicht wirklich helfen)
FTP sollte aber wohl sicher auch gehen (Filezilla gibts ja auch für den Mac).
FTP sollte aber wohl sicher auch gehen (Filezilla gibts ja auch für den Mac).
-
richard-os
- Beiträge: 21
- Registriert: 6. Januar 2015, 17:06
Re: Zugriff auf SD-Karte
Hallo, das gleiche müsste aber für ftp gelten.Der Controller hat keine Konsole.
Ohne ftp-server auf dem Controller kann der auch keine ftp-client-Anfagen bedienen!
Da html geht, läuft dort eben auch ein html-server (aka Webserver).
Aber ich habe nun bemerkt, dass man das gewünschte Datenintervall in der grafischen Darstellung einstellen kann.Die zugehörigen Daten lassen sich dann in einer csv-Datei exportieren.
Welches Betriebssystem läuft auf dem Controller?
Grüße Richard
-
Alex
- Administrator
- Beiträge: 10103
- Registriert: 28. Mai 2014, 23:00
Re: Zugriff auf SD-Karte
Ja, ich weiß schon was wir alles an Servern eingebaut haben.
... und eine Konsole (SSH oder Telnet oder irgendwas ähnliches) ist halt numal nicht da...
... und eine Konsole (SSH oder Telnet oder irgendwas ähnliches) ist halt numal nicht da...
-
Viveronese
- Beiträge: 69
- Registriert: 18. Mai 2018, 16:16
Re: Zugriff auf SD-Karte
Von einer Console kannst Du sinnvoll nur mit FTP auf den Poolcontroller zugreifen. Das kann man mit tools wie wget (lesen) oder lftp (lesen+schreiben) machen.richard-os hat geschrieben:Hallo,
ich möchte per Netzwerkzugriff von meinem macbook auf die SD-Karte des Controllers zugreifen.
Primär ginge es mir nur um den Download von Sensordaten aus dem history-verzeichnis.
Geht es auch einfach per Konsole?
Hier zB mein tägliches Backup Script (Debian Linux):
Code: Alles auswählen
#!/bin/bash
date=$(date '+%Y%m%d-%H%M')
cd /data/pooldigital/backupftp
wget -mq --timeout=3 ftp://username:password@192.168.61.35/usr/*
wget -mq --timeout=3 ftp://username:password@192.168.61.35/history/*
wget -mq --timeout=3 ftp://username:password@192.168.61.35/dosage/dosquant.ini
tar --exclude '.listing' -czf pooldigital-$date.tar.gz 192.168.61.35
Und Du musst natürlich wget installieren (https://brewinstall.org/install-wget-on-mac-with-brew/).
Wenn Du auch auf die SD Card schreiben willst, geht das wie gesagt mit lftp (https://brewinstall.org/install-lftp-on-mac-with-brew/).
Ein lftp command in einem script hat diese Syntax:
Code: Alles auswählen
lftp -e "FTP-COMMAND; FTP-COMMAND; FTP-COMMAND" -u username,password 192.168.61.35 -
Viveronese
- Beiträge: 69
- Registriert: 18. Mai 2018, 16:16
Re: Zugriff auf SD-Karte
Man kann natürlich auch mit http und Python basteln. Hier ein simples Python Script, das die Daten der GetState.csv ausliest:
..und das kommt (bei mir) dabei raus:
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Dieses Script liest sich alle 5 Sekunden den aktuellen Status (GetState.csv)
vom PoolDigital Controller und packt diese in ein Python Dictionary
Inhalt der GetState.cxsv
1..5 ADC
6 Redox
7 pH
8..15 Temperature [1..8]
16..23 Relay [1..8]
28..35 External Relay [1..8]
24..27 Digital Input [1..8]
36,39 Cl Rest,Consumption
37,40 pH- Rest,Consumption
38,41 pH+ Rest,Consumption
"""
import requests
import csv
import time
from math import ceil, log10
# IP address or host name of pooldigital controller
controller_host = '192.168.61.35'
# In some topics we might not be interested
ignore_names = ('Time', 'n.a.', '','pH+ Rest', 'pH+ consumption','pH- empty alarm','Cl empty alarm')
def GetPoolData(host):
with requests.Session() as s:
url=f'http://{host}/GetState.csv'
download = s.get(url)
decoded_content = download.content.decode('utf-8')
cr = csv.reader(decoded_content.splitlines(), delimiter=',')
csvdata = list(cr)
# print(csvdata)
poolstatus = {}
for (name, unit, base, delta, n) in zip(*csvdata[1:]):
if name in ignore_names:
continue
base = float(base)
delta = float(delta)
n = int(n)
if unit == '--': # switches
unit = 'manual' if n & 2 else 'auto'
value = n & 1
else:
value = base + n * delta
# format to just the required digits
digits = max(0, ceil(-log10(abs(delta))))
value = f'{value:.{digits}f}'
#print(f'{name!r} {unit} {base} {delta} {n} => {value}')
poolstatus[name] = {'value': value, 'unit': unit}
return(poolstatus)
if __name__ == '__main__':
while True:
status=GetPoolData(controller_host)
print (status)
time.sleep(5) # delay between two request
Code: Alles auswählen
{'Filterdruck 1': {'value': '0.96197', 'unit': 'Bar'}, 'Filterdruck 2': {'value': '0.94068', 'unit': 'Bar'}, 'Freies Chlor': {'value': '1.020510', 'unit': 'ppm'}, 'CPU Temp': {'value': '41.033', 'unit': 'C'}, 'Redox': {'value': '659.06', 'unit': 'mV'}, 'pH': {'value': '7.438', 'unit': 'pH'}, 'Pool Temp': {'value': '14.57', 'unit': 'C'}, 'Air Temp': {'value': '14.19', 'unit': 'C'}, 'pH- Dispenser': {'value': 0, 'unit': 'auto'}, 'Cl Dispenser': {'value': 1, 'unit': 'auto'}, 'Flow Control': {'value': 1, 'unit': 'auto'}, 'Main Switch': {'value': 1, 'unit': 'auto'}, 'Flow Rate': {'value': '17.048', 'unit': 'cm/s'}, 'Cl Rest': {'value': '34.6', 'unit': '%'}, 'pH- Rest': {'value': '87.0', 'unit': '%'}, 'Cl consumption': {'value': '2931', 'unit': 'ml'}, 'pH- consumption': {'value': '672', 'unit': 'ml'}}
-
richard-os
- Beiträge: 21
- Registriert: 6. Januar 2015, 17:06