Wetterstation TFA Nexus in IPS einbinden?

Hallo
Habe die Wetterstion und IPS 2.4 vor kurzem erworben.
Da ich sonst noch keine Hardware gekauft habe, würde gern mal mit der Wetterstation anfangen, die über USB angeschlossen ist, was sich aber in bald in USB > Lan Adapter änder soll.
Vielleicht ist das schon zu hoch gegriffen, da ich Anfänger bin, sehen wir dann.
Habe viel gelesen im Forum, aber ich komme nicht so recht weiter.
Die Nexus legt eine Datenbank mit dem Namen NexusOrg.dbf an.
Im Anhang könnt Ihr die Daten sehen die dort enthalten sind. Dann habe ich diese Datenbank mal in CSV konvertiert, was ich hier im Forum mal gelesen habe.
Aber nun geht es ja darum eine Scriptdatei zu erstellen, die diese dbf oder csv einliest, und darstellt.
Da stehe ich nun ohne PHP Kenntnisse auf dem Schlauch. Konnte auch kein Script finden welches ich vielleicht abändern oder nacharbeiten könnte. Damit würde ich dann auch PHP besser verstehen lernen.

Vielleicht kann mir jemand Tips geben?

Gruss

hab ich aus irgend einem Beitrag hier im Forum für meine Zwecke umgeschrieben. Muss sicher erklärt werden, würde ich aber fragenspezifisch machen.

Das Script improtiert eine WSWIN.csv-Datei. Wenn der letzte WSWIN-Datensatz älter als xx Minuten ist geht das >script davon aus das der „Wetterserver (Name: Ba-Al)“ und/oder WSWIN nicht online sind und startet Fehlerbehandlungsroutinen (Rechner aufwecken/neustarten). Das kannst Du ja erstmal weglassen.

Dann startet der Datenimport. fertig;)


<?
#################### Konfig ####################################################
$TS_Datum = 47237 /*[rs.loc Wetterdaten\Timestamp\aktualisiert am]*/;
$TS_Uhrzeit = 49552 /*[rs.loc Wetterdaten\Timestamp\aktualisiert um]*/;
$Temp_innen = 51692 /*[rs.loc Wetterdaten\Wohnzimmer\°C]*/;
$Temp_aussen = 49472 /*[rs.loc Wetterdaten\Außen\Balkon °C ]*/;
$Temp_Schlafzimmer = 58434 /*[rs.loc Wetterdaten\Kühlschrank\°C]*/;
$Temp_Serverraum = 55318 /*[rs.loc Wetterdaten\Serverraum Server Zuluft\Zuluft °C]*/;
$Temp_Arbeitszimmer = 32419 /*[rs.loc Wetterdaten\Arbeitszimmer\°C]*/;
$Temp_ = 33599 /*[rs.loc Wetterdaten\Serverraum Server Abluft CH 05\°C]*/;
$Hum_innen = 47623 /*[rs.loc Wetterdaten\Wohnzimmer\rel. Feuchte]*/;
$Hum_aussen = 21424 /*[rs.loc Wetterdaten\Außen\rel. Feuchte]*/;
$Hum_Schlafzimmer = 41712 /*[rs.loc Wetterdaten\Kühlschrank\rel. Feuchte]*/;
$Hum_Serverraum = 56696 /*[rs.loc Wetterdaten\Serverraum Server Zuluft\rel. Feuchte]*/;
$Hum_Arbeitszimmer = 53459 /*[rs.loc Wetterdaten\Arbeitszimmer\rel. Feuchte]*/;
$Hum_ = 39796 /*[rs.loc Wetterdaten\Serverraum Server Abluft CH 05\Feuchte]*/;
$AirPressure = 57492 /*[rs.loc Wetterdaten\Außen\Luftdruck]*/;
$UVI = 53937 /*[rs.loc Wetterdaten\Außen\UVI]*/;
$file = file_get_contents('S:\S\WsWIN\ws_newdata.csv'); // gesamte Datei in einen String einlesen
$uhrzeit = date("Hi");
$uhrzeit_m = date("H:i");
$warn = 20; // Schwellwert für Warnungen in Minuten
$alert = 40; // Schwellwert für Alarm in Minuten
$ba_al = "192.168.0.3";
$ba_al_status = getvalueBoolean(15456 /*[IPS Maintenance\Infrastruktur\Geräte-Status\Ping 15s\LAN Watch\Ba-AL]*/);
$ba_al_lreboot = 48019 /*[rs.loc Wetterdaten\WsWIN Import\Ba-AL last reboot]*/;
$JtHutt = '192.168.0.1';
$MePo = '192.168.0.2';
$anwesenheitsmodus = 55650 /*[Haussteuerung\Security\Anwesenheitsmodus\Anwesenheitsmodus]*/;
$sendmail = 56608 /*[Messaging\E-Mail senden (SMTP) mail@gmx.de]*/;
$snarlport = 1886;
$timer_id = 13130 /*[rs.loc Wetterdaten\WsWIN Import\]*/;
$restart = 39596 /*[Haussteuerung\Diele\Hermes WFE\Hermes restart via EG]*/;

