Shell Kommando in at befehl

Begonnen von mbeckerkassel, 31 Mai 2013, 15:30:46

Vorheriges Thema - Nächstes Thema

mbeckerkassel

Hallo,

ich werde noch wahnsinning...

Warum funktioniert bei mir (FHEM als ROOT auf Fritzbox 7390) im Frontend

"/bin/cat /proc/loadavg"

einfach nur perfekt.

Wenn ich den Load meiner Fritzbox als AT Kommando speichern will:

define FritzLoad_at at +*00:00:15 set FritzLoad "/bin/cat /proc/loadavg" ;;

(hier zum Testen alle 15 Sekunden).

hab ich nur als State:

"/bin/cat /proc/loadavg"

ich kapier das einfach nicht.

HILFE!

Viele Grüße
Michael

Zrrronggg!

Klar, das Kommando

set FritzLoad "/bin/cat /proc/loadavg"

weist dem  Dummy FritzLoad den Wert  "/bin/cat /proc/loadavg" zu.
Und zwar buchstäblich.

D.H. ich weiss, warum es nicht macht was du meinst. Wie das macht weiss ich aber leider auch nicht.
Sorry.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Puschel74

Hallo,

wie Zrrronggg! schon sagte kann das
define FritzLoad_at at +*00:00:15 set FritzLoad "/bin/cat /proc/loadavg" ;;
nicht in dem Sinne klappen wie du es gerne hättest.
Über die linke Schulter von hinten durchs rechte Auge würd ich das so versuchen:
define FritzLoad_at at +*00:00:15 {
 my $load = sudo "/bin/cat /proc/loadavg" ;
 set FritzLoad $load;
}  

Wobei ich auch nicht sicher bin ob das so klappt da ich zwar auch Kommandozeilenbefehle aufrufe - dies aber über eine sub in einer pm-Datei mache und den Rückgabewert auswerte.
Aber Versuch macht kluch ;-)

Grüße

P.S.: Wen nes nicht klappt kann ich dir ja meine pm und notify schicken zum basteln ;-)

Edith: Achtung!! Ich bearbeite auschliesslich die DEF eines notify, daher fehlen ;; und \ darum musst du dich selber kümmern.
Ein copy&paste meines Codes in die fhem.cfg wird mit Sicherheit in Fehlermeldungen münden
Edith2: Den Text werd ich mal in meine Sig aufnehmen ^^
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Zrrronggg!

define FritzLoad_at at +*00:00:15 {my $load = sudo "/bin/cat /proc/loadavg" ;; set FritzLoad $load }  

Würde ich dann denken.

Ein copy&paste meines Codes in die fhem.cfg wird mit Sicherheit in
ZitatFehlermeldungen münden
Edith2: Den Text werd ich mal in meine Sig aufnehmen ^^

LOL

FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Puschel74

Hallo,

ja Zrrronggg! - ich weiß das du Einzeiler liebst.
Mir sind sie ein Graus, kA warum.
Ich tu mir mit schönen Absätzen und Einrückungen einfacher leichter ;-)

ZitatLOL
Warum das?

Ich musste schon mehrfach erleben das man meine Codebeispiele per copy&paste in die fhem.cfg eingefügt hat mit dem Ergebniss
<Funktioniert nicht>.
Sowas kann nur schief gehen da ich mich um ;; und \ nicht kümmere da ich grundsätzlich das DEF bearbeite.
Das macht es für mich einfacher da ich (als Automatiker) denkfaul bin und das lieber einem funktionierendem System überlasse - so wie fhem ;-).

Grüße

P.S.: Aber ich denke mal das LOL war ironisch gemeint ;-)
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Zrrronggg!

Nö,  gar nicht ironisch, ich fand nur die Idee super, als einer der führenden Helfer hier den Satz
Zitat"Ein copy&paste meines Codes in die fhem.cfg wird mit Sicherheit in Fehlermeldungen münden"
in die Signatur zu übernehmen.

(Und zwar ganz unabhängig davon, ob oder WARUM das so ist)




Zitatja Zrrronggg! - ich weiß das du Einzeiler liebst.
Mir sind sie ein Graus, kA warum.
Ich tu mir mit schönen Absätzen und Einrückungen einfacher leichter ;-)

Ich finde die speziell hier besser, weil sie den Code in seiner - wenn man so will - einfachsten Form zeigen.


Viel posten hier also Lösungen Ausschnitte aus ihrem strukturierten Code.

