Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Display via ssh steuern

    NEWS

    • [erledigt] 15. 05. Wartungsarbeiten am ioBroker Forum

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Display via ssh steuern

    This topic has been deleted. Only users with topic management privileges can see it.
    • G
      garbleflux last edited by garbleflux

      Hallo in die Runde,

      ich nutze mehrere Raspberrys zur Steuerung individueller Infoboards/TV-Screens, ähnlich dem Projekt MagicMirror. Zur Energieeinsparung möchte ich jedoch nur ein aktives Display haben, wenn sich eine Person im Raum befindet.

      Die Präsenz ermittle ich mit einem Radar-Sensor (funktioniert übrigens phantastisch und sehr schnell) über den ioBroker Tuya - Adapter. Auf die Raspberrys habe ich Zugriff via SSH, ich steuere den Monitor (on/off) über CEC (Consumer Electronics Control).

      Übergeben muss ich zum Ausschalten des TV folgenden Befehl: echo "standby f.f.f.f" | cec-client -s -d 1 (und zum Anschalten 'echo "on f.f.f.f" | cec-client -s -d 1'

      Ich bin leider nicht der begnadete Blockly-Programmierer, vielleicht kann mir dennoch jemand den richtigen "Schubs" geben, wo es gerade hängt.
      Die RPi's haben zur Sicherheit eigene User und Passwörter. Wie kann ich die Befehle zum An- und Ausschalten der Monitore ordnungsgemäß an die kleinen Rechenknechte übertragen bzw. wo müssen die Zugangsdaten hinterlegt werden?

      Anbei mein Blockly-Versuch (habe ich auch hier aus dem Forum zusammengeklickt) .

      Screenshot 2024-08-28 at 21-07-13 javascript - me-nuc.png

      c<xml xmlns="https://developers.google.com/blockly/xml">
        <block type="on_ext" id="RoOer}|h_)FD-PCG;*Pq" x="13" y="38">
          <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
          <field name="CONDITION">ne</field>
          <field name="ACK_CONDITION"></field>
          <value name="OID0">
            <shadow type="field_oid" id="Terd]Gb@K3@$6@vmm^k.">
              <field name="oid">tuya.0.bf6ddf30e3470f76a3domw.1</field>
            </shadow>
          </value>
          <statement name="STATEMENT">
            <block type="controls_if" id="#cbqp!R+iTB16EL_#O[z">
              <value name="IF0">
                <block type="logic_compare" id="wQ6bIybi8v(|Gv;y+kT}">
                  <field name="OP">EQ</field>
                  <value name="A">
                    <block type="get_value" id="Vii;mGts6OXmT+g$Tm^V">
                      <field name="ATTR">val</field>
                      <field name="OID">tuya.0.bf6ddf30e3470f76a3domw.1</field>
                    </block>
                  </value>
                  <value name="B">
                    <block type="logic_boolean" id="%3qzkpVva9im+^O,)3-{">
                      <field name="BOOL">TRUE</field>
                    </block>
                  </value>
                </block>
              </value>
              <statement name="DO0">
                <block type="comment" id="F9fYL:ox!)97!BS=in3K">
                  <field name="COMMENT">schalte Monitor aus&amp;#10;</field>
                  <next>
                    <block type="exec" id="/hP+;?cEzpn]1I9qi*LQ">
                      <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
                      <field name="WITH_STATEMENT">FALSE</field>
                      <field name="LOG"></field>
                      <value name="COMMAND">
                        <shadow type="text" id="*|V44Z;l8nvL!Kj}|Xt=">
                          <field name="TEXT">ssh 192.168.160.109 echo "standby f.f.f.f" | cec-client -s -d 1</field>
                        </shadow>
                      </value>
                    </block>
                  </next>
                </block>
              </statement>
            </block>
          </statement>
        </block>
      </xml>ode_text
      
      Codierknecht BananaJoe 2 Replies Last reply Reply Quote 0
      • Codierknecht
        Codierknecht Developer Most Active @garbleflux last edited by Codierknecht

        @garbleflux
        Versuchs mal ohne das ssh 192.168.160.109 vorweg.
        Du willst ja vom ioBroker keine SSH-Verbindung öffnen, sondern lediglich einen Konsolenbefehl absetzen. SSH brauchst Du nur, um vom PC auf den Pi zu kommen. Wenn Du schon dort bist, braucht's kein SSH.

        Übrigens: Wenn Du den Trigger in "ist größer als letztes" änderst, kannst Du Dir das "Falls" sparen.
        Der feuert dann nur beim Wechsel von false auf true.

        Ein bisschen Lesestoff: https://forum.iobroker.net/topic/70481/blockly-for-dummies-starthilfe-und-tipps

        Edit
        Hab' jetzt erst geblickt, dass zentral vom ioBroker die einzelnen Pi's angesprochen werden.
        Dann so wie @BananaJoe es vorschlägt.

        1 Reply Last reply Reply Quote 0
        • BananaJoe
          BananaJoe Most Active @garbleflux last edited by

          @garbleflux also, der Befehl ssh an sich lässt keine Angabe / Übergabe des Passwortes zu.

          Lösung 1 (vermutlich die schlechtere, aber diese funktioniert) wäre sshpass was du auf dem ioBroker-System nachinstallieren müsstest.

          Dann kannst du per

          sshpass -p 'deinpasswort' ssh benutzername@192.168.160.109 echo ...
          

          Benutzernamen und Passwort übergeben => man schreibt den Benutzernamen einfach mit benutzername@ vor die IP-Adresse (oder Hostnamen).

          Lösung 2 ist das du dem iobroker Benutzer (unter diesem wird ja der Befehl ausgeführt) erlaubst dich ohne Passwort an dem anderem System anzumelden.
          Dazu meldest du dich am besten auf deinem ioBroker-System per SSH an (du brauchst eine Shell / Eingabeaufforderung / Terminal) und wechselst zu Benutzer iobroker:

          sudo -u iobroker /usr/bin/bash
          cd  ~
          

          Der 2. Befehl - dann schon als Benutzer iobroker, wechselt in dess Heimatverzeichnis.
          Mit

          ssh-keygen -t ecdsa
          

          erzeugts du nun einen privaten und öffentlichen SSH-Key für diesen Benutzer. Wenn er nach einem Passwort fragt, einfach nur Enter/Return drücken (also keines vergeben).
          Danach kannst du den öffentlichen Schlüssel auf das Zielsystem kopieren:

          ssh-copy-id benutzername@192.168.160-190
          

          Er fragt nach dem Passwort und kopiert den Schlüssel drüben in das richtige Verzeichnis.
          Danach solltest du dich per

          ssh benutzername@192.168.160.190
          

          an dem anderen System ohne Passwort und sonstige Rückfragen direkt anmelden können.
          In deinem Blockly müsstest du halt noch das benutzername@ ergänzen.

          Lösung 3 wäre ein Skript welches die Befehle ausführt, als Dienst, was du auf deinen Raspi laufen lässt und welches z.B. per MQTT mit dem ioBroker verbindest. Dann könntest du es leicht per Datenpunkte steuern. Hast du gerade nur Bahnhof verstanden, nimm Lösung 1 oder 2

          Tipp: vermutlich weißt du das schon: Den Befehl bei exec im Blockly kannst du auch aus Textbausteinen und Variablen zusammenbauen.

          G 1 Reply Last reply Reply Quote 0
          • G
            garbleflux @BananaJoe last edited by

            @bananajoe
            Danke für den ausführlichen Hinweis - werde es so umsetzen und mit sshpass probieren.
            VG Michael

            1 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate
            FAQ Cloud / IOT
            HowTo: Node.js-Update
            HowTo: Backup/Restore
            Downloads
            BLOG

            442
            Online

            31.6k
            Users

            79.5k
            Topics

            1.3m
            Posts

            3
            4
            230
            Loading More Posts
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes
            Reply
            • Reply as topic
            Log in to reply
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
            The ioBroker Community 2014-2023
            logo