Listing aus Forum in eine Linux-Datei übernehmen

Begonnen von is2late, 30 April 2020, 15:32:30

Vorheriges Thema - Nächstes Thema

is2late

Hi Joachim,

ich fürchte, wenn zwei das gleiche machen, ist es noch lange nicht dasselbe  ;D
Bin genau nach der Anleitung im post 176 vorgegangen. Zweimal, um sicher zu gehen.
99_myUtils.pm:
package main;

use strict;
use warnings;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Enter you functions below _this_ line.

sub CheckPresence($$)
{
  my ($ip,$mac)= @_;
  my $ret = "";

  $mac = lc($mac);

  $ret = qx( /opt/fhem/FHEM/presence.sh $ip $mac);

  $ret =~ s,[\r\n]*,,g;        # remove CR from return-string

  if ( $ret != 0 && $ret != 1) {
    Log3 "CheckPresence", 2, "CheckPresence: $ret";
    return 0;
  }

  return $ret;

}


1;

presence.sh:
#!/bin/bash
# detect Iphone/Android by IP/HOSTNAME and MAC address.
# use MAC address too, to prevent false positives if IP might change
# returns 1 or 0

# number of retries, less is faster, but less accurate
PREMAXRETRIES=8
MAXRETRIES=8

# exit immediately if no parameters supplied
if [ $# -lt 2 ]
  then
    echo "UNDEF"
  exit 1
fi

# Set variables
IP=`echo $1 | grep -oP '([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}'`
HOST=`host -4 $1 | grep -oP '([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}'`
MAC=$2
COUNT=0
PRECOUNT=0

if [ -z "$IP" ]; then
IP=${HOST}
if [ -z "$IP" ]; then
echo "0"
exit 0
fi
fi

while [ ${PRECOUNT} -lt ${PREMAXRETRIES} ];
do
PRECHECK=`sudo arp-scan -q -g ${IP} | grep -o "${MAC}"`
if [ ${#PRECHECK} -eq ${#MAC} ]; then
   # exit when phone is detected
   echo "1"
   exit 0
   fi
   ((PRECOUNT++))
done


while [ ${COUNT} -lt ${MAXRETRIES} ];
do
  # Change dev and eth0 if needed
  #   sudo ip neigh flush dev eth0 ${IP}
  sudo hping3 -q -2 -c 10 -p 5353 -i u1 ${IP} >/dev/null 2>&1
  #sudo hping3 -q -2 -c 10 -p 5353 -i u1 ${IP}
  sleep .1
  # Only arp specific device, grep for a mac-address
  STATUS=`sudo arp-scan -q -g ${IP} | grep -o "${MAC}"`

  if [ ${#STATUS} -eq ${#MAC} ]; then
     # exit when phone is detected
     echo "1"
    exit 0
  fi
  ((COUNT++))
  sleep .1
done
# consider away if reached max retries
echo "0"

Rechte:
-rwxr-xr-x  1 fhem dialout   1387 Mai  1 15:42 presence.sh
-r--r-----   1 root root  115 Mai  1 17:47 010_fhem-nopasswd    (???? ist das richtig??)

Inhalt der 010_fhem-nopasswd:
fhem   ALL = NOPASSWD: /opt/fhem/FHEM/backup.sh, /opt/fhem/FHEM/presence.sh, /usr/bin/arp-scan, /usr/sbin/hping3

Auf
sudo /opt/fhem/FHEM/presence.sh 192.168.1.1 aa:bb:cc:dd:00:11] gibt es anständigerweise eine "1", auf
[{CheckPresence("x.x.x.x","x:x:x:x:x:x")}] aber eine schnöde "0".   
Am Ende wird das Handy immer als abwesend geführt. im Reading steht auch absent. Scheint ein hoffnungsloser Fall zu sein. Ich hole mir jetzt ein Seil. ;)
LG Ingo



Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

Otto123

Hallo Ingo,

ich finde es unlogisch, dass das bash Script sudo braucht und sudo in der 99_myUtils fehlt.
Aber vielleicht hat Joachim eine Antwort ;)

Gruß Otto
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

MadMax-FHEM

Eine Antwort warum das so ist habe ich nicht.

Aber es würde wohl gehen/reichen, wenn das Script in der sudoers steht und dann in der Sub mit sudo aufgerufen würde!?

Ich habe es allerdings in der Form laufen...
...nur eine ältere Version des presence.sh

Aber auch da ist "nur" im Script sudo für den hping3 und den arp...

Was geht denn nicht!?

Hast du mal geschaut (auf der Console) was z.B. ein arp "sagt"!?

Ich hatte letztens mal die IP des Handys geändert und noch alte Einträge im arp cache, da war das Handy auch "immer da"...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

Ach so ok.
sudo cat /etc/sudoers.d/010_fhem-nopasswd
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

is2late

#19
Hm, auf einmal heißt es wieder im Log
Zitatsudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben

Wir gehen davon aus, dass der lokale Systemadministrator Ihnen die
Regeln erklärt hat.  Normalerweise läuft es auf drei Regeln hinaus:

Hab mal nach Joachims Beitrag in #171
sudo service fhem status
... ausgeführt. Ergebnis:
Mai 02 06:44:45 raspberrypi sudo[3852]: pam_unix(sudo:session): session closed for user root
Mai 02 06:44:45 raspberrypi sudo[3863]: pam_unix(sudo:auth): conversation failed
Mai 02 06:44:45 raspberrypi sudo[3863]: pam_unix(sudo:auth): auth could not identify password for [fhem]
Mai 02 06:44:45 raspberrypi sudo[3863]:     fhem : command not allowed ; TTY=unknown ; PWD=/opt/fhem ; USER=root ; COMMAND=/us
Mai 02 06:44:45 raspberrypi sudo[3869]:     fhem : TTY=unknown ; PWD=/opt/fhem ; USER=root ; COMMAND=/usr/sbin/hping3 -q -2 -c
Mai 02 06:44:45 raspberrypi sudo[3869]: pam_unix(sudo:session): session opened for user root by (uid=0)
Mai 02 06:44:45 raspberrypi sudo[3869]: pam_unix(sudo:session): session closed for user root
Mai 02 06:44:45 raspberrypi sudo[3880]: pam_unix(sudo:auth): conversation failed
Mai 02 06:44:45 raspberrypi sudo[3880]: pam_unix(sudo:auth): auth could not identify password for [fhem]
Mai 02 06:44:45 raspberrypi sudo[3880]:     fhem : command not allowed ; TTY=unknown ; PWD=/opt/fhem ; USER=root ; COMMAND=/us

Lese ich das richtig, dass ein Passwort für fhem entweder nicht vergeben ist (was ja wohl gut wäre) oder vermisst wird?

@Joachim: Wie fragt man denn bitte arp ab? Hab dazu im Forum nur diesen Beitrag gefunden: https://forum.fhem.de/index.php/topic,105008.msg989356.html#msg989356
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

MadMax-FHEM

#20
Beitrag #171 von WO!?

Du würfeslt hier alles durcheinander...

Versuche doch von: oh was gefunden, klingt "lustig" das kopiere ich einfach mal wo hin, wird schon auch laufen...

Zu: ok, das klingt interessant. Ich schaue mir das mal an und versuche zu verstehen WAS das WIE macht etc. Und dann übernehme ich das...

Und wenn ich ehrlich bin:

ich habe den Überblick verloren, was du jetzt schon alles gemacht hast...

und: was nun nicht geht...

Die letzte gepostete Meldung sieht so aus als würde fhem das Script bzw. Teile davon (verm. die mit sudo) nicht ausführen dürfen bzw. wird nach einem Passwort gefragt, was du ja nicht automatisch eingeben kannst bei einem autom. ausgeführten Programm/Script, welches im Hintergrund (no tty) läuft... (und auch so laufen soll)


Also erläutere doch noch mal in Ruhe was du nun schon alles hast.


Und poste doch bitte exakte Kopien von dem was du hast und verändere besser nichts.
(Weil was sollen wir mit deiner INTERNEN IP anfangen und gut von mir aus die MAC von deinem Telefon schreib da doch lauter aa:aa:aa usw. )

EDIT: Oder gilt das von hier: https://forum.fhem.de/index.php/topic,110736.msg1049257.html#msg1049257 noch!?


Und dann bitte auch die Ausgabe von dem was Otto "wissen" wollte:


sudo cat /etc/sudoers.d/010_fhem-nopasswd



EDIT: UND SEI MIT SYSTEMDATEIEN VORSICHTIG!! DA KANN MAN EIN SYSTEM SCHNELL MAL ZERSCHIESSEN! ALLES AUSSERHALB VON: /home/pi bzw. /opt/fhem ist SYSTEM ;) UND FÜR SUDO bzw. sudoers aufpassen! Und am besten sudo visudo -f /etc/sudoers.d/010_fhem-nopasswd benutzen! Und für Tests evtl. mal eine Kopie der Datei vom User pi nehmen und anpassen. Wenn das dann geht: einschränken...


EDIT: aber zunächst mal erläutern wie geschrieben: was du gemacht hast und was geht/nicht geht... Also: aktueller Stand... ;)

