Grünbeck Enthärtungsanlage softliQ:SD

du kannst Dich bei Grünberg ans Marketing wendend bekommst dann auch Bilder.

Hi, habe ich bereits leider ohne erfolg.

Ich meine du hast mich falsch verstanden. Schau mal hier diese linie meine ich.

Moin Moin ,

ist das Modul noch zu haben oder habt ihr das am ende über den ioBroker gemacht ?

Grüße aus Magdeburg

Also ich hab’s via ioBroker <-> MQTT <-> Symcon recht stabil am laufen.
Aufgrund der Cloudthematik aktuell m.E. die einzige funktionierende Variante.

Grünbeck hat sich bzgl. der Offenlegung oder Zugriffsmöglichkeiten auf deren MQTT Stack im Gerät leider nicht mehr weiter geäußert. Meines Wissens nach verwendet Grünbeck das für die Cloudkommunikation. D.h. prinzipiell wäre es ein leichtes, das auch für den Enduser verwendbar zu machen. Aber dann bräuchte man ja ggf. die Herstellercloud nicht mehr…

Aktuelle Antwort von heute zur offenen Schnittstelle:

Hiermit informieren wir Sie zum aktuellen Stand hinsichtlich einer möglichen Zusatzfunktion einer offenen MQTT/KNX Schnittstelle.

Aufgrund der aktuellen Marktsituation und den damit verbundenen Ressourcen sehen wir uns leider gezwungen, das Vorhaben auf unbestimmte Zeit zu verschieben.
Ob und wann wir weitere Entwicklungsaktivitäten hinsichtlich einer offenen Schnittstelle fokussieren, können wir zum aktuellen Stand leider nicht sagen.

Hierfür bitten wir vielmals um Verständnis.
Technischer Support für Produkte und Systeme

1 „Gefällt mir“

Es ist mir nun gelungen mittels Claude die javascript Implementierung in eine PHP Klasse zu konvertieren. Bei mir funktioniert die Klasse mit einer softliq:SD21 problemlos. Leider fehlt mir Zeit/Know-How das in ein Modul zu konvertieren. Ihr findet den code auf Github
Credits an den originalen Autor und Antropic.
BG Hoep

1 „Gefällt mir“

Hallo,

habe gerade nochmal geschaut. Wir haben eine softliq:SC18. Deshalb hab ich mein post gelöscht.

Kevin

Hallo Hoep,

könntest du mal erklären wie du diese Scripte dzt. einsetzt und wie das genau bei dir aussieht.

danke+lg
hagi

Hallo Hagi01, anbei mein Skript:

<?php
require_once 'PHPGruenbeck.class.php';

$gruenbeck = new PHPGruenbeck('mein@email.adresse', 'meinPassword');
$tokenFile = 'gruenbeck_tokens.json';

if (file_exists($tokenFile) && $gruenbeck->loadTokens($tokenFile)) {
} else {
    if ($gruenbeck->login()) {
        $gruenbeck->saveTokens($tokenFile);
    } else {
        die("Anmeldung fehlgeschlagen\n");
    }
}

// Gerät auswählen und Daten abrufen
$deviceData = array();
$parameterData = array();
$waterData = array();
$saltData = array();
$errorData = array();

if ($gruenbeck->getMgDevices()) {
    $data = $gruenbeck->getData(360, 120, null, true);
    $deviceData = $data['device']; 
    $errorData = $deviceData['errors'];
    unset($deviceData['errors']);
    unset($deviceData['salt']);
    unset($deviceData['water']);
    $parameterData = $data['parameters'];
    unset($parameterData['$pending']);
    $waterData = $data['water'];
    $saltData = $data['salt'];
    $instance = handleDeviceData($deviceData);
    $parametersInstance = handleParameters($instance,$parameterData);
    handleSerializedData($instance,$errorData,'Fehler');
    handleSerializedData($instance,$waterData,'Wasserverbrauch');
    handleSerializedData($instance,$saltData,'Salzverbrauch');
} else {
    echo "Fehler beim Abrufen der Geräte\n";
}