Das führt dazu, dass bei denen dann Sachen drin sind, die in dem konkreten Fall nicht notwendig sind, Zeilenumbruchzeichen, zusätzliche Semikolons am Ende von Zeilen, wo keine hin müssen, Einkapselung von Fhem Kommandos in Perl-kommandos ohne Not, zum Teil sogar für jeden Befehl einzeln...und so Kram.


(Mr. Eltako macht das z.B. gerne. Er hat gute Lösungen und Hilfen, aber sein Code strotzt nur so vor Elementen die an sich im konkreten Fall überflüssig sind, bzw. "Zierrat" der das seiner Auffassung nach übersichtlicher macht)

Das führt dann wieder dazu, das richtige Anfänger meinen, das MÜSSTE so. Sie begreifen nicht, dass das nur Strukturell besser aussieht oder ein Überbleibsel aus einem komplexeren Beispiel ist oder die PERL Kapselung da nur steht, weil da frühre mal eine IF Abfrage drin war... etc.etc.

Das Ergebnis ist dann "Cargocult Programming".  Verwendung von Strukturen und Zeichen in der Annahme, das sei zwingend, obwohl es zum Code eigentlich nichts und oft genug der Code nur trotzdem geht, aber nicht weil da noch ein Semikon am Ende ist etc.

So gibs hier schon eine Menge Leute, die meinen, als letztes vor der geschweiften Klammer müsse immer ein ";;" stehen, nämlich weil das bei der (auch von dir favorisierten) strukturierten Schreibwiese so aussieht. Ich hab hier auch schon Leute erlebt, die aus

set Lamp1 on ; set Lamp2 on

{ fhem("set lamp1 on") };;\
{ fhem("set lamp2 on") };;\

machen, weil sie Mr. Eltako's Darstellungsstil ohne echtes Verständnis "nachplappern".

Die schnallen natürlich nicht die Bohne, wann man {fhem("")} überhaupt einsetzt und was genau das macht.

Und das wird ihnen das Leben irgendwann mal richtig schwer machen: Den zunächst funzt der Code ja, aber irgendwann ist es eben nicht mehr egal, ob man da noch ne Klammer oder ein paar Semikolons zu viel drin hat. Ich spreche aus Erfahrung denn so ging's mir früher auch mal.

Tatsächlich sehen viel Sachen bei mir auch strukturiert in der fhem.cfg

Ich halte es nur  - wenn man so will - pädagogisch für falsch, den Leuten das so zu präsentieren. Also natürlich nur, wenn die Sache nicht "gross" ist.





FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Puschel74

Hallo,

Zitatals einer der führenden Helfer hier den Satz

Jetzt muss ich aber wohl mal den ironie-tag einschalten sonst lieg ich morgen noch lachend unter dem Tisch.

Ich drohe dir an +1 zu klicken wo ich dich nur sehe ^^

"als einer der führenden Helfer" - ist klar *LOL*
Meine Codes (so man diese als solches bezeichnen kann) schreibst du doch im Handumdrehen als Einzeiler (welche auch noch funktionieren).
Ich benötige für jeden Befehl eine eigene Zeile - du trennst die schön fein mit ; und jagst diese auf einmal durch den Sender.
Und da nennst du mich einen "führenden Helfer"?
So. Ironie-Tag wieder aus

So wie du, versuche auch ich nur mein (überschaubares) "Wissen" ein zu bringen.
Wobei Wissen bei mir etwas zu hoch gegriffen ist - trail&error dank rumliegendem RasPi sei dank.

Aber es gibt immer "Anfänger" (zu denen auch ich noch lange gehöre) die meine Beispiele 1:1 in die fhem.cfg einfügen und sich dann wundern das es Fehlermeldungen
hagelt.
Das möchte ich in Zukunft mit meiner überarbeiteten Sig versuchen zu minimieren (verhindern kann ich das sowieso nie ;-) )

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Zrrronggg!

Naja, ich meinte mit "Führend" ja deinen Einsatz und die Geduld die du aufbringst.
Du beantwortest eben viele Threads.  alles super zu wissen allein reicht ja nicht, jemand muss sich ja auch die Mühe machen den Leuten die Würmer ausser Nase zu ziehen und so.

ZitatMeine Codes (so man diese als solches bezeichnen kann) schreibst du doch im Handumdrehen als Einzeiler (welche auch noch funktionieren).
Ich benötige für jeden Befehl eine eigene Zeile - du trennst die schön fein mit ; und jagst diese auf einmal durch den Sender.

Naja, siehe dazu meinen Edit oben.

