hilfe für httpmod gesucht

Begonnen von the ratman, 06 März 2024, 09:57:07

Vorheriges Thema - Nächstes Thema

Aurel_B

#15
Ha! Da kommt nix an Headern zurück von deinem Drucker. Ich kenne mich da viel zuwenig aus: könnte es sein, dass HttpUtils sich verschluckt wenn gar nix an Headern zurückkommt?

Was willst du denn am Schluss bewerkstelligen mit deiner Einbindung des Druckers? Wenn du nur selten Daten von ihm abfragen möchtest, so würde ich wohl mit dem blockierenden "system" arbeiten. Falls du regelmässig Daten holst wäre ich eher Richtung Shellscript gegangen welches via crontab läuft und seine Ausgabe in eine Datei umleitet. FHEM wiederum liest diese Datei ein und verarbeitet sie weiter. Oder du schickst die Ausgabe dann via telnet an FHEM etc. etc. Es gibt wirklich 1001 Möglichkeiten.

Edit: was mir gerade eingefallen ist: eventuell könntest du auch ECMD verwenden (ist etwas komplex), dort kannst du ein "Anfrage/Antwort" Schema erstellen. Deine Anfrage würde dann den Headern entsprechen so wie curl sie aussendet und ECMD hat keine Ahnung von HTTP und erwartet daher auch nur die Antwort so, wie du sie gemäss Schema möchtest. Ist wie gesagt etwas komplex...

the ratman

#16
was ich will ...
fehler/probleme beseitigen und statistiken machen.

beispiele aus der praxis:
o) ich bin unterwegs, die temperaturen sind zu hoch, der drucker ist fertig, es gibt 'nen fehler = automatische trennung vom strom mit einer steuerbaren steckdose.
o) unerklärliche temperatur-schwankungen in einem plot erkennen. so erkennt man dann die lügen der hersteller. z.b.: 5 grad weniger möglich, als versprochen. aufheizen funzt zwar, aber dann fällt der gesamte strom aus und der drucker muss 5° hoch heizen. wie das objekt dann ausschaut, kann man sich vorstellen *g*. finde den fehler mal mit "neben stehen"
o) pause, start, stop sollte auch gehen ... angenehme funktionen.
o) verfahren des druckkopfes über x, y oder bett über z. abschaltung, weil das bei 'nem internen fehler dem drucker an sich wurscht ist und der überall im bauraum gegen kracht, wo er kann ...
o) ansagen in der hausautomatisation, dass ein druck beginnt, endet, usw.
o) bauraum entlüftung auf den hepafilter schalten, weils der holden zu sehr stinkt *g* (ich betreib' meine drucker im wohnzimmer)
o) immer noch die hoffnung (derzeit nur theorie), über die webcam losgelöste objekte oder spagetti zu erkennen und entsprechend zu reagieren.

d.h. - im normalfall reichen mir abfragen alle 10 sec. notfalls auch langsamer.
beim fehler suchen ist natürlich "je schneller, desto besser" angesagt.
wie du sicher schon bemerkt hast, bin ich jetzt nicht grade der profi für internes computer-zeugs, schon gar ned unter linux. was natürlich nix anderes heißt: egal was, ich brauch' wahrscheinlich grundlegende hilfe dafür.

ECMD bedeutet lt. wiki "Ethersex Command" aha, fern-sm-beziehungen, oder wie? *g*

übrigens: die dumme idee, mit der ich euch jetzt die zeit stehle, kommt eigentlich von da: https://github.com/kruzhkov/hass-flashforge-adventurer-5
ob man da abschreiben könnte, wenn man von python ahnung hätte?
→do↑p!dnʇs↓shit←

rudolfkoenig

Zitatkönnte es sein, dass HttpUtils sich verschluckt wenn gar nix an Headern zurückkommt?
Ist nicht der Fall, gerade getestet.

Probier mal in der FHEM Eingabezeile Folgendes aus:
{ HttpUtils_BlockingGet({ url=>"http://192.168.178.9:8899/command",data=>"-M105"}) }

the ratman

#18
eingabezeile: { HttpUtils_BlockingGet({ url=>"http://192.168.178.9:8899/command",data=>"-M105"}) }

passt das mit ungefähr 5 sek. block bei dem abruf? zumindest ist der browser ungefähr so lange beschäftigt.
keine weiteren infos, nix im log mit verbose 3
→do↑p!dnʇs↓shit←

rudolfkoenig

Wenn keine Ausgabe kommt, dann stoert sich die Gegenseite an irgendwelchen HTTP Header-Angaben.
Die Ursache ueber eine Forumsdiskussion rauszukriegen ist muehselig.
Ich wuerde mit dem extrernen Aufruf probieren.

Etwas off-topic: warum verwendet man {system(PROGRAMM)} statt "PROGRAMM"?

the ratman

#20
ich dank auf jeden fall für die hilfe!

