MessPC Ethernetbox in IP-Symcon einbinden

Moin, Moin und gruß aus dem Norden!

Ich bin auf der Suche nach einer Möglichkeit einen Mess-PC in IP-Symcon einzubinden. Abgefragt werden soll ein Wassersensor, ein Temperaturfühler sowie ein Temp/Luftfeuchtefühler. Im Grunde sollte dieses Gerät ja ähnlich den Produkten von ALLNET sein!? Leider habe ich keine Ahnung wie ich das ganze einbinden kann und soll. Bisher habe ich die entsprechenden Werte immer mit Nagios abgefragt und ausgewertet (via snmp).

Hat jemand nen Tipp für mcih wie ich das ganze mit Symcon zum laufen bekomme?

Danke und Gruß aus Hamburg!

Öhm - schon mal auf deren Webseite geschaut?

Temperatur messen mit PHP Script oder Perl

Ganz interessant das Teil :slight_smile:

So sollte es funktionieren … Link:

(eine Umsetzung in PHP, die Messwerte über das Netz ausliest und auch Dampfdruck, Sättigungsdruck und absolute Feuchte berechnet, finden sie hier)

Kurzer Blick auf die Homepage… Diese URL könnte dir Daten in XML liefern.


http://adresse/pcmeasure.xml

Wenn das klappt, kannst du dir ja mal die PHP Doku zu XML anschauen. Wird der einfachste Weg sein :slight_smile:

paresy

Ahhh,- OK,-

Ich hab jetzt einfach mal zum Beispiel die Luftfeuchte eingebunden. Allerdings bekomme ich diesen Wert nicht direkt angezeigt sondern erst wenn ich auf das „Enter“-Symbol im Frontend klicke. Wie kann ich denn den Wert direkt anzeigen lassen?

Ich habe folgendes Script genommen und entsprechend den PHP-gegebenheiten angepasst da es im Original einige Fehler hatte:

<?php
//Abfrage der MessPC Software oder Ethernetbox mit PHP
//Hier IP-Adresse eintragen
$ip = '192.168.0.199';
$port = 4000;  //Standard-Port fuer MessPC Netzwerk-Server

//Verbindung herstellen
$sock = fsockopen($ip, $port, &$errno, &$errstr, 5);

