Neue Version von HTTPMOD mit neuen Features zum Testen

Begonnen von StefanStrobel, 05 Dezember 2015, 08:31:32

Vorheriges Thema - Nächstes Thema

amenomade

also... HTTPMOD funktioniert so:

- in der DEF ruft man die URL auf, wo die gezielte Daten sind (was man tatsächlich lesen will)
- beim ersten Aufruf, wenn eine Fehlermeldung wegen Authentifizierung kommt, wird diese Meldung von reAuthRegex gefangen, um ggf. einen Authentifizierungsprozess zu starten
- die sid..... Attribute werden für die Authentifizierung benutzt, und ggf die Sitzung-ID oder tokens oder was auch immer geholt
- damit wird die Hauptseite wieder gerufen, und diesmal liefert sie die Daten

Daher:
curl --silent --insecure --data "username=root@pam&password=yourpassword" \
https://$APINODE:8006/api2/json/access/ticket\
| jq --raw-output '.data.ticket' | sed 's/^/PVEAuthCookie=/' > cookie
wird als sid01..... Attribute implementiert, und damit wird AuthCookie geholt

curl --silent --insecure --data "username=root@pam&password=yourpassword" \
https://$APINODE:8006/api2/json/access/ticket \
| jq --raw-output '.data.CSRFPreventionToken' | sed 's/^/CSRFPreventionToken:/' > csrftoken
wird als sid02...... Attribute  implementiert, und damit wird den CSRFToken geholt

curl --silent --insecure  --cookie "$(<cookie)" --header "$(<csrftoken)" -X POST\
--data-urlencode net0="name=myct0,bridge=vmbr0" \
--data-urlencode ostemplate="local:vztmpl/debian-8.0-standard_8.0-1_amd64.tar.gz" \
--data vmid=601\
https://$APINODE:8006/api2/json/nodes/$TARGETNODE/lxc
Das ist die Hauptanfrage. Stimmen übrigens die Parameter in urlencode mit deinem Fall?

Das kann sein, dass enableCookies reicht, um die AuthCookie und gleichzeitig den CSRFToken automatisch zu holen.
Dann würden ein sid01URL und ein sid01Data schon reichen

Besser als die curl Beispiele wäre eine Analyse mit Burp oder evtl. mit F12 im Browser, wenn Du die Daten holst, inkl Anmeldung

Ich würde einfach so anfangen:
defmod myProxmox HTTPMOD https://192.168.178.3:8006/api2/json/nodes/pve4/lxc?net0%3D%22name%3Dmyct0%2Cbridge%3Dvmbr0%22%0A&ostemplate%3D%22local%3Avztmpl%2Fdebian-8.0-standard_8.0-1_amd64.tar.gz%22%0A 0(wenn pve4 tatsächlich dein TARGETNODE ist, und wenn alle Parameter des curl Beispiels bei dir passen)
(Update Interval auf 0 gesetzt, damit man gezielt mit einem set reread triggern kann)
attr myProxmox enableControlSet 1
attr myProxmox enableCookies 1
attr myProxmox requestData vmid=601
attr myProxmox reAuthRegex 401.No.ticket
attr myProxmox sid01Data username=root@pam&password=XXX
attr myProxmox sid01URL https://192.168.178.3:8006/api2/json/access/ticket

Und dann sehen und nach und nach erweitern





Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

babajun

Hallo,

hatte die letzten Tage, nach dem update auf 3.5.19 - 29.11.2019, probleme mit auslesen der Temperatur am BSB Adapter.
Genau gesagt, die Aussentemperatur, bei mir die erste regex Abfrage, wurde nicht durchgeführt.

Habe schnell Version 3.5.9 - 13.2.2019 aus einem backup zurückgespielt. Die Abfrage funktioniert nun wieder.

StefanStrobel

Hallo babajun,

Poste doch mal Deine Konfiguration und einen Auszug aus dem Log der neuen Version mit verbose 5, dann kann ich das Problem vermutlich nachvollziehen und lösen.

Gruß
   Stefan

holle75

#663
@StefanStrobel

