Grünbeck Enthärtungsanlage softliQ:SC

Leider hier falsch, es liegt daran, dass kein Objekt aus dem XML generiert wird.
Hier kommt nur ein false raus, und damit (Fehlermeldung Property not exists) kann man keinen Float in IPS setzen.
Die Lösung ist in Post 7.
Zusätzlich kann man prüfen ob CURL oder das XML leer ist und dann abbrechen.


$simple = @simplexml_load_string($result);
If ($simple === false)
Return;

Michael

bei mir läuft es so:


<?


 $IP = '192.168.2.71';

 $header[] = "Connection: close";
    $header[] = "Origin: http://" . $IP;
    $header[] = "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36";
    $header[] = "Content-type: application/x-www-form-urlencoded";
    $header[] = "Accept:  */*";
    $header[] = "Referer: http://" . $IP;
    $header[] = "Accept-Encoding: gzip, deflate";
    $header[] = "Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4";


            $ch = curl_init('http://' . $IP . '/mux_http');
            curl_setopt($ch, CURLOPT_HEADER, false);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
            curl_setopt($ch, CURLOPT_FAILONERROR, true);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, 'id=3256&show=D_A_1_1|D_A_1_7|D_A_1_6|D_A_3_1|D_A_1_2|D_A_2_2|D_A_3_1|D_A_3_2|D_Y_1|D_Y_10_1|D_Y_14|D_A_1_3|D_A_2_3|D_Y_5|D_A_2_1~');
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 3000);
            curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
            curl_setopt($ch, CURLOPT_TIMEOUT_MS, 3000);
            $result = curl_exec($ch);
            curl_close($ch);
			//print_r($result); 
$simple = simplexml_load_string($result);
print_r($simple); 


$durchfluss = floatval(str_replace('.', ',', str_replace('"', '', $simple->D_A_1_1)));
setvalue(33508 /*[Program\Grünbeck\Aktueller Durchfluss]*/ , $durchfluss);
$restkapazität = floatval(str_replace('.', ',', str_replace('"', '', $simple->D_A_1_2)));
setvalue(48454 /*[Program\Grünbeck\Restkapazität]*/ , $restkapazität);
$wasserverbrauch = floatval(str_replace('.', ',', str_replace('"', '', $simple->D_Y_1)));
setvalue(33296 /*[Program\Grünbeck\Wasserverbrauch pro Tag]*/ , $wasserverbrauch);
$wartung = intval(str_replace('.', ',', str_replace('"', '', $simple->D_A_2_2)));
setvalue(48517 /*[Program\Grünbeck\Wartung in Tagen]*/ , $wartung);
$Status = floatval(str_replace('.', ',', str_replace('"', '', $simple->D_Y_5)));
setvalue(39186 /*[Program\Grünbeck\Gesamtdurchfluss]*/ , $Status);
$regeneration = (str_replace('.', ',', str_replace('"', '', $simple->D_A_3_1[0])));
setvalue(57713 /*[Program\Grünbeck\Letzte Regeneration]*/ , $regeneration);
$restkapazität = intval(str_replace('.', ',', str_replace('"', '', $simple->D_Y_10_1)));
setvalue(49504 /*[Program\Grünbeck\Restkapazität in %]*/ , $restkapazität);
$vorausregeneration = intval(str_replace('.', ',', str_replace('"', '', $simple->D_Y_14)));
setvalue(23372 /*[Program\Grünbeck\voraus. Regeneration]*/ , $vorausregeneration);


?>

aber manche Werte kommen nur mit - oder 0 zurück, das mit dem geschützen Code &code=? habe ich auch noch nicht verstanden woher man den richtigen Code bekommt, vielleicht bekommt man dann die richtigen werte zurück?

SimpleXMLElement Object
(

 =&gt; ok
    [D_A_1_1] =&gt; 0.00
    [D_A_1_7] =&gt; -
    [D_A_1_6] =&gt; -
    [D_A_3_1] =&gt; Array
        (
            [0] =&gt;   1
            [1] =&gt;   1
        )

    [D_A_1_2] =&gt; 0.35
    [D_A_2_2] =&gt; 362
    [D_A_3_2] =&gt; 91
    [D_Y_1] =&gt; 235
    [D_Y_10_1] =&gt;  99
    [D_Y_14] =&gt; -
    [D_A_1_3] =&gt; 6.0
    [D_A_2_3] =&gt; 99
    [D_Y_5] =&gt; 0
    [D_A_2_1] =&gt; 0.0
)