steh halt jetzt wirklich wieder an, weil ... eh schon wissen *g*
ich schau' auf jeden fall mal, ob ich da nicht ein tool für win finde, mit dem ich die daten dann nach fhem schießen kann.

mag noch einer von euch eventuell noch?
frage1: wie müsste eigentlich so ein script aussehen? am besten natürlich eines, dass mir gleich readings in einen dummy oder so schreibt?
frage2: wie könnte ich das script von fhem aus stoppen und starten? muss ja nicht permanent was ins nirwana abfragen machen, denk' ich mal.
→do↑p!dnʇs↓shit←

betateilchen

Zitat von: the ratman am 11 März 2024, 08:42:46beispiele aus der praxis:
o) ich bin unterwegs, die temperaturen sind zu hoch, der drucker ist fertig, es gibt 'nen fehler = automatische trennung vom strom mit einer steuerbaren steckdose.

Du lässt Deinen 3D-Drucker unbeaufsichtigt arbeiten?
Laß das mal nicht Deine Hausratversicherung hören...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

#1 ich habe in meinem Beispiel - und ~ verwechselt.
Kannst Du es bitte nochmal mit korrigierten Zeichen versuchen?

#2 wenn curl sein soll, und(!) der obige curl.exe Befehl terminiert hat (musste nicht explizit abgebrochen werden), dann wuerde ich eine Funktion in 99_myUtils.pm anlegen:
sub
parsePrinter($$$)
{
  my ($dev, $reading, $cmd) = @_;
  my $d = `curl -s --http0.9 --location 'http://192.168.178.9:8899/command' --data-urlencode '$cmd'`;
  my $t0 = $1 if($d =~ m/T0:(\d+\.\d+)/);
  readingsSingleUpdate($defs{$dev}, $reading, $t0, 1);
  return undef;
}
und ein at definieren:
define printerTemp at +*00:00:10 { parsePrinter("printerTemp", "temp0", "~M105") }

the ratman

#23
*autsch* da zerlegt's fhem

fehler im log find' ich dazu nicht.
er hat nur alle subroutinen redifined, deine wollte er dann nicht mehr machen. da endet das log.
sub rausgelöscht, damit ich wieder hoch komm, at gibts noch disabled

aber die lösung im at die parmameter vorzugeben find' ich genial! jaja, ich weiß, wusste sicher schon jeder dödel im universum, aber ich halt nicht *g*
heißt das, ich könnte mit mehreren at's dann immer diese subroutine bemühen?
→do↑p!dnʇs↓shit←

rudolfkoenig

Zitat*autsch* da zerlegt's fhem
Bemerkenswert.
Ich habe den Text aus dem Forum bei mir wieder reinkopiert, und sehe keine Probleme.

Zitatheißt das, ich könnte mit mehreren at's dann immer diese subroutine bemühen?
Das waer mein Plan gewesen.

the ratman

hatte ganz vergessen, sorry. du wolltest ja
{ HttpUtils_BlockingGet({ url=>"http://192.168.178.9:8899/command",data=>"~M105"}) }
das arbeitet er auch brav, ohne jegliches ergbnis ab. also gleich wie mit "-". und auch da stellts ihn nicht auf.
→do↑p!dnʇs↓shit←

the ratman

ich probiers nochmal - vielleicht hab ich ja 'nen fehler gemacht ...

1) ich trage sub
parsePrinter($$$)
{
  my ($dev, $reading, $cmd) = @_;
  my $d = `curl -s --http0.9 --location 'http://192.168.178.9:8899/command' --data-urlencode '$cmd'`;
  my $t0 = $1 if($d =~ m/T0:(\d+\.\d+)/);
  readingsSingleUpdate($defs{$dev}, $reading, $t0, 1);
  return undef;
}
in myutlis am ende vor dem ";" ein

2) restart von fhem
3) ich aktiviere das at
4) verstorben
→do↑p!dnʇs↓shit←

rudolfkoenig

Zitatin myutlis am ende vor dem ";" ein

Am Ende vor dem 1;
Alle Module enden mit 1;, Doku mit =pod kann folgen.

Zitathatte ganz vergessen, sorry. du wolltest ja
Danke.
Und ich wollte noch wissen, ob curl.exe beendet werden musste.

the ratman

#28
ja, stimmt, hab ich auch richtig gemacht, also "1;" als abschluss der mytuils. irgendwann sollte ich auch mal schreiben, was ich meine ... nochmal sorry!

curl.exe muss nicht beendet werden. https://curl.se/windows/
die powershell hätte auch ein "eigenes" curl (also ohne .exe).
da die leute, die sich scheints besser als ich auskennen, aber immer noch drüber streiten, was den nun das "echtere" curl ist, bleib' ich bei der .exe *g*
→do↑p!dnʇs↓shit←

rudolfkoenig

Zitatcurl.exe muss nicht beendet werden. https://curl.se/windows/
Jein. Wenn die andere Seite die Verbindung nicht zuklappt, und auch per HTTP-Header nicht sagt, wieviele Daten kommen, dann haengt curl erstmal.