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


von GEKU (Gast)



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)


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)


Lesenswert?

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

von GEKU (Gast)


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)


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)


Lesenswert?

aha !

von Mario M. (thelonging)


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)


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:

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)


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)


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)


Lesenswert?

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

von GEKU (Gast)


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)


Lesenswert?

1
#include <stdio.h>
2
#include <wchar.h>
3
#include <string.h>
4
#include <stdlib.h>
5
#include "hidapi.h"
6
#include <unistd.h>
7
8
int main(int argc, char* argv[])
9
{
10
  int res;
11
  unsigned char buf[256];
12
  hid_device *handle;
13
  int i;
14
  char *pMo[8];
15
16
pMo[0]=(char *)"Balkonzimmer:";
17
pMo[1]=(char *)"Vordach:";
18
pMo[2]=(char *)"Schlafzimmer:";
19
pMo[3]=(char *)"Wohnzimmer:";
20
pMo[4]=(char *)"Bad:\t";
21
pMo[5]=(char *)"WC:\t";
22
pMo[6]=(char *)"Schuppen:";
23
pMo[7]=(char *)"";
24
25
  if (hid_init())  return -1;
26
27
  handle = hid_open(0x0483, 0x5750, NULL);
28
29
  if (!handle) {
30
    printf("unable to open device\n");
31
     return 1;
32
  }
33
34
  hid_set_nonblocking(handle, 1);
35
36
  memset(buf,0,sizeof(buf));
37
38
  buf[0] = 0x7b;
39
  buf[1] = 0x03;
40
  buf[2] = 0x40;
41
  buf[3] = 0x7d;
42
43
  res = hid_write(handle, buf, 17);
44
45
  if (res < 0) {
46
    printf("Unable to write()\n");
47
    printf("Error: %ls\n", hid_error(handle));
48
  }
49
50
  res = 0;
51
52
  while (res == 0) {
53
    res = hid_read(handle, buf, sizeof(buf));
54
//    if (res == 0)
55
//      printf("waiting...\n");
56
    if (res < 0)
57
      printf("Unable to read()\n");
58
    usleep(1000*1000);
59
  }
60
61
  for (i=0;i<8;i++)
62
  {
63
    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]);
64
  }
65
66
  printf("\r\n");
67
68
  hid_close(handle);
69
70
  /* Free static HIDAPI objects. */
71
  hid_exit();
72
73
  return 0;
74
}

von GEKU (Gast)


Angehängte Dateien:

Lesenswert?

Verbesserte Darstellung von Grad  C

von GEKU (Gast)


Angehängte Dateien:

Lesenswert?


von GKU (Gast)


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:

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:

Lesenswert?

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

von Gerald K. (geku)


Lesenswert?

Hat jemand Erfahrung mit der dnt Funk-Raumklimastation RoomLogg PRO ?

Ist diese kompatible zur RS500?

von Gerald K. (geku)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.