function CreateCategoryByIdent($id, $ident, $name)
{
	$cid = @IPS_GetObjectIDByIdent($ident, $id);
	if($cid === false)
	{
		$cid = IPS_CreateCategory();
		IPS_SetParent($cid, $id);
		IPS_SetName($cid, $name);
		IPS_SetIdent($cid, $ident);
	}
	return $cid;
}
		
function CreateVariableByIdent($id, $ident, $name, $type, $profile = "")
{
	$vid = @IPS_GetObjectIDByIdent($ident, $id);
	if($vid === false)
	{
		$vid = IPS_CreateVariable($type);
		IPS_SetParent($vid, $id);
		IPS_SetName($vid, $name);
		IPS_SetIdent($vid, $ident);
		if($profile != "")
	    IPS_SetVariableCustomProfile($vid, $profile);
	}
	return $vid;
}
		
function CreateInstanceByIdent($id, $ident, $name, $moduleid = "{485D0419-BE97-4548-AA9C-C083EB82E61E}")
{
	$iid = @IPS_GetObjectIDByIdent($ident, $id);
	if($iid === false)
	{
		$iid = IPS_CreateInstance($moduleid);
		IPS_SetParent($iid, $id);
		IPS_SetName($iid, $name);
		IPS_SetIdent($iid, $ident);
	}
	return $iid;
}

function handleDeviceData($data) {
    $parent = IPS_GetParent($_IPS['SELF']);
    $instance = CreateInstanceByIdent($parent,$data['serialNumber'],$data['serialNumber']);
    foreach ($data as $datum) {
        $varName = key($data);
        $varValue = $datum;
        if (is_bool($varValue)) $type = 0;
        if (is_integer($varValue)) $type = 1;
        if (is_float($varValue)) $type = 2;
        if (is_string($varValue)) $type = 3;
        $varId = CreateVariableByIdent($instance,$varName,$varName,$type);
        SetValue($varId,$varValue);
        next($data);
      }
      return $instance;
}

function handleParameters($parent, $data) {
    $instance = CreateInstanceByIdent($parent,'Parameters','Parameters');
    foreach ($data as $datum) {
        $varName = key($data);
        $varValue = $datum;
        if (is_bool($varValue)) $type = 0;
        if (is_integer($varValue)) $type = 1;
        if (is_float($varValue)) $type = 2;
        if (is_string($varValue)) $type = 3;
        if (is_array($varValue)) continue;
        $varId = CreateVariableByIdent($instance,$varName,$varName,$type);
        SetValue($varId,$varValue);
        next($data);
      }
      return $instance;
}

function handleSerializedData($parent,$data,$varName) {
    $instance = CreateInstanceByIdent($parent,'Mesurements','Mesurements');
    $varId = CreateVariableByIdent($instance,$varName,$varName,3);
    SetValue($varId,serialize($data));
    }

An den Echtzeitdaten kniffle ich noch, den api Endpoint habe ich noch nicht gefunden. In der original implementierung wird ein asynchroner websocket benutzt…
BG Hoep

Danke für dein Script, leider läuft das Script nicht. Bleibt im execute stecken. Da hilft dann auch nur mehr der Hammer. Strom aus Strom ein. Weil sich auch Symcon aufhängt bzw. in einer Endlosschleife gefangen ist :wink:

P.S. Symcon läuft auf Linux (Tinkerboard)

Ist mir schleierhaft. Eigentlich sollten alle funktionen mit timeouts abbrechen. Hast du eine SD mit Cloud Account?
BG hoep

Eine SE mit Cloud Account - sollte eigentlich nichts ausmachen, obwohl beim ioBroker Adapter es eine Anpassung für SE gab. Wo es die Anpassung gab kann ich gar nicht sagen.

lg hagi

Muss ich mir ansehen. Die Implementierubg ist definitv für die SD
BG hoep