Auslesen von Daten über serielle Schnittstelle - Alarmanlage

Hallo!

Ich möchte meine Alarmanlage (die eine serielle Schnittstelle hat) über IPS steuern und auch die Zustände Anzeigen lassen.

Das Steuern der Anlage funktiniert schon ohne weitere Probleme (Schnittstellenbeschreibung hab ich) :slight_smile:

Um nun den Status der Anlage zu bekommen muss ich einen Anfragebefehl senden und bekomme dann folgende Zeichen zurück, die ich dann auswerten muss:
02 1F 1F 02 80 33 00 19 01 19 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 19 01 19 01 00 00 1B 03

Das 02 1F 1F 02 80 33 00 sind Startbits, Längenbits usw. und können ignoriert werden (bleiben auch immer gleich)

ab 19 01 19 01 00 usw. bekomme ich nun die Zustände der einzelnen Bereiche und Melder angezeigt.
Am Ende die 00 00 1B 03 können wieder ignoriert werden.

Meine Frage ist nun wie ich das Anzeigen der Melder und Bereiche richtig hinbekomme.

Habe natürlich schon ein Serial Port angelegt (sonst könnte ich ja noch nichts zur Anlage schicken).

Ich glaube ich benötige eine Register Variable, Cutter und für jeden Bereich und Melder eine Variable.

Vielleicht kann mir hierbei jemand behilflich sein (vor allem über ein Beispielscript wäre ich sehr dankbar)

Chris :loveips:

Erste Anlaufstelle wäre hier.

RegisterVariable: IP-Symcon :: Automatisierungssoftware

Ansonsten im Forum mal nach Registervariable, Cutter suchen. Das Thema wird fast wöchentlich behandelt.

Hallo RWN
Ich glaub die meisten Beiträge hab ich schon durch,
irgendwie fehlt mir noch der entscheidente Funke :frowning:

Habe auch schon mit Register Variable, Cutter und den Scripten experimentiert, aber ohne wirklichen Erfolg

Und was erwartest Du jetzt. Wie sieht das Protokoll aus, Start-Stopbit usw… Dann kannst Du entscheiden ob ein Cutter sinnvoll ist oder nicht.

Mit Beispielscript sieht es eher schlecht aus, da keine Angaben vorhanden sind und es auf deine Anlage abgestimmt sein muss.

So, hab mal folgendes Script erstellt und mit der register Variable verbunden.

<?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'];
  
  

  		// wenn das Trennzeichen ; in $data gefunden worden ist
  		if (strpos($data, ';'))
  			{
      		// $data in durch ; separierte Datensätze zerlegen
      		$datasets = explode(';', $data);

      		// alle nicht durch ; terminierten Datensätze ausgeben
      		for ($i = 0; $i < count($datasets) - 1; $i++)
   				{
      			echo "empfangener Datensatz: ".$datasets[$i]."
";
					}

			// $data auf den Inhalt des letzten (unvollständigen) Datensatzes setzen
			$data = $datasets[count($datasets) - 1];
  			}

  // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
  RegVar_SetBuffer($_IPS['INSTANCE'], $data);


  // Daten in hex umwandeln
  $dataStr = strToHex($data);
  IPS_LogMessage( "MC1200","".$dataStr);
  
  
  // String in Variable ausgeben
  	SetValue(15974 /*[Hardware\Alarmanlage MC1200\ABI Status\SB String]*/, $dataStr);

}

function strToHex($string)
{
    $hex='';
    for ($i=0; $i < strlen($string); $i++)
    {
        $hex .= dechex(ord($string[$i]));
    }
    return $hex;
}
?>

Wenn ich nun Daten von der Anlage anfordere werden diese in auch in die Register Variable geschrieben:

06 05 02 1F 1F 02 80 33 00 19 01 19 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 19 01 19 01 00 00 1B 03

Wie schaffe ich es jetzt, einzelne Blöcke herauszutrennen und diese dann in verschiedene Variablen zu übergeben.

Hat sich erledigt…

Moin,
ich bin auch gerade dran (zwar ein paar Jahre später) meine MC1200 über RS232 anzusprechen und ins KNX zu bekommen.
Existiert die Schnittstellenbeschreibung noch und könnte ich diese auch bekommen?

VG