IPSymcon goes SecvestIP

Hi,

Ich möchte mich an dieser Stelle für die exe bedanken. Funktioniert einwandfrei und über IPS geht die Anlage 200% besser zu bedienen!

Ich bin nicht dahinter gestiegen wie man von den cgi’s auf die richtigen gets und puts kommt. :slight_smile:
Gut gemacht.

Wäre vielleicht nicht schlecht, wenn’s moralisch vertretbar ist den C# code zu posten, vielleicht bringt das ja ein paar leute dazu ähnliches für andere anwendungen zu programmieren. Ich hätte z.B. eine command line exe für NetIO, wenn das jemand braucht.

Gruss

Heinz

Hallo Dietmar,

ich sehe, dein Programm kommt gut an.
Leider habe ich mich bisher sehr schwer getan die Secvest IP auszulesen (nur den Status „currentMode“ im home.cgi bekomme ich heraus).

Da ich unter Linux arbeite und versuche die SecvestIP in meine OpenHAB Umgebung einzubinden, hilft mir die exe leider nicht weiter.

Mir ist klar, dass der Code dein Verdienst ist und du sicher einiges an Zeit investiert hast (wie ich auch schon erfolglos).
Genau deswegen wäre ich sehr dankbar, wenn du den Code bereitstellen könntest.
Über eine Antwort würde ich mich freuen.

Viele Grüße,
Enzio

Hallo Heinz, hallo Enzio,

hier wie gewünscht der Code für die exe.
Allerdings ist dies nicht wie von Heinz angenommen in C# sondern in VBS (halt was für Anfänger).
Zudem bin ich mir nicht ganz sicher ob dies die letzte Version ist. Ich hab den Code aber kurz getestet und keinen Fehler festgestellt.

Viel Erfolg bei euren Projekten!
Dietmar


'==========================================================================
'
' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 2007
'
' NAME: ipsecvest.vbs
'
' AUTHOR:  Dietmar Klein
' DATE  : 29.12.2011
'
' COMMENT: 
'
'==========================================================================
'On Error Resume Next

If WScript.Arguments.Count <> 4 Then WebError("Wrong number of arguments")
strHost=WScript.Arguments(0)
strUsername=WScript.Arguments(1)
strPassword=WScript.Arguments(2)
strCmd=WScript.Arguments(3)


strOverview="getOverviewStatus.cgi"
strStatus="getMode.cgi?Source=Webpage"
strIntern="setMode.cgi?Mode=PartSet&Source=Webpage"
strExtern="setMode.cgi?Mode=Set&Source=Webpage"
strOff="setMode.cgi?Mode=Unset&Source=Webpage"
strNative=Right(strCmd,Len(strCmd)-6)

set objHttp = WScript.CreateObject("WinHttp.WinHttpRequest.5.1")
If objHttp Is Nothing Then Set objHttp = WScript.CreateObject("WinHttp.WinHttpRequest")
LogonSecvestIP strHost,strUsername,strPassword
	
