FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Frini am 12 Dezember 2018, 15:31:14

Titel: Notify soll Skript auf Betriebssystemebene ausführen und zwei Werte übermitteln
Beitrag von: Frini am 12 Dezember 2018, 15:31:14
Hallo,
ich hab eine wirklich blöde Frage und bräuchte einmal Eure Hilfe. Folgende Situation habe ich:
mit dem Befehl systemCommand("php7.0 /home/pi/SetCurve.php 0 0.9 kann ich auf meiner Heizung die Heizkurve setzen 0 für Niveau und 0.9 für die Steigung.

Jetzt habe ich einen Dummy erstellt, mit welchem ich die Steigung über ein PulldownMenü einstellen kann. Das Niveau möchte ich über das Reading aus der dem Heizungs-device ziehen, welches leider nicht funktioniert :-(
SetCurve:.* {
my $Niv=ReadingsVal('vitoconnect100','HK1-Heizkurve-Niveau','0');
systemCommand("php7.0 /home/pi/SetCurve '$Niv' '$EVENT'");
}


Was aber funktioniert ist folgendes:
SetCurve:.* {
systemCommand("php7.0 /home/pi/SetCurve 0 '$EVENT'");
}

Ob jetzt 0 oder 1 oder 2 für die Steigung ist egal. Mit eingetragener Zahl klappt es.

Mein Ziel ist es, über zwei Dummies (einmal Niveau und einmal Steigung) beide Werte getrennt voneinander einzustellen, da aber der Befehl an die Heizung beide Werte enthalten muss, wollt ich den jeweils anderen aus dem aktuellen Reading des Heizungs Devices ziehen.

Ich hoffe das war einigermaßen Verständlich.  ::)
Titel: Antw:Notify soll Skript auf Betriebssystemebene ausführen und zwei Werte übermitteln
Beitrag von: CoolTux am 12 Dezember 2018, 16:47:19
Entweder mal die einfachen Hochkommatar bei den Variablen.
Titel: Antw:Notify soll Skript auf Betriebssystemebene ausführen und zwei Werte übermitteln
Beitrag von: Otto123 am 12 Dezember 2018, 18:16:12
In '$EVENT' wird keine Variable aufgelöst.
Ich denke CoolTux meinte nicht Entweder sondern Entferne :)

Hier  (https://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html)etwas ausführlicher.

Gruß Otto
Titel: Antw:Notify soll Skript auf Betriebssystemebene ausführen und zwei Werte übermitteln
Beitrag von: CoolTux am 12 Dezember 2018, 18:29:22
Danke Dir Otto. Doofe Rechtschreibkorrektur  ;D
Titel: Antw:Notify soll Skript auf Betriebssystemebene ausführen und zwei Werte übermitteln
Beitrag von: Wernieman am 12 Dezember 2018, 18:41:30
Allerdings dürfte das mit seinen " vom systemCommand kollidieren ...

Btw:
Wenn Du in Deinem Script in der ersten Zeile stehen hast (o.Ä.)
#!/usr/bin/php7.0
Brauchst Du das Script nicht direkt mit php zu öffnen, sondern das System sucht sich den selber automatisch raus ....
Titel: Antw:Notify soll Skript auf Betriebssystemebene ausführen und zwei Werte übermitteln
Beitrag von: Frini am 12 Dezember 2018, 21:23:24

HK1.Steigung:.* {
my $Niv=ReadingsVal('vitoconnect100','HK1-Heizkurve-Niveau','0');
systemCommand("php7.0 /home/pi/SetCurve.php $Niv '$EVENT'");
}/code]
So funktioniert es. Super Danke.
Titel: Antw:Notify soll Skript auf Betriebssystemebene ausführen und zwei Werte übermitteln
Beitrag von: Otto123 am 12 Dezember 2018, 21:51:35
Sicher? Weil $EVENT steht immer noch in '$EVENT'  :o
Titel: Antw:Notify soll Skript auf Betriebssystemebene ausführen und zwei Werte übermitteln
Beitrag von: Frini am 13 Dezember 2018, 06:34:25
Ja ganz sicher. Ich habe im Vorfeld sämtliche Varianten ausprobiert. Aber $Niv und '$EVENT' nicht.

Ich habe mir jetzt zwei Dummies gebastelt einen für das Niveau und einen für die Steigung. Ich setze jetzt zuerst den Dummy für die Neigung und dann sende ich beide Werte mittels dem Notify an die Heizung. Werde diese Einstellungen hoffentlich nur noch diese Woche brauchen :-)

den Pfad in die php einzutragen habe ich gemacht, ist sogar korrekt. Hat bei mir aber noch nie funktioniert. Ich sach mal so, Hauptsache es läuft :-)
Bei der Ausführung eines Bash-Skriptes funktioniert dies übrigens.
Titel: Antw:Notify soll Skript auf Betriebssystemebene ausführen und zwei Werte übermitteln
Beitrag von: Otto123 am 13 Dezember 2018, 09:20:51
Naja ok, wird so sein. Ich hatte es mir ja auch so aufgeschrieben.
ZitatDamit es nicht zu leicht wird, kann man die String Terminatoren natürlich auch schachteln. Für die Auflösung von Perl Variablen ist dabei die äußere Klammer bestimmend. Das erste Beispiel gibt Hallo Welt aus, das zweite nur Hallo.
{my $a = "Welt";;qx "echo 'Hallo $a'"}
{my $a = "Welt";;qx 'echo "Hallo $a"'}
Die Variable $a wird im zweiten Fall nicht aufgelöst, sondern als Shell Variable interpretiert.

Gruß Otto