Abfrage eines Dateiinhaltes mit anschließender Reaktion

  • VB.NET

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von Otti.

    Warum ist es problematisch wenn eine ausgeschaltete Lampe nochmal ausgeschaltet wird?
    Respektive eine eingeschaltete Lampe nochmal eingeschaltet?

    Probier mal das:

    VB.NET-Quellcode

    1. Private lichtwohn,lichtbad,... as Boolean
    2. Private Sub EsWerdeLicht()
    3. Dim MeineStringLicht As String = Serververbindung.DownloadString("http://xxxxxxxxxx.txt")
    4. Dim EinträgeLicht = MeineStringLicht.Split({":", Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
    5. If lichtwohn = Not (EinträgeLicht(0) = "ein") Then
    6. lichtwohn = Not lichtwohn
    7. If lichtwohn Then 'dein .....bla bla bla
    8. End If
    9. If lichtbad = Not (EinträgeLicht(1) = "ein") Then
    10. lichtbad = Not lichtbad
    11. If lichtbad Then 'dein .....bla bla bla
    12. End If
    13. ...
    14. End Sub

    dive26 schrieb:

    @RodFromGermany

    FileSystemWatcher geht auch auf eine URL?
    Ich dache das geht nur mit einer lokalen Dateiüberwachung ...


    UNC Pfade funktionieren, doch mit beschraenkter Zeitspanne. Nach mehreren Stunden Laufzeit einer FSW Instanz hoehrt er einfach auf Event´s abzufeuern.., zerstoeren und neu initialisieren sind notwendig.

    Otti schrieb:

    Problem? Festzustellen, ob die Datei sich geändert hat?
    Ja genau, ob sich der Inhalt geändert hat.
    Das ist doch höchst trivial.
    Um festzustellen, ob ein Inhalt sich geändert hat, muss man ihn sich merken, in einer Variable. bis ein neuer Inhalt kommt.

    VB.NET-Quellcode

    1. private AlterInhalt As Strign
    2. private sub TimerTick(bla)
    3. dim inhalt = HoleNeuerInhalt()
    4. if inhalt <> AlterInhalt then
    5. '... was zu tun ist...
    6. AlterInhalt = inhalt
    7. end if
    8. end sub

    ErfinderDesRades schrieb:

    Otti schrieb:

    Problem? Festzustellen, ob die Datei sich geändert hat?
    Ja genau, ob sich der Inhalt geändert hat.
    Das ist doch höchst trivial.
    Um festzustellen, ob ein Inhalt sich geändert hat, muss man ihn sich merken, in einer Variable. bis ein neuer Inhalt kommt.


    Oder der Inhalt ist egal und man fragt ein Attribut ab, StreamReader braucht sich nicht zu bemuehen besonders wenn nicht lokales Hardwaremedium und Datei too much bytes aufweist.

    VB.NET-Quellcode

    1. Imports System.IO
    2. Static EinDatumDasWirUnsMerkenSollten As DateTime
    3. If File.GetLastWriteTime("IrgendWelcheBytesInFormEinerDatei.EineEndung") > EinDatumDasWirUnsMerkenSollten Then
    4. REM Mach mal was
    5. EinDatumDasWirUnsMerkenSollten = File.GetLastWriteTime("IrgendWelcheBytesInFormEinerDatei.EineEndung") REM Kann man auch in eine Variable packen, dient zur Wissensvermittlung.
    6. End If


    Zitierfehler korrigiert ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Otti schrieb:

    VB.NET-Quellcode

    1. laus.Text += 1 'wenn in txt "aus" dann ein Event nur einmal
    Option Strict On :!:
    Visual Studio – Empfohlene Einstellungen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Falls du Zugriff auf den Server hast würde ich den FileSystemWatcher Ansatz weiter verfolgen. In der Webentwicklung gibt es für dein vorhaben Event-Streams damit läßt sich dann eine Art FileSystemWatcher basteln.
    Der besteht dann aus einer PHP Datei die deine Datei überwacht und bei Änderung in den Event-Stream schreibt. In VB ließt du diesen Stream und verarbeitest die Daten.

    Beispiel


    VB-Programm

    VB.NET-Quellcode

    1. Module Program
    2. Sub Main(args As String())
    3. Dim client = New HttpClient()
    4. Using sr As StreamReader = New StreamReader(client.GetStreamAsync("https://www.deine-domain.com/event.php").Result)
    5. While Not sr.EndOfStream
    6. Dim message = sr.ReadLineAsync().Result
    7. Console.WriteLine($"Received message: {message}")
    8. End While
    9. End Using
    10. Console.WriteLine(vbLf & "Press any key to quite the application...")
    11. Console.ReadKey()
    12. End Sub
    13. End Module



    event.php

    PHP-Quellcode

    1. <?php
    2. header("Cache-Control: no-store");
    3. header("Content-Type: text/event-stream");
    4. // Unbegrenzte Laufzeit für das Script
    5. set_time_limit(0);
    6. $maxExecTime = ini_get('max_execution_time');
    7. if ($maxExecTime !== '0')
    8. {
    9. // Laufzeit ist begrenzt
    10. die("Unable to set time limit, current max exec time: '$maxExecTime'");
    11. }
    12. const FILE_TO_WATCH = 'info.txt'; // Datei die überwacht werden soll
    13. $lastFileHash = md5_file(FILE_TO_WATCH);
    14. while(file_exists(FILE_TO_WATCH))
    15. {
    16. if (connection_aborted())
    17. break;
    18. $fileHash = md5_file(FILE_TO_WATCH);
    19. if ($fileHash !== $lastFileHash)
    20. {
    21. $lastFileHash = $fileHash;
    22. $content = trim(file_get_contents(FILE_TO_WATCH));
    23. echo "$content\n";
    24. if (ob_get_contents())
    25. ob_end_flush();
    26. flush();
    27. }
    28. // usleep(500); // Prüft die Datei alle 500 Millisekunden
    29. sleep(1); // Prüft die Datei jede Sekunde
    30. }



    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Fakiz“ () aus folgendem Grund: Rechtschreibung

    @Fakiz

    Danke für einen Beitrag. Habe nun eine andere Variante genutzt.
    Sprich habe den Schaltschrank umverdrahtet.
    Das ist auch die Antwort auch die Frage von:
    @Haudruferzappeltnoch
    ​Warum ist es problematisch wenn eine ausgeschaltete Lampe nochmal ausgeschaltet wird?Respektive eine eingeschaltete Lampe nochmal eingeschaltet?

    Die elektronik ist so verdrahtet, das es Stromstoßschalter sind, daher ist ein 2faches "AUS" ein "EIN".

    Danke euch aber trotzdessen für eure Unterstützung.
    Ein schönes WE