Direktes Schreiben S7 via Webhook

Hallo zusammen,
in früheren Versionen von IPS konnte man bei den S7-Variablen nicht die Standard-Aktionen verwenden, wenn ein Wert über das Webfront geändert wurde, da die Werte nicht an die SPS übergeben wurden.
Hierzu musste ein entsprechendes Script verwendet werden.
In der aktuellen Version ist das nicht mehr notwendig, IPS schreibt selbständig den S7Write… Befehl.

Ich habe nun versucht, einen Merker eine S7 mittels HTTP/Webhook zu beschreiben, das geht leider nicht. Hier müsste ich wieder auf die alte Script-Methode zurückgreifen. gibt es eine andere Möglichkeit, ohne für jeden Merker zwei Scripte für ein- und aus zu schreiben ?

Vielen Dank vorab.

Hi,

darf ich Fragen wieso du über HTTP/Webhook die Werte schreiben willst?
IPS kann das doch direkt.

Gruß

HI,
Ich wollte gerne via webhook und habridge Mit Alexa die S7 Merker direkt schalten
Aktuell muss ich hier ein Script für einschalten und ein Script für Ausschalten verwenden

Gesendet von meinem SM-T555 mit Tapatalk

Hi,

läuft die Alexa über IPS? „Symcon Skill“
man kann eigentlich nur mit einem Script Geräte AN & AUS Schalten.

Gruß

Hallo,
hier geht es um die Variante mit HA-Bridge und da kann man direkt die Variablen ansprechen mit z.B.
http://192.168.0.34:82/user/WebhookBY.php?SETVarID=16398&SETVarVALUE=1
wenn es sich um eine interne Variable in IPS handelt. Bei den S7-I/=-s ist halt der der Value nicht die gleiche ID wie die zu schreibende ID.

Daher muss ich dieses per Script machen und das ist sehr mühselig :frowning:

Wenn musst Du durch den Webhook ja eher eine Methode aufrufen wie S7_WriteReal oder ähnliches. Aber warum eigentlich den umständlichen Weg über die HA-Bridge?

Irgendwie stehe ich auf dem Schlauch,
ich möchte gerne lokal Alexa nutzten und muss daher eine Verbindung von Alexa zu IPS bekommen um einen S7 Merker zu schalten.
Dafür benötige ich m.E. die HA-Bridge um die Geräte bei Alexa sichtbar zu machen, oder ?

Ja das stimmt, wenn Du das ausschließlich lokal machen willst geht das nur über die HA-Bridge die Alternative wäre dann über einen SmartHomeSkill aber dafür müsste dann IP-Symcon aus dem Internet erreichbar sein. Und was geht jetzt genau nicht, der Webhook lässt sich aufrufen und in IP-Symcon wird auch eine Variable gesetzt bzw. Methode aufgerufen?

Das geht alles, wenn ich eine interne IPS-Variable verwende.
wenn ich aber eine S7-Variable habe, habe ich ja den die ID der Instanz und zusätzlich die Instanz-Variable „Wert“, diese lässt sich ja nicht beschreiben.
Früher musste man bei Standard-Aktion immer den Wert der Änderung z.B. im Webfront in die Instanz per Script schreiben.
dies ist seit einiger Zeit nicht mehr notwendig. Bei Änderungen durch das Webfront macht IPS das selbstständig.
In der Instanz-Variable steht nur noch Standard-Aktion verwenden.
Daher dachte ich, es gebe ggf. hier auch eine Variante das durch den Webhook zu nutzten um keine Scripte verwenden zu müssen.

Es ist immer noch nicht klar was der Webhook denn genau macht bzw. was Du im Webhook denn aufrufst. Kannst Du den Webhook einfach mal posten? Du musst doch nur in dem Webhook Skript die passende Methode aufrufen die Du ausführen willst bei ein bzw. aus. Welche IP-Symcon Version nutzt Du eigentlich, es wäre besser den Hook direkt im IP-Symcon zu setzten und nicht extra über das User Verzeichnis zu gehen.

OK, aktuell sieht es so aus

http://IP-Adresse:82/user/WebhookBY.php?RUNScriptID=1234

In dem Script steht dann :

S7_WriteBit(12345,true);

Das gleiche mit anderem Script für aus.

Das wollte ich mir sparen, bei interen Variablen gebe ich direkt den Wert und die ID an IPS mit

z.B. http://IP-Adresse:82/hook/Licht?1=Dimmer_Esszimmer&wert=${intensity.byte}

oder
http://IP-Adresse:82/user/WebhookBY.php?SETVarID=16398&SETVarVALUE=1

Bei S7-Adressen geht aber nicht :

http://IP-Adresse:82/user/WebhookBY.php?S7_WriteBit(14563,true);

Was mache ich denn hier falsch ?

Webhook

http://<ip>:3777/hook/habridge?objid=14563&value=true

bzw.

http://<ip>:3777/hook/habridge?objid=14563&value=false

Im Webhookskript dann einfach den Wert entgegen nehmen


if (isset($_GET["objid"]) && isset($_GET["value"]))
{ 
    S7_WriteBit(intval($_GET["objid"]), boolval($_GET["value"]));
    IPS_LogMessage($_GET["objid"], "S7_WriteBit ". $_GET["value"]); 
}

Vielen Dank für die super Hilfestellung.
Es hatte anfangs nicht funktioniert, bis ich rausbekommen habe, das bei „true“ und „false“ jeweils nur eine „0“ übertragen wird.
Ich habe es dann so gelöst :
<?
if (isset($_GET[„objid“]) && isset($_GET[„value“]))
{

IPS_LogMessage($_GET["objid"], "S7_WriteBit ". $_GET["value"]);
$IPS_ID = (int)$_GET["objid"]; 
$IPS_Val =(int)$_GET["value"]; 
S7_WriteBit($IPS_ID,$IPS_Val);  

}

?>

bei den HTTP-Sendungen muss value dann 0 oder 1 sein, nicht true oder false
muss aber gestehen, dass ich nur die Grundfunktion verstehe.
Ich habe dies nun über den IPS-eigenen Webhook gelöst.
eine Frage hätte ich noch :
warum ist es besser dies in einem eigenen Verzeichnis und nicht im user-Verzeichnis laufen zu lassen ?
Sicherheit?

Nochmals vielen Dank für die Unterstützung. So kann ich nun mit der HA-Bridge mit zwei Zeilen die Lichter schalten.
hier geht es mit Milli-Sekundenbereich. Bei der Ausführung über den SmartHome-Skil dauerte es bei mir bis 3 Sek!

Sicherheit weis ich nicht, das hängt ja maßgeblich davon ab wie die Einstellungen sind. Aber grundsätzlich hast Du den Vorteil wenn Du einen Webhook in IP-Symcon einstellst dann geht dieser ja entweder auf ein Skript oder ein PHP Modul. Beim Skript hast Du eben den Vorteil das Du das Skript direkt im Objektbaum mit dem Editor bearbeiten kannst ohne irgendwie ins User Verzeichnis wechseln zu müssen und dort z.B. einen externen Editor benutzten musst. Bei einem PHP Modul hast Du den Vorteil das es so oder so nur geht wenn du einen Webhook nimmst der von der Webhook Instanz kommt, außerdem kannst Du dann in ein Debug Fenster weitere Informationen schreiben, das geht auch nicht wenn Du mit einer Datei im User Verzeichnis versuchst das zu lösen. Und zu guter letzt hast Du in der Webhook Instanz eine Übersicht über alle Webhhooks die Du für IP-Symcon angelegt hast.