Super Danke Hab dein Script übernommen und bin aus dem Webserver raus nun scheint es zu funktionieren :slight_smile:
Wenn ich nur alle 1 Minute aktualisiere.

Muss ich nur noch die Variable Profile anpassen :slight_smile:

Danke
Alex

Hallo Alex,

hier mal ein Auszug aus meinem Script:


            curl_setopt($ch, CURLOPT_POSTFIELDS, 'id=356&show=D_C_4_2|D_A_1_7|D_A_2_3|D_A_2_2|D_Y_1_1|D_A_3_2_1|D_Y_5|D_Y_13|D_A_1_1|D_Y_10_1|D_A_3_1|D_A_1_2&code=005~');

$uhrzeitanlage = str_replace('.', ',', str_replace('"', '', $simple->D_C_4_2));	// DC42	string	hh:mm	uhrzeit
setvalue(56143 /*[Spielwiese\Grünbeck SoftIO\Uhrzeit Anlage zur Auslesung]*/ , $uhrzeitanlage);

$gesamtdurchfluss = str_replace('.', ',', str_replace('"', '', $simple->D_A_1_7));	// DA17	double	m3/h	Gesamtdurchfluss der Anlage 
setvalue(41874 /*[Spielwiese\Grünbeck SoftIO\Gesamtdurchfluss]*/, $gesamtdurchfluss);

$salzreichweite = str_replace('.', ',', str_replace('"', '', $simple->D_A_2_3));	// DA23	int		tage	Salzreichweite in Tagen
setvalue(40886 /*[Spielwiese\Grünbeck SoftIO\Salzreichweite (Tage)]*/ , $salzreichweite);

$tagebiswartung = str_replace('.', ',', str_replace('"', '', $simple->D_A_2_2));	// DA22	int		tage	Tage bis zur nächsten Wartung
setvalue(23266 /*[Spielwiese\Grünbeck SoftIO\Tage bis Wartung]*/  , $tagebiswartung);

$wasserbrauchvortag = str_replace('.', ',', str_replace('"', '', $simple->D_Y_1_1));	// DY11	int		l		Wasserverbrauch gestern
setvalue(14366 /*[Spielwiese\Grünbeck SoftIO\Weichwasserverbrauch Vortag]*/  , $wasserbrauchvortag);

$prozletzteregeneration = str_replace('.', ',', str_replace('"', '', $simple->D_A_3_2_1));	// DA321	int		%		Prozentsatz der letzten Regeneration
setvalue(36138 /*[Spielwiese\Grünbeck SoftIO\Letzte Regeneration in %]*/  , $prozletzteregeneration);

$statusregeneration = str_replace('.', ',', str_replace('"', '', $simple->D_Y_5));	// DY5		int		0-5		Aktueller Regenerationsschritt 0= keine Regeneration  1= Soletank füllen  2= Besalzen  3= Verdrängen  4= Rückspülen  5= Erstfiltrat
setvalue(34833 /*[Spielwiese\Grünbeck SoftIO\Status der Regeneration]*/  , $statusregeneration);

if ($statusregeneration == "1") 
{   
setvalue(25176, date(" Y-m-d H:i:s"));
}

$betriebaustauscher = str_replace('.', ',', str_replace('"', '', $simple->D_Y_1_3));	// DY13	int		0-1		Austauscher in Betrieb softliQ:SC  0= Austauscher gestört/in Regeneration 1= Austauscher in Betrieb 	
setvalue(53227 /*[Spielwiese\Grünbeck SoftIO\Status Austauscher]*/  , $betriebaustauscher);

$aktuellerdurchfluss = str_replace('.', ',', str_replace('"', '', $simple->D_A_1_1));	// DA11	double	m³		Aktueller Durchfluss
setvalue(42744 /*[Spielwiese\Grünbeck SoftIO\Aktueller Durchfluss]*/  , $aktuellerdurchfluss);

$restkapazitaetaustauscher = str_replace('.', ',', str_replace('"', '', $simple->D_Y_10_1));	// DY101	Int 	[%] 	Aktuelle Restkapazität Austauscher 1
setvalue(16717 /*[Spielwiese\Grünbeck SoftIO\Restkapzität Austauscher (%)]*/  , $restkapazitaetaustauscher);