Select Case lcase(strCmd)
  Case "overview"
    wscript.Echo CmdSecvestIP(strHost,strOverview)

  Case "status"
    If left(CmdSecvestIP(strHost,strStatus),10) = "Mode=Unset" Then WScript.Echo left(CmdSecvestIP(strHost,strStatus),10)
 
  Case "intern"
  	tempStatus=CmdSecvestIP(strHost,strStatus)
  		If left(TempStatus,12)<>"Mode=PartSet"Then
 			If left(TempStatus,10)="Mode=UnSet" Then 
  				CmdSecvestIP strHost,strIntern
  			else	
	  				CmdSecvestIP strHost,strIntern	
				Do While  instr(CmdSecvestIP(strHost,strStatus),"Mode=Busy") > 0
					wscript.sleep 500
				Loop
  				CmdSecvestIP strHost,strIntern	
  		 	End If
  		End If
		Do While  instr(CmdSecvestIP(strHost,strStatus),"Mode=Busy") > 0
			wscript.sleep 500
		Loop
	WScript.Echo CmdSecvestIP(strHost,strStatus)

  Case "extern"
  	tempStatus=CmdSecvestIP(strHost,strStatus)
  		If instr(TempStatus,"Mode=Set")=0 Then
  			If instr(TempStatus,"Mode=UnSet")<0 Then 
  				CmdSecvestIP strHost,strExtern
  			else	
  				CmdSecvestIP strHost,strExtern	
					Do While  instr(CmdSecvestIP(strHost,strStatus),"Mode=Busy") > 0
						wscript.sleep 500
					Loop
  				CmdSecvestIP strHost,strExtern	
  		 	End If
  		End If
		Do While  instr(CmdSecvestIP(strHost,strStatus),"Mode=Busy") > 0
			wscript.sleep 500
		Loop
	WScript.Echo CmdSecvestIP(strHost,strStatus)

  Case "off"
	CmdSecvestIP strHost,strOff
		Do While  instr(CmdSecvestIP(strHost,strStatus),"Mode=Busy") > 0
			wscript.sleep 500
		Loop
	WScript.Echo CmdSecvestIP(strHost,strStatus)

  Case Else
    If Left(strCmd,6)<>"native" Then WebError("Unknown command")
    strCmd=Right(strCmd,Len(strCmd)-6)
    WScript.Echo CmdSecvestIP(strHost,strCmd)	
End Select



	
Function LogonSecvestIP(strHost,strUsername,strPassword)
	objHttp.Open "POST", "http://"&strHost&"/login.cgi"
	objHttp.Send "Language=english&UserName="&strUsername&"&Password="&strPassword
	  strResponse=objHttp.ResponseText
End Function

Function CmdSecvestIP(strHost,strCmd)
	objHttp.Open "GET", "http://"&strHost&"/"&strCmd
	objHttp.Send ""
	If Not (objHttp.statusText = "OK") Then
	  WScript.Echo "Error: " & objHttp.statusText
	  WScript.Quit
	Else	
	  	CmdSecvestIP=objHttp.ResponseText
	End If 
End Function

Function WebError(Errormessages)
	WScript.echo Errormessages
	WScript.Quit
End Function

Hallo Dietmar,

Vielen vielen Dank dafür! @Enzio, hast Du das schon versucht in PHP nach zu bauen? Ich wollte auf einen Raspberry Pi 2 umsteigen, allerdings scheitert das noch an der Secvest. Zumindest ist das noch das offensichtlichste.
Wenn nicht werde ich mich da mal dran machen.

Gruß

Heinz

Hallo Dietmar, Heinz,

entschuldigt die sehr späte Antwort - hatte viel um die Ohren.

@Dietmar: Vielen Dank für den Code. Ich sehe ihn mal durch und schaue, was ich davon übernehmen kann.

In der Zwischenzeit hatte ich mit OpenHAB ein wenig rumprobiert und auch einige Befehle herausgefunden.
Hierbei gehe ich allerdings mit cURL vor die Infos vom web Interface zu ziehen bzw. den Status zu setzen:
Vielleicht hilf das ja auch jemandem weiter:

Secvest IP aktivieren:
curl http://root:xxx@192.168.178.24:8060/setMode.cgi?Mode=Set

Secvest IP deaktivieren:
curl http://root:xxx@192.168.178.24:8060/setMode.cgi?Mode=Unset

Toggle Radio Output1 (bei mir eine Schaltsteckdose von Abus)
curl http://root:xxx@192.168.178.24:8060/setManualEvent.cgi?Output=Radio1

Für den Fall, dass ihr eine Secvest IP Kamera (IP Adresse …23) dran habt hier noch einige Befehle:
GuardMode an
curl http://root:xxx@192.168.178.23:8080/cgi-bin/admin/setparam.cgi?event_i0_enable=1

Toggle Snapshot bei Motion Detection (durch GuardMode)
curl http://root:xxx@192.168.178.23:8080/cgi-bin/admin/setparam.cgi?event_i0_action_server_i0_enable=1