Hallo Stefan, das hat jetzt nichts mit der durch die Speicherproblematik neuen Version zu tun, sondern ist wohl schon immer so. Jetzt komme ich dazu, mich zu kümmern.

Mein fhem ist ab und zu recht unresponsiv. Besonders wenn mein Internet down ist.

Heute mit freezemon ein wenig experimentiert und HttpMod und Modbus (läuft intern, Internetunabhängig) sind 2 Verdächtige.

Auszug log:

2019.12.22 18:39:49 2: [Freezemon] freezemon: ready to watch out for delays greater than 1 second(s)
2019.12.22 18:49:13 1: [Freezemon] freezemon: possible freeze starting at 18:49:10, delay is 3.554 possibly caused by: tmr-HTTPMOD_HandleSendQueue(XtenderReadout)
2019.12.22 18:49:30 1: [Freezemon] freezemon: possible freeze starting at 18:49:29, delay is 1.046 possibly caused by: tmr-HTTPMOD_HandleSendQueue(XtenderReadout) tmr-HMLAN_KeepAliveCheck(HM_LAN_FUNK)
2019.12.22 18:49:40 1: [Freezemon] freezemon: possible freeze starting at 18:49:39, delay is 1.481 possibly caused by: tmr-HTTPMOD_HandleSendQueue(XtenderReadout) tmr-CODE(0x207f810)(dnsQuery)
2019.12.22 18:49:59 1: [Freezemon] freezemon: possible freeze starting at 18:49:58, delay is 1.318 possibly caused by: tmr-HTTPMOD_GetUpdate(XtenderReadout)
2019.12.22 18:50:09 1: [Freezemon] freezemon: possible freeze starting at 18:50:08, delay is 1.089 possibly caused by: tmr-HTTPMOD_GetUpdate(XtenderReadout)
2019.12.22 18:52:49 1: [Freezemon] freezemon: possible freeze starting at 18:52:48, delay is 1.016 possibly caused by: tmr-HTTPMOD_GetUpdate(XtenderReadout) 


Wie man Verzögerungen über zB dev-timing-commDelay, dev-timing-sendDelay im Falle Modbus oder queueDelay im Falle httpmod einsetzt, hattest du mir schon öfter erklärt. Aber irgendwie führt das zu keinem Erfolg.... egal welche Werte ich nutze.

Meine Frage ist eher eine Grundegende. Wie schaffe ich es Modbus und HttpMod non-blocking auszuführen? Oder anders gefragt, wie kann ich modbus und httpmod nutzen, ohne dass "Internet down", oder andere mir nicht bekannte Umstände, zu einem, in meinem Fall, unresponsiven fhem führen?

Das ist alles kein Drama, wenn ab und zu ein Schalter für 2-3 Sekunden nicht reagiert, mich würde aber eine evtl vorhandene Lösungsmöglichkeit interessieren.

Danke und Grüße
H.

EDIT: update log Auszug


fireball

Hallo,

eine Frage, gibt es eine Möglichkeit HTTPMOD dazu zu bewegen, eine selbst erzeugte Liste von Daten durch zB get04Regex oder get05JSON als Auswahl Parameter wieder im Set-Befehl zu haben?!

Bsp:
Ich bekomme aus einem JSON eine Liste von Daten aus meiner Jalousiesteuerung:
get05JSON   sceneValues

get05Name    globaleSzenen

get05Pol   1

get05RecombineExpr   join " ", @matchlist

get05URL   http://IP/ocf/sceneCollection/0


OutPut durch Leerzeichen getrennte Liste:
globaleSzenen   Home Away Sleep

Da ich den gleiche setName Parameter habe, der auch globaleSzenen heißt, enthält er in einem String die Werte "Home Away Sleep".
Ich würde aber diesen set-Wert gern als Auswahl einem der Werte schicken.
Ich habe schon die Liste mit  join ",", @matchlist durch ein Komma erweiter, aber dann ist und bleibt es ein String.
Bei setList, wäre es genau jeweils ein Parameter zur Auswahl.

So also die Frage, jetzt geht das in HTTPMod oder oder kennt einer einen Weg, einem setList, dieses Reading "Home Away Sleep" oder zB "Home,Away,Sleep" als mehre Auswahlparameter zu übergeben?