#################### Konfig Ende ###############################################

// Rohdatenimport
$lines = explode("
", $file);      // String in Zeilen zerlegen und in ein Array schreiben
$lastentry = $lines[count($lines)-2]; // letzte Zeile extrahieren
$data = explode(",", $lastentry);     // Daten in ein Array schreiben

// Ermittlung Delta Timestamp des letzten WSWIN-Datensatzes und aktueller Uhrzeit für Fehlerbehandlung
$ts_wswin = (substr((substr($data[1],0)), 0,2).substr((substr($data[1],0)), 3,2)); //letzter WSWIN-Timestamp in Integer umwandeln
$ts_delta = $uhrzeit - $ts_wswin; // Delta zwischen aktueller Uhrzeit und Timestamp WSWIN ermitteln

// Fehlerbehandlung/Datensätze in IPS importieren
if ($ba_al_status == false) // startet Ba-AL per WoL wenn Ba-Al nicht online
{
	//IPS_Runscript($wol); // Ba-Al aufwecken
	SMTP_SendMail($sendmail, "IPS WsWin Alert", "Ba-AL ist um ".$uhrzeit_m." Uhr nicht online, Abweichung $ts_delta Minuten");
	@Snarl_ShowMessage($JtHutt, $snarlport, "IPS WsWin Alert", "Ba-AL ist um $uhrzeit_m Uhr nicht online, Abweichung $ts_delta Minuten", 120);
	@Snarl_ShowMessage($MePo, $snarlport, "IPS WsWin Alert", "Ba-AL ist um ".$uhrzeit_m." Uhr nicht online, Abweichung $ts_delta Minuten", 20);
	setValue(48019 /*[rs.loc Wetterdaten\WsWIN Import\Ba-AL last reboot]*/, date("d.m.y H:i"));
}
elseif (($ts_delta > $warn) && ($ts_delta < 40) && ($ba_al_status == true))// Fehlerbehandlung Ba-AL, startet  PC bei zu grossem Delta Timestamp neu
{
	//$Result = TT_RunFile($ba_al, "C:\Windows\System32\shutdown.exe", "-r -f -t 10"); // reboot Ba-AL
	IPS_Runscript($restart); // reboot Hermes
	// Messaging
	SMTP_SendMail($sendmail, "IPS WsWin Warnung", "der Timestamp des letzten WsWin-Datensatzes sind um $uhrzeit_m Uhr nicht mehr aktuell, Abweichung $ts_delta Minuten, Ba-Al wird neu gestartet");
	@Snarl_ShowMessage($JtHutt, $snarlport, "IPS WsWin Warnung", "der Timestamp des letzten WsWin-Datensatzes sind um ".$uhrzeit_m." Uhr nicht mehr aktuell, Abweichung $ts_delta Minuten, Ba-Al wird neu gestartet", 120);
	@Snarl_ShowMessage($MePo, $snarlport, "IPS WsWin Warnung", "der Timestamp des letzten WsWin-Datensatzes sind um $uhrzeit_m Uhr nicht mehr aktuell, Abweichung $ts_delta Minuten, Ba-Al wird neu gestartet", 20);
	setValue(48019 /*[rs.loc Wetterdaten\WsWIN Import\Ba-AL last reboot]*/, date("d.m.y H:i"));
	IPS_SetEventCyclic($timer_id, 2, 1, 0, 0, 2, 10);
}

elseif (($ts_delta > $warn) && ($ts_delta >= 52) && ($ba_al_status == true))// Fehlerbehandlung erfolglos, Timer wird auf 60 Minuten gesetzt (nur zur Info)
{
	// Messaging
	SMTP_SendMail($sendmail, "IPS WsWin Fehler", "Fehlerbehandlung erfolglos, Abweichung $ts_delta Minute, Ba-Al wird neu gestartet");
	@Snarl_ShowMessage($JtHutt, $snarlport, "IPS WsWin Fehler", "Fehlerbehandlung erfolglos, Abweichung $ts_delta Minuten", 120);
	@Snarl_ShowMessage($MePo, $snarlport, "IPS WsWin Fehler", "Fehlerbehandlung erfolglos, Abweichung $ts_delta Minuten", 20);
	IPS_SetEventCyclic($timer_id, 2, 1, 0, 0, 2, 60);
}

else
{
	// Werte selektieren und in die Variablen schreiben
	SetValueString($TS_Datum,substr($data[0],0));
	SetValueString($TS_Uhrzeit,substr($data[1],0));
	SetValueFloat($Temp_innen,doubleval(str_replace(',','.',trim(substr($data[2],0)))));
	SetValueFloat($Temp_aussen,doubleval(str_replace(',','.',trim(substr($data[3],0)))));
	SetValueFloat($Temp_Schlafzimmer,doubleval(str_replace(',','.',trim(substr($data[4],0)))));
	SetValueFloat($Temp_Serverraum,doubleval(str_replace(',','.',trim(substr($data[5],0)))));
	SetValueFloat($Temp_Arbeitszimmer,doubleval(str_replace(',','.',trim(substr($data[6],0)))));
	SetValueFloat($Temp_,doubleval(str_replace(',','.',trim(substr($data[7],0)))));
	SetValueFloat($Hum_innen,doubleval(str_replace(',','.',trim(substr($data[12],0)))));
	SetValueFloat($Hum_aussen,doubleval(str_replace(',','.',trim(substr($data[13],0)))));
	SetValueFloat($Hum_Schlafzimmer,doubleval(str_replace(',','.',trim(substr($data[14],0)))));
	SetValueFloat($Hum_Serverraum,doubleval(str_replace(',','.',trim(substr($data[15],0)))));
	SetValueFloat($Hum_Arbeitszimmer,doubleval(str_replace(',','.',trim(substr($data[16],0)))));
	SetValueFloat($Hum_,doubleval(str_replace(',','.',trim(substr($data[17],0)))));
	SetValueFloat($AirPressure,doubleval(str_replace(',','.',trim(substr($data[18],0)))));
	SetValueFloat($UVI,doubleval(str_replace(',','.',trim(substr($data[22],0)))));
	IPS_SetEventCyclic($timer_id, 2, 1, 0, 0, 2, 5);
}

?>

Danke für die schnelle Antwort.:slight_smile:
Nun wird es losgehen mit den Fargen:confused:

Wie Du in meinem Anhang in der CSV Datei siehst fehlt dort die Überschrift der einzelnen Spalten aus der DBF Datei, ist das ein Nachteil?.

In der DBF Datei Spalte 1 steht die Überschrift (DATE_TIME,N,18,9) und der
erste Wert 40732,709027778, wie wandele ich den in ein aktuelles Datum um?

echo date("H:i:s", "40733.042361111");

nein, das Script zieht sich immer den letzten Datensatz aus dem csv. Es ist ihm auch egal, in welcher Reihenfolge die datensätze abgelegt sind: die Reihenfolge definierst du hier:

SetValueFloat($Temp_innen,doubleval(str_replace(’,’,’.’,trim(substr($data[2],0)))));

wobei $data[2] quasi die Spalte beschreibt. Du mußt also die Spalte manuell einer Variable zuordnen.

=> Rainer war schneller;)

