Hallo
ich würde gerne auf Fhem 5.8 umsteigen.
Ich verwende auf meinen Vu+ Sat Reciver ein Plugin um Rollos zu fahren. Hierzu schicke ich einfach eine UHL
Hier mal das Plugin.
Kann mir jemand helfen wie ich die Anfrage mit csrfToken-HowTo realisieren kann ?
# Ihad.tv enigma2-plugin tutorial 2010
# lesson 5
# by emanuel
from Screens.Screen import Screen
from Screens.Console import Console
from Screens.ChoiceBox import ChoiceBox
from Components.MenuList import MenuList
from Components.ActionMap import ActionMap
from Components.Label import Label
from Plugins.Plugin import PluginDescriptor
from enigma import eConsoleAppContainer
import time
###########################################################################
class MyShPrombt(Screen):
skin = """
<screen position="100,150" size="460,450" title="FHEM Haussteuerung" >
<widget name="device" position="10,0" size="460,30" font="Console;22" />
<widget name="myMenu" position="10,50" size="420,380" scrollbarMode="showOnDemand" />
</screen>"""
def __init__(self, session, args = 0):
self.session = session
self.device = None
list = []
list.append(("WZ Philips HUE", "dev1", "on", "off","dimUp", "dimDown", "hueUp", "hueDown"))
list.append(("WZ Rollo Rechts", "dev2", "Auf", "Zu"))
list.append(("WZ Rollo Sofa", "dev3", "Auf", "Zu"))
list.append(("WZ Rollo Hof", "dev4", "Auf", "Zu"))
list.append(("WZ Rollo Balkon", "dev5", "Auf", "Zu"))
Screen.__init__(self, session)
self["device"] = Label()
self["myMenu"] = MenuList(list)
self["myActionMap"] = ActionMap(["PiPSetupActions"],
{
"ok": self.go,
"cancel": self.cancel,
"size+": self.key_bouq_pl,
"size-": self.key_bouq_min
}, -1)
def go(self):
cur = self["myMenu"].l.getCurrentSelection()
self.device = cur[1]
self["device"].setText(cur[0])
print "\n[MyShPrombt] device: " + self.device + "\n"
menu = [(cur[2], self.key_bouq_pl),
(cur[3], self.key_bouq_min),
(cur[4], self.dimUp),
(cur[5], self.dimDown),
(cur[6], self.hueUp),
(cur[7], self.hueDown)
]
self.session.openWithCallback(
self.menuCallback,
ChoiceBox,
title = cur[0],
list = menu,
keys = [ "1", "2" , "3" , "4", "5" , "6" ,]
)
def menuCallback(self, ret):
ret and ret[1]()
def key_bouq_min(self):
cur = self["myMenu"].l.getCurrentSelection()
self.device = cur[1]
self["device"].setText(cur[0] + " " + cur[3])
print "\n[MyShPrombt] device : " + self.device + "\n"
if self.device is not None:
if self.device == "dev1":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice8=set%20HUEDevice8%20off&room=HUEDevice'")
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice2=set%20HUEDevice2%20off&room=HUEDevice'")
elif self.device == "dev2":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_1_Taster_ROLLO_OG_WZ_rechts_ZU=set%20DB353_DBX1_1_Taster_ROLLO_OG_WZ_rechts_ZU%20on&room=SPS'")
time.sleep (1)
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_1_Taster_ROLLO_OG_WZ_rechts_ZU=set%20DB353_DBX1_1_Taster_ROLLO_OG_WZ_rechts_ZU%20off&room=SPS'")
elif self.device == "dev3":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_3_Taster_ROLLO_OG_WZ_Sofa_ZU=set%20DB353_DBX1_3_Taster_ROLLO_OG_WZ_Sofa_ZU%20on&room=SPS'")
time.sleep (1)
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_3_Taster_ROLLO_OG_WZ_Sofa_ZU=set%20DB353_DBX1_3_Taster_ROLLO_OG_WZ_Sofa_ZU%20off&room=SPS'")
elif self.device == "dev4":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_5_Taster_ROLLO_OG_WZ_Hof_ZU=set%20DB353_DBX1_5_Taster_ROLLO_OG_WZ_Hof_ZU%20on&room=SPS'")
time.sleep (1)
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_5_Taster_ROLLO_OG_WZ_Hof_ZU=set%20DB353_DBX1_5_Taster_ROLLO_OG_WZ_Hof_ZU%20off&room=SPS'")
elif self.device == "dev5":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_7_Taster_ROLLO_OG_WZ_Balkon_ZU=set%20DB353_DBX1_7_Taster_ROLLO_OG_WZ_Balkon_ZU%20on&room=SPS'")
time.sleep (1)
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_7_Taster_ROLLO_OG_WZ_Balkon_ZU=set%20DB353_DBX1_7_Taster_ROLLO_OG_WZ_Balkon_ZU%20off&room=SPS'")
def key_bouq_pl(self):
cur = self["myMenu"].l.getCurrentSelection()
self.device = cur[1]
self["device"].setText(cur[0] + " " + cur[2])
print "\n[MyShPrombt] device: " + self.device +"\n"
if self.device is not None:
if self.device == "dev1":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice8=set%20HUEDevice8%20on&room=HUEDevice'")
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice2=set%20HUEDevice2%20on&room=HUEDevice'")
elif self.device == "dev2":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_0_Taster_ROLLO_OG_WZ_rechts_AUF=set%20DB353_DBX1_0_Taster_ROLLO_OG_WZ_rechts_AUF%20on&room=SPS'")
time.sleep (1)
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_0_Taster_ROLLO_OG_WZ_rechts_AUF=set%20DB353_DBX1_0_Taster_ROLLO_OG_WZ_rechts_AUF%20off&room=SPS'")
elif self.device == "dev3":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_2_Taster_ROLLO_OG_WZ_Sofa_AUF=set%20DB353_DBX1_2_Taster_ROLLO_OG_WZ_Sofa_AUF%20on&room=SPS'")
time.sleep (1)
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_2_Taster_ROLLO_OG_WZ_Sofa_AUF=set%20DB353_DBX1_2_Taster_ROLLO_OG_WZ_Sofa_AUF%20off&room=SPS'")
elif self.device == "dev4":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_4_Taster_ROLLO_OG_WZ_Hof_AUF=set%20DB353_DBX1_4_Taster_ROLLO_OG_WZ_Hof_AUF%20on&room=SPS'")
time.sleep (1)
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_4_Taster_ROLLO_OG_WZ_Hof_AUF=set%20DB353_DBX1_4_Taster_ROLLO_OG_WZ_Hof_AUF%20off&room=SPS'")
elif self.device == "dev5":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_6_Taster_ROLLO_OG_WZ_Balkon_AUF=set%20DB353_DBX1_6_Taster_ROLLO_OG_WZ_Balkon_AUF%20on&room=SPS'")
time.sleep (1)
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_6_Taster_ROLLO_OG_WZ_Balkon_AUF=set%20DB353_DBX1_6_Taster_ROLLO_OG_WZ_Balkon_AUF%20off&room=SPS'")
###############Philips Hue Befehle ###########################################################################################################
def dimUp(self):
cur = self["myMenu"].l.getCurrentSelection()
self.device = cur[1]
self["device"].setText(cur[0] + " " + cur[4])
print "\n[MyShPrombt] device : " + self.device + "\n"
if self.device is not None:
if self.device == "dev1":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice8=set%20HUEDevice8%20" + cur[4] + "&room=HUEDevice'")
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice2=set%20HUEDevice2%20" + cur[4] + "&room=HUEDevice'")
def dimDown(self):
cur = self["myMenu"].l.getCurrentSelection()
self.device = cur[1]
self["device"].setText(cur[0] + " " + cur[5])
print "\n[MyShPrombt] device : " + self.device + "\n"
if self.device is not None:
if self.device == "dev1":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice8=set%20HUEDevice8%20dimDown&room=HUEDevice'")
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice2=set%20HUEDevice2%20dimDown&room=HUEDevice'")
def hueUp(self):
cur = self["myMenu"].l.getCurrentSelection()
self.device = cur[1]
self["device"].setText(cur[0] + " " + cur[6])
print "\n[MyShPrombt] device : " + self.device + "\n"
if self.device is not None:
if self.device == "dev1":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice8=set%20HUEDevice8%20hueUp&room=HUEDevice'")
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice2=set%20HUEDevice2%20hueUp&room=HUEDevice'")
def hueDown(self):
cur = self["myMenu"].l.getCurrentSelection()
self.device = cur[1]
self["device"].setText(cur[0] + " " + cur[7])
print "\n[MyShPrombt] device : " + self.device + "\n"
if self.device is not None:
if self.device == "dev1":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice8=set%20HUEDevice8%20hueDown&room=HUEDevice'")
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice2=set%20HUEDevice2%20hueDown&room=HUEDevice'")
#######################################################################################################################################################
def prombt(self, com):
print com
container = eConsoleAppContainer()
container.execute(com)
def cancel(self):
print "\n[MyShPrombt] cancel\n"
self.close(None)
###########################################################################
def main(session, **kwargs):
print "\n[MyShPrombt] start\n"
session.open(MyShPrombt)
###########################################################################
def Plugins(**kwargs):
return PluginDescriptor(
name="FHEM Haussteuerung",
description="Haussteuerungssystem",
where = PluginDescriptor.WHERE_PLUGINMENU,
icon="fhc.png",
fnc=main)
hier: https://wiki.fhem.de/wiki/CsrfToken-HowTo (https://wiki.fhem.de/wiki/CsrfToken-HowTo) ist so ziemlich alles beschrieben.
Hallo
das habe ich gelesen jedoch weiß ich nicht wie ich es umsetzen muss.
Ich wäre für ein kleines Beispiel in meinen Plugin dankbar
hast du es wirklich gelesen? auch den abschnitt "Api Web"? Glaub ich nicht ;) Denn wenn du das quasi 1:1 in FHEM abtippst (bis auf die erlaubten IPs) musst du doch in deinem skript nur den port im wget call ändern ...
Hallo
ja das ist aber genau das was ich nicht haben wollte, damit habe ich ja wieder eine offene Schnittstelle.
Es geht um die sichere Übertragung mit csrfToken.
Für mich stellt sich die Frage ob ich das beschrieben Python Skript in mein Skript mit einarbeiten kann. Hierzu fehlen mir aber die Python Kenntnisse.
statt das token weg zu lassen kannst du das token auch fest vorgeben. es steht alles im wiki artikel.
emilio, nee hast du nicht. csrf-angriffe werden trotzdem wirksam unterbunden, wenn du wie dort beschrieben die ips auf die geräte, die die apis benutzen, begrenzt (unter der annahme, dass auf diesen geräten kein webbrowser genutzt wird)