Forum: Projekte & Code Fernabfrage ELV Raumklimastation RS500 über SSH


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von GEKU (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das Projekt realisiert die Fernabfrage der ELV Raumklimastation RS500 
über SSH

Der Code ist in C geschrieben.

Die Klimastation RS500 ist über USB an einem Raspbery Pi angeschlossen.
Die 8 Sensoren können über einen SSH Client (z.B. Putty, Bild1) 
abgefragt werden.

Auch über das "APP Raspberry SSH" kann vom Smartphon aus die 
Klimastation abgefragt werden (siehe Bild 2).

Für jeden der Sensoren kann eine individueller Text vergeben werden.

Das Codebeispiel kann auf eigene Verantwortung genutzt, aber auch für 
eigene Projekte oder Erweiterungen verwendet werden.

https://www.elv.de/elv-raumklimastation-rs500-inkl-5-sensoren-messwertespeicher-und-pc-auswertesoftware.html

gutes Gelingen!

von GEKU (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Das Bild 
https://www.mikrocontroller.net/attachment/416903/Raspberry_SSH.jpg 
stammt von der Pythonversion. Unter der C-Version erfolgt der Aufruf mit 
sudo ,/ rk ohne py.

von wtf?! (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Will ich wirklich wissen warum du rootrechte brauchst um mit einem usb 
Gerät zu reden? :-\

von GEKU (Gast)


Bewertung
0 lesenswert
nicht lesenswert
wtf?! schrieb:
> Will ich wirklich wissen warum du rootrechte brauchst um mit einem
> usb
> Gerät zu reden? :-\

Weil die HID Library auf die Hardware zugreift.

Versuche ein einem Programm auf eine IO-Pin zuzugreifen. Ohne Root 
Rechte wird es nicht gehen.

Aber man kein eine eigenen User (z.B. rk) angelegen, der nur diese 
Programm ausführen darf und sonst gar nichts.

In der Datei /etc/sudoers einfügen:

    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    rk ALL=(ALL) NOPASSWD: /home/rk/rk


siehe auch: https://de.wikipedia.org/wiki/Sudo

ACHTUNG  : fehlerhafte Einträge könnten das System zerstören !

Besser ist es das Programm sudoedit zu benutzen. Dieses überprüft die 
Datei sudors auf Fehler, bevor sie gespeichert werden kann.

von GEKU (Gast)


Bewertung
0 lesenswert
nicht lesenswert
GEKU schrieb:
> Aber man kein eine eigenen User (z.B. rk) angelegen, der nur diese
> Programm ausführen darf und sonst gar nichts

ERGÄNZUNG:

In /home/rk nur die ausführende Datei rk kopieren.

Es kann im APP Raspberry SSH nur mehr sudo ./rk aufgerufen werden.

von Henry (Gast)


Bewertung
0 lesenswert
nicht lesenswert
aha !

von Mario M. (thelonging)


Bewertung
0 lesenswert
nicht lesenswert
GEKU schrieb:
> wtf?! schrieb:
>> Will ich wirklich wissen warum du rootrechte brauchst um mit einem
>> usb
>> Gerät zu reden? :-\
>
> Weil die HID Library auf die Hardware zugreift.
>
> Versuche ein einem Programm auf eine IO-Pin zuzugreifen. Ohne Root
> Rechte wird es nicht gehen.

Das macht man über udev-Regeln. Im Prinzip so: 
Beitrag "Linux USB-Rechte verändern(USBProg)"

von GEKU (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mario M. schrieb:
> Das macht man über udev-Regeln. Im Prinzip so: Beitrag "Linux USB-Rechte
> verändern(USBProg)"

Danke für den Tipp!

Kann dann jedes Programm  mit USB-Griff ohne SU Rechte aufgerufen 
werden?

von GEKU (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
user rk mit Homeverzeichnis anlegen

Programm rk ins Homeverzeichnis kopieren

"sudo visodu"  aufrufen.

Zeile "rk ALL=(ALL) NOPASSWD: /home/rk/rk" hinzufügen.

Das Programm kann jetzt mit "sudo ./rk" ohne Eingabe eines Passwortes 
aufgerufen werden.

von Mario M. (thelonging)


Bewertung
0 lesenswert
nicht lesenswert
GEKU schrieb:
> Kann dann jedes Programm  mit USB-Griff ohne SU Rechte aufgerufen
> werden?

Ja. Der Benutzer, unter dem das Programm ausgeführt wird, muss in der 
entsprechenden Gruppe sein und die Gruppenrechte des USB-Geräts müssen 
lesen und schreiben zulassen.

von GEKU (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mario M. schrieb:
> Der Benutzer, unter dem das Programm ausgeführt wird, muss in der
> entsprechenden Gruppe sein und die Gruppenrechte des USB-Geräts müssen
> lesen und schreiben zulassen

Danke!

Werde ich ausprobieren.

Ich habe gesehen,  dass die Vendor ID und die Produkt ID angegeben 
werden muss ,
also kann ich davon ausgehen, dass sich die Freischaltung nur auf die 
Klimazentrale bezieht.

Danke, da habe ich wieder etwas dazu gelernt.

von Mario M. (thelonging)


Bewertung
0 lesenswert
nicht lesenswert
Nö, muss nicht. Aber warum mehr freigeben als nötig.

von GEKU (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mario M. schrieb:
> Nö, muss nicht. Aber warum mehr freigeben als nötig.

Will ich aus Gründen der Sicherheit nicht. Passt so.

von GEKU (Gast)


Bewertung
0 lesenswert
nicht lesenswert
#include <stdio.h>
#include <wchar.h>
#include <string.h>
#include <stdlib.h>
#include "hidapi.h"
#include <unistd.h>

int main(int argc, char* argv[])
{
  int res;
  unsigned char buf[256];
  hid_device *handle;
  int i;
  char *pMo[8];

pMo[0]=(char *)"Balkonzimmer:";
pMo[1]=(char *)"Vordach:";
pMo[2]=(char *)"Schlafzimmer:";
pMo[3]=(char *)"Wohnzimmer:";
pMo[4]=(char *)"Bad:\t";
pMo[5]=(char *)"WC:\t";
pMo[6]=(char *)"Schuppen:";
pMo[7]=(char *)"";

  if (hid_init())  return -1;

  handle = hid_open(0x0483, 0x5750, NULL);

  if (!handle) {
    printf("unable to open device\n");
     return 1;
  }

  hid_set_nonblocking(handle, 1);

  memset(buf,0,sizeof(buf));

  buf[0] = 0x7b;
  buf[1] = 0x03;
  buf[2] = 0x40;
  buf[3] = 0x7d;

  res = hid_write(handle, buf, 17);

  if (res < 0) {
    printf("Unable to write()\n");
    printf("Error: %ls\n", hid_error(handle));
  }

  res = 0;

  while (res == 0) {
    res = hid_read(handle, buf, sizeof(buf));
//    if (res == 0)
//      printf("waiting...\n");
    if (res < 0)
      printf("Unable to read()\n");
    usleep(1000*1000);
  }

  for (i=0;i<8;i++)
  {
    if (strlen(pMo[i])) printf("\r\n%s\t\t\t%d.%d Grad C\t\t%d\%\r\n",pMo[i],(256*buf[1+3*i]+buf[2+3*i])/10,(256*buf[1+3*i]+buf[2+3*i])%10,buf[3+3*i]);
  }

  printf("\r\n");

  hid_close(handle);

  /* Free static HIDAPI objects. */
  hid_exit();

  return 0;
}

von GEKU (Gast)


Angehängte Dateien:
  • preview image for RK.jpg
    RK.jpg
    87,1 KB, 113 Downloads

Bewertung
0 lesenswert
nicht lesenswert
Verbesserte Darstellung von Grad  C

von GEKU (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert

von GKU (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Sollte der Fehler "error while loading shared libraries: 
libhidapi-libusb.so.0: cannot open shared object file: No such file or 
directory" auftreten, dann fehlt libhidapi-libusb0

sudo apt install libhidapi-libusb0

von GEKU (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
neue Funktionen in 2v0 :

- steigende Temperaturen und/oder fallende Temperaturen können mit 
Shell-Scripts, sowie mit in C und/oder Python geschriebene Programme 
gekoppelt werden, um z.B. GPIO's des Raspberry PI zu setzten oder 
rückzusetzen (siehe Beispiel heizung.py)

- steigende und fallende Temperaturen können simuliert werden, um die 
Steuerungen zu überprüfen (siehe klima-server.ini Section DEBUG)

- Schlüssel für Temperaturen können nach tu bzw, td beliebig bezeichnet 
werden (z.B. tu01, tua, td1, td_a), sowie mit ';' (z.B. ;tu05) 
auskommentiert werden.

Die Schlüssel sollten nach aufsteigenden Temperaturen sortiert werden.

_Beispiel für aktivieren der Heizung wenn Temperatur auf 20 Grad Celsius 
gefallen ist_ :

td22 = 20|heizung.py ein

_Beispiel für deaktivieren der Heizung wenn Temperatur auf 25 Grad 
Celsius gestiegen ist_ :

tu27 = 25|heizung.py aus

Simulation :

[DEBUG]
sensor = 1
temp_min = 20
temp_max = 30
temp_diff = -0.3 ;(0.. schaltet Simulation aus, - simuliert fallende 
Temperaturen)

Temperaturen können mit einer Kommastelle '.' definiert werden. 
(Beispiel tu5 = 21.5)

von GEKU (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Leider hat sich ein Fehler eingeschlichen, daher 2v1.
Bitte 2v0 nicht verwenden!

von Gerald K. (geku)


Bewertung
0 lesenswert
nicht lesenswert
Hat jemand Erfahrung mit der dnt Funk-Raumklimastation RoomLogg PRO ?

Ist diese kompatible zur RS500?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.