Hallo!
Ich habe eine Steuerung/Webserver erstellt, über die ich meine Raffstores hoch/runter fahren kann.
Die URI sieht so aus:
http://xxx.xxx.xxx.xxx/?rc1=up (Raffstore 1 hoch)
http://xxx.xxx.xxx.xxx/?rc1=down (Raffstore 1 runter)
Diesen würde ich gerne in FHEM einbinden.
Das müsste doch eigentlich über HTTPMOD GET funktionieren oder?
Kann mir jemand helfen, bzw. ein passendes Beispiel geben?
Beste Grüße
Günther
Das packst du z. B. in ein doif
("wget -q -O /dev/null "http://xxx.xxx.xxx.xxx/?rc1=up")
Hallo!
Ich habe einen Schalter definiert und diesen in das "DOIF" eingebaut.
Beim Anwählen von "UP" bzw. "DOWN" tut sich noch nichts, was mache ich falsch?
define Schalter1 dummy
attr Schalter1 room Raum1
attr Schalter1 webCmd UP:DOWN
define Raum1.Raffstore1 DOIF ([Schalter1] eq "UP") ("wget -q -O /dev/null "http://xxx.xxx.xxx.xxx/?rc1=up") DOELSEIF ([Schalter1] eq "DOWN") ("wget -q -O /dev/null "http://xxx.xxx.xxx.xxx/?rc1=DOWN")
Evtl. geht es mit ROLLO. Damit sollten auch Zwischenpositionen möglich sein.
Zitat von: günther38 am 03 Oktober 2020, 08:06:38
Hallo!
Ich habe einen Schalter definiert und diesen in das "DOIF" eingebaut.
Beim Anwählen von "UP" bzw. "DOWN" tut sich noch nichts, was mache ich falsch?
define Schalter1 dummy
attr Schalter1 room Raum1
attr Schalter1 webCmd UP:DOWN
define Raum1.Raffstore1 DOIF ([Schalter1] eq "UP") ("wget -q -O /dev/null "http://xxx.xxx.xxx.xxx/?rc1=up") DOELSEIF ([Schalter1] eq "DOWN") ("wget -q -O /dev/null "http://xxx.xxx.xxx.xxx/?rc1=DOWN")
Sorry....da war ein " zuviel
("wget -q -O /dev/null http://xxx.xxx.xxx.xxx/?rc1=up")
Zitat von: Beta-User am 03 Oktober 2020, 08:12:43
Evtl. geht es mit ROLLO. Damit sollten auch Zwischenpositionen möglich sein.
Das hört sich interessant an, aber kann es sein, dass das nur für Relaisschaltungen gedacht ist?
Im ROLLO-FHEMWiki steht,
"...einfache Möglichkeit, mit ein bis zwei Relais den Hoch-/Runterlauf eines Rolladen zu steuern..."In meinem Fall schalte ich über URIs
Weiters,
"...der Rollladen muss bereits als Device in FHEM existieren und funktionieren (mit Befehlen für "hoch", "runter" und "stop")...""das tut es bei mir leider auch noch nicht
Zitat von: rr725 am 03 Oktober 2020, 09:26:26
Sorry....da war ein " zuviel
("wget -q -O /dev/null http://xxx.xxx.xxx.xxx/?rc1=up")
Danke, leider funktioniert es trotzdem nicht
Zitat von: günther38 am 03 Oktober 2020, 11:11:13
Das hört sich interessant an, aber kann es sein, dass das nur für ...
Die vertiefter Erfahrung habe ich mit dem Modul nicht, aber soweit ich das verstanden habe, braucht man das/die "andere/n FHEM-Device/s" eigentlich nur, damit es jeweils einen "Adressaten" für Befehle gibt. Aber wenn das direkt als URL-Kommando-rausgeht, _könnte_ es eigentlich auch ganz ohne klappen. Im Zweifel mal im ROLLO-Thread nachfragen.
Wenn es klappt, ist das jedenfalls mMn. die einfachste Variante...
Zitat von: günther38 am 03 Oktober 2020, 11:12:24
Danke, leider funktioniert es trotzdem nicht
Ich würde tippen, da fehlen noch ein paar geschweifte Klammern:
{("wget -q -O /dev/null http://xxx.xxx.xxx.xxx/?rc1=up")}
Gruss
Enno
Zitat von: enno am 04 Oktober 2020, 18:26:42
Ich würde tippen, da fehlen noch ein paar geschweifte Klammern:
{("wget -q -O /dev/null http://xxx.xxx.xxx.xxx/?rc1=up")}
Gruss
Enno
Hallo!
Ich habe es jetzt auch mit geschweiften Klammern probiert, aber leider wird das Signal auch damit nicht übertragen.
Hat eventuell noch jemand eine Idee dazu?
Bei mir funktioniert es wie ich es oben angegeben habe. Ohne geschw. Klammern.
Ich schätze du hast keine Berechtigungen vergeben um systembefehle ausführen zu können
Zwischeninfo!
Zum Testen habe ich mal via HTTPMOD die Statusabfrage die im Webserver implementiert ist abgefragt.
Wenn ich direkt http://xxx.xxx.xxx.xxx/?rs1=down oder http://xxx.xxx.xxx.xxx/?rs1=up im Browser aufrufe,
wird dies am Raffstore umgesetzt und in FHEM der Status (DOWN bzw. UP) richtig angezeigt.
D.h. verbindungseitig sollte doch eigentlich alles OK sein oder?
define RaffstoreArduino HTTPMOD http://xxx.xxx.xxx.xxx/ 10
attr RaffstoreArduino userattr reading01Name reading01Regex stateFormat
attr RaffstoreArduino reading01Name status
attr RaffstoreArduino reading01Regex status *: *(.*)
attr RaffstoreArduino stateFormat Status: status
Zitat von: rr725 am 04 Oktober 2020, 20:06:25
Bei mir funktioniert es wie ich es oben angegeben habe. Ohne geschw. Klammern.
Ich schätze du hast keine Berechtigungen vergeben um systembefehle ausführen zu können
OK, schaue ich gleich mal nach,
soll ich dass so wie hier: https://www.ueberueck.com/index.php/fhem-hausautomatisierung/fhem-how-to-s/raspberry-aus-fhem-neu-starten
beschrieben setzen?
Ich würde nicht nach dem verlinkten Beitrag vorgehen, weil:
du für dein Vorgehen mAn keine Login-Shell brauchst
man die sudoers mittels visudo bearbeiten sollte
ab Stretch/Buster jeder User eine eigene sudoers-Datei unter /etc/sudoers.d/ hat (pi sollte schon "vertreten" sein)
man über sudo nur die Befehle ohne PW erlauben sollte, die man auch braucht
Gruß, Joachim
Hast du mal versucht den Befehl in der FHEM Statuszeile direkt einzugeben? Lass doch erst mal -q weg, dann müsstest du eigentlich eine Fehlermeldung oder Antwort bekommen. Vielleicht kommst du damit ja weiter.
Gruss
Enno
Zitat von: enno am 04 Oktober 2020, 21:16:26
Hast du mal versucht den Befehl in der FHEM Statuszeile direkt einzugeben? Lass doch erst mal -q weg, dann müsstest du eigentlich eine Fehlermeldung oder Antwort bekommen. Vielleicht kommst du damit ja weiter.
Gruss
Enno
Hallo Enno!
Wenn ich wie von dir vorgeschlagen den Befehl,
"wget -O /dev/null http://xxx.xxx.xxx.xxx/?rs3=up"
direkt in der FHEM Statuszeile ausführe, dann klappt es!
Im Logfile steht dann folgendes:
--2020-10-05 12:26:13-- http://xxx.xxx.xxx.xxx/?rs3=up
Connecting to xxx.xxx.xxx.xxx:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: '/dev/null'
0K 52.4K=0.01s
2020-10-05 12:26:13 (52.4 KB/s) - '/dev/null' saved [596]
D.h. irgentwas passt da in dem DOIF noch nicht, richtig?
Gruss
Günther
Vermutlich hängt das auch am Command-Typ:
https://fhem.de/commandref_modular.html#command (https://fhem.de/commandref_modular.html#command)
Das muss als System-Kommando zu erkennen sein, evtl. kann es helfen, das in "qx()" einzupacken (blockiert aber ggf.!)...
(Da es den HTTPMOD schon gibt: auch da gibt es die Möglichkeit, direkt set-Kommandos zu implementieren, die man dann für DOIF/ROLLO/... ansprechen kann).
EDIT: das hier hat grade die Suche mit ROLLO und wget zu Tage gefördert: https://forum.fhem.de/index.php/topic,47202.msg757108.html#msg757108
dann versuch im DOIF doch mal mit ({qx(wget -O /dev/null http://xxx.xxx.xxx.xxx/?rs3=up)})
Gruss
Enno
so...noch einmal.....so funktioniert es- sprich diese syntax funktioniert.
define Rollo_Kueche_auf DOIF ([Rollo_Kueche] eq "on") ("wget -q -O /dev/null http://xxx.xxx.xxx.xxx/cm?cmnd=power1%20on") DOELSE ("wget -q -O /dev/null http://xxx.xxx.xxx.xxx/cm?cmnd=power1%20off")
wenn es bei dir so nicht funktioniert überprüfe die berchtigungen. ich habe meinen fhem user in die root gruppe gepackt. somit darf er alles auf systemebene.
Oder.....
Damit der FHEM Benutzer Benutzer "fhem" sudo Befehle ausführen darf, diesen konfigurieren. In der Datei "/etc/sudoers" folgende Zeile hinzufügen:
fhem ALL=(ALL) NOPASSWD: ALL
Zitat von: rr725 am 05 Oktober 2020, 13:50:26
ich habe meinen fhem user in die root gruppe gepackt. somit darf er alles auf systemebene.
...das ist in der Pauschalität definitiv nicht zur Nachahmung zu empfehlen...
(no further comment)
Wieso....jeder sollte wissen was er macht, welche Auswirkungen es hat. Zum testen ?!
Mein raspberry ist nicht mit dem inet verbunden....da ist's egal......
Zitat von: rr725 am 05 Oktober 2020, 14:06:11
Wieso....jeder sollte wissen was er macht, welche Auswirkungen es hat. Zum testen ?!Mein raspberry ist nicht mit dem inet verbunden...
Genau, dann hoffe ich mal, dass du und der TE es jweils wissen, was sie machen...
Und sorry, dass ich den überdeutlichen Hinweis überlesen hatte, dass du nur eine Insellösung betreibst ;) .
Vermutlich habe ich das hier auch nicht richtig interpretiert, wenn ich mit dem mal davon ausgehe, dass das Thema Berechtigungen vom Tisch war...?
Zitat von: günther38 am 05 Oktober 2020, 12:22:46
Wenn ich wie von dir vorgeschlagen den Befehl,
"wget -O /dev/null http://xxx.xxx.xxx.xxx/?rs3=up"
direkt in der FHEM Statuszeile ausführe, dann klappt es!
(Ansonsten bin ich unbelehrbar und bleibe ich bei meiner Auffassung, dass fhem als Systemuser zu halten ist, der keine erweiterten Berechtigungen benötigt!)
Zitat von: rr725 am 05 Oktober 2020, 13:50:26
Oder.....
Damit der FHEM Benutzer Benutzer "fhem" sudo Befehle ausführen darf, diesen konfigurieren. In der Datei "/etc/sudoers" folgende Zeile hinzufügen:
fhem ALL=(ALL) NOPASSWD: ALL
Das würde ich freiwillig nicht machen! So wie Günther oben geschrieben hat geht es als FHEM User auch ohne sudo!! Diese Änderung bringt also rein gar nichts ausser ein Sicherheitsproblem. Das Problem ist wohl in DOIF versteckt...
Gruss
Enno
Zitat von: enno am 05 Oktober 2020, 15:50:10
Das würde ich freiwillig nicht machen! .Das Problem ist wohl in DOIF versteckt...
Musst du ja auch nicht....er soll es doch auch nur testen um weiter zu kommen. Nur irgendetwas zu kommentieren bringt ihn nicht weiter.
Das es an doif liegen soll ist quatsch. So wie ich es oben eingefügt habe funktioniert es bei mir. Wo bitte soll dann da Problem bei doif liegen ?!
Zitat von: günther38 am 05 Oktober 2020, 12:22:46
Hallo Enno!
Wenn ich wie von dir vorgeschlagen den Befehl,
"wget -O /dev/null http://xxx.xxx.xxx.xxx/?rs3=up"
direkt in der FHEM Statuszeile ausführe, dann klappt es!
@rr725: einfach mal die Antworten auf meine Vorschlage lesen....
Hat schon einer ins Logfile geschaut?
Bei mir liefert "wget -O /dev/null http://xxx.xxx.xxx.xxx/?rs3=up" in der Kommandozeile sowie als Befehl in DOIF
z.B.
defmod di_an DOIF ([FS])("wget -O /dev/null http://xxx.xxx.xxx.xxx/?rs3=up")
die gleichen Ergebnisse.
Das hätte ich auch nicht anders erwartet, da DOIF die gleichen FHEM-Funktionsaufrufe benutzt.
Kannst du mir bitte die Definition des Schalters "FS" von
defmod di_an DOIF ([FS])("wget -O /dev/null http://xxx.xxx.xxx.xxx/?rs3=up")
dazu schreiben?
Eventuell mache ich da etwas falsch.
Zitat von: günther38 am 07 Oktober 2020, 22:19:21
Kannst du mir bitte die Definition des Schalters "FS" von
defmod di_an DOIF ([FS])("wget -O /dev/null http://xxx.xxx.xxx.xxx/?rs3=up")
dazu schreiben?
Eventuell mache ich da etwas falsch.
FS ist hier unerheblich, es ist bei mir einfach eine FS20-Taste, damit löse ich die Ausführung aus.
Zitat von: günther38 am 07 Oktober 2020, 22:19:21
Kannst du mir bitte die Definition des Schalters "FS" von
defmod di_an DOIF ([FS])("wget -O /dev/null http://xxx.xxx.xxx.xxx/?rs3=up")
dazu schreiben?
Eventuell mache ich da etwas falsch.
Warum machst du denn nicht was man dir anbietet, wenn man sich schon die Mühe macht ?!
Ich habe dir doch oben ein komplettes fehlerfreies, funktionsfähiges Beispiel gegeben. Mit allem pi pa po.
Hallo!
Ich habe es nun zum Teil geschafft!
Wenn ich den Vergleichswert (UP, DOWN) in die [] mit rein packe anstatt mit "eq" zu arbeiten,
define Schalter1 dummy
attr Schalter1 room Raum1
attr Schalter1 webCmd UP:DOWN
define Raum1.Raffstore1
DOIF ([Schalter1:"UP"]) ("wget -q -O /dev/null http://xxx.xxx.xxx.xxx/?rs3=up")
DOELSEIF ([Schalter1:"DOWN"]) ("wget -q -O /dev/null http://xxx.xxx.xxx.xxx/?rs3=down")
kann ich "Raffstore1" mit "Schalter1" hoch bzw. runter fahren.
Das ganze enthält jetzt noch folgenden Fehler,
Wenn ich z.B. "UP" fahre und danach nochmals den "UP"-Befehl gebe, wird dieser nicht mehr umgesetzt.
Ich muss dann einmal "Down" fahren, danach wird der "UP"-Befehl wieder ausgeführt.
Umgekehrt verhält es sich genau so.
Kann es sein, dass auf den letzten "State" (z.B. UP) geprüft wird und daher dieser nicht nochmal ausgeführt wird, da er ja schon erreicht ist?
Könnt ihr mir disbezüglich nochmal einen Hinweis geben, woran es liegt, bzw. wie ich das lösen könnte?
Setze das Attribut do always
Danke!!!
So funktioniert es.
define Schalter1 dummy
attr Schalter1 room Raum1
attr Schalter1 webCmd UP:DOWN
define Raum1.Raffstore1
DOIF ([Schalter1:"UP"]) ("wget -q -O /dev/null http://xxx.xxx.xxx.xxx/?rs3=up")
DOELSEIF ([Schalter1:"DOWN"]) ("wget -q -O /dev/null http://xxx.xxx.xxx.xxx/?rs3=down")
attr Raum1.Raffstore1 do always
Ach ja, zur allgemeinen Information, ich musste keine Berechtigungen anpassen.
Zitat von: günther38 am 11 Oktober 2020, 19:27:11
Danke!!!
So funktioniert es.
define Schalter1 dummy
attr Schalter1 room Raum1
attr Schalter1 webCmd UP:DOWN
define Raum1.Raffstore1
DOIF ([Schalter1:"UP"]) ("wget -q -O /dev/null http://xxx.xxx.xxx.xxx/?rs3=up")
DOELSEIF ([Schalter1:"DOWN"]) ("wget -q -O /dev/null http://xxx.xxx.xxx.xxx/?rs3=down")
attr Raum1.Raffstore1 do always
Ach ja, zur allgemeinen Information, ich musste keine Berechtigungen anpassen.
Das ist ja schön.
Allerdings verstehe ich nicht, warum es bis zur Auflösung so viele Posts gebraucht hat, wenn bereits im zweiten Post der korrekte Vorschlag drin stand.
Zitat von: günther38 am 11 Oktober 2020, 19:27:11
Ach ja, zur allgemeinen Information, ich musste keine Berechtigungen anpassen.
Sehr schön! Herzlichen Glückwunsch, schreib mal im Titel [gelöst] davor.
Gruss
Enno