Steuerung Sauna RS485

Die Antworten des Gerät sind so, als wenn da ein Baudratenfehler oder ein Abschlußfehler ist…
Ev. mal in der Richtung suchen falls der andere Adapter auch sowas bringt.
Gruß Helmut

Das wird wohl sowas wie Hercules sein … und da kommt auch nur mist raus :0/ Ich werde das morgen alles mal ausprobieren.

Aber danke auch schonmal für die Tips!

Dennoch habe ich da mal was vorbereitet :smiley:

Das sollte als Rohling für den Datenempfang funktionieren.

[ol]
[li]Script anlegen (kann erst leer sein).[/li][li]RegisterVariable anlegen.[/li][li]Als Ziel-Skript das vorher angelegte Script auswählen und übernehmen.[/li][li]Als Übergeordnete Instanz ist in der RegisterVariable die IO-Instanz des Com-Port auszuwählen.[/li][li]Nun noch das unten liegende Script reinkopieren.[/li][li]Die ID der RegisterVariable anpassen.[/li][li] Speichern und ausführen :D[/li][/ol]

und vielleicht kommen da ja schon vier Werte :slight_smile:

Dies zu erweitern dürfte dann anhand der PDF nicht so schwer sein.

Steuern fehlt dann noch, ist aber relativ einfach.

Da ich keine passende HW habe… Funktion ohne Gewähr :wink:

<?

$RegVarID = 12345; // Bitte die ID der RegVar eintragen.

switch ($_IPS['SENDER'])
{
    case 'WebFront':
//später

    case 'TimerEvent':
// später, keine Ahnung ob die Anlage Stati von alleine meldet oder wir immer pollen müssen ???
        break;
    case 'Execute':
//manuelle Abfrage starten:
        RegVar_SendText($RegVarID, "get sauna" . chr(13));
        IPS_Sleep(10);
        RegVar_SendText($RegVarID, "get sauna val" . chr(13));
        IPS_Sleep(10);
        RegVar_SendText($RegVarID, "get steam" . chr(13));
        IPS_Sleep(10);
        RegVar_SendText($RegVarID, "get steam val" . chr(13));
        IPS_Sleep(10);
//usw...
        break;
    case 'RegisterVariable':
        // bereits im Puffer der Instanz vorhandene Daten holen
        $data = RegVar_GetBuffer($_IPS['INSTANCE']);
        // neu empfangene Daten an $data anhängen
        $data .= $_IPS['VALUE'];

        // wenn das Trennzeichen ; nicht in $data gefunden worden ist
        if (strpos($data, ';') === false)
        {
            // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
            RegVar_SetBuffer($_IPS['INSTANCE'], $data);
            // nichts zu tun... raus hier
            return;
        }
        // es ist mindesten ein Datensatz komplett
        // $data in durch ; separierte Datensätze zerlegen
        $datasets = explode(';', $data);

        // letzten eventuellen unvollständigen Datensatz oder leeren String zurück in den Buffer
        RegVar_SetBuffer($_IPS['INSTANCE'], array_pop($datasets));

        // alle vollständigen Datensätze verarbeiten
        foreach ($datasets as $dataset)
        {

            // Bool Zustände sind 'ON;' oder 'OFF;'
            // Alle anderen Daten sind '123C ;'

            // Zuerst Parameter und Wert Trennen
            $data = explode(' ', $dataset);

            // $data[0] = PARAMETER
            // $data[1] = WERT
            // Bool Zustände sind noch immer 'ON;' oder 'OFF;'
            // Alle anderen Daten sind jetzt ohne ;   '123C'


            switch (strtolower($data[0]))
            {
                case "sauna":  // Parameter sauna
                    if ($data[1] == "ON;")
                    {
                        SetValueBoolean(GetOrCreateVariable("sauna_status", "Saunaofen Betrieb", 0, "~Switch", 0), true);
                    } elseif ($data[1] == "OFF;")
                    {
                        SetValueBoolean(GerOrCreateVariable("sauna_status", "Saunaofen Betrieb", 0, "~Switch", 0), false);
                    } else
                    {
                        // Hier noch ein Profil anlegen und nachtragen :)
                        SetValueInteger(GerOrCreateVariable("sauna_solltemp", "Saunaofen Solltemp", 2, "", 1), intval(substr($data[1], 0, -1)));
                    }
                    break; // ENDE sauna
                case "steam":  // Parameter steam
                    if ($data[1] == "ON;")
                    {
                        SetValueBoolean(GetOrCreateVariable("steam_status", "Verdampfer Betrieb", 0, "~Switch", 0), true);
                    } elseif ($data[1] == "OFF;")
                    {
                        SetValueBoolean(GerOrCreateVariable("steam_status", "Verdampfer Betrieb", 0, "~Switch", 0), false);
                    } else
                    {
                        SetValueInteger(GerOrCreateVariable("steam_sollfeuchte", "Verdampfer Soll-Feuchte", 1, "~Humidity", 2), intval(substr($data[1], 0, -1)));
                    }
                    break; // ENDE steam
                // usw...
            }
        }
        break;
}

