PH-803W Wassersensor mit WLAN

Hallo Anti, ich lese schon seit ein paar Tagen irgendwas von einem Adapter, den man wo installieren muss. Ich verstehe das leider „noch“ nicht so ganz: Was muss ich da genau machen und wie komme ich dann an die Daten?
Die Logo kann auch seriellen Daten einlesen.
Magst du mir das mal erklären, wie du das machst?

mfg

PH-803W aufschrauben, da findet sich dann ein ESP drin. Bei dem GND und RX anzapfen (gibt auch beschriftete Lötpunkte auf der Hauptplatine in der nähe). Das wars schon. Liegt ein serielles signal an (auf 3,3V level) 9600 8 n 1 → Das kannste nach bekanntem Schema zerlegen (da kommt genau das gleiche wie bei IP umleiten). Steht aber auch ioBroker Forum. Na gut da steht auch ne Menge uninteressantes Zeug. Schau halt mal nach meinen Beiträgen die sind zumindest in der nähe der wichtigen Sachen.

Nur ein serielles Kabel dran und schon kommen die Daten?
Ohne Programmierung und MQTT-Server?

Ich werd’s testen
mfg

Naja kein Klartext. Binary, aber Aufbereitung wie oben. Also in PHP sähe es so aus, bei deiner Logo musst natürlich selber schauen, wie das geht.

Ich hab hier bei meinem ESP zufällig heute nochmal geschaut da hatt ich noch einen Widerstand (habs nicht nachgemessen wird irgendwie 5-10 KO sein, ein Pull UP halt) gegen VCC gelegt. Weil ich nur Masse und RX aus dem 803W hab ist das ja wie soon OC Ausgang.

Die Daten kommen am Terminal an.
Jetzt muss ich mal sehen, wie das mit der Logo klappt.

mfg

Versuche gerade über den Comport die Daten auszulesen:
Hier reichen aber meine ProgrammierKenntnisse nicht aus. Kannst du mir sagen, was ich da genau machen Muss?

<?php
$rohdaten = RegVar_GetBuffer (38539);
$rohdaten_aufbereitet = bin2hex ( $rohdaten );
 
$redox =  (hexdec (substr ($rohdaten_aufbereitet, 24,2)) *256 + hexdec (substr ($rohdaten_aufbereitet, 26,2)) ) - 2000;
$ph    =  (hexdec (substr ($rohdaten_aufbereitet, 20,2)) *256 + hexdec (substr ($rohdaten_aufbereitet, 22,2)) ) / 100;
 
SetValue (36931, $ph);
SetValue (50736, $redox);
?>

Ph803

Wenn du in $rohdaten was bekommst, sollte das passen. Denke ich. Laut @Anti sollen über den Serialport ja die selben Daten kommen, wie vom Netz. Sonst passt dein Code ab der Zeile $rohdaten_aufbereitet… . Du brauchst halt noch zwei Variablen für den PH und den Redox Wert. Das wars dann eigentlich schon.

Bin mir nicht sicher, ob das mit dem Befehl
RegVar_GetBuffer so passt.
Sind ph und redox „String-variablen“?

Aso, das weiß ich leider nicht.

Sind Float. Also die Zielvariablen in IPS.

Ich hab lange nicht mehr IPS programmiert aber in meinem RegVarScript für meinen Stromzähler steht:

$data = $IPS_VALUE;

Mit Buffern geht imho aber auch irgendwas. Aber aktuell nicht so im Thema, da können andere sicher besser weiterhelfen.

Rohdaten kommen im Debugger an.
Da passt was nicht mit dem RegVar_GetBuffer und der Übergabe an „rohdaten“.
Daten

Vllt. hat noch jemand einen Tipp zum Auslesen der RegisterVariablen?

Ich denke @paresy kann da sicher weiterhelfen.

Komme da nicht mehr weiter.
Im Debugger kommen die Daten an, aber warum sehe ich
diese nicht in
SetValue(45137, $data);
Wäre schön, wenn jemand helfen könnte.