Da ich die CSV Datei selber erzeugt habe um zu sehen was drin steht, müßte ich nun immer erst eine CSV erzeugen, damit das Script arbeiten kann.
Ist es auch möglich die DBF mit dem sript zu verwenden, wenn ich den
Pfad
$file = file_get_contents('C:\TFA_Nexus\Data\NexusORG.dbf
ändere?

Hallo
Habe nun seit dem Sommer IP-Symcon 2.4 Prof. und bin mit der Software als solches zufrieden.

Konnte bisher das Webfront nutzen und probieren und viel im Forum lesen.
Die Doku habe ich mir ausgedruck um mich besser einlesen zu können.

Mir fehlen aber leider immer noch so manche Zusammenhänge, die ich nicht verstehe.
Die Hilfe vom Forum ist sehr gut in der Schnelligkeit der Antworten, aber manchmal für einen Anfänger nicht immer hilfreich.

Hardware habe ich so gut wie noch nicht gekauft, da ich erst mehr verstehen möchte, damit ich nicht die falsche Hardware kaufe, wie vielleicht die Wetterstation Nexus von TFA.

Diese wollte ich gern mit IPS auswerten, im folgenden Link
[URL=„http://www.ip-symcon.de/forum/f25/wetterstation-.tfa-nexus-ip-symcon-einbinden-15623/“]

habe ich danach gefragt und auch Antworten erhalten, aber mit diesen habe ich so meine Probleme.

Würde gern nun zum auslesen der NexusOrg.dbf in IP-Symcon eine Anleitung bekommen, wie die Vorgehensweise sein muß.

In dieser NexusOrg.dbf gibt es eine Spalte mit (CHN0_DEG,N,5,1) das ist die
Raumtemperatur. Vielleicht kann mir jemand die Schritte angeben die Nötig sind um im Webfront einen Wert angezeigt zu bekommen.

Was in PHP dann nötig ist muß ich mir dann selber erlesen und anlernen.

Gruß

Was fehlt denn an dem Beispiel von Racketenschnecke, ist doch alles dabei was Du verwenden könntest.

Da es immer noch um die Wetterstation geht, häng ich es an den Thread an!

Der Titel sagt doch eigentlich alles oder?
Außerdem wäre mir lieber gewesen, dass dieses Thema nicht veschoben worden wäre!
Mein Problem ist, womit fange ich?

(In dieser NexusOrg.dbf gibt es eine Spalte mit (CHN0_DEG,N,5,1) das ist die
Raumtemperatur. Vielleicht kann mir jemand die Schritte angeben die Nötig sind um im Webfront einen Wert angezeigt zu bekommen.)

A) Instanz erstellen.
B) Variable CHN0_DEG,N,5,1 erstellen.
C) PHP Script erstellen mit Datenbank einlesen.
D) ?