function GetOrCreateVariable($Ident, $Name, $Type, $Profile = "", $Position = 0)
{
    if (!isset($_IPS))
        global $_IPS;
    $parentID = IPS_GetParent($_IPS['SELF']);
    $vid = @IPS_GetObjectIDByIdent($Ident, $parentID);
    if ($vid > 0)
    {
        if (IPS_GetVariable($vid)["VariableType"] != $Type)
        {
            IPS_DeleteVariable($vid);
            $vid = 0;
        }
    }
    if ($vid < 1)
    {
        $vid = IPS_CreateVariable($Type);
        IPS_SetParent($vid, $parentID);
        IPS_SetIdent($vid, $Ident);
        IPS_SetName($vid, $Name);
        IPS_SetPosition($vid, $Position);
    }
    IPS_SetVariableCustomProfile($vid, $Profile);
    return $vid;
}

?> 

Michael

Krass Michael … das hätte ich bestimmt auch hinbekommen :0D :0D :0D … in 10 Jahren ;0)
Danke dir !!! Ist echt super nett von dir das du mir das zur Verfügung stellst :0)

Oh man da hab ich echt nocht viel zu lernen … ich versuche das erst mal zu verstehen was du da alles reingeschrieben hast und dann werde ich die restlichen angaben reinpacken … das mit dem Schalten kriege ich denke ich auch noch hin …

Jetzt muss also nur noch das ding funktionieren :0/ Drückt mir die Daumen !

Und am Ende könnt ihr euch dann auch alle ne Sauna in den Keller bauen … oder bei mir vorbei kommen :0D :0D :0D

VG

Andreas

Kein Platz, zu viel andere Technik :smiley:
Ich hoffe nur das es dann auch funktioniert.
Michael

Jetzt habe ich doch nochmal ne Frage

SetValueBoolean(GetOrCreateVariable("sauna_status", "Saunaofen Betrieb", 0, "~Switch", 0), false);

sauna_status = Variablen ID
Saunaofen Betrieb = Bezeichnung
0 = VariablenTyp, hier Boolean
~Switch = Variablenprofil
0 = Positon bzw. einsortieren unter dem Objekt mit der ID
false = Status

Ist das so richtig … bei dem vorletzten bin ich mir nicht sicher … bei der 0.

Jupp, passt :slight_smile: Hätte man auch einfach probieren können :wink:

0 = Positon bzw. einsortieren unter dem Objekt mit der ID
>>> Das ist aber die Position im Sinne von „Sortierung“ … also Reihenfolge und nicht ParentID

-Chris-

Bin ja nicht zu Hause wo ich das testen könnte … wollte aber schon mal den Rest einfügen ;0)

Danke dir !

So … was soll ich sagen … ich dreh durch … das klappt immer noch nicht :0(

Bei dem neuen Adapter kann man nen 220 ohm terminierungswiderstand zuschalten … Ergebnis es kommt nix an … ich brauche ja auch 120 ohm.

Also ding ausgeschaltet und 120 ohm Widerstand dazwischen … Ergebnis es kommt nix an …

Ding ohne Widerstand angeschlossen … und es kommen nur nullen

Selbes habe ich nochmal mit dem China Ding probiert … nur Müll kommt da raus !

A + B getauscht in allen Variation … bei nur in einer Kombi kommt überhaupt was …

Habt ihr noch ideen ?! Ich werde morgen mal beim Hersteller direkt anrufen und nach dem Connectivity Set fragen.
Eigentlich kann das aber auch nix ändern.

● Netzwerkkabel 0,5 m
● Adapter RJ45 auf Printklemme
● Terminierungswiderstand 120 ohm

und das hab ich jetzt schon

Delock Adapter: Amazon.de: Computer & Zubehör
● Terminierungswiderstand 120 ohm
● BUS Kabel

Wieviel Watt sollte den der Abschlusswiderstand haben … ist das egal

Moin Wuppi…
… wo hast den Adapter dran? IPS 4.0 oder 3.4? PC oder Raspi?
Check noch mal die Einstellungen… Baudrate etc.
Gruß,
Peter

Moin Peter,

ich habe das ganze losgelöst von IPS mit Hercules getestet … gleiches Ergebnis wie in IPS.
Da habe ich im Moment die 4.0. Den Stick hatte ich an Windows 7 + 8 … am Raspberry noch nicht, weil ich da nicht weis wie das dann gehen würde ;0)