EDIT: DAS FOLGENDE HIER NUR WEIL ICH DACHTE ES LÄUFT UND STIMMT ABER NICHT! ALSO ERST MAL "VERGESSEN"... ;)

Und arp!?
Ganz einfach, weil so das Script prüft, ob eine MAC eben gelistet ist.
Ist sie gelistet -> es ist "da"
Ist sie nicht (mehr) gelistet -> es ist "weg"

Stimmt allerdings nur, wenn eben nichts "falsches" mehr im Cache ist.
Das habe ich aber nur "ins Rennen geworfen", weil ich dachte (aus dem anderen Thread, dort wo die Anwesenheitserkennung "übernommen" ist), dass es eigentlich tut, du nur mit dem Ergebnis nicht zufroeden bist: Handy ist "da", obwohl es "weg" ist...

Daher das mit dem Prüfen von arp (weil genau das das Script auch tut)...

Also Google: arp raspberry pi / oder arp Linux Console etc.

Oder einfach den Teil aus dem Script nehmen ;)


arp -an | awk '{print $4}'


Bzw. ist das halt noch aus meiner (alten Version) des "Prüfscripts"...
...ich habe gesehen, die neue Variante ist deutlich "aufwändiger" ;)
Macht aber im Prinzip das gleiche...

Du siehst: du wirst über kurz oder lang nicht um Linux und Console rumkommen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