$restwassermenegaustauscher = str_replace('.', ',', str_replace('"', '', $simple->D_A_1_2));	// DA12	double	m³*°dH	Restkapazität 
setvalue(56936 /*[Spielwiese\Grünbeck SoftIO\Restkapzität Austauscher (l)]*/  , $restwassermenegaustauscher);

$lastregeneration = str_replace('.', ',', str_replace('"', '', $simple->D_A_3_1)); 
setvalue(43321 /*[Spielwiese\Grünbeck SoftIO\Letzt Regeneration (vor x Stunden)]*/ , $lastregeneration); 
$datelastregeneration = date('Y-m-d H:i:s', strtotime("- $lastregeneration hours")) ;
setvalue(39420 /*[Spielwiese\Grünbeck SoftIO\Letzte Regeneration]*/, $datelastregeneration);

Das Ding ist ein bißchen träge, nach mehrern Anfragen in kurzer Zeit blockt es schon mal. Das Script läuft bei mir jede Minute. Es gibt in der Doku noch ein paar Werte die Interessant sind, aber einen Code benötigen, diesen habe ich noch nicht herausgefunden, arbeite aber noch dran …

Im Script habe ich mal ein bißchen mit der Zeitangabe „Regeneration vor xx Stunden“ gespielt:
Eine Variable wird über den Zeitpunkt der Besalzung gesetzt, eine Anders wird aus dem Stunden zurückgerechnet.

Viel Spaß und schöne Grüße

kea

Hi!

Als dank für dein Script kann ich dir mit dem Code dienen, allerdings weiß ich nicht ob ich ihn hier posten darf, Grünbeck geht da scheinbar sehr sparsam damit um.

Was denkt ihr? Sonst schick mir ne PN!

1 „Gefällt mir“

Welche Codes denn, gibt es noch mehr bzw. aktuelle?
Die Codes sind ja schon im Homematic Forum öffentlich verfügbar. Wenn der Hersteller das nicht wünscht hätte er da ja schon intervenieren können. Auf der anderen Seite was macht es für einen Sinn dem Kunden ein Gerät mit WLAN Schnittstelle zu verkaufen wenn dieser dann nicht nutzen darf?

Den Code oder nennen wir es lieber „Pin-Code“ um in die geschützten Bereiche der Technikerebene der Anlage zu kommen. Ich meine also nicht den Code des Webservers oder PHP-Code :smiley:

Ich habe den Pin auf der Homematic Site nirgends gefunden und PhilippS ja scheinbar auch nicht :rolleyes:

hm leider geht bei mir dein code nicht…schade

Gesendet von meinem SM-G950F mit Tapatalk

Tach Zusammen,

habe mal den Hersteller wegen folgende Problematik angeschrieben.

Zwei Parameter lassen sich nicht abfragen:
DK1 Zähler Regenerationen
DK2 m³ Zähler Weichwassermenge.
Bei beiden erhalte ich immer „Code wrong“, habe schon versucht mit
‚id=3256&show=D_K_1|D_K_2&code=005~‘
den Code aus dem Manual zu übergeben, aber dieses funktioniert auch nicht.

Viele Grüße

Kea

ich dachte ich könnte über den Durchfluss immer ausgeben wieviel wasser beim Duschen verbraucht wurde. Wenn wir Duschen haben wir einen Durchfluss von 0.39 m3/h. Diesen wert nehme ich dann jede Sekunde und Rechne ihn um in Liter pro Sekunde also 0.39m3/h / 3, 6 = Liter pro Sekunde. Dies lasse ich mit einem Scripttimer solange laufen bis Durchfluss wieder sinkt.

jetzt bekomme ich aber bei 7 Minuten nur 8 Liter Wasserbrauch raus bei unserer Regendusche. Das kann ja nicht sein. Hab ich jetzt irgendwie ein rechenfehler oder stimmt der Wert nicht was die Grünbeck ausgibt

Gesendet von meinem SM-G950F mit Tapatalk

0,39m3/h = 390l/h

Der Rest ist Dreisatz

[emoji6]

Gesendet von iPhone mit Tapatalk

0,39 =390liter in der Stunde / 60min = 6,5l/min / 60sec = 0,108 liter in der sekunde

0,39 / 3,6 = 0,108 liter in der sekunde

dann zeigt die grünbeck wohl einen falschen durchfluss an?
könnt ich dies mit irgendeinem anderen grünbeck parameter ausrechnen? der tagesverbrauch von 200-300liter bei uns wird ja au immer richtig angezeigt…