Die Baudrate und alles habe ich sowohl in der Portzuordnung in Windows, sowie in Hercules und IPS mehrfach überprüft. Leider alles richtig :0D

Und mit der Wattzahl der Widerstände … weis das einer ob das die Ursache sein kann?! Würde mir heute dann nämlich noch welche holen mit 0,25 W / 0,5 W / 1 W / 5 W auch mal einen nur mit 100 ohm.

Hersteller habe ich heute morgen auch nochmal angerufen. Am Montag können sie mir mehr sagen.

VG

Andreas

Hast die Möglichkeit das mal mit der 3.4 zu testen?
Die Wattzahl sollte uninteressant sein.
Den Stick kannst ganz normal an Pi stecken und dann einfach die Schnittstelle auswählen. Steht dann statt z.B Com4 etwas anderes (tty…?? oder so ähnlich). Wenn du nur ein USB-Stick dran hast, kannst auch nur eine Schnittstelle auswählen.
Wäre noch ein Versuch wert!
Ich hatte damals auch Probleme mit meinem Energiezähler Em24-DIN.
Da hat es auch erst mit dem 3. RS485-USB-Wandler funktioniert.
Die ersten waren billigteile für 5-9 Euro. Seit dem nehm ich nur noch exsys.

So alles ausprobiert … zwei Tage … und klappt immer noch nicht :0/

Vielleicht kurz nochmal zum Anschluss

bus.jpg

  1. Variante = siehe Bild 2 … Saunansteuerung (Node 1) / USB RS485 (Node 2)
  2. Variante = siehe Bild 2 … Saunansteuerung (Node 1) + zusätlichem 120 ohm Widersand / USB RS485 (Node 2)
  3. Variante = siehe Bild 1 … RS485 Geräte = USB Stick

Gibts noch ne Variante ?!

VG

Andreas

ich hab mir die Sauna Steuerung auch bestellt (wollte immer schon eine mit RS-485 Anschluß) , wenn die da ist wird ich mir das anschaun.
du könntest ja deine Konverter testen indem du beide Anschließt und gegenseitig Daten versendest, dann kannst zumindest die Konverter ausschließen wenn das funktioniert.

Das ja cool das du dir das Teil auch bestellt hast … da bin ich ja mal gespannt !

Funktioniert nicht :0/ Ich habe jetzt schon 6 Adapter ausprobiert … ich hoffe du Thomas findest eine Lösung !

So … NEWS

Ich habe im Homematic Forum jemanden gefunden der die Steuerung eigebunden bekommen hat.
Er verwendet den EX9132C-RS485 - Ethernet zu RS422 / RS485 Konverter. Habs mir mal bestellt und
werde es dann testen. Man braucht hier keinen Widerstand … man kann die Sauna direkt dran an klemmen.

VG

Andreas

Moin zusammen,

was soll ich sagen … es klappt :0)
Danke euch allen nochmal für die Hilfe, insbesondere Michael der durch unzählige Mails von mir bombardiert wurde … und sich trotzdem nicht aus der Ruhe bringen lies.

Sobald ich das Script komplett fertig habe werde ich es natürlich hier posten … im Moment habe ich aber noch ein paar ToDo’s für die Optik ;0) Temperatur, Luftfeuchtigkeit sollen nämlich per Button gesteuern werden

Ein kleiner Ausblick

Die Temperatur kann schon in 5er Schritten eingestellt werden und bei klick auf die Temperatur wird diese in die Steuerung übertragen. Muss ich jetzt nur noch bei allen anderen Werten auch noch machen. Auch die Benutzerprogramm möchte ich noch integrieren.

VG

Andreas

Hallo Andreas,

gibt’s schon Neuigkeiten von deinem Skript?
Ich stehe gerade am Baubeginn meiner Sauna und da soll die Steuerung natürlich über IPS laufen. kannst du mal den aktuellen Stand deiner Visu posten?

Kannst du mir sagen welche Vorraussetzungen die Saunasteuerung mitbringen muß um sie anzubinden und auch wie ich dies realisieren kann?

Vielen Dank im Vorraus.

Gruß
Bruno