Neues Python FHEM API-Modul auf PyPI

Begonnen von domschl, 01 Januar 2017, 12:15:41

Vorheriges Thema - Nächstes Thema

Forstling

#60
pi@raspberrypi:~ $ ls -la /opt/fhem/FHEM/Python
insgesamt 52
drwxr-xr-x 2 pi   pi       4096 Feb  2 19:15 .
drwxrwxrwx 7 fhem dialout 36864 Feb  2 19:10 ..
-rwxr-xr-x 1 pi   pi       2147 Feb  2 19:58 fhem-dht.py
-rwxrwxrwx 1 pi   pi       1914 Feb  2 20:49 MAX31865.py
pi@raspberrypi:~ $

?

fhem-dht.py funktioniert

amenomade

Zitat von: Forstling am 02 Februar 2020, 21:13:30

fhem-dht.py funktioniert
Ja, aber der User fhem darf es nicht ausführen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Forstling

Jetzt funktioniert es

es Lag daran das FHEM nicht auf den SPI Bus zugreifen durfte.



Gear

#63
Guten Morgen Zusammen!

Ich habe das Problem, dass manchmal beim Auslesen nur ein "{}" ausgelesen wird.
Mein Script funktioniert ohne Probleme, die Verbindung wird als "true" zurückgegeben.

Hat jemand eine Idee?

Edit:
Ich habe nun mal zum Testen ein TimeOut von 1s auch beim Einlesen gemacht, bis jetzt scheinbar kein Problem mehr...
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

Gear

So, muss mich mal zurückmelden, wegen dem im vorherigen Problem.
Leider gibt es immer mal wieder Probleme beim Auslesen.

Es wird einfach ein {} zurückgegeben, obwohl das Device einen Wert drin hat.

Es scheint, als würde hier FHEM irgendwie blockiert sein?!
Ich hoffe, dass mir jemand helfen kann.
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

andies

Vielen Dank für das Modul - ich melde mich wegen eines Problems, das oben auch schon angesprochen wurde. Auch bei mir kommt es manchmal vor, dass beim Auslesen eines Readings {} zurückgegeben wird (ich bekomme dann einen KeyError). Der Fehler tritt unsystematisch auf, so dass ich einen Programmierfehler ausschließe.

Ich kann den Fehler abfangen bzw erhöhe dann die Readingwerte in FHEM. Dennoch würde mich interessieren, wie man dem Problem auf dem Grund gehen kann? Innerhalb von FHEM gelingt mir das nicht.

Hier mein gesamter Code, nur "gas" ist wichtig:

#!/usr/bin/env python3
import time
import sys
import spidev
import RPi.GPIO as GPIO
import fhem


fh = fhem.Fhem("raspfhem.fritz.box")

spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 40000
numdata = 100

# RPi.GPIO Layout verwenden (wie Pin-Nummern)
GPIO.setmode(GPIO.BCM)
# Pin 17 auf Input setzen, dort ist der keyence angeschlossen
GPIO.setup(17, GPIO.IN)

def GetADC():
        Msum = 0
        s = 0
        while s < numdata:
            adc = spi.xfer2([0, 0])
            hi = (adc[0] & 0x1F);
            low = (adc[1] & 0xFE);  # FE for B, FC for C chip (MCP3201-B/C) Danil
            data = (hi << 8) | low;
            Msum += int(data)
            s += 1
        return int(Msum/(4*numdata))

def Gaszaehler():
   try:
      ## Die Fassung hat das Risiko, dass mir zu viel KeyError-Fehler auftauchen, daher wird *in* FHEM erhöht#####
      #gas = fh.get_device_reading("Heizungskeller", "gas")    <=== ausgeblendete Version, weil problematisch
      #i = int(gas["Value"])
      #fh.send_cmd("setreading Heizungskeller gas " + str(i+1))

      fh.send_cmd("setreading Heizungskeller gas {(ReadingsVal(\"Heizungskeller\", \"gas\", 0)+1)}") <== so mache ich das jetzt
     
   except IOError as err:
      fh.send_cmd("setreading Heizungskeller Fehler I/O error: {0} " + str(format(err)))
   #except KeyError:
   #  fh.send_cmd("setreading Heizungskeller Fehler KeyError: Reading gas unlesbar " + str(gas))  <== dieser Fehler taucht nur selten, aber zu oft auf
   except:
      fh.send_cmd("setreading Heizungskeller Fehler Unbekannter Fehler: " + str(sys.exc_info()[0]))
      fh.send_cmd("set TelegramBot message ‼️ Heizungskeller Unbekannter Fehler: " + str(sys.exc_info()[0]))
      raise
   return

zaehlerwasser = 0
WasHigh = False

try:
    while True:
        time.sleep(0.07)
        zaehlerwasser += 1
        if (zaehlerwasser == 4500):
            wasser = GetADC()
            wasser = 25*(wasser // 25)
            fh.send_cmd("setreading Heizungskeller wasser " + str(wasser))
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

domschl

Ich würde zunächst vorschlagen, logging zu aktivieren, s. Beispiel:

https://github.com/domschl/python-fhem#set-and-get-transactions


Also:


import logging
import fhem

logging.basicConfig(level=logging.DEBUG)


domschl

Neue Version 0.7.0 auf PyPi.

Neuigkeiten:

- Support für mehrere Sessions parallel zu einem oder mehreren FHEM Servern.
- Automatische Tests für Python 3.8, 3.10, 3.11
- Kein Support für Python 2 mehr (Version 0.6.5 benutzen!)

Update der neuen python-fhem Version mit:

pip install -U fhem