// Wert fuer COM1,Port1 abfragen (entspricht Port 1 an Ethernetbox)
fwrite ($sock, "pcmeasure.com2.2
");
$answer = fread($sock, 2096);
fclose ($sock);

//Einzelwert 'value=' auslesen
$buffer = explode(';', $answer);   //$answer parsen, Trennzeichen ";"

for ($i =0;$i < count($buffer);$i++) {
   if (preg_match("/value=/",$buffer[$i])){
     $value = substr($buffer[$i],6); //hier ist der Wert
     }
   }

// Anzeige formatieren
echo('<BR><BR>');
echo('<font face="Arial" size="+4" color="#FF0000">');
echo('<br>Luftfeuchte: '.$value).' %';
echo('</font>');
?>

Und warum schreibst Du den Wert nicht in eine Variable und zeigst die im Webfront an?

Kommando zurück + Frage: Welchen Frontend meinst Du?

Ich meine dieses:

Leg dir mal eine „extra“ Float-Variable in dieser Kategorie an und ersetze den Abschnitt (HTML-Code, den du nicht brauchst)

// Anzeige formatieren
echo('<BR><BR>');
echo('<font face="Arial" size="+4" color="#FF0000">');
echo('<br>Luftfeuchte: '.$value).' %';
echo('</font>'); 

durch:


// Variable schreiben
SetValueFloat(ID deiner neuen Float-Variable, $value);

Die Scripte kannst du verstecken.

Mit dem auslösen des Skriptes hat der Webfront den Wert über den ECHO-Befehl ausgeworfen. Das macht natürlich keinen Sinn. Mach es wie von Nancilla beschrieben und lege ein zyklisches Ergeignis hinter das Skipt welches den Wert z.b. alle 5 Minuten aktualisiert.

Sorry, nochmal kurz zurück… er will ja die Luftfeuchte (ganzzahlig in %)… dann…
IntegerVariable anlegen und

// Variable schreiben
SetValueInteger(ID deiner neuen Integer-Variable, $value);

… und noch vergessen, entsprechendes Profil für’s Webfront wählen. In dem Fall (Standardprofil) „~Humidity“, sonst wird nichts angezeigt.

Erst mal danke für die Antworten…

ich habe jetzt entsprechend folgende Änderungen vorgenommen:

<?php
//Abfrage der MessPC Software oder Ethernetbox mit PHP
//Hier IP-Adresse eintragen
$ip = '192.168.0.199';
$port = 4000;  //Standard-Port fuer MessPC Netzwerk-Server

//Verbindung herstellen
$sock = fsockopen($ip, $port, &$errno, &$errstr, 5);

// Wert fuer COM1,Port1 abfragen (entspricht Port 1 an Ethernetbox)
fwrite ($sock, "pcmeasure.com2.2
");
$answer = fread($sock, 2096);
fclose ($sock);

//Einzelwert 'value=' auslesen
$buffer = explode(';', $answer);   //$answer parsen, Trennzeichen ";"

for ($i =0;$i < count($buffer);$i++) {
   if (preg_match("/value=/",$buffer[$i])){
     $value = substr($buffer[$i],6); //hier ist der Wert
     }
   }
// Variable schreiben
SetValueFloat(41099, $value);
?>

aber wenn ich das Script ausführe dann erhalte ich nur folgenden Fehler:

Warning:  Wrong parameter type for setvaluefloat() in [Küche\Luftfeute] on line 24

Ich hatte auch eine neue Variable vom Typ Float angelegt und dann diese ID entsprechend im Script eingetragen aber ausser Fehler bekomme ich nichts angezeigt.

Ich kapiere das ganze so gar nicht.-

Wie erstelle ich eine „extra“-Float Variable richtig? Ich habe über

Objekt hinzufügen-> Variable hinzufügen → Typ Float

folgendes eingestellt:

…trotz dem die Fehlermeldung

_______________ E D I T _______________________

Also jetzt bastel ich hier schon seid stunden rum,- habe das ganze Forum durchforstet und die Doku und komme einfach nicht weiter. Egal was ich mache es kommt immer der Fehler:

Warning:  Wrong parameter type for setvaluefloat() in [Küche\Luftfeute] on line 24

Mir fehlt hier völlig die Logik… ich meine der Fehler muss ja kommen denn setvaluefloat ist ja an keiner Stelle im Script definiert,- ich finde aber auch kein vergleichbares Beispiel

Die Frage ist ob der gelieferte Wert ein Float-Wert ist. Eventuell ein Punkt/Komma-Problem?

Ahhhhhh,- da kommen wir der Sache doch schon mal näher… ich habe jetzt mal nur

SetValue(14989, $value);

eingetragen und da scheint es zu funktionieren. Allerdings nur wenn ich die Variable als String anlege und dann geht der Wert im Frontend zu editieren und ist auch nicht so brickelnd.

Probiere doch mal den Wert in ein Float-Wert zu zwingen:

// Variable schreiben
SetValueFloat(41099, floatval($value));

Probier es doch nochmal mit einer FLOAT-Variable und folgenden Code in deinem Skript.

// Variable schreiben
SetValueFloat(41099, (float)$value);

Hiermit sollte der String-Wert in einen Float-Wert beim Schreiben der Var konvertiert werden.

Auch zu finden in der PHP-Doku unter Type Casting

Leider klappt das auch nicht:

Ich hbae beide Varianten ausprobiert

Bist du dir sicher, dass die 14989 auch Float ist? Eigentlich ist das Kommando so korrekt.

Kann es sein das der Wert im String mit einem (Komma) versehen ist.

Float brauch einen (Punkt).