Gruß,
Enzio

Hallo Dietmar,

leider habe ich es nicht hinbekommen setMode „Sleep“ per curl zu übergeben.
Set und Unset funktioniert einwandfrei.
Läuft es bei dir mit „Sleep“, sodass die Anlage in den LernModus geht?

Ebenso geht’s mir mit dem Restart befehl, wenn die Anlage mal einen Systemfehler zeigt (z.B. wenn die Kamera nicht erreichbar ist, wird das durch Anlagen reboot gelöst)

Noch etwas habe ich rausgefunden:
Öffnungsmelder auf BYPASS setzen:
http://root:xxx192.168.178.24:8060/setInputChannel2.cgi?Bypass=ON

Vielen Dank im Voraus.
Viele Grüße.
NCO

Hallo Danke an Alle für die tolle Arbeit! :slight_smile:
Habe die Infos mal gesammelt und alles auf ips umgeschriben.
Im Script Werte und Namen der Eingänge ändern. Variablen, Ereignisse und Timmer wird beim ausführen selbst angelegt.

  • Zonen ein und aus schalten
  • Status der Eingänge
  • Eingänge ausblendbar (bei geöffnetem Fenster eines Eingangs, kann man ihn ausblenden um scharf zu schalten.
<?
<?
### Abus SecvestIP ###
$ÜbergeordneteID =  IPS_GetParent($_IPS['SELF']);

// Werte eintragen
$webfront = 36313;
$ip = 'http://192.168.178.178'; // Abus IP
$bn = 'admin';  // Benutzer
$pw = 'admin';  // Passwort

// hier nur Name von den Abus Eingängen ändern sonst nichts

$InputCH[1] =  Array ( 'Name'=>'Rauchmelder OG', 'RName'=>"InputCH1", 'varProfTyp'=>"~Window");  $InputCH[1]['ID'] = @IPS_GetVariableIDByName($InputCH[1]['Name'], $ÜbergeordneteID);
$InputCH[2] =  Array ( 'Name'=>'Fenster Obergeschoß', 'RName' => "InputCH2", 'varProfTyp'=>"~Window");  $InputCH[2]['ID'] = @IPS_GetVariableIDByName($InputCH[2]['Name'], $ÜbergeordneteID);
$InputCH[3] =  Array ( 'Name'=>'Fenster Keller, EG, Haus-&Garagentür', 'RName'=>"InputCH3", 'varProfTyp'=>"~Window");  $InputCH[3]['ID'] = @IPS_GetVariableIDByName($InputCH[3]['Name'], $ÜbergeordneteID);
$InputCH[4] =  Array ( 'Name'=>'Kammera EG Flur', 'RName'=>"InputVCH1", 'varProfTyp'=>"~Window");  $InputCH[4]['ID'] = @IPS_GetVariableIDByName($InputCH[4]['Name'], $ÜbergeordneteID);
$InputCH[5] =  Array ( 'Name'=>'Bewegungsmelder Keller', 'RName'=>"InputVCH2", 'varProfTyp'=>"~Window");  $InputCH[5]['ID'] = @IPS_GetVariableIDByName($InputCH[5]['Name'], $ÜbergeordneteID);
$InputCH[6] =  Array ( 'Name'=>'Rauchmelder Bügelzimmer, Heizung, Garage', 'RName'=>"InputVCH3", 'varProfTyp'=>"~Window");  $InputCH[6]['ID'] = @IPS_GetVariableIDByName($InputCH[6]['Name'], $ÜbergeordneteID);

// ab hier nicht mehr ändern
$mod['intern'] = Array ('Name'=> 'Intern activ', 'RName' => "", 'varProfTyp'=>"~Switch");   $mod['intern']['ID'] = @IPS_GetVariableIDByName($mod['intern']['Name'], $ÜbergeordneteID);
$mod['extern'] = Array ('Name'=> 'Extern activ', 'RName' => "", 'varProfTyp'=>"~Switch");   $mod['extern']['ID'] = @IPS_GetVariableIDByName($mod['extern']['Name'], $ÜbergeordneteID);
$mod['aus'] = Array ('Name'=> 'Alarmanlage aus', 'RName' => "", 'varProfTyp'=>"~Switch");   $mod['aus']['ID'] = @IPS_GetVariableIDByName($mod['aus']['Name'], $ÜbergeordneteID);

$Aublenden[1] = Array ('Name'=>'Ausblenden '.$InputCH[1]['Name'], 'RName'=>"Channel1");   $Aublenden[1]['ID'] = @IPS_GetVariableIDByName($Aublenden[1]['Name'], $ÜbergeordneteID);
$Aublenden[2] = Array ('Name'=>'Ausblenden '.$InputCH[2]['Name'], 'RName'=>"Channel2");   $Aublenden[2]['ID'] = @IPS_GetVariableIDByName($Aublenden[2]['Name'], $ÜbergeordneteID);
$Aublenden[3] = Array ('Name'=>'Ausblenden '.$InputCH[3]['Name'], 'RName'=>"Channel3");   $Aublenden[3]['ID'] = @IPS_GetVariableIDByName($Aublenden[3]['Name'], $ÜbergeordneteID);
$Aublenden[4] = Array ('Name'=>'Ausblenden '.$InputCH[4]['Name'], 'RName'=>"Vchannel1");   $Aublenden[4]['ID'] = @IPS_GetVariableIDByName($Aublenden[4]['Name'], $ÜbergeordneteID);
$Aublenden[5] = Array ('Name'=>'Ausblenden '.$InputCH[5]['Name'], 'RName'=>"Vchannel2");   $Aublenden[5]['ID'] = @IPS_GetVariableIDByName($Aublenden[5]['Name'], $ÜbergeordneteID);
$Aublenden[6] = Array ('Name'=>'Ausblenden '.$InputCH[6]['Name'], 'RName'=>"Vchannel3");   $Aublenden[6]['ID'] = @IPS_GetVariableIDByName($Aublenden[6]['Name'], $ÜbergeordneteID);

// Var anlegen 
if($_IPS['SENDER'] == 'Execute') 
{
		//Variablenprofil Anlegen:
		if (IPS_VariableProfileExists("Abus_Channals_Status") != true)
		{
					$NameVP='Abus_Channals_Status';
					IPS_CreateVariableProfile($NameVP, 1);//Name, Variablentyp 0=Boolean 1=Integer 2=Float 3=String
					IPS_SetVariableProfileAssociation($NameVP, 0, "Geschlossen", "Window", 0x08F617);     //Button Name Nr.0
					IPS_SetVariableProfileAssociation($NameVP, 1, "Geöffnet", "Window", 0xFF0000);		//Button Name Nr.1
					IPS_SetVariableProfileAssociation($NameVP, 2, "Deaktiviert", "Window", 0x6A6662);		//Button Name Nr.2
					IPS_SetVariableProfileAssociation($NameVP, 3, "Ausgeblendet", "Window", 0xFD7F01);		//Button Name Nr.3
					
					$NameVP='Abus_Channals_Ausblenden';
					IPS_CreateVariableProfile($NameVP, 1);//Name, Variablentyp 0=Boolean 1=Integer 2=Float 3=String
					IPS_SetVariableProfileAssociation($NameVP, 0, "Ausblenden", "Warning", -1);     //Button Name Nr.0
					IPS_SetVariableProfileAssociation($NameVP, 1, "Einblenden", "Warning", -1);		//Button Name Nr.1
		}
				
		IPS_SetHidden($_IPS['SELF'], true);
		$arrayNr = 1;
		foreach($mod as $Nr => $wert)
		{    $varExist = empty( $wert['ID']);  
			if( $varExist == true )
			{   
					// Var Alarm ein aus anlegen
					
						echo $wert['Name'].'Var wurde angelegt';
						$VarID = IPS_CreateVariable(0);
						IPS_SetName($VarID, $wert['Name']); // Variable benennen
						IPS_SetPosition($VarID, $arrayNr);
						IPS_SetVariableCustomProfile($VarID, $wert['varProfTyp']);
						IPS_SetParent($VarID,  IPS_GetParent($_IPS['SELF'])); // Variable einsortieren 
						if($arrayNr <=2)
						{IPS_SetVariableCustomAction($VarID, $_IPS['SELF']);}
						
						$arrayNr++;
						
						//Ereignis Anlegen
				if($wert['Name']== 'Intern activ' or $wert['Name'] == 'Extern activ')
				{
						$eid = IPS_CreateEvent(0);                  //Ausgelöstes Ereignis
                  		IPS_SetName($eid , 'Ereignis');
						IPS_SetEventTrigger($eid, 1, $VarID);        //Bei Aktuallisierung von Variable
						IPS_SetParent($eid, $_IPS['SELF']);         //Ereignis zuordnen
						IPS_SetEventActive($eid, true);
				}			
			
			}
		
		}		
		
		$arrayNr = 3;
		foreach($InputCH as $Nr => $wert)
		{    $varExist = empty( $wert['ID']);  
			if( $varExist == true )
			{   
					
					// Vars Status und Ausblenden anlegen
					
					{
						echo $wert['Name'].'Var wurde angelegt';
						$VarID = IPS_CreateVariable(1);
						IPS_SetName($VarID, $wert['Name']); // Variable benennen
						IPS_SetPosition($VarID, $arrayNr);
						IPS_SetVariableCustomProfile($VarID, 'Abus_Channals_Status');
						IPS_SetParent($VarID,  IPS_GetParent($_IPS['SELF'])); // Variable einsortieren 
						$arrayNr++;	
						
						echo $wert['Name'].'Var wurde angelegt';
						$VarID = IPS_CreateVariable(1);
						IPS_SetName($VarID, 'Ausblenden '.$wert['Name']); // Variable benennen
						IPS_SetPosition($VarID, $arrayNr);
						IPS_SetVariableCustomProfile($VarID, 'Abus_Channals_Ausblenden');
						IPS_SetParent($VarID,  IPS_GetParent($_IPS['SELF'])); // Variable einsortieren 
						IPS_SetVariableCustomAction($VarID, $_IPS['SELF']);
						IPS_SetIcon($VarID, "Warning");
						setValue($VarID, -1);
						$arrayNr++;	
					}
			}	
		}	
				
				
				
		
		
		IPS_SetScriptTimer($_IPS['SELF'], 180);
}

if( $_IPS['SENDER'] == 'WebFront')
{			
		if( @$_IPS['VARIABLE'] == $mod['intern']['ID']  )
		{      
			if(getValue($mod['intern']['ID']) == True ) // intern aus
			{    
				Sys_GetURLContentEx($ip.'/setMode.cgi?Mode=Unset&Source=Webpage', Array("AuthUser"=> $bn, "AuthPass"=> $pw) );
			}
			
			else  // intern ein
			{      
				Sys_GetURLContentEx($ip.'/setMode.cgi?Mode=PartSet&Source=Webpage', Array("AuthUser"=> $bn, "AuthPass"=> $pw) );
			}
		}
		
		if( @$_IPS['VARIABLE']  == $mod['extern']['ID'] )  
		{
			if(getvalue($mod['extern']['ID']) == True  )    // extern aus
			{
				Sys_GetURLContentEx($ip.'/setMode.cgi?Mode=Unset&Source=Webpage', Array("AuthUser"=> $bn, "AuthPass"=> $pw) );
			}
			
			else  //extern ein
			{
				Sys_GetURLContentEx($ip.'/setMode.cgi?Mode=Set&Source=Webpage', Array("AuthUser"=> $bn, "AuthPass"=> $pw) );
			}
		}
		// Ausblenden
		
		$NameAkt = IPS_GetName($_IPS['VARIABLE']);
		foreach ($Aublenden as $Nr => $wert)
		{
			if( $NameAkt == $wert['Name'])  
			{
				if($_IPS['VALUE'] == 0)
				{Sys_GetURLContentEx($ip.'/setInput'.$wert['RName'].'.cgi?Bypass=ON', Array("AuthUser"=> $bn, "AuthPass"=> $pw) );
				setValue($_IPS['VARIABLE'], 0) ;
				} 
				else
				{Sys_GetURLContentEx($ip.'/setInput'.$wert['RName'].'.cgi?Bypass=OFF', Array("AuthUser"=> $bn, "AuthPass"=> $pw) );
				setValue($_IPS['VARIABLE'], 1) ;
				}         
			}
			IPS_Sleep(500);
			setValue($_IPS['VARIABLE'], -1);
		}
}

// Abfrage
$rueckgabe = Sys_GetURLContentEx($ip.'/getOverviewStatus.cgi', Array("AuthUser"=> $bn, "AuthPass"=> $pw) );

foreach($InputCH as $Nr=> $wert)
{   
	if (strpos($rueckgabe, $wert['RName']."=OFF")!== false){
		Setvalue($wert['ID'], 0);
	}
	elseif (strpos($rueckgabe, $wert['RName']."=ON")!== false){
		Setvalue($wert['ID'], 1);
		if($_IPS['SENDER'] == 'WebFront' ){
		WFC_SendNotification($webfront, 'Alarmanlage', 'Kann nicht activiert werden! '.$wert['Name'].' ist geöffnet', 'Speaker', 6);
		}
	}
	elseif (strpos($rueckgabe, $wert['RName']."=DEACTIVATED")!== false  ) {
		Setvalue($wert['ID'], 2);
	}
	elseif (strpos($rueckgabe, $wert['RName']."=BYPASS")!== false){
		Setvalue($wert['ID'], 3);
	}
	
}
//Abfrage Status
$rueckgabe = Sys_GetURLContentEx($ip.'/getMode.cgi?Source=Webpage', Array("AuthUser"=> $bn, "AuthPass"=> $pw) );

if (strpos($rueckgabe,"Mode=Unset")!== false) {
			
Setvalue($mod['intern']['ID'] ,false);
Setvalue($mod['extern']['ID']  ,false);
Setvalue($mod['aus']['ID'] ,true);

}
if (strpos($rueckgabe,"Mode=PartSet")!== false) {
		
Setvalue($mod['extern']['ID']   ,false);
Setvalue($mod['intern']['ID'] ,true);
Setvalue($mod['aus']['ID'] ,false);
}
if (strpos($rueckgabe,"Mode=Set")!== false) {
				
Setvalue($mod['extern']['ID'] ,true);
Setvalue($mod['intern']['ID'] ,false);
Setvalue($mod['aus']['ID'] ,false);
}

?>

?>

Hallo ESO,

schaut richtig gut aus. Damit kann man das dann auch auf einem Raspi oder der Symconbox laufen lassen.

Allerdings werden die variablen bei mir nicht erstellt, weil das Script vorher abbricht.

Abort Processing during exceed of maximal ErrorCount: Variable mit dem Namen Ausblenden … konnte nicht gefunden werden
Error in Script C:\IP-Symcon\scripts\30938.ips.php on Line 28

Ich habe die variablen dann in zwei Schritten anlegen lassen. So hat es dann funktioniert.

Zudem bekomme ich bei der Bedienung über das webfrontend einen Fehler

fehler.JPG

Leider sehe ich noch nicht warum. Im Log sehe ich nichts.
BR
Dietmar

Das klingt nach einem Einsatz für @kronos

Gesendet von iPad mit Tapatalk

Soll ich schon mal zählen :wink:
Ausgabe von „Fehler“ im Webfront ohne ersichtlichen Grund (seit Version 3.1)
Michael

THX
Das Leben kann so einfach sein!

Gruß
Dietmar

Möööp (Fehlerzähler inkrementiert).

Das klingt nach einem Einsatz für @kronos

Nur kein Neid :D.

Habe das Script geändert. Jetzt sollten das Script nicht mehr abbrechen.