Gesendet von meinem SM-G950F mit Tapatalk

Ich verstehe gerade nicht, was Deine Frage ist.

Bei 7 Min bedeutet das 45,5l Wasserverbrauch. Das erscheint mir ein sehr realistischer Wert zu sein.

Gesendet von iPhone mit Tapatalk

stimmt danke,

dann muss der Fehler irgendwo in meinem Script sein der die Liter in Sekunden falsch rechnet.
Cool danke

Hi,
die Werte aus dem Grünberg betreffen den reinen Weichwasseranteil!
Sofern Du nicht 0° fährst, hast Du auch Durchfluss über das Verschnittventil.
Einfach mal die Wassermenge über den Wasserzähler korrelieren.
VG
kea

Hallo Zusammen,

zuerst einmal vielen Dank für eure Skripte!

Hat schon jemand ein Gerät der neuen softliQ:SD Serie? Bspw. SD18 oder SD23.
Funktioniert diese Auslesemethode auch mit den neuen Modellen?

P.S.: Diese haben übrigens endlich einen LAN-Anschluss. :cool:

Hallo zusammen,

bei mit erscheint sehr oft die Meldung für diese Fehler
kann mir jemand sagen wie ich das beheben kann ?

23.07.2019, 12:51:32 | ScriptEngine | Result for Event 48037
<br />
<b>Notice</b>: Trying to get property ‚D_A_1_1‘ of non-object in <b>/Library/Application Support/Symcon/scripts/19811.ips.php</b> on line <b>37</b><br />
<br />
<b>Warning</b>: Cannot auto-convert value for parameter VariableValue in <b>/Library/Application Support/Symcon/scripts/19811.ips.php</b> on line <b>38</b><br />
<br />
<b>Notice</b>: Trying to get property ‚D_A_1_2‘ of non-object in <b>/Library/Application Support/Symcon/scripts/19811.ips.php</b> on line <b>40</b><br />
<br />
<b>Warning</b>: Cannot auto-convert value for parameter VariableValue in <b>/Library/Application Support/Symcon/scripts/19811.ips.php</b> on line <b>41</b><br />
<br />
<b>Notice</b>: Trying to get property ‚D_Y_1‘ of non-object in <b>/Library/Application Support/Symcon/scripts/19811.ips.php</b> on line <b>43</b><br />
<br />
<b>Warning</b>: Cannot auto-convert value for parameter VariableValue in <b>/Library/Application Support/Symcon/scripts/19811.ips.php</b> on line <b>44</b><br />
<br />
<b>Notice</b>: Trying to get property ‚D_A_2_2‘ of non-object in <b>/Library/Application Support/Symcon/scripts/19811.ips.php</b> on line <b>46</b><br />
<br />
<b>Warning</b>: Cannot auto-convert value for parameter VariableValue in <b>/Library/Application Support/Symcon/scripts/19811.ips.php</b> on line <b>47</b><br />
<br />
<b>Notice</b>: Trying to get property ‚D_A_3_1‘ of non-object in <b>/Library/Application Support/Symcon/scripts/19811.ips.php</b> on line <b>49</b><br />
<br />
<b>Warning</b>: Cannot auto-convert value for parameter VariableValue in <b>/Library/Application Support/Symcon/scripts/19811.ips.php</b> on line <b>50</b><br />
<br />
<b>Notice</b>: Trying to get property ‚D_Y_5‘ of non-object in <b>/Library/Application Support/Symcon/scripts/19811.ips.php</b> on line <b>52</b><br />
<br />
<b>Warning</b>: Cannot auto-convert value for parameter VariableValue in <b>/Library/Application Support/Symcon/scripts/19811.ips.php</b> on line <b>53</b><br />

Falsches Format und/oder keine Werte vorhanden.

Gesendet von meinem LYA-L29 mit Tapatalk

Ok danke, es kommen aber Wert zu den Variablen, wie kann man das im Script anpassen das die Werte geprüft werden damit das Format passt oder welche vorhanden sind ?

Die Werte die die Abfrage liefert sind alle im Format String.
Sind deine Variablen alle vom Typ String?

String in Integer Variable schreiben:

intval($value)

oder

(int)$value

String in Float Variable schreiben:

floatval($value)[/CODE
oder

(float)$value



Hat bei mir zumindest die Fehlermeldungen abgestellt.

Gruß
Manfred

Gesendet von meinem LYA-L29 mit Tapatalk