Neues Modul: 00_ShellSwitch.pm (neuere Version von 00_GenShellSwitch.pm)

Begonnen von DeeSPe, 16 Oktober 2016, 00:55:54

Vorheriges Thema - Nächstes Thema

DeeSPe

Aus gegebenem Anlass habe ich heute mal im www nach "00_GenShellSwitch.pm" gesucht und diverse merkwürdige Interpretationen dazu gefunden. Die meisten sind mit alten FHEM Funktionen gebaut und haben wenig Funktion für den Endanwender (nur on/off).
Ich selbst benutze das Modul zwar nicht (mehr), aber ich habe das trotzdem mal zum Anlass genommen mir das Modul mal vorzuknüpfen und eine neue Abwandlung davon anzufertigen.
Herausgekommen ist das neue Modul 00_ShellSwitch.pm. Ich habe ihm absichtlich einen anderen Namen gegeben dass man das auch parallel testen kann. Der Name muss aber nicht endgültig sein.
Das neue Modul ist vom Code her viel einfacher aufgebaut als alle anderen Versionen die ich dazu gefunden habe und hat dennoch mehr Funktionen für den Endanwender (weil eben moderner 8)).
Bisher ist on und off integriert und auch alle setextensions wie blink, intervals, on-for-timer, off-till.........
Ganz perfekt ist es noch nicht! Ich könnte mir z.B. vorstellen dass man das auch noch nonblocking hinbekommt.

Da ich selbst gerade keine Verwendung dafür habe, wäre es nett wenn das Modul der Eine oder die Andere mal testen könnte(n).

Einfach das angehängte Modul in den Ordner fhem/FHEM/ kopieren (Modul reload oder FHEM Neustart) und dann wie folgt Device(s) in FHEM definieren:
define <name> ShellSwitch <shell command to execute> <on> <off>

Ich freue mich auf Euer Feedback.

Gruß
Dan

P.S. Gibt es nicht eventuell auch ein ähnliches Modul welches bereits in FHEM inbegriffen ist, oder warum ist sowas nur über andere Webseiten als GenShellSwitch zu finden?
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Hab nochmal eine verbesserte Version hochgeladen.
Hier wird nun auch die minimale Anzahl der übergebenen Argumente richtig gezählt wenn dem auszuführenden Kommando ein einzelner Systembefehl vorangestellt wird, wie z.B. sudo oder perl.
Auch der eventuelle Rückgabewert des aufgerufenen Skripts wird nun in ein Reading result geschrieben, allerdings bisher nur einzeilig und somit nur die letzte Zeile des Rückgabewertes. Das könnte ich noch optimieren und den vollständigen Rückgabewert in das Reading schreiben.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

RedCreek

Hi Dan,

super. Vielen Dank.
Ich war aktuell am selben Modul dran, da mir on-till bei GenShellSwitch gefehlt hat.
Hatte hier erstmal nur SetExtensions integriert.

Hab jetzt mal dein Modul verwendet und funktioniert für die ersten Tests.

Was ich noch nicht so gut finde, oder nicht verstehe ...
Bei einem on-till wird ja ein TimeSpec element erstellt
"Steckdose_2_till Next: 15:00:00 at" (von SetExtensions).
Dieses bleibt auch vorhanden, wenn man manuell on/off schaltet.
d.h. es könnte passieren, dass der Befehl aufgerufen wird, obwohl man das gar nicht mehr will.

Wie könnte man sicherstellen, dass der Timer auch gelöscht wird wenn man nur on/off schaltet und der Timer aber aktiv ist ?

Gruß
Volker

DeeSPe

Danke für den Hinweis.
Werde nachher den entsprechenden Befehl noch einbauen, das war gestern irgendwie untergegangen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

justme1968

@DeeSPe: was kann den das modul das nicht mit readingsProxy möglich wäre?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

DeeSPe

Zitat von: justme1968 am 16 Oktober 2016, 15:33:22
@DeeSPe: was kann den das modul das nicht mit readingsProxy möglich wäre?

gruss
  andre

Das kann ich Dir nicht beantworten.
Habe mich allerdings auch noch nie mit readingsProxy beschäftigt.
Wenn das readingsProxy kann, wozu gibt es denn dann dieses inoffizielle GenShellSwitch Modul?
Deswegen stellte ich ja auch die Frage ob es nicht ein Modul mit ähnlicher Funktion bereits gibt.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

justme1968

ZitatWenn das readingsProxy kann, wozu gibt es denn dann dieses inoffizielle GenShellSwitch Modul?
das weiss ich auch nicht :)