<?php
// wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist
if ($_IPS['SENDER'] == "RegisterVariable") {
    // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
    $data  = RegVar_GetBuffer($_IPS['INSTANCE']);
    // neu empfangene Daten an $data anhängen
    $data .= $_IPS['VALUE'];
    SetValue (45137, $data);

$rohdaten_aufbereitet = bin2hex ($data);

$redox =  (hexdec (substr ($rohdaten_aufbereitet, 24,2)) *256 + hexdec (substr ($rohdaten_aufbereitet, 26,2)) ) - 2000;
$ph    =  (hexdec (substr ($rohdaten_aufbereitet, 20,2)) *256 + hexdec (substr ($rohdaten_aufbereitet, 22,2)) ) / 100;

SetValue (46218, $ph);
SetValue (44974, $redox);
}
//RegVar_SetBuffer(xxxxx, „“);

?>

Daten kommen jetzt als rohdaten an.
Die Umwandluch in dezimal funktioniert wphl nicht.

<?php
// wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist
if ($_IPS['SENDER'] == "RegisterVariable") {
    // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
    $data  = RegVar_GetBuffer($_IPS['INSTANCE']);
    // neu empfangene Daten an $data anhängen
    $data .= $_IPS['VALUE'];
    SetValuestring (12903, $data);
     
   #   SetValuefloat (45137, $data);

$rohdaten_aufbereitet = bin2hex ($data);

$redox_str =  (hexdec (substr ($rohdaten_aufbereitet, 24,2)) *256 + hexdec (substr ($rohdaten_aufbereitet, 26,2)) ) - 2000;
$ph_str   =  (hexdec (substr ($rohdaten_aufbereitet, 20,2)) *256 + hexdec (substr ($rohdaten_aufbereitet, 22,2)) ) / 100;

#SetValue (46218, $ph);
#SetValue (44974, $redox);
SetValuestring (36426, $ph_str);
SetValuestring (15014, $redox_str);
SetValuestring (19637, $rohdaten_aufbereitet);
#RegVar_SetBuffer(xxxxx, „“);
}
return;
?>

$redox = (hexdec (substr ($rohdaten_aufbereitet, 24,2)) *256 + hexdec (substr ($rohdaten_aufbereitet, 26,2)) ) - 2000;
$ph   =  (hexdec (substr ($rohdaten_aufbereitet, 20,2)) *256 + hexdec (substr ($rohdaten_aufbereitet, 22,2)) ) / 100;

SetValue (42184, $ph);
SetValue (12137, $redox);

kann mir jemand erklären, was hier genau passiert?
Die Daten bleiben immer 0 und -2000, obwohl sich die Rohdaten ändern.

mfg

Also zumindest die Rohdaten sind ja auch kein Float. Die aufbereiteten Rohdaten in String macht fürs Debug Sinn. Sieht mir nicht so aus als wenn das überhaupt 24 Stellen sind. D.h. vermutlich wird da noch was abgeschnitten, sind wir wieder bei der Buffer Geschichte.
Ich hab in meinem Arduino Script drin:
if (x == 19) { // Korrekte Telegramm länge
Im Php Fall ist ein Wert aber zwei Stellig (Hex) → der String sollte 38 Zeichen lang sein.

Hi,
danke für die vielen Infos! Klingt super :slight_smile:
Wie hast du die Sonden in deinen Poolkreiskauf eingebaut?

LG,
Peter

Hallo zusammen,
ich muss das ganze hier nochmal aufwärmen weil es bei mir gerade passt. PH-803w ist verbaut und funkt im normalen Wlan.
Nach dem ich ihn neben dem Pool in meinem Beton Raum verbaut habe bekommt er leider kein wlan mehr. Mag am mageren Wlan des PH 803 liegen oder auch an den dicken Betonwänden.
Ich würde gerne eine Mikrotik Accsess Point aufbauen der mir die externen Abfragen abfängt und auf dem Mqtt Server (Raspberry) umleitet. Am IPS würde ich dann die Daten vom MQTT bekommen, auswerten und ggf die Dosierpumpen steuern. (Dauerlauf verhindern, sowie abschalten bei Filterpumpen Stop)
Hat jemand so etwas schon realisiert ?
Wertet der Mqtt die Anfragen einfach so aus oder muss noch etwas in der Umleitung mitgegeben werden?
Lg Daniel

Hat das ganze schon mal jemand mit dem Nachfolger W2839 probiert? Den hab ich in meiner Smart Life App aber hätte schon sehr gerne ph und Chlor Werte in IP Symcon…

Wenn IP Symcon schon auf einem PI läuft, kann ich dann diesen MQTT Server auch auf dem selben PI installieren und starten? Den brauche ich doch, weil es noch kein Modul gibt, richtig?