Das mit den Einzeilern ist eben nur so eine Marotte von mir. Das die aber einer bestimmten ... Komplexität ... sehr schnell unübersichtlich werden ist klar. Strukturierte Darstellung neigt nur dazu, ne Menge "Ballast" anzuhäufen und der ungeübte Anfänger kann den Ballast vielleicht nicht von eigentlichen Code unterscheiden.

Vermutlich werden mir viel Leute in dieser Ansicht voll wiedersprechen.
Und ich geh mir mal was zu essen holen eben.



FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

mbeckerkassel

vielen Dank für eure Konversation zum Thema Coding. Trotzdem führt diese leider hier nicht zum Ziel.
Ich programmiere seit 15 Jahren und komme hier trotzdem nicht weiter.

wenn ich genau diese zeilen:

define FritzLoad_at at +*00:00:15 { \
 my $load =  sudo "/bin/cat /proc/loadavg";;\
 set FritzLoad $load;;\
}  

oder auch als Einzeiler in die fhem.cfg einfüge dann klappt es immer noch nicht. Übrigens:

define FritzLoad_at at +*00:00:15 {
 my $load =  sudo "/bin/cat /proc/loadavg"
 set FritzLoad $load
}  

schon gar nicht.

Kann ja auch nicht funktionieren, da fhem den befehl sudo nicht kennt.

jetzt hat FritzLoad den State $load ($load als Text!!)

die Option my $load =  "sudo /bin/cat /proc/loadavg";;\
funktioniert genau so nicht... Ergebnis das gleiche.
nein, das war es auch nicht.


Puschel74

Hallo,

was ein bischen blättern im Forum so ausmacht.

Hier mal ein Beitrag:
Link
und davon hat es noch einige hier.

Evtl. einfach mal ein bischen suchen und lesen.

Grüße

P.S.: Ab und an leiste ich auch nur Hilfe zur Selbsthilfe
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

mbeckerkassel

Vielen Dank für den Post. Aber ich finde einfach nicht wie ich die Ausgabe des Shell Befehls in den Dummy hineinbekomme.

Hast du hierfür die Lösung? Danke für die Hilfe zur Selbsthilfe, schliesslich kannst du den Personen auch nur bis vor den Bildschirm schauen. :-) Was ich im Augenblick benötige ist Hilfe.

Viele Grüße

Michael

Puschel74

Hallo,

dieses notify

Sensor_I2C {
my $temp = messen("@");
my ($sensor, $temp_sensor) = split /\ /, "$temp", 2;
my ($sensor_temp, $zeichen) = split /\ /, "$temp_sensor", 2;
if ($sensor eq "0x48") {
  $sensor = "Heizraum_Luft";
}
if ($sensor eq "0x49") {
  $sensor = "Hzg_Ruecklauf";
}
if ($sensor eq "0x4c") {
  $sensor = "Hzg_Vorlauf";
}
$zeichen = " °C";
fhem("set $sensor $sensor_temp $zeichen");
}


ruft bei mir den Code in meiner 99_I2CGetValue.pm

#!/usr/bin/perl

package main;
use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

sub messen($) {
my ($name) = @_;
my ($sensor) = (Value($name));
my ($befehl) = "sudo i2cget -y 1 ".$sensor." 0x00 w &";
my ($result) = `$befehl`;
my ($wert_hex_nk) = substr($result,2,2);
my ($wert_hex_vk) = substr($result,4,2);
my ($wert_dez_vk) = hex($wert_hex_vk);
my ($wert_dez_nk) = hex($wert_hex_nk);
if ($wert_dez_nk > 128) {
  $wert_dez_nk = ".5";
}
else {
  $wert_dez_nk = ".0";
}
my ($temperatur) = $wert_dez_vk.$wert_dez_nk;
my ($Sensorwert) = $sensor." ".$temperatur;
return "$Sensorwert";
}

1;

auf.

hoffe das dir das etwas hilft.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Zrrronggg!

Zitatvielen Dank für eure Konversation zum Thema Coding. Trotzdem führt diese leider hier nicht zum Ziel.

ja, stimmt natürlich, entschuldige die off-topic Diskussion. In der Sache selbst bin ich raus, ich weiss es nicht.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Puschel74

Hallo,

kurz und knapp:

Diese beiden Zeilen in der pm-datei

my ($befehl) = "sudo i2cget -y 1 ".$sensor." 0x00 w &";
my ($result) = `$befehl`;

lösen den Befehl aus und der Rückgabewert landet in $result

Ausserhalb einer pm-datei sollte das mit
dem vorangestellten system-Befehl klappen wie in dem, von mir verlinkten Beitrag zu lesen.

Aber es gab ja noch keine Rückmeldung vom Fragesteller.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.