mikrocontroller.net

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.
Autor: GEKU (Gast)
Datum:
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!

Autor: GEKU (Gast)
Datum:

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.

Autor: wtf?! (Gast)
Datum:

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

Autor: GEKU (Gast)
Datum:

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.

Autor: GEKU (Gast)
Datum:

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.

Autor: Henry (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aha !

Autor: Mario M. (thelonging)
Datum:

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)"

Autor: GEKU (Gast)
Datum:

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?

Autor: GEKU (Gast)
Datum:
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.

Autor: Mario M. (thelonging)
Datum:

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.

Autor: GEKU (Gast)
Datum:

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.

Autor: Mario M. (thelonging)
Datum:

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

Autor: GEKU (Gast)
Datum:

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.

Autor: GEKU (Gast)
Datum:

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;
}

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.

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