FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: emilio_35 am 22 April 2017, 21:35:57

Titel: csrfToken uhl für Vu+ Plugin
Beitrag von: emilio_35 am 22 April 2017, 21:35:57
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)



Titel: Antw:csrfToken uhl für Vu+ Plugin
Beitrag von: justme1968 am 22 April 2017, 21:40:49
hier: https://wiki.fhem.de/wiki/CsrfToken-HowTo (https://wiki.fhem.de/wiki/CsrfToken-HowTo) ist so ziemlich alles beschrieben.
Titel: Antw:csrfToken uhl für Vu+ Plugin
Beitrag von: emilio_35 am 22 April 2017, 21:59:14
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
Titel: Antw:csrfToken uhl für Vu+ Plugin
Beitrag von: peterk_de am 22 April 2017, 23:02:42
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 ...
Titel: Antw:csrfToken uhl für Vu+ Plugin
Beitrag von: emilio_35 am 23 April 2017, 11:33:19
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.
Titel: Antw:csrfToken uhl für Vu+ Plugin
Beitrag von: justme1968 am 23 April 2017, 12:00:35
statt das token weg zu lassen kannst du das token auch fest vorgeben. es steht alles im wiki artikel.
Titel: Antw:csrfToken uhl für Vu+ Plugin
Beitrag von: peterk_de am 23 April 2017, 13:45:26
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)