VG
René

amenomade

Das sollte mit replacement[0-9]*Mode reading möglich sein, oder?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

fireball

Zitat von: amenomade am 22 Dezember 2019, 20:53:26
Das sollte mit replacement[0-9]*Mode reading möglich sein, oder?

Hi amenomade,

kannst du mir ein Bsp geben? Ich versteh das grad nicht...
Hier die Antwort vom Server:
{
    "sceneValues": [
        "Home",
        "Away",
        "Sleep"
    ],
    "n": "Basic Moments",
    "lastScene": "Sleep"
}


Wie wäre jetzt das replacement zu setzen, damit in "get05Name    globaleSzenen" am Ende diese Auswahl ist. Oder in einem anderen Reading, welches ich dann als setlist bzw. setXXName setzen kann?

Aktuell steht alles in einem
globaleSzenen   Home Away Sleep
VG
REné

StefanStrobel

Hallo holle75,

Das Abfragen von Webseiten macht HTTPMOD schon immer asynchron ohne zu blockieren.
Eventuell hängt es aber an den DNS-Abfragen.
Das kannst Du über das globale Attribut dnsServer steuern (siehe https://forum.fhem.de/index.php/topic,53309.msg449992.html#msg449992)

Gruß
    Stefan

peterk_de

Hallo zusammen,

ist es möglich, automatisch einen reread nach jedem set zu aktivieren? Hab ich nicht gefunden. Habe ein Device, bei dem selten was von sich aus passiert (--> langes Update Intervall von mehreren Minuten genügt), aber wenn man es per set z.B. anschaltet, wäre es nett, wenn man das sofort auch in den Readings sehen würde.

Mache jetzt direkt nach jedem set "manuell" ein reread, aber vielleicht geht das ja eleganter!?
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

amenomade

Zitat von: fireball am 23 Dezember 2019, 10:26:48
Hi amenomade,

kannst du mir ein Bsp geben? Ich versteh das grad nicht...
Hier die Antwort vom Server:
{
    "sceneValues": [
        "Home",
        "Away",
        "Sleep"
    ],
    "n": "Basic Moments",
    "lastScene": "Sleep"
}


Wie wäre jetzt das replacement zu setzen, damit in "get05Name    globaleSzenen" am Ende diese Auswahl ist. Oder in einem anderen Reading, welches ich dann als setlist bzw. setXXName setzen kann?

Aktuell steht alles in einem
globaleSzenen   Home Away Sleep
VG
REné
Sorry, ich hatte die Frage falsch gelesen. Ich dachte, Du möchtest in einem set einen einzelnen Wert von einem get wieder benutzen.
Was Du suchst ist setXXHint, aber ich weiss nicht, ob man dort Perl einsetzen kann, damit es dynamisch wird. Eine vordefinierte Liste würde aber gehen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

StefanStrobel

Hallo fireball,

ich würde einfach bei Bedarf die entsprechenden Attribute setzen. Geht ja auch aus einer Perl-Expression heraus.

Gruss
   Stefan

StefanStrobel

Hallo peterk_de,

ein reread oder get nach einem set steht schon lange auf meiner Wunschliste.
Bisher ist das aber nicht implementiert.

Gruss
   Stefan

fireball

Zitat von: StefanStrobel am 23 Dezember 2019, 21:08:52
Hallo fireball,

ich würde einfach bei Bedarf die entsprechenden Attribute setzen. Geht ja auch aus einer Perl-Expression heraus.

Gruss
   Stefan

Hi Stefan, funktioniert in den Attributen (readingsVal)?
Vg Rene

amenomade

Wenn Perl-Expression funktioniert, dann ReadingsVal auch
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

StefanStrobel

Hallo,

im Attribut set01Hint kann man keine Expressions eingeben. Die Idee ist anders herum, dass man auf ein neues Reading reagiert (z.B. aus einem Notify heraus oder über HTTPMOD-Attribute, die Expressions enthalten wie z.B. reading01OExpr) und in der Expression dann das statische Attribut set01Hint o.ä. ändert.

Gruss
   Stefan