Readings nach FHEM schicken

Begonnen von timmib, 25 Januar 2021, 12:33:18

Vorheriges Thema - Nächstes Thema

Otto123

Ergänzung: Wie man mit dem csrf Token umgehen kann findest Du dir: https://wiki.fhem.de/wiki/CsrfToken-HowTo
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

timmib

Komisch, wenn man es richtig macht geht es sofort.  ;)

Besten Dank.

So stehen die Türen für ein neues tolles Modul offen.

CoolTux

Wenn Du eh ein Modul für FHEM machst wieso dann der Umweg über HTTP, wieso nicht über einen eigenen TCP Socket der vom Modul verwaltet wird?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

timmib

#18
Genau das war ja meine Frage. Ich fände das mit einem TCPServer eleganter. sonst muss das Modul ordentlicher Weise ja ein eigenes FHEMWEB anlegen.

Gibt es dafür ein überschaubares Beispiel?

betateilchen

ich mache schonmal Popcorn...  8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Zitat von: timmib am 26 Januar 2021, 10:56:06
Genau das war ja meine Frage. Ich fände das mit einem TCPServer eleganter. sonst muss das Modul ordentlicher Weise ja ein eigenes FHEMWEB anlegen.

Gibt es dafür ein überschaubares Beispiel?

Überschaubar ist relativ. Von meinen Modulen wüsste ich nur AMAD. Das AMADCommBridge Modul macht genau das was Du suchst.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

timmib


M.Schulze

Zitat von: timmib am 26 Januar 2021, 10:56:06
Genau das war ja meine Frage. Ich fände das mit einem TCPServer eleganter. sonst muss das Modul ordentlicher Weise ja ein eigenes FHEMWEB anlegen.

Gibt es dafür ein überschaubares Beispiel?

Richtig,

FHEMWEB ist das Beispiel.

Genau so habe ich es auch gemacht:

Im define:
- TcpServer_Open

Im Read:
- TcpServer_Accept, neue Verbindungen akzeptieren
- Daten empfangen, Header trennen, Body (ggf. nach und nach)
- Header-Felder extrahieren
- Request / Response unterscheiden, 1st Line teilen
- URI parsen:


    $URI =~ /^([a-z][a-z0-9+.-]*):(?:\/\/((?:(?=((?:[a-z0-9-._~!${\}&'()*+,;=:]|%[0-9A-F]{2})*))(\3)@)?(?=(\[[0-9A-F:.]{2,}\]|(?:[a-z0-9-._~!${\}&'()*+,;=]|%[0-9A-F]{2})*))\5(?::(?=(\d*))\6)?)(\/(?=((?:[a-z0-9-._~!${\}&'()*+,;=:@\/]|%[0-9A-F]{2})*))\8)?|(\/?(?!\/)(?=((?:[a-z0-9-._~!${\}&'()*+,;=:@\/]|%[0-9A-F]{2})*))\10)?)(?:\?(?=((?:[a-z0-9-._~!${\}&'()*+,;=:@\/?]|%[0-9A-F]{2})*))\11)?(?:#(?=((?:[a-z0-9-._~!${\}&'()*+,;=:@\/?]|%[0-9A-F]{2})*))\12)?$/i;



MfG
Muss ich das Licht aus machen?

CoolTux

Hier mal etwas Code von meinem alten Lehrmeister zum Thema Headerdaten extrahieren.
Danke Andre

##### bleibt zu Anschauungszwecken erhalten
#sub Header2Hash($) {
#
#    my $string  = shift;
#    my %hash    = ();
#
#    foreach my $line (split("\r\n", $string)) {
#        my ($key,$value) = split( ": ", $line );
#        next if( !$value );
#
#        $value =~ s/^ //;
#        $hash{$key} = $value;
#    }
#
#    return \%hash;
#}
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

timmib

Merci, aber Header gibt es hierbei nicht. Der schickt dann einfach JSON.

timmib

So, Prototyp läuft.

Kann sein, das ich mich nochmal melde wegen Close usw.

timmib

Beta ist fertig und kann auf die Menschheit losgelassen werden.

https://forum.fhem.de/index.php?topic=118208.0

timmib

Hi,

hat jemand einen Tipp ob und wie man diese Kollegen hier wegbekommt.

kapacitor_192.168.178.65_60492_MSGCNT
1
kapacitor_192.168.178.65_60492_TIME
2021-01-29 16:34:55
kapacitor_192.168.178.65_60500_MSGCNT
1
kapacitor_192.168.178.65_60500_TIME
2021-01-29 16:35:55
kapacitor_192.168.178.65_60572_MSGCNT
1
kapacitor_192.168.178.65_60572_TIME
2021-01-29 16:36:55
kapacitor_192.168.178.65_60648_MSGCNT
1
kapacitor_192.168.178.65_60648_TIME
2021-01-29 16:37:55
kapacitor_192.168.178.65_60658_MSGCNT
1
kapacitor_192.168.178.65_60658_TIME
2021-01-29 16:38:55
kapacitor_192.168.178.65_60662_MSGCNT
1
kapacitor_192.168.178.65_60662_TIME
2021-01-29 16:39:55
kapacitor_192.168.178.65_60668_MSGCNT
1
kapacitor_192.168.178.65_60668_TIME
2021-01-29 16:40:55
kapacitor_192.168.178.65_60678_MSGCNT
1
kapacitor_192.168.178.65_60678_TIME
2021-01-29 16:41:55


Kann es sein, dass beim Read was fehlt?

sub Kapacitor_Read($) {

    my $hash = shift;
    my $name = $hash->{NAME};

    if ( $hash->{SERVERSOCKET} ) {    # Accept and create a child
        TcpServer_Accept( $hash, 'Kapacitor' );
        return;
    }

    my $buf;
    my $ret = sysread( $hash->{CD}, $buf, 2048 );

    # When there is an error in connection return
    if ( !defined($ret) or $ret <= 0 ) {
        # Log3( $name, 3, "Kapacitor ($name) - Connection closed for $name" );
        return;
    }

    my $found = Dispatch($hash, $buf);
}


Vielen Dank

Tim

rudolfkoenig

Es gibt auch eine TcpServer_Close Funktion, diese sollte man ab und zu auch aufrufen.

M.Schulze

Zitat von: timmib am 29 Januar 2021, 16:45:20
Hi,

hat jemand einen Tipp ob und wie man diese Kollegen hier wegbekommt.


Fhem.pl verändern.  Ich habe die Stelle auch entfernt. Ist wohl ein Überbleibsel aus alten Zeiten ...
Muss ich das Licht aus machen?