das hier wäre eine nicht blockierende version ohne rückmeldung mit on und off:define <name> readingsProxy <name>
attr <name> setList on off
attr <name> setFn { fhem('"<shell command to execute> '. ($CMD eq 'on' ?'<on>':'<off>') .'"') }


blockierend mit rückmeldung geht natürlich auch.

readingsProxy ist aber nicht auf on und off beschränkt sondern man kann beliebige kommandos einbauen. auch z.b. dim oder was auch immer.

über getFn und valueFn kann man auch externe werte abfragen oder den aktuellen wert von einem externen zustand abhängig machen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

DeeSPe

Klasse dass/wenn es das readingsProxy Modul auch kann.
Aber scheinbar ist das nicht so bekannt denn sonst würden ja die vielen Anfänger mit ihren 433MHz Steckdosen dieses Modul benutzen.
Vielleicht ist es auch für einen so "einfachen" Anwendungsfall für einen Anfänger zu komplex zum Einrichten?
In diese Bresche soll dieses "einfache" Modul springen. 8)

@volker_hielscher:
Ich habe die Version im ersten Beitrag noch mal mit SetExtensionsCancel aktualisiert.
Vielleicht magst Du damit noch mal testen und berichten ob es nun wie gewünscht klappt.
Danke.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

RedCreek

Hi Dan,

nein das funktioniert nicht. Der Timer ist immer no da.
Folgendes kannst du testen:
set device on-till 17:55
danach
set device off
set device on
-> jetzt schaltet es trotzdem um 17:55 aus. Weiß nicht ob das das normale Verhalten sein soll.

Gruß
Volker

justme1968

ich habe nicht geschaut was du genau eingebaut hast. aber:

es reicht nicht einfach nur SetExtensionsCancel aufrufen. da die setextensions auch selber wieder on oder off aufrufen wird dannn zwar das internal gelöscht aber der timer nicht angehalten.

du musst darf sorgen das du den normalen on off aufruf vom aufruf über die setextensions unterscheiden kannst. im 31_HUEDevice.pm gibt es ein beispiel wie man das machen kann.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

DeeSPe

Zitat von: volker_hielscher am 16 Oktober 2016, 17:51:50
set device on-till 17:55
danach
set device off
set device on
-> jetzt schaltet es trotzdem um 17:55 aus. Weiß nicht ob das das normale Verhalten sein soll.

Nein, das ist so nicht gedacht.
Ist wohl doch nicht ganz so einfach wie ich gehofft hatte.
Ich schaue es mir später nochmal an und werde es fixen.
Danke für die schnelle Rückmeldung.

Gruß
Dan

P.S. Vielen Dank für den Hinweis Andre.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Mit der im ersten Beitrag nun neu angehängten Version sollte es mit SetExtensionsCancel nun klappen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

ManuZz

Hallo,

ich bekomme die ShellSwitch nicht in FHEM eigebaut. Ich sehe die Datei im Order aber nicht unter edit Files in FHEM. Auch wenn ich die config anpasse, bekomme ich beim abspeichern in FHEM eine Fehlermeldung.
Cannot load module ShellSwitch

Habe ich irgendwie verpasst das Modul korrekt zu aktivieren?


DeeSPe

Es kommt in den fhem Ordner (/opt/fhem/FHEM/).
Danach ein "reload 00_ShellSwitch" in die Eingabezeile von FHEM oder ein "shutdown restart".

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

ManuZz

Hey vielen Dank!

den Restart hatte ich schon versucht, aber in den Files habe ich sie trotzdem nicht gesehen.
Ich habe eben den Befehl von dir ausgeführt, da bekam ich die Fehlermeldung: Undefined subroutine &main::ShellSwitch_Initialize called at fhem.pl line 2277


ich habe sie auch an dem selben Pfad abgelegt den du angegeben hattest, auch die Dateiberechtigungen wie bei allen anderen Dateien auf 666 gesetzt.
Zusätzlich habe ich sie auch hier abgelegt: /opt/fhem/www/gplot

Aber leider auch ohne Erfolg.

Das selbe mit der 00_GenShellSwitch.pm die ich auf dem alten Raspberry genutzt habe.

Ich bin auf das 3er umgestiegen und habe auch das neueste RASPBIAN JESSIE installiert.

Es wundert mich das FHEM die Datei nicht einliest. sie war bei der Installation in einer anderen Version schon vorhanden, die ich aber unter edit Files auch nicht sehen konnte. Auch wenn ich das Modul angesprochen habe gab es eine Fehlermeldung.

FHEM habe ich auch schon geupdated, leider auch ohne Erfolg.

EDIT:

Nach dem Restart per Befehl bekomme ich folgende Fehlermeldung:

configfile: Cannot load module ShellSwitch
Cannot load module ShellSwitch