Du brauchst aber keine 2 oder 3 Threads für das selbe Problem.

Les doch erstmal die Daten in IPS ein, dann sehen wir weiter wie wir das in eine Variable bekommen.

Was kommt denn hierbei raus.

$file = file_get_contents('C:\TFA_Nexus\Data\NexusORG.dbf');
print_r($file);

oder

$file = file('C:\TFA_Nexus\Data\NexusORG.dbf');
print_r($file);

Hallo Rainer

Danke für die zwei Vorschläge

Im Anhang siehst Du das Ergebniss.
Das dritte Bild wird ausgegeben, wenn ich die .dbf in .csv umwandel

Das sieht doch schonmal nicht schlecht aus.

So als nächstes das mal testen.

$file = file('C:\TFA_Nexus\Data\NexusORG.dbf');
print_r($file);
$data = explode(" ", $file[2]);
print_r($data); 

Es wird ein Array bis Wert
[172392] =>
[172393] => 303.31.12340600
)
angelegt. Es steht nicht immer was drin.
Siehe Bild

OK, das sind alle Werte. Ich denke, dich interressieren nur die letzten aktuellen Werte. Stehen diese in der ersten oder letzten Zeile ?

In der letzten.

testen.

$file = file('C:\TFA_Nexus\Data\NexusORG.dbf');
print_r($file);
$lastentry = $file[count($file)-1]; // letzte Zeile extrahieren
$data = explode(" ", trim($lastentry)); // Daten in ein Array schreiben

print_r($data);

Sieht gleich aus wie

$file = file(‚C:\TFA_Nexus\Data\NexusORG.dbf‘);
print_r($file);
$data = explode(" ", $file[2]);
print_r($data);

Probier das mal, ob da irgendwo ein Zeilenumbruch drinnen steht. Da die Daten nicht bei mir sind, ist das alles Raterrei.

$data = explode("
", $lastentry); // Daten in ein Array schreiben 

Im Anhang habe ich den Versuch wegen dem Zeilenumbruch angehängt.
Außerdem nochmal die NexusOrg.dbf damit Du sehen kannst wie diese
aufgebaut ist.

Kannst Du mir die Original dbf Datei mal schicken. Zur Not zippen, wenn es immer noch zu groß ist geb ich dir meine Mailadresse.