ZitatLese ich das richtig, dass ein Passwort für fhem entweder nicht vergeben ist (was ja wohl gut wäre) oder vermisst wird?
fhem hat kein passwort und das ist richtig so! fhem ist ein service Account.

Du hast einfach sudo für fhem quasi nicht (richtig) eingerichtet.

Gruß Otto
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

is2late

@danke, Otto! Hast Du einen Tipp, wie ich sudo für fhem richtig einrichte?

@Joachim: Ich versuche es. Es liegt wirklich nicht an fehlendem guten Willen.
Also:
1) arp-scan und hping installiert.
2) für das weitere gilt unverändert #15. Wenn dieser Verweis nicht iO ist, kopiere ich es gern noch einmal zusammen. Wollte es jetzt nur nicht so lang machen.

3. sudo cat /etc/sudoers.d/010_fhem-passwd ergibt
fhem   ALL = NOPASSWD: /opt/fhem/FHEM/backup.sh, /opt/fhem/FHEM/presence.sh, /usr/bin/arp-scan, /usr/sbin/hping3

4. arp zeigt die Adressen der zu beobachtenden Handys, soweit sie eingeschaltet sind.

5. Das logfile ist voll von
Zitatsudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben

Wir gehen davon aus, dass der lokale Systemadministrator Ihnen die
Regeln erklärt hat.  Normalerweise läuft es auf drei Regeln hinaus

6. visudo habe ich genutzt.

7. Alle sechs Handys (davon fünf Apple) sind IMMER auf "absent". Hier ein Internal zum Beispiel:
EF
function {CheckPresence("192.168.100.xx", " xx:xx:xx:xx:xx:xx ")} 300 300
FUUID
5eac3600-f33f-a080-6c85-4ddbded410d78f0d
INTERVAL_NORMAL
300
INTERVAL_PRESENT
300
MODE
function
NAME
HandySony_Ingo
NOTIFYDEV
global
NR
179
NTFY_ORDER
50-HandySony_Ingo
STATE
absent
TYPE
PRESENCE


Das Reading:
model
function
2020-05-02 10:13:08
presence
absent
2020-05-02 11:34:44
state
absent
2020-05-02 11:34:44


In Verzweiflung
Ingo
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

Otto123

Hallo Ingo,

erstmal: Lob! Du hast nicht pauschal alles für fhem zum sudo machen wollen.  ;) Da bist Du einer von ganz wenigen.

meine Notiz dazu:
ZitatInhalt der sudoers Datei
Die durch Komma getrennten Werte in der Datei haben folgende Bedeutung und benötigen immer den vollen Pfad!

/usr/sbin -> für alles im Verzeichnis
/usr/sbin/service * -> für alle Parameter
/usr/sbin/service apache2 * -> für alle weiteren Parameter
/usr/sbin/service apache2 reload -> genau nur hierfür

Der Aufruf in FHEM muss dann genau dem Schema entsprechen:
"sudo /usr/sbin/service apache2 reload"

Sowohl arp-scan als auch hping3 haben aber Parameter!
Das Script wird schlussendlich nicht mit sudo aufgerufen, das kannst Du aus der sudoers rausnehmen.
BTW:
Backup mit sudo? muss das wirklich sein? ::)

Gruß Otto
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

MadMax-FHEM

Die Pfade zu den Programmen die du als sudo in der Script-Datei stehen hast stimmen!?

also


which arp-scan



which hping3


liefert die Pfade!?

Wenn nicht: korrigieren...

Du kannst auch einfach mal (zum Test) den Eintrag der 010_pi-nopasswd in die 010_fhem-nopasswd eintragen und NUR den USER anpassen: pi -> fhem

Wenn dann das Script immer noch den "no tty passwd" Fehler spuckt, dann ist es was anderes...



Wenn das Script läuft und das Ergebnis immer noch nicht stimmt, dann mal da weiter schauen:

Was "sagt" ein


sudo arp-scan -q -g IP-EINES-HANDYS


auf der Console!?
Wenn dabei deine MAC kommt, dann ist was mit der arp-table/cache nicht i.O.

Bzw. das Script hat recht ;)

In meinem "alten" Script wird nicht arp-scan sondern "nur" arp genommen (mein Befehl von ein paar Posts weiter oben), ist aber egal...
...denke ich.

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

Stimmt!

Otto's Analyse ist nat konkreter!!

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

is2late

@Otto: Ein Lob.... Ich schneide es mir aus und hänge es übers Bett  ;)
Aber das war leider nicht mein Verdienst, nur eine gute Vorlage...
Backup mit sudo habe ich rausgenommen. 01_fhem-nopasswd sieht jetzt (wieder) so aus:
fhem   ALL = NOPASSWD: /opt/fhem/FHEM/backup.sh, /opt/fhem/FHEM/presence.sh, /usr/bin/arp-scan, /usr/sbin/hping3
ZitatSowohl arp-scan als auch hping3 haben aber Parameter!
Bedeutet das, mir fehlen Parameter?

@Joachim: Pfade stimmen:
pi@raspberrypi:~ $ which arp-scan
/usr/sbin/arp-scan
pi@raspberrypi:~ $ which hping3
/usr/sbin/hping3

sudo arp-scan -p -g xxx.xxx.xxx.xx liefert
ZitatInterface: wlan0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.9.5 with 1 hosts (https://github.com/royhills/arp-scan)
0 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.5: 1 hosts scanned in 3.061 seconds (0.33 hosts/sec). 0 responded

ZitatDu kannst auch einfach mal (zum Test) den Eintrag der 010_pi-nopasswd in die 010_fhem-nopasswd eintragen und NUR den USER anpassen: pi -> fhem
Davor hab ich ein bisschen Angst. Wirklich machen?

Tausend Dank für Euren unermüdlichen Support!
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

Wernieman

Ich habe mir den Thread durchgelesen und versucht zu verstehen .. und bin eigentlich gescheitert.

Kannst Du bitte sagen, was Du genau wie vorhast?

z.B.
fhem   ALL = NOPASSWD: /opt/fhem/FHEM/backup.sh, /opt/fhem/FHEM/presence.sh, /usr/bin/arp-scan, /usr/sbin/hping3
Wieso hast Du das Script presence.sh UND  /usr/bin/arp-scan, /usr/sbin/hping3 drin?

In der Sudo-Datei sagst Du, welche Programme der User (in der ersten Zeile) wie als Pseudoroot ausführen darf.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

MadMax-FHEM

Zitat von: is2late am 02 Mai 2020, 12:20:08
@Joachim: Pfade stimmen:
pi@raspberrypi:~ $ which arp-scan
/usr/sbin/arp-scan
pi@raspberrypi:~ $ which hping3
/usr/sbin/hping3


Dann is gut...



Zitat von: is2late am 02 Mai 2020, 12:20:08
sudo arp-scan -p -g xxx.xxx.xxx.xx liefertDavor hab ich ein bisschen Angst. Wirklich machen?

Nur wie ich geschrieben habe: wenn das Script mal läuft aber das Ergebnis NICHT stimmt...

Keine Angst, das Script macht das doch auch ;)

Dir fehlen verm. die Parameter...

Den Hinweis von Otto hast du gelesen!?

Dir fehlt verm. das '*' hinter den Aufrufen für: alle Parameter...
Zum Beispiel..

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

Zitat
Zitat

    Du kannst auch einfach mal (zum Test) den Eintrag der 010_pi-nopasswd in die 010_fhem-nopasswd eintragen und NUR den USER anpassen: pi -> fhem

Davor hab ich ein bisschen Angst. Wirklich machen?

Wäre ja nur zum Test.
Um zu sehen, ob es prinzipiell läuft.

User pi hat diese Rechte/Möglichkeiten bei dir ja vermutlich noch!?

Warum dann Angst, wenn der User fhem das mal KURZZEITIG ZUM TEST auch "darf"/"kann"... ;)

Später dann umsetzen mit den Hinweisen von Otto...
...wenn wir wissen, dass es nun prinzipiell läuft...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)