(Gelöst) Curl und HMLAN Disconnected

Begonnen von SamNitro, 21 August 2017, 17:16:40

Vorheriges Thema - Nächstes Thema

SamNitro

Zitat von: Wernieman am 23 August 2017, 12:05:29
Nor mal eine Anmerkung:
Da Du dieses Script schon mal als root (sudo) gestartet hast, könntest Du vorher prüfen, ob die Berechtigungen der Dateien stimmen?

Die Daten sind in Fhem angekommen falls du das meinst?!



Gesendet von iPhone mit Tapatalk
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

SamNitro

Zitat von: amenomade am 23 August 2017, 09:01:55
Dann mach zuerst:
sudo chmod +x updatecheck.sh
Und dann NUR
./updatecheck.shohne sudo.

Läuft jetzt auch,
und stehen 9 updates für fhem an.
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

Wernieman

Neee ..... die per wget runtergeldadenen Dateien gehören, wenn per sudo gestartet, root.
- 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

SamNitro

Dann weiß ich leider nicht was du meinst. Wie muss ich vorgehen?


Gesendet von iPhone mit Tapatalk
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

Wernieman

Sorry, habe mir erst jetzt gründlicher das Script durchgelesen ... es legt nichts im Dateisystem ab .. bist also "sauber"
- 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

SamNitro

Gut :)


Gesendet von iPhone mit Tapatalk
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

amenomade

Sooo... (Mit der Hilfe von betateilchen):

#!/bin/bash
updatesfhem=$(curl -sS http://fhem.de/fhemupdate/controls_fhem.txt| diff - /opt/fhem/FHEM/controls_fhem.txt |grep ">"|grep "UPD"|wc -l)
updatesftui=$(wget -qO - https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt| diff - /opt/fhem/FHEM/controls_fhemtabletui.txt |grep ">" |grep "UPD"|wc -l)
updatesall=$(($updatesfhem + $updatesftui))
perl fhem.pl localhost:7072 "setreading Update.Counter FHEM $updatesfhem; setreading Update.Counter FTUI $updatesftui; setreading Update.Counter ALL $updatesall"

textfhem=$(curl -sS http://fhem.de/fhemupdate/controls_fhem.txt| diff - /opt/fhem/FHEM/controls_fhem.txt  |grep "> UPD" )
echo -E setreading Update.Counter fhem_text $textfhem | sed 's/\n/ /g' | telnet localhost 7072

textftui=$(wget -qO - https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt| diff - /opt/fhem/FHEM/controls_fhemtabletui.txt |grep "> UPD")
echo -E setreading Update.Counter ftui_text $textftui | sed 's/\n/ /g' | telnet localhost 7072

Sollte gehen.

Ich muss das aber noch optimieren, da wir damit 2x das gleiche aufrufen, einmal um die Anzahl und einmal um den Text zu kriegen. Muss aber jetzt weg.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

SamNitro

#22
Eilt ja nicht...


Aber jetzt gibt er mir eine Fehlermeldung raus:
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.



EDIT: Aber der text kommt trotzdem in Fhem an
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

amenomade

#23
Ich vermute der fhem Server schützt sich gegen zu vielen Anfragen.
EDIT: wobei... das ist eher eine fhem Fehlermeldung
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

So jetzt probier mal das (die Meldung kam von der Benutzung von telnet - war nicht schlimm, aber das hab ich geändert):
#!/bin/bash

textfhem=$(curl -sS http://fhem.de/fhemupdate/controls_fhem.txt| diff - /opt/fhem/FHEM/controls_fhem.txt  |grep "> UPD" )
updatesfhem=`echo $textfhem |grep -o "UPD" |wc -l`
textfhem=${textfhem//[$'\n']}
perl /opt/fhem/fhem.pl localhost:7072 "setreading Update.Counter FHEM $updatesfhem; setreading Update.Counter fhem_text $textfhem"

textftui=$(wget -qO - https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt| diff - /opt/fhem/FHEM/controls_fhemtabletui.txt |grep ">" |grep "UPD")
updatesftui=`echo $textftui |grep -o "UPD" |wc -l`
textftui=${textftui//[$'\n']}
perl /opt/fhem/fhem.pl localhost:7072 "setreading Update.Counter FTUI $updatesftui; setreading Update.Counter ftui_text $textftui"

updatesall=$(($updatesfhem + $updatesftui))
perl /opt/fhem/fhem.pl localhost:7072 "setreading Update.Counter ALL $updatesall"


Testen wie immer mit ./updatecheck.sh
Wenn es geht, installieren wir es in crontab, damit es jeden Tag um 9:00 Uhr läuft (mehr braucht man nw. nicht, da die eingecheckte Updates nur einmal am Nacht zur Verfügung gestellt werden - wir wollen nicht die Server von fhem.de unnötig belasten).

crontab < <(crontab -l ; echo "0 9 * *  * pi /opt/fhem/updatecheck.sh")


Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

SamNitro

#25
Hier das resultat:
pi@raspberrypi:/opt/fhem $ ./updatecheck.sh
Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.


pi@raspberrypi:/opt/fhem $ crontab < <(crontab -l ; echo "0 9 * *  * pi /opt/fhem/updatecheck.sh")
no crontab for pi

Edit: ist aber trotzdem eingetragen
pi@raspberrypi:/opt/fhem $ crontab -l
0 9 * *  * pi /opt/fhem/updatecheck.sh



die readings kommen aber an..

Sorry für die Umstände :(
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

SamNitro

kann es sein das er sich an den ">" aufhängt und die nicht übertragen kann?
> UPD 2017-08-22_07:45:03 207569 ./CHANGED
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

SamNitro

#27
Habe es am Laufen

setreading Update.Counter fhem_text $textfhem
setreading Update.Counter ftui_text  $textftui


habe ich ersetzt durch
setreading Update.Counter fhem_text FHEM$textfhem
setreading Update.Counter ftui_text  FTUI$textftui


da ist was am anfang was den stört (>), jetzt sieht das so auf dem Tablet aus:



Alles PERFEKT :D
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

Wernieman

#28
@amenomade

Ich hätte zu Deinem Script 2 Anmerkungen:

1.
Ich würde Dir empfehlen, anstatt telnet (oder fhem) nc zu verwenden.

nc kannst Du analog zu telnet, z.B.
echo -E setreading Update.Counter fhem_text $textfhem | sed 's/\n/ /g' | nc localhost 7072

Allerdings wird es schwirig, wenn bei telnet ein Passwort vergeben wurde. Aber dieses kann man auch übergeben.

2. Anstatt für jede Anfrage eine eigene Session zu fhem aufzubauen, würde ich es bündeln.
Ala:
echo -en "fhem-Befel 1\nfhem-Befehl2\nfhem-Befehl3\nquit\n | nc localhost 7072
Übrigens kann man dann auch das Passwort mit übergeben, indem es an erster Stelle gestellt wird, sofern vergeben ...

Ergebnis:
Also in Summe würde ich anstatt aller perl fhem-Aufrufe
echo -en "setreading Update.Counter FHEM $updatesfhem\nsetreading Update.Counter fhem_text $textfhem\nsetreading Update.Counter FTUI $updatesftui\nsetreading Update.Counter ftui_text $textftui\nsetreading Update.Counter ALL $updatesall\nquit" | nc -w5 localhost 7072 >/dev/null

error=$?
if [ "$error" -ne 0 ]
then
  echo "`date` : Fehler $error beim Aufruf \"$0 $@\""
  exit 1
fi


Das "-w 5" damit er max 5 sec wartet ...

Hat den Vorteil, das nur 1. Verbindung zu FHEM aufgemacht wird ... und habe Dir gleich eine Fehlerabfangroutine eingebaut ...

(P.S. Man kann es auch im perl-fhem-Aufruf zusammenfassen, hattest Du mit ";" schon gemacht)

Edit:
Die Änderung von SamNitro sind nicht drin.


Edit2:
Zur Besseren Lesbarkeit kann man den Befehl auch einzeln zusammenbauen

FemBefehl=""
FemBefehl="${FemBefehl}fhem-Befel1\n"
FemBefehl="${FemBefehl}fhem-Befel2\n"
FemBefehl="${FemBefehl}fhem-Befel3\n"
FemBefehl="${FemBefehl}quit\n"
echo -en "${FemBefehl}" | nc localhost 7072
- 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

SamNitro

WOW das überfordert mich wieder ???

und ja Passwort ist vergeben..
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)