Beiträge von Marc

    wenn du einen sehr großen Druckauftrag hast, der länger als deine Pausenzeit von 870 Sekunden braucht

    Nach meinem Verständnis müsste für ein Problem (Abschaltung vom Drucker während des Drucks) erstens der Druckjob genau knapp vor diesem Zeitfenster an den Drucker zu Ende übertragen sein, sowie der Druckerspeicher im Drucker mehr Seiten zum Drucken fassen wie er für 30 Sekunden (870s bis 900s) zum Drucken benötigt.

    Bei mir läuft das Script nun seit rund 2,5 Wochen. Ich lasse mir (zur Zeit noch) zur Sicherheit eine E-Mail zusenden und ein Log schreiben, wenn das Script den Drucker einschaltet. Bisher war die Trefferquote 100%, sprich kein Einschaltvorgang, wo kein Druckauftrag vorlag.


    Zum Stromverbrauch: Mein HP-Laser schluckt ohne Rot zu werden 7 Watt. Der Raspberry ist dank anderer Dienste sowieso immer online.


    Dazu kommt natürlich auch noch der Spielfaktor. Drucken macht wieder Spaß. Ich muss immer leicht lächeln, wenn ich den Druckerbutton anvisiere. ;)

    Hier das Script. Ich hoffe, dass die Pfeile (hoch/runter) die Forensoftware richtig übernimmt.

    Hallo!


    Einleitung / Vorgeschichte:

    Ich habe verschiedene (lüfterlose) Gehäuse für einen Raspberry Pi4 getestet, dabei den Raspberry unter Vollast gesetzt und die Temperaturentwicklung dabei beobachtet. Zuerst war das Script eine einfache Schleife, Abfrage der CPU-Temperatur, die Echo-Ausgabe vom Wert und ein Sleep von 1-2 Sekunden.


    Durch den Spieltrieb wurde das Script immer umfangreicher. Nun wirft es nicht nur die Temperatur aus, sondern auch ob sie steigt oder sinkt, den Tiefst- und Höchstwert, den Durchschnittswert, sowie die CPU-Last in Prozent, Loadlast auf 1 Minute und die Frequenz. Auch wird die Spaltenüberschrift regelmäßig wiederholt, damit man die Übersicht behält.


    Nachfolgend ein Screenshot, wo ich zuerst den Raspi im Leerlauf lasse, dann die Last mal kurz auf 100% setze und am Ende wieder auf Leerlauf setze. Da kann man schön sehen wie das Script dies anzeigt.


    Screenshot:


    Für den Betrieb vom Script muss über die Konsole der Rechner "bc" (apt-get install bc) installiert werden. Ansonsten läuft es mit den Standardprogrammen, die immer dabei sind.


    Vorab, ich bin kein Progger. Mein Script entstand Stück für Stück, somit ist es nicht mehr sonderlich aufgeräumt. Bestimmt gehen manche Wege auch leichter. Hauptsache ist, dass es funktioniert.


    Es sollte im Grunde auf jedem Raspberry, egal ob nun Zero, 1,2,3 oder 4, laufen. Getestet habe ich es auf einem Pi 4.


    Gerne kann das Script verbessert werden. Ich würde mich dann aber freuen, wenn man dann die überarbeitete Version hier postet.

    gebe Kommentare zur Auswahl meiner Liebsten ab

    Du Ärmster... das ist ja noch schlimmer als ein Ikea-Besuch. =O:)

    So eine Lösung brauche ich auch!

    Ich wundere mich immer noch, dass kein Druckertreiber, den ich ausprobiert habe, den einfachen Aufruf einer URL unterstützt. Ich fand eine solche Funktion so nahe liegend. Auch das es kaum dazu in anderen Foren was zu finden gibt, empfand ich etwas befremdlich.

    unter Mein Projekt posten

    Bitte verschiebe es, damit es nicht zweimal im Forum rumgeistert.

    Einleitung:

    Ich habe einen Laserdrucker (HP), den ich bisher für einen Ausdruck manuell eingeschaltet habe. Natürlich habe ich dann auch gerne vergessen ihn wieder auszuschalten (Standby 7 Watt).


    Problemstellung:

    So habe ich überlegt wie ich mit einer smarten Steckdose und der Firmware Tasmota es umsetzen kann, dass der Drucker automatisch bei einem Druckauftrag ein und nach dem Druck wieder ausgeschaltet wird.


    Der Druckertreiber von HP unterstützt bei einem Druckjob den Aufruf einer URL (Tasmota-Steckdose) leider nicht (warum können das Treiber heutzutage nicht?).

    Nach etwas hin und her bin ich zu einer Lösung gekommen, die ich hier gerne vorstellen möchte:


    Lösung:

    Ich habe CUPS (Druckersoftware für Linux) auf einem Raspberry installiert, der mit ioBroker sowieso immer an und im Netzwerk ist. Vom PC drucke ich nun nicht mehr direkt zum Drucker, sondern zu CUPS. CUPS wiederum schickt das Dokument an den Drucker, der es wiederum ausdruckt. Das klappt reibungslos und ohne spürbare Zeitverzögerung.


    CUPS unterstützt leider auch keinen Aufruf einer URL, wenn ein Druckauftrag vorliegt.


    Dafür gibt es aber das kleine Tool "inotifywait" (apt-get inotify-tools). Ein Script überwacht mittels inotifywait nun das Spoolverzeichnis von CUPS. Sobald dort ein Druckjob auftaucht, ruft das Script die URL der Steckdose auf und schaltet sie ein. In der Steckdose ist eine Pulstime von 900 Sekunden (Wert 1000) eingestellt und die Steckdose schaltet den Drucker nach 15 Minuten wieder aus.

    Das Script pausiert 870 Sekunden um bei mehreren Druckaufträgen mehrfache Einschaltungen zu verhindern. Danach überwacht es wieder das Verzeichnis und wartet auf den nächsten Druckauftrag.


    Vorgehensweise:

    CUPS installieren

    Drucker in CUPS auswählen

    Druckertreiber installieren und Pfad vom Drucker hinterlegen


    Das folgende Script irgendwo nach Wahl abspeichern (und anpassen) und als Systemdienst (/etc/systemd/system/abcdefg.service) laufen lassen.


    Script:

    Verbesserungen:

    Ich habe noch zusätzlich eine Zeitschaltung (von 8 bis 20 Uhr) eingefügt, sowie eine Logfunktion eingebaut. Wer an dem Codeschnipsel Interesse hat, bitte melden.

    Vorab, ich bin kein Netzwerkverlegeprofi.


    Du willst zwei Dosen mit jeweils zwei LAN-Buchsen einbauen. Dann müsstest du doch insgesamt vier LAN-Kabel vom Router aus verlegen um an allen vier Buchsen jeweils eine Gigabitverbindung zu bekommen.


    Es gibt noch die Möglichkeit ein LAN-Kabel für zwei Buchsen zu nehmen (4 Adern + 4 Adern => Stichwort "RJ45 Y Verteiler"), aber dann hat man als Verbindungsgeschwindigkeit nur Fast-Ethernet (100 MBit). In diesem Fall müsstest du nur zwei Kabel vom Router ziehen, sprich zu jeder Dose eins.

    Ich habe die Lösung inzwischen gefunden.


    Durch die Verwendung von Win7 habe ich dort nur Powershell v2 am laufen.


    Ich habe eine Datei namens xyz.ps1 angelegt und folgenden Inhalt eingefügt:

    Code
    $webclient = new-object System.Net.WebClient
    $webclient.DownloadString("http://IPvomGerät/cm?user=admin&password=12345&cmnd=Power%201")

    Nun habe ich eine Verknüpfung angelegt:

    Code
    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command "& 'C:\Users\username\verzeichnis\xyz.ps1'"

    Beim Klick auf die Verknüpfung kommt kurz ein Fenster, die Steckdose wird geschaltet und das Fenster ist wieder weg. Perfekt. :)

    Hallo!

    Irgendwie stehe ich auf dem Schlauch.


    Ich möchte über ein Icon auf dem Desktop ein Tasmotagerät anschalten.


    Ich habe eine ganz normale Verknüpfung angelegt.

    Folgenden Aufruf habe ich verwendet:

    Code
    http://IPvomGerät/cm?user=admin&password=12345&cmnd=Power%201


    Das funktioniert auch.


    Nachteil ist nur, dass der Browser aufgeht und die Antwort vom Tasmotagerät anzeigt:

    Code
    {"POWER":"ON"}


    Wie kann ich das Öffnen vom Browser verhindern? Ich möchte einfach nur das Icon doppelt anklicken und der Drucker soll sich einschalten (geht per PulseTime nach 15min wieder aus).


    Ich habe nach Dingen wie curl unter Linux gesucht. Das gibt es aber wohl erst ab Win10, auf dem Rechner läuft aber noch Win7.

    Tasmota V. 6.6.0

    Updaten?



    Mal was grundsätzliches: Ist es überhaupt wünschenswert und der Situation angemessen, dass das Tor automatisch nach 5min wieder zu geht?


    Da fallen mir ein paar Unwegsamkeiten ein:

    • Nach 5min ist man nicht mehr zugegen und das Tor schließt => Verletzungsgefahr für Mensch und Tier.
    • Man ist mit dem Auto schon lange weg und jemand anderes stiehlt die Goldmünzensammlung aus der Werkzeugkiste
    • Es gibt Situationen, wo das Tor länger offen bleiben soll, z.B. Reparatur vom Fahrzeug
    • technischer Defekt am Motor oder der Torführung

    mehr mit Python

    Bei Gelegenheit arbeite ich mich da mal ein. Bash hatte bisher alles lösen können, aber vielleicht wäre es mal Zeit für einen weiteren Schritt nach vorn.

    Für alle Geräte wird der Befehl status 10 verwendet. Aber die Ergebnisse sind verschieden. Bei Gerät 1 und 2 unterscheidet sich nur der Sensorname und die Struktur ist dieselbe, aber beim Gerät 3 haben wir eine andere Verschachtelung der Schlüssel-Wert-Paare. An diesen Stellen arbeite ich dann immer mit if-Abfragen, um solche Abweichungen zu bearbeiten. In menschlicher Sprache ausgedrückt "frage" ich: Gibt es "StatusSNS" und "ENERGY" im Ausdruck, dann mach dieses und jenes sonst: mach was anderes.

    Ich habe leider nur Geräte mit und ohne Strommessung.

    Da arbeite ich schon mit einer IF-Anweisung, die mit jq prüft, ob Stromdaten vorliegen. Falls keine vorliegen, wird der Teil mit dem Strom übersprungen.

    ziemlich professionelle Herangehensweise

    Danke.

    Wenn ich sehe, wie andere Scripte aufgebaut sind, wie in manchen Foren über Code diskutiert wird, sehe ich mich bei 10 Klassen in der Grundschule (Klasse 2). Aber ich arbeite hart an der Versetzung in Klasse 3. ;)

    Um es auf kleinen Viewports vernünftig aussehen zu lassen, wäre vielleicht auch denkbar, das du die nicht so wichtigen Spalten je nach Bildschirmbreite ausblendest

    Mit Bash selber kann ich nur den HTML-Code mit Werten in eine Datei gießen.

    Das wäre also die Aufgabe vom HTML-Template, welches responsive sein müsste. Da fehlt mir noch irgendwie das richtige Template.

    Ich habe schon ein paar probiert, die funktionieren auch grundsätzlich alle irgendwie, aber bei vielen Spalten gibt es da schnell Probleme.


    Ungern würde ich Krückenlösungen einsetzen, z.B. wie früher 2x HTML, sprich extra ein Template für Smartphones und eins für große Bildschirme.

    Da Bilder immer mehr sagen wie tausend Worte, habe ich drei Screenshots angefertigt.


    Ausgabe auf der Konsole:



    Die Ausgabe auf der Konsole funktioniert bisher sehr gut. Wenn jemand Geräte mit einem Verbrauch von mehr als 9.999 pro Tag hat, würde sich die Anzeige in der Reihe um ein Zeichen verschieben und somit das klare Bild etwas zerstören.


    Ausgabe HTML:



    Bei manchen Geräten sind noch nicht genug Datensätze vorhanden und so hinkt dort (noch) etwas die Gesamtberechnung.


    Bei der Ausgabe in HTML fehlt mir auch noch ein sehr einfaches responsives HTML-Template, welches sich jeweils auf dem PC, Tablet und Smartphone anpasst. Das Problem sind halt die Anzahl der Spalten. Die meisten Templates gehen damit nicht richtig um. Da überlege ich schon nur die Verbrauchswerte anzuzeigen um Spalten zu "sparen" und darunter in einer zweiten Tabelle noch mal weitere Eckdaten wie Hostname, IP, RSSI, Spannung anzugeben.


    Ausgabe Debugmodus (frühe V1):


    Ich bin ja absoluter Bash-Anfänger, also bitte keine großen Sprünge erwarten. :S;)


    Im Moment habe ich den Teil fertig, wo das Netzwerk in einem vorgegebenem Bereich gescannt wird, alle Geräte die antworten erfasst werden, dann auf Tamota geprüft wird und ob schon Daten vorliegen.


    Beim Speichern der Daten ist das noch sehr rudimentär, aber es funktioniert:

    Im Moment werden die Daten (Yesterday) einmal täglich erfasst und in Textdateien (IP .132 => strom_132_1tag.txt u. strom_132_0gesamt.txt) abgespeichert. Am 1. des Monats werden die Werte vom Vormonat zusammengerechnet, in einer Textdatei (strom_132_2monat.txt) abgelegt und die Textdatei mit den Tageswerten geleert. Das Gleiche passiert am 1.1. des Jahres (strom_132_3jahr2019.txt). Aus dieser Datenbasis (strom_132_0gesamt.txt) berechnet das Script die Verbräuche über die verschiedenen Zeitbereiche (7, 30, 90, 180, 365 und 730 Tage).


    Im Moment betreibe ich Leichenfledderei, sprich das Script V1 und Script V2 verarbeite ich gerade zu Script V3. Es wuchs mir da etwas über den Kopf, das macht V3 leider gerade auch schon wieder. Ich habe drei Bildschirme, könnte aber noch mal drei gebrauchen... :/8o^^


    Eine Baustelle, die ich bisher nicht lösen konnte: jq

    Ich kann damit problemlos aus den Statusmeldungen (JSON) von Tasmota einzelne Werte auslesen. Das klappt wunderbar und zuverlässig.

    Was ich mir für eine Debug-Funktion wünschen würde, wäre ein automatisches Verarbeiten eines beliebigen JSON-Strings (wegen Status1, Status2, Status3, usw.) und einer daraus resultierenden Anzeige, z.B. auf der Konsole oder ein Weiterverarbeiten für eine HTML-Datei. Eigentlich hatte ich erwartet, dass da schon irgendwo ein Script für jq rumschwirrt, aber bisher bin ich nicht fündig geworden. Die Debug-Funktion mit einer übersichtlichen Anzeige aller Werte für ein Gerät ist zwar nicht wichtig, wäre aber bestimmt ein gutes Gimmick um Problemen schnell auf